android java花指令_[原创]#30天写作挑战#Android记去花指令还原算法
0x00 前言小伙伴给我发来一道android题,涉及花指令,记录一下去除花指令和算法还原的过程。样本强网杯 flower.apk0x01 花指令花指令是企图隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法,在真实代码中插入一些垃圾代码的同时还保证原有程序的正确执行,而程序无法很好地反编译, 难以理解程序内容,达到混淆视听的效果。主要目的加大静态分析难度1、不可执行的花指令运行是不执行的汇编指
0x00 前言
小伙伴给我发来一道android题,涉及花指令,记录一下去除花指令和算法还原的过程。
样本
强网杯 flower.apk
0x01 花指令
花指令是企图隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法,在真实代码中插入一些垃圾代码的同时还保证原有程序的正确执行,而程序无法很好地反编译, 难以理解程序内容,达到混淆视听的效果。
主要目的加大静态分析难度
1、不可执行的花指令
运行是不执行的汇编指令,会对反汇编造成影响,影响静态分析(如ida无法f5)
2、可执行的花指令
可执行花指令一般都是无意义的汇编指令,会被反汇编正常识别
参考:
http://dyf.ink/reverse/windows/anti-debug/junk-code/
https://www.anquanke.com/post/id/208682
0x02 算法还原
1、样本分析
(1) java层
(2) native层sub_F34
sub_F8E
sub_FD0
遇到JUMPOUT要进行path修复
JUMPOUT修复参考:https://bbs.pediy.com/thread-259062.htm
修复 sub_F8E
根据ida的提示sub_F8E应该跳转的位置是 0xFA4 = 0xF98 + 0xC
patch脚本
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-7 6-0) 次 进行高/低四位保留(0xf0 0xf 与运算),最后异或0x88
4、结果与data3进行比较
(3) 算法还原
加密
解密
运行结果:
0x03 总结
1、识别花指令
2、对Jumpout进行修复
3、动态调试
4、算法还原
最后于 2020-9-19 11:56
被neilwu编辑
,原因:
上传的附件:
libnative.so
(17.58kb,26次下载)
libnative.so.idb
(322.23kb,18次下载)
更多推荐
所有评论(0)