背景
分析一个安卓木马,逆向不难,但是代码量大:
22.07.15-AIRAVAT安卓木马逆向 | Python解密还原加密的字符串
量大还都是加密的字符串,手动一个个注释也太累了,最后选择用Python解密后重写.java文件。
分析逆向和Python在上面的语雀中,本篇主要记录如何使用JADX分析解密后的APK。
JADX逆向还原分析
反编译得到JAVA文件
JADX打开APK后,直接保存,即可在对应的目录下得到原始JAVA文件:
为了文件不冲突,建议保存后关闭JADX。
解密
使用Python脚本将其中的JAVA文件解密:
22.07.15-AIRAVAT安卓木马逆向 | Python解密还原加密的字符串
将明文替换密文。
替换文件
但是JADX打开文件的优先级是先打开缓存,所以建议修改缓存中的JAVA文件。
打开缓存的“source”(%.cache%\sources),发现目录是用2为十六进制的数字编号的:
打开(可以用遍历)每一个JAVA文件,解密后重写回去即可。
效果对比
原始反编译
解密后
总结
至此,已经完成了对APK文件中JAVA代码加密字符串的还原和替换。可以在JADX程序里面看到还原后的代码,直接分析。
必然
分析的时候,经常遇到会遇到字符串加密的问题,需要找到办法解决。
少量勉勉强强可以手动解密和注释,但是一定会有大量的字符串需要分析的时候。
建议
本人一般解密使用Python,而如何将还原的字符串替代加密的字符串因场景不同有不同的方式。
本次特殊点
因为我有过开发安卓和写JAVA的经验(大学),很快就找到了代码存放处(保存后的项目文件夹),但是没想到JADX的文件加载优先级是先加载缓存。
改完JAVA文件后,JADX里面还依旧是密文的JAVA。
而且JADX的JAVA文件夹顺序(2位十六进制)也并非按照类名升序,而是按照点击查看的顺序逐个实时生成(先点击查看的先生成)。
我最后采用的还原顺序是:
- JADX反编译APK文件
- 逐个点开类(也是蛮无语的😅)
- 打开缓存文件夹中的JAVA,Python解密替换
保存为项目我不知道在JADX里面哪个流程才能用到。
没有打开过的APK,会先生成缓存目录。打开过的APK,也时加载缓存目录,不加载项目的文件。
项目文件保存了干啥🤔🤔🤔