通过优化提示词,规范化agent的行为,从而得到一套高效率的java层反名称混淆方法
在安卓逆向过程中,我们常遇到这样的混淆

总结起来可以分几类:
1、unicode小语种类,比如阿拉伯语,类名竟然能竖起来。(可以用插件转变为类似第三种)
2、O0o、1lI、ILZ类
3、短字符类,比如f0、a、ab
对于只有名称混淆的,我们可以使用jadx-mcp配合ai根据语义快速且高效地批量进行恢复,从而把逆向工程周期极大地缩短。
实测JEB-MCP占资源太大,而且过于卡,反编译一个类可能需要几分钟,对于我这种计算资源比较少的小牛马显然JEB还是过于笨重了。不过之前的提示词还是有效的,可以考虑把提示词迁移至jadx-mcp。于是找到了a7dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9h3&6B7j5g2)9J5k6r3y4G2k6r3g2J5i4K6u0r3K9X3q4V1P5q4)9J5k6r3q4A6i4K6u0V1L8h3y4H3i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1@1i4@1t1^5i4@1q4m8i4@1f1&6i4@1p5I4i4@1t1&6i4@1f1%4i4K6W2n7i4@1q4q4i4@1f1K6i4K6R3H3i4K6R3J5
jadx-mcp实际上是两部分,分别是JADX-AI-MCP和JADX-MCP-SERVER,前者是一个jar,是jadx插件,后者是标准的mcp服务器。
我的IDE是google的antigravity,官方没有提供安装方法,不过这个IDE一看就是vscode改过来的,所以可以参考roocode、cline这种进行配置。此处有一个坑点:我为antigravity配置了socks5代理,导致JADX-MCP-SERVER网络连通性测试出现异常。解决方案是下面配置中的env字段。注意timeout设大一点。
修改~\.gemini\antigravity\mcp_config.json,添加
连接好之后,在manage mcp servers界面,应该能出来可用的mcp函数列表,整理如下
之前flanker发布的JEB-MCP中的提示词如下:
经过测试我的智障AI+MCP无法达到演示的效果。此种情况,可以将大的长期目标(完成反混淆)拆分成多个小的短期目标(获取类的代码,分析功能,重命名包、类、字段、方法的名称等等)。我们将需求告诉贵的、聪明的AI,让AI来拆分任务、形成一个初步提示词。然后我们把需要改善的地方告诉他,让他来优化。最后我们拿这个优化好的提示词去让便宜的、笨的AI去大量地做,以节省token和提高速度。
优化后的提示词如下。
rename_templete.txt内容如下
1、强调“递归”,这样我们能让AI从我们更感兴趣的点或面入手,扩散至与他们相关的部分。这样能避免大量分析一些标准的、框架性质的、不是很感兴趣的功能。
2、为什么不用mcp的get_all_classes这个功能?因为这个返回的是整个apk的class,支持分页是每页显示多少条那种,而不是显示某个包下的所有class,测试app有200000个类,每次100条,就需要调2000次,这样上下文会很容易撑爆,触发上下文压缩,这样AI就有可能忘掉前面的但是重要的东西。但是可以用search_classes_by_keyword这个功能,搜索结果会比较精准。
也许可以先全量跑一次生成一棵树,然后根据节点序号去查找?后续可能考虑从这里下手优化。
3、为什么要设计一个rename_templete.txt?输出类的命令,如果是简单的说“完成后将xxx输出”,AI会每次设计一个新的格式输出,这样太乱,也不方便后续可能的其他自动化操作。另外,上述格式可以让AI每次都追加,而不是全量读取或输出一遍。以后遇到诸如内存爆了、jadx白屏了这种问题,在重启后可以直接让mcp“重新执行最后x条重命名操作”,快速恢复进度。
上面图片中的混淆示例,经过反混淆实际可以达到如下效果。

虽然还有一些错,但是基本上能看了。
1. 连接MCP jadx-mcp-server
2. 分析D:\xxx.apk应用的com.xxx.MainActivity类的功能
3. 根据功能重命名所有方法名小于3个字符的名称
4. 如果调用了其他类的方法,分析相应的类功能,并重命名方法名小于3个字符的名称
5. 输出分析过程。
1. 连接MCP jadx-mcp-server
2. 分析D:\xxx.apk应用的com.xxx.MainActivity类的功能
3. 根据功能重命名所有方法名小于3个字符的名称
4. 如果调用了其他类的方法,分析相应的类功能,并重命名方法名小于3个字符的名称
5. 输出分析过程。
=================================================================
XXX 包反混淆记录
=================================================================
C|com.xxxxx|O000O0O00OO0O0OOO0O|SamplingMonitorRunnable|原生采样监控Runnable
C|com.xxxxx|O000O0O00OO0O0OOOO0|HijackActivityLifecycleCallback|劫持检测Activity生命周期回调
M|com.xxxxx.unexp.AttackResponseHandler|O000O0O00OO0O0OOO0O|handleAttackDetected|处理检测到的攻击
M|com.xxxxx.xxxxxx|O000O0O00OO0O0OOO0O|onHomeKeyPressed|Home键按下回调
M|com.xxxxx.xxxxxx|O000O0O00OO0O0OOOO0|getContext|获取Context
F|com.xxxxx.xxxxxx|O000O0O00OO0O0OOO0O|sContext|上下文
F|com.xxxxx.HijackDetectionManager|O000O0O00OO0O0OOO0O|sMainHandler|主线程Handler
F|com.xxxxx.HijackDetectionManager|f11565O000O0O00OO0O0OOOO0|sCurrentComponent|当前组件
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 1天前
被_0xA1pha编辑
,原因: 修改