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