安卓虚拟摄像头过人脸,免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);
};

});

相关文章
|
9月前
|
XML Java Android开发
微信虚拟视频插件安卓,微信虚拟相机替换拍照,java源码分享
完整的相机应用项目包含三个主要文件:主活动实现、布局文件和清单文件。代码实现了相机预览、
|
9月前
|
网络协议 Android开发 数据安全/隐私保护
三色过人脸虚拟摄像头,安卓免root虚拟摄像头, 安卓虚拟摄像头过人脸
这个实现包含三个主要部分:虚拟摄像头核心服务、安卓环境配置脚本和客户端测试程序
|
9月前
|
API 开发工具 Android开发
qq虚拟视频插件下载安装手机版, 安卓虚拟视频插件,替换摄像头工具
Xposed入口模块:拦截目标应用的相机调用‌23 Camera1 API处理:通过PreviewCallback替换视频流‌1 Camera2 API适
|
9月前
|
API Android开发
微信虚拟摄像头模块,微信虚拟视频聊天,安卓虚拟摄像头插件
该实现包含虚拟摄像头服务核心、视频流生成和Android配置三个关键模块,使用Camera2
|
Java Maven Android开发
Android studio 中引用jar的其实是Maven?(一)
由于Studio比eclipse多了一步对工程构建的步骤,即为build.gradle这个文件运行,因此其引入第三方开发jar包与lib工程对比Eclipse已完成不同,引入第三方jar与lib工程显得并没有那么友好了,因为过程中会涉及更多内容,而且你必须认清楚studio的目录结构。
1236 0
|
Java 开发工具 Maven
Android studio 中引用jar的其实是Maven?(二)
上一篇:Android studio 中引用jar的其实是Maven?(一) 搭建maven仓库:   去了解一个新的事物的时候,最好的方式就是去使用它。例如去了解一座城市的时候,最好的方式就是乘坐公共交通工具。
1912 0
|
6月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
995 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
796 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
985 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
754 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡

热门文章

最新文章