python防反编译_⽤Python和Smali模拟器搞定⼀个加混淆、防
篡改的APK逆向
这个周末我和好友聊天时,他向我求助修改⼀个他正在编写Python脚本。他试图通过解混淆⼀个APK,来理解该APK的混淆基址和防篡改保护机制。同我以往的APK逆向过程(dex2jar->jd-->done)相⽐,这是⼀个很有挑战性同时充满趣味的⼯作。同时,这个逆向过程我编写了⼀个我认为⽐较酷⽐较独特的⼯具。
怪异的字符串
同其他有过APK反编译⼯作经验的逆向⼯作者⼀样,我已经很习惯程序中的类和名字被ProGuard混淆(或者被DexGuard混淆字符串等),这对我来说不是什么困难。但是当我使⽤apktool打开这个应⽤的时候还是⼤吃⼀惊:
⼤部分的类和⽅法名都是很怪异的字符串,这⼏乎没法让我使⽤⼀个单独的⼯具或者编辑器来查看这些⽂件。所以⽬前最⾸要的步骤就是修复(坦诚的说应该是从头开始写)Matteo写的python脚本,这个脚本试图重新命名所有的混淆⼊⼝,脚本本⾝⼯作流程⽐较简单:遍历所有名称为不能打印字符的smali⽂件
使⽤ClassXXX替代混淆的类名字(XXX是⼀个⾃增的数字)
重命名⽂件
查所有引⽤这些类的地⽅并使⽤新的名称替代(正则匹配)
在.field⽂件夹(类变量,⽅法等)中重复这个操作
这个过程结束之后,最终获得了⼀个可以浏览的⽂件夹和可读的smali⽂件:
但是这离完成还有很远的距离。
反篡改
在我继续进⾏之前,我先需要指出两点,以便你能够理解我这么做背后的理由:
1.这个应⽤使⽤了很奇怪的反篡改(很⼤可能是反调试之类的措施)保护,因此,使⽤注⼊代码的⽅式将smali代码重新打包成APK是不可⾏的,同样调试也是不⾏的
2.这样的保护措施不仅阻⽌了代码注⼊/修改,同时也会在检测到这种篡改后卸载软件
所以代码注⼊(XPosed也不⾏)、调试都⽆法使⽤,基本我通常的标准逆向⽅式都⽆法使⽤。
加密字符串
作为⼀个懒惰(或者说是聪明)的逆向者,我不想先去理解其中的逻辑,相反,我试图发现那些能够给我⼀些提⽰的、有意义的字符串,帮助我发现这个app在做些什么,但是我再次被震惊到了。
所有的字符串都进过了传统的加密算法加密,基本上所有引⽤字符串的地⽅都被如下的⽅式进⾏了替换:
Stringdecrypted=Class623::method5(newint[]{-12, 44,-35,...}, 52);
函数的参数仅仅是⼀个整形数组和其他的⼀些数字作为第⼆个参数(或许是某种形式的密钥?)
通常我遇到这种情况的做法是:1.反编译APK到Java(使⽤dex2jar+jd-gui或者仅仅是jadx)
2.获取到解密的java代码,并将其粘贴到⼀个独⽴的java控制台
3.对加密的东西执⾏解密例程从⽽获得明⽂结果
然⽽。。。任何⼯具都⽆法正确的将Class623::method5 的smali代码转换成
java代码,这些⼯具获得的输出都是⽆意义的东西,不起作⽤。但是⽬前我并不是很擅长阅读smali代码(这个解密程序本⾝也⼗分复杂,⾄少对我来说很复杂)…但是我不能就这么放弃。
所有的都让Smali模拟器来搞定吧
我当然可以利⽤Class623::method5的smali代码,创建⼀个新的安卓APP,然后使⽤apktool反编译,在这个⽅法的输出中注⼊代码,插⼊⼀个调⽤该函数代码的调⽤到app中,重新构建这个app并且运⾏它。但是:1.同样,我是⼀个懒惰的⼈
2.这个实现⽅式并不优雅
3.我头脑⾥闪现出⼀个很酷的想法,我必须尝试⼀下!
长话短说,我要做的是:“写⼀个smali解析器和模拟器,然后加载这个函数例程,最终它将输出所有我需要的明⽂!”。
于是我开始阅读Dalvik操作码说明,整合了⼀些代码,经过⼏个⼩时,我完成了这个简单的pyhon 脚本⽤于测试:
python转java代码
emu=Emulator()
# The smali file to emulate.
filename='decryptor.smali'
# Arguments for the method.
args={
'p0':(-62,-99,-106,-125,-123,-105,-98,-37,-105,-97,-103,-41,-118,-97,-113,-103,-109,-104,-115,111,98,103,35,52),
'p1':19
}
ret=emu.run(filename,args)
printemu.stats
print"RESULT:\n"
print"'%s'"%ret
⽽且,运⾏结果如下:
成功了!
我对所有的加密字符串执⾏该脚本,模拟器也能正确的解析和执⾏解密例程的smali代码,并解密所有我从反编译程序中抽取的每⼀个条⽬。从现在开始,所有的⼯作就是使⽤明⽂替换所有的加密条⽬,从⽽这个逆向过程易如反掌。
*原⽂链接:evilsocket,NoSecTec编译,转载请注明来⾃FreeBuf⿊客与极客(FreeBuf.COM)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。