微信hook(微信hook框架)

微信hook(微信hook框架)这个插件已经被我开源了 任何 APP 都可以实现替换摄像头的效果 然后成品我肯定不会在这里分享 仅供学习娱乐 软件的虚拟视频效果我会在文章里面插入 大家可以看下 HOOK 代码是 dex 你可以用第三方工具转 JAVA 然后学习一下 这个是运行视频 效果其实挺不错的 仅供学习娱乐 下面是 dex 代码 hook 类 仅供学习娱乐使用 class



这个插件已经被我开源了,任何APP都可以实现替换摄像头的效果,然后成品我肯定不会在这里分享,仅供学习娱乐,软件的虚拟视频效果我会在文章里面插入,大家可以点击看下,HOOK代码是dex,你可以用第三方工具转JAVA然后学习一下。

这个是运行视频,效果其实挺不错的【仅供学习娱乐】

下面是dex代码,hook类:【仅供学习娱乐使用】

===============================================================

.class Lcom/example/vcam/HookMain$13;

.super Lde/robv/android/xposed/XC_MethodHook;

.source "HookMain.java"



# annotations

.annotation system Ldalvik/annotation/EnclosingMethod;

    value = Lcom/example/vcam/HookMain;->handleLoadPackage(Lde/robv/android/xposed/callbacks/XC_LoadPackage$LoadPackageParam;)V

.end annotation


.annotation system Ldalvik/annotation/InnerClass;

    accessFlags = 0x0

    name = null

.end annotation



# instance fields

.field final synthetic this$0:Lcom/example/vcam/HookMain;


.field final synthetic val$lpparam:Lde/robv/android/xposed/callbacks/XC_LoadPackage$LoadPackageParam;



# direct methods

.method constructor <init>(Lcom/example/vcam/HookMain;Lde/robv/android/xposed/callbacks/XC_LoadPackage$LoadPackageParam;)V

    .registers 3


    .line 507

    iput-object p1, p0, Lcom/example/vcam/HookMain$13;->this$0:Lcom/example/vcam/HookMain;


    iput-object p2, p0, Lcom/example/vcam/HookMain$13;->val$lpparam:Lde/robv/android/xposed/callbacks/XC_LoadPackage$LoadPackageParam;


    invoke-direct {p0}, Lde/robv/android/xposed/XC_MethodHook;-><init>()V


    return-void

.end method



# virtual methods

.method protected beforeHookedMethod(Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;)V

    .registers 7


    .line 511

    iget-object v0, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    const/4 v1, 0x0


    aget-object v0, v0, v1


    if-nez v0, :cond_8


    return-void


    .line 514

    :cond_8

    iget-object v0, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->thisObject:Ljava/lang/Object;


    if-nez v0, :cond_d


    return-void


    .line 517

    :cond_d

    new-instance v0, Ljava/io/File;


    new-instance v2, Ljava/lang/StringBuilder;


    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V


    sget-object v3, Lcom/example/vcam/HookMain;->video_path:Ljava/lang/String;


    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    const-string v3, "virtual.mp4"


    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;


    move-result-object v2


    invoke-direct {v0, v2}, Ljava/io/File;-><init>(Ljava/lang/String;)V


    .line 518

    new-instance v2, Ljava/io/File;


    new-instance v3, Ljava/lang/StringBuilder;


    invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V


    invoke-static {}, Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;


    move-result-object v4


    invoke-virtual {v4}, Ljava/io/File;->getPath()Ljava/lang/String;


    move-result-object v4


    invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    const-string v4, "/DCIM/Camera1/no_toast.jpg"


    invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;


    move-result-object v3


    invoke-direct {v2, v3}, Ljava/io/File;-><init>(Ljava/lang/String;)V


    .line 519

    iget-object v3, p0, Lcom/example/vcam/HookMain$13;->this$0:Lcom/example/vcam/HookMain;


    invoke-virtual {v2}, Ljava/io/File;->exists()Z


    move-result v2


    xor-int/lit8 v2, v2, 0x1


    iput-boolean v2, v3, Lcom/example/vcam/HookMain;->need_to_show_toast:Z


    .line 520

    invoke-virtual {v0}, Ljava/io/File;->exists()Z


    move-result v0


    if-nez v0, :cond_a4


    .line 521

    iget-object p1, p0, Lcom/example/vcam/HookMain$13;->this$0:Lcom/example/vcam/HookMain;


    iget-object p1, p1, Lcom/example/vcam/HookMain;->toast_content:Landroid/content/Context;


    if-eqz p1, :cond_a3


    iget-object p1, p0, Lcom/example/vcam/HookMain$13;->this$0:Lcom/example/vcam/HookMain;


    iget-boolean p1, p1, Lcom/example/vcam/HookMain;->need_to_show_toast:Z


    if-eqz p1, :cond_a3


    .line 523

    :try_start_5f

    iget-object p1, p0, Lcom/example/vcam/HookMain$13;->this$0:Lcom/example/vcam/HookMain;


    iget-object p1, p1, Lcom/example/vcam/HookMain;->toast_content:Landroid/content/Context;


    new-instance v0, Ljava/lang/StringBuilder;


    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V


    const-string v2, "不存在替换视频 "


    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    iget-object v2, p0, Lcom/example/vcam/HookMain$13;->val$lpparam:Lde/robv/android/xposed/callbacks/XC_LoadPackage$LoadPackageParam;


    iget-object v2, v2, Lde/robv/android/xposed/callbacks/XC_LoadPackage$LoadPackageParam;->packageName:Ljava/lang/String;


    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    const-string v2, "当前路径:"


    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    sget-object v2, Lcom/example/vcam/HookMain;->video_path:Ljava/lang/String;


    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;


    move-result-object v0


    invoke-static {p1, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;


    move-result-object p1


    invoke-virtual {p1}, Landroid/widget/Toast;->show()V

    :try_end_89

    .catch Ljava/lang/Exception; {:try_start_5f .. :try_end_89} :catch_8a


    goto :goto_a3


    :catch_8a

    move-exception p1


    .line 525

    new-instance v0, Ljava/lang/StringBuilder;


    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V


    const-string v1, "【VCAM】[toast]"


    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    invoke-virtual {p1}, Ljava/lang/Exception;->toString()Ljava/lang/String;


    move-result-object p1


    invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;


    move-result-object p1


    invoke-static {p1}, Lde/robv/android/xposed/XposedBridge;->log(Ljava/lang/String;)V


    :cond_a3

    :goto_a3

    return-void


    .line 530

    :cond_a4

    iget-object v0, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    aget-object v0, v0, v1


    sget-object v2, Lcom/example/vcam/HookMain;->c2_virtual_surface:Landroid/view/Surface;


    invoke-virtual {v0, v2}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z


    move-result v0


    if-eqz v0, :cond_b1


    return-void


    .line 533

    :cond_b1

    new-instance v0, Ljava/io/File;


    new-instance v2, Ljava/lang/StringBuilder;


    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V


    invoke-static {}, Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;


    move-result-object v3


    invoke-virtual {v3}, Ljava/io/File;->getPath()Ljava/lang/String;


    move-result-object v3


    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    const-string v3, "/DCIM/Camera1/disable.jpg"


    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;


    move-result-object v2


    invoke-direct {v0, v2}, Ljava/io/File;-><init>(Ljava/lang/String;)V


    .line 534

    invoke-virtual {v0}, Ljava/io/File;->exists()Z


    move-result v0


    if-eqz v0, :cond_d6


    return-void


    .line 537

    :cond_d6

    iget-object v0, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    aget-object v0, v0, v1


    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;


    move-result-object v0


    const-string v2, "Surface(name=null)"


    .line 538

    invoke-virtual {v0, v2}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z


    move-result v0


    if-eqz v0, :cond_10c


    .line 539

    sget-object v0, Lcom/example/vcam/HookMain;->c2_reader_Surfcae:Landroid/view/Surface;


    if-nez v0, :cond_f3


    .line 540

    iget-object v0, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    aget-object v0, v0, v1


    check-cast v0, Landroid/view/Surface;


    sput-object v0, Lcom/example/vcam/HookMain;->c2_reader_Surfcae:Landroid/view/Surface;


    goto :goto_131


    .line 542

    :cond_f3

    sget-object v0, Lcom/example/vcam/HookMain;->c2_reader_Surfcae:Landroid/view/Surface;


    iget-object v2, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    aget-object v2, v2, v1


    invoke-virtual {v0, v2}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z


    move-result v0


    if-nez v0, :cond_131


    sget-object v0, Lcom/example/vcam/HookMain;->c2_reader_Surfcae_1:Landroid/view/Surface;


    if-nez v0, :cond_131


    .line 543

    iget-object v0, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    aget-object v0, v0, v1


    check-cast v0, Landroid/view/Surface;


    sput-object v0, Lcom/example/vcam/HookMain;->c2_reader_Surfcae_1:Landroid/view/Surface;


    goto :goto_131


    .line 547

    :cond_10c

    sget-object v0, Lcom/example/vcam/HookMain;->c2_preview_Surfcae:Landroid/view/Surface;


    if-nez v0, :cond_119


    .line 548

    iget-object v0, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    aget-object v0, v0, v1


    check-cast v0, Landroid/view/Surface;


    sput-object v0, Lcom/example/vcam/HookMain;->c2_preview_Surfcae:Landroid/view/Surface;


    goto :goto_131


    .line 550

    :cond_119

    sget-object v0, Lcom/example/vcam/HookMain;->c2_preview_Surfcae:Landroid/view/Surface;


    iget-object v2, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    aget-object v2, v2, v1


    invoke-virtual {v0, v2}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z


    move-result v0


    if-nez v0, :cond_131


    sget-object v0, Lcom/example/vcam/HookMain;->c2_preview_Surfcae_1:Landroid/view/Surface;


    if-nez v0, :cond_131


    .line 551

    iget-object v0, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    aget-object v0, v0, v1


    check-cast v0, Landroid/view/Surface;


    sput-object v0, Lcom/example/vcam/HookMain;->c2_preview_Surfcae_1:Landroid/view/Surface;


    .line 555

    :cond_131

    :goto_131

    new-instance v0, Ljava/lang/StringBuilder;


    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V


    const-string v2, "【VCAM】添加目标:"


    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    iget-object v2, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    aget-object v2, v2, v1


    invoke-virtual {v2}, Ljava/lang/Object;->toString()Ljava/lang/String;


    move-result-object v2


    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;


    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;


    move-result-object v0


    invoke-static {v0}, Lde/robv/android/xposed/XposedBridge;->log(Ljava/lang/String;)V


    .line 556

    iget-object p1, p1, Lde/robv/android/xposed/XC_MethodHook$MethodHookParam;->args:[Ljava/lang/Object;


    sget-object v0, Lcom/example/vcam/HookMain;->c2_virtual_surface:Landroid/view/Surface;


    aput-object v0, p1, v1


    return-void

.end method

===============================================================

编程小号
上一篇 2025-10-11 09:57
下一篇 2025-10-11 14:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/5198.html