0x00简介
合伙人给我发了安卓的问题。 与花命令相关,记录移除花命令和算法恢复的过程。
样品
强网杯flower.apk
0x01花指令
插花指令是隐藏不想进行逆向工程的代码块(或其他功能)的一种方法,它在将垃圾代码插入实际代码中的同时,确保原始程序正确运行。 但是,程序没有很好地反编译,程序的内容难以理解,有混乱视听的效果。
主要目的:提高静态分析难度
1、无法执行的花指令
执行是不执行的汇编指令,影响反汇编,影响静态分析(例如ida不能f5 )
2、可行花指令
可执行的花指令一般是无意义的汇编指令,由反汇编正常识别
参考:
3358 dyf.ink/reverse/windows/anti-debug/junk-code /
33559 www.anquan ke.com/post/id/208682
0x02算法恢复
1、样品分析
(1) java层
)2)朴素层sub_F34
sub_F8E
sub_FD0
遇到JUMPOUT时进行path修复
JUMPOUT修复参考: https://BBS.pediy.com/thread-259062.htm
修复sub_F8E
根据ida的指示,sub_F8E应该跳跃的位置是0xFA4=0xF98 0xC
路径脚本
在path之后重建函数(不可思议的p键) ) )。
修复前
修复后
可以通过以上方式对sub_FD0进行函数重建,并且可以在成功识别ida之后使用F5。
2、祛花指令
在动态调试中,可以找到无法执行的花命令
通过分析,可以识别可执行的花的命令
用替换以上内容
在去送花指令之前
摘花指令后(函数重建后ida识别成功) )
去花指令之前伪代码
去花的命令后伪代码
3、算法恢复
)1)动态调试
基于伪代码结合动态调试进行算法恢复
这里需要动态调试来获取值
调试时断点参照loc_11B0 loc_10AA
)2)加密算法
加密过程
1、输入字符串
2、以开头字符填充长度为首的字符10进制长字符串长末尾字符填充=128长
3、循环128位字符首先与data1和data2进行异或,循环28x16(1-76-0 )次进行高/低4位保留(与0xf00xf运算),最后进行异或0x88
4、结果与data3进行比较
)3)算法恢复
加密
解密
执行结果:
0x03总结
1、识别花的指令
2、修复Jumpout
3、动态调试
4、算法恢复
最后2020-9-19 11:56
被聂鲁武编辑
、理由:
上传的附件:
libnative.so
(17.58kb,26次下载)
libnative.so.idb
(322.23kb,下载18次)