这个插件已经被我开源了,任何APP都可以实现替换摄像头的效果,然后成品我肯定不会在这里分享,仅供学习娱乐,软件的虚拟视频效果我会在文章里面插入,大家可以点击看下,HOOK代码是dex,你可以用第三方工具转JAVA然后学习一下。
这个是运行视频,效果其实挺不错的【仅供学习娱乐】
下面是dex代码,hook类:【仅供学习娱乐使用】
===============================================================
.class Lcom/example/vcam/HookMain\(13;</p><p>.super Lde/robv/android/xposed/XC_MethodHook;</p><p>.source "HookMain.java"</p><p><br></p><p><br></p><p># annotations</p><p>.annotation system Ldalvik/annotation/EnclosingMethod;</p><p> 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;</p><p><br></p><p>.field final synthetic val\)lpparam:Lde/robv/android/xposed/callbacks/XC_LoadPackage\(LoadPackageParam;</p><p><br></p><p><br></p><p># direct methods</p><p>.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;</p><p><br></p><p> invoke-direct {p0}, Lde/robv/android/xposed/XC_MethodHook;-><init>()V</p><p><br></p><p> return-void</p><p>.end method</p><p><br></p><p><br></p><p># virtual methods</p><p>.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;</p><p><br></p><p> const/4 v1, 0x0</p><p><br></p><p> aget-object v0, v0, v1</p><p><br></p><p> if-nez v0, :cond_8</p><p><br></p><p> return-void</p><p><br></p><p> .line 514</p><p> :cond_8</p><p> 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;</p><p><br></p><p> 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;</p><p><br></p><p> aget-object v0, v0, v1</p><p><br></p><p> sget-object v2, Lcom/example/vcam/HookMain;->c2_virtual_surface:Landroid/view/Surface;</p><p><br></p><p> invoke-virtual {v0, v2}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z</p><p><br></p><p> move-result v0</p><p><br></p><p> if-eqz v0, :cond_b1</p><p><br></p><p> return-void</p><p><br></p><p> .line 533</p><p> :cond_b1</p><p> new-instance v0, Ljava/io/File;</p><p><br></p><p> new-instance v2, Ljava/lang/StringBuilder;</p><p><br></p><p> invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V</p><p><br></p><p> invoke-static {}, Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;</p><p><br></p><p> move-result-object v3</p><p><br></p><p> invoke-virtual {v3}, Ljava/io/File;->getPath()Ljava/lang/String;</p><p><br></p><p> move-result-object v3</p><p><br></p><p> invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;</p><p><br></p><p> const-string v3, "/DCIM/Camera1/disable.jpg"</p><p><br></p><p> invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;</p><p><br></p><p> invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;</p><p><br></p><p> move-result-object v2</p><p><br></p><p> invoke-direct {v0, v2}, Ljava/io/File;-><init>(Ljava/lang/String;)V</p><p><br></p><p> .line 534</p><p> invoke-virtual {v0}, Ljava/io/File;->exists()Z</p><p><br></p><p> move-result v0</p><p><br></p><p> if-eqz v0, :cond_d6</p><p><br></p><p> return-void</p><p><br></p><p> .line 537</p><p> :cond_d6</p><p> 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;</p><p><br></p><p> aget-object v0, v0, v1</p><p><br></p><p> check-cast v0, Landroid/view/Surface;</p><p><br></p><p> sput-object v0, Lcom/example/vcam/HookMain;->c2_reader_Surfcae:Landroid/view/Surface;</p><p><br></p><p> goto :goto_131</p><p><br></p><p> .line 542</p><p> :cond_f3</p><p> sget-object v0, Lcom/example/vcam/HookMain;->c2_reader_Surfcae:Landroid/view/Surface;</p><p><br></p><p> 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;</p><p><br></p><p> aget-object v0, v0, v1</p><p><br></p><p> check-cast v0, Landroid/view/Surface;</p><p><br></p><p> sput-object v0, Lcom/example/vcam/HookMain;->c2_reader_Surfcae_1:Landroid/view/Surface;</p><p><br></p><p> goto :goto_131</p><p><br></p><p> .line 547</p><p> :cond_10c</p><p> sget-object v0, Lcom/example/vcam/HookMain;->c2_preview_Surfcae:Landroid/view/Surface;</p><p><br></p><p> if-nez v0, :cond_119</p><p><br></p><p> .line 548</p><p> 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;</p><p><br></p><p> aget-object v2, v2, v1</p><p><br></p><p> invoke-virtual {v0, v2}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z</p><p><br></p><p> move-result v0</p><p><br></p><p> if-nez v0, :cond_131</p><p><br></p><p> sget-object v0, Lcom/example/vcam/HookMain;->c2_preview_Surfcae_1:Landroid/view/Surface;</p><p><br></p><p> if-nez v0, :cond_131</p><p><br></p><p> .line 551</p><p> 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;</p><p><br></p><p> aget-object v2, v2, v1</p><p><br></p><p> invoke-virtual {v2}, Ljava/lang/Object;->toString()Ljava/lang/String;</p><p><br></p><p> move-result-object v2</p><p><br></p><p> invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;</p><p><br></p><p> invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;</p><p><br></p><p> move-result-object v0</p><p><br></p><p> invoke-static {v0}, Lde/robv/android/xposed/XposedBridge;->log(Ljava/lang/String;)V</p><p><br></p><p> .line 556</p><p> 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
===============================================================

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/173586.html