Frida进行Android dex文件整体脱壳

Android的dex文件整体脱壳的脱壳点很多,今天试了下通过hook OpenCommon函数来dump内存中的dex文件,OpenCommon函数是在libart.so这个文件中,通过Process.findModuleByName("libart.so")获取so文件的加载信息,枚举so中的方案,获取到OpenCommon函数地址,对其进行hook,通过OpenCommon的第二个参数args[1]为dex文件的加载基址,第三个参数args[2]为dex文件的大小。

配置好frida环境之后,执行如下命令:frida -U -f com.***** -l OpenCommon.js

其中com开头为要hook的apk包名,OpenCommon.js为注入的js代码的文件名。

hook的js代码如下:

javascript 复制代码
function hook_native(){
	var module_libart=Process.findModuleByName("libart.so");
	console.log("module_libart base:"+module_libart.base);
	var symbols=module_libart.enumerateSymbols();
	var addr_OpenCommon=null;
	for(var i=0;i<symbols.length;i++){
		var name=symbols[i].name;
		if(name.indexOf("OpenCommon")>0){
			console.log("OpenCommon name:"+name+"\n"+"OpenCommon addr:"+symbols[i].address);
			addr_OpenCommon=symbols[i].address;
		}
	}
		if(addr_OpenCommon){
		Interceptor.attach(addr_OpenCommon,{
			onEnter:function(args){
				var dex_begin = args[1];
				//var size = args[2];//参数中的文件大小和dex基地址加偏移取出来的dex的大小是一样的
				console.log("magic: " + Memory.readUtf8String(dex_begin));
				var filesize_address = parseInt(dex_begin,16) + 0x20;
				var dex_size = Memory.readInt(ptr(filesize_address));
				console.log("dex_begin:" + dex_begin);
				console.log("dex_size :" + dex_size);
				var filename="/data/data/com.qujianpan.client.fast/" + dex_size + "opencommon.dex";
				console.log("filename:" + filename);
				var file = new File(filename, "wb");
				file.write(Memory.readByteArray(dex_begin, dex_size));
        		file.flush();
        		file.close();
			},onLeave:function(retval){
			}
		})
	}
}
function main(){
	hook_native();
}
setImmediate(main)
相关推荐
zhangphil1 分钟前
Android RecyclerView+Coil解码Bitmap设置进View,RenderThread上屏显示Graphics
android
阿部多瑞 ABU6 分钟前
AI安全报告合集
人工智能·安全
idingzhi7 分钟前
A股量化策略日报(2026年05月11日)
android·开发语言·python·kotlin
我命由我123458 分钟前
Jetpack Compose - 设置 Compose 编译器、设置 Compose 依赖项
android·java·java-ee·kotlin·android jetpack·android-studio·android runtime
@insist12322 分钟前
信息安全工程师-主动防御体系核心技术:从监测溯源到隐私保护全解析
网络·安全·软考·信息安全工程师·软件水平考试
Kapaseker27 分钟前
reified 如何骗过 JVM 类型擦除
android·kotlin
承渊政道27 分钟前
极空间NAS部署Photopea:私有在线修图工作站,手机平板随时编辑
安全·docker·容器·ip·访问者模式·photoshop·持续部署
乐迪信息28 分钟前
乐迪信息:智慧港口安全,船舶AI视觉检测实现主动预警
大数据·人工智能·安全·计算机视觉·目标跟踪·视觉检测
JS_SWKJ32 分钟前
网闸≠防火墙:我们拆解了数据包的“物理摆渡“全过程
网络·安全·web安全
硬件学长森哥37 分钟前
成像技术系列-3A算法基础
android·图像处理·计算机视觉