首页
社区
课程
招聘
[原创]Android一二三代壳实现
发表于: 2026-5-11 22:01 17138

[原创]Android一二三代壳实现

2026-5-11 22:01
17138

落地壳 会将文件保存到本地

不落地壳,使用InMemoryDexClassLoader加载内存中dex,无需保存到本地

本壳参考了开源项目dpt-shell,对开源项目的分析可以参考我的其他文章

抽取指令就是将method->code_item->insns数组中的指令全部替换为0x00,这样反编译出的方法就为空

将抽取出的指令保存,准备运行时回填

这里我将抽出的指令保存到assets文件夹下,文件格式为:

dex数量(2字节)+ 每个dex偏移(4字节)+ 每个dex的指令结构

每个dex指令结构为:

该dex的方法数(2字节)+ codeItem

codeItem结构由每个函数的指令块组成:

方法id(4字节)+ insn大小(4字节)+ insns(insn大小)

结合代码中的结构体,让ai写了抽空dex和保存该文件结构的代码

原始activity如下

创建一个新的项目,包名为com.example.mysourceapp,MainActivity只写一个log语句,表明正确执行到此处

现在新建我们的壳项目

ProxyApplication.java

代理类没什么主要逻辑,主要逻辑放在native层中

native-lib.cpp

在代码中使用了一些工具类和函数

DexCode.cpp

这里需要和结合刚刚自定义的文件结构理解,代码比较简单

保存code指令以后,什么时候回填呢,为了实现运行时回填的效果,需要hook defineClass函数


[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

最后于 2026-5-17 15:56 被mb_wckjnnha编辑 ,原因:
收藏
免费 15
打赏
分享
最新回复 (2)
雪    币: 196
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
向大佬学习
2026-5-11 22:05
0
雪    币: 1351
活跃值: (2507)
能力值: ( LV8,RANK:121 )
在线值:
发帖
回帖
粉丝
3
学习学习
2026-5-16 12:04
0
游客
登录 | 注册 方可回帖
返回