安卓虚拟摄像头过人脸,免root虚拟hook相机,虚拟相机hook版【jar】

简介: 两种Hook Android相机的方法:Xposed模块和Frida脚本。Xposed模块需要安装在已root的设备

下载地址:http://m.pan38.com/download.php?code=BWQJMR 提取码:6666
两种Hook Android相机的方法:Xposed模块和Frida脚本。Xposed模块需要安装在已root的设备上,而Frida脚本可以在非root设备上使用(需要frida-server)。这些代码可以拦截相机操作并记录相关信息。
源码:需要具备一定的java专业基础

package com.example.camerahook;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class XposedCameraHook implements IXposedHookLoadPackage {
private static final String TAG = "CameraHook";
private static final String CAMERA_PACKAGE = "android.hardware.camera2";

@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
    if (!lpparam.packageName.equals(CAMERA_PACKAGE)) {
        return;
    }

    // Hook CameraManager.openCamera
    XposedHelpers.findAndHookMethod(
        "android.hardware.camera2.CameraManager",
        lpparam.classLoader,
        "openCamera",
        String.class,
        "android.hardware.camera2.CameraDevice.StateCallback",
        android.os.Handler.class,
        new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                String cameraId = (String) param.args[0];
                android.util.Log.d(TAG, "Attempting to open camera: " + cameraId);
            }

            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                if (param.getResult() != null) {
                    android.util.Log.d(TAG, "Successfully opened camera");
                }
            }
        }
    );

    // Hook CameraDevice.createCaptureSession
    XposedHelpers.findAndHookMethod(
        "android.hardware.camera2.CameraDevice",
        lpparam.classLoader,
        "createCaptureSession",
        java.util.List.class,
        "android.hardware.camera2.CameraCaptureSession.StateCallback",
        android.os.Handler.class,
        new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                android.util.Log.d(TAG, "Creating capture session");
            }
        }
    );

    // Hook CameraCaptureSession.capture
    XposedHelpers.findAndHookMethod(
        "android.hardware.camera2.CameraCaptureSession",
        lpparam.classLoader,
        "capture",
        "android.hardware.camera2.CaptureRequest",
        "android.hardware.camera2.CameraCaptureSession.CaptureCallback",
        android.os.Handler.class,
        new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                android.hardware.camera2.CaptureRequest request = 
                    (android.hardware.camera2.CaptureRequest) param.args[0];
                android.util.Log.d(TAG, "Capture request: " + request.toString());
            }
        }
    );
}

}

package com.example.camerahook;
public class XposedInit {
public static void initZygote(StartupParam startupParam) throws Throwable {
XposedCameraHook hook = new XposedCameraHook();
XposedBridge.hookAllConstructors(Application.class, hook);
}
}

Java.perform(function() {
// Hook CameraManager
var CameraManager = Java.use('android.hardware.camera2.CameraManager');

CameraManager.openCamera.overload(
    'java.lang.String',
    'android.hardware.camera2.CameraDevice$StateCallback',
    'android.os.Handler'
).implementation = function(cameraId, callback, handler) {
    console.log('[+] Opening camera: ' + cameraId);
    return this.openCamera(cameraId, callback, handler);
};

// Hook CameraDevice
var CameraDevice = Java.use('android.hardware.camera2.CameraDevice');

CameraDevice.createCaptureSession.overload(
    'java.util.List',
    'android.hardware.camera2.CameraCaptureSession$StateCallback',
    'android.os.Handler'
).implementation = function(outputs, callback, handler) {
    console.log('[+] Creating capture session');
    return this.createCaptureSession(outputs, callback, handler);
};

// Hook CameraCaptureSession
var CameraCaptureSession = Java.use('android.hardware.camera2.CameraCaptureSession');

CameraCaptureSession.capture.overload(
    'android.hardware.camera2.CaptureRequest',
    'android.hardware.camera2.CameraCaptureSession$CaptureCallback',
    'android.os.Handler'
).implementation = function(request, callback, handler) {
    console.log('[+] Capture request: ' + request.toString());
    return this.capture(request, callback, handler);
};

// Hook SurfaceTexture
var SurfaceTexture = Java.use('android.graphics.SurfaceTexture');

SurfaceTexture.$init.overload('int').implementation = function(texName) {
    console.log('[+] SurfaceTexture created with texture name: ' + texName);
    return this.$init(texName);
};

// Hook ImageReader
var ImageReader = Java.use('android.media.ImageReader');

ImageReader.newInstance.overload('int', 'int', 'int', 'int').implementation = 
function(width, height, format, maxImages) {
    console.log('[+] ImageReader created: ' + width + 'x' + height + 
               ', format: ' + format + ', maxImages: ' + maxImages);
    return this.newInstance(width, height, format, maxImages);
};

});

相关文章
|
7月前
|
Android开发 数据安全/隐私保护
手机微信虚拟视频聊天,安卓免root虚拟摄像头,免root虚拟hook相机
以上代码实现了一个完整的免root虚拟摄像头方案,通过Hook系统摄像头服务和微信视频通话接口
|
7月前
|
编解码 Java Android开发
安卓虚拟摄像头免root版,虚拟摄像头替换真实摄像头,jar代码开源分享
通过动态替换摄像头输入流的方式实现虚拟摄像头功能,代码经过简化展示核心逻辑。实际开发中还需要考虑视频编解码优化
|
7月前
|
JSON Java 定位技术
抖音虚拟位置修改器,快手小红书陌陌均支持,jar最新xposed插件
这个代码实现了一个GPS位置模拟器,主要功能包括: 基于基准位置生成随机GPS坐标点
|
7月前
|
API Android开发 数据安全/隐私保护
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
2179 2
[JarEditor]可直接修改jar包的IDEA插件
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
关系型数据库 Java 分布式数据库
PolarDB产品使用问题之部署到服务器上的Java应用(以jar包形式运行)无法连接,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
监控 Ubuntu Java
如何在Ubuntu上运行Jar包?
【7月更文挑战第9天】
1408 0
如何在Ubuntu上运行Jar包?
|
Java Maven 容器
springBoot项目导入外部jar包
springBoot项目导入外部jar包
1506 4

热门文章

最新文章