2016华山杯部分android逆向 |WP

参考链接https://bbs.pediy.com/thread-218555.htm
只能默默的膜一下大神

前言

这几个题总的来说不难,因为没有涉及到很难的算法,而且我感觉也确实考察了很多android逆向的知识点。很经典

题目一 virus02_02.apk

这道题主要考察samli注入…没什么好说的。
关于smali注入可以参考我的这篇文章

题目二 Shield.apk

2016华山杯部分android逆向 |WP_第1张图片
这里写图片描述
看着样子是加壳了,但是我用查壳工具却查不出来。
主要的加壳部分是在ProxyAplication.class中实现的,分析其中的代码
可以看出来这个apk的结构为壳+源apk+源apk长度
到此我们有两种解决办法,一种就是按照参考文章的方法一样,照着加壳的过程写一个脱壳的代码。我这里采用另一种办法。

脱壳

2016华山杯部分android逆向 |WP_第2张图片

在分析splitPayLoadFromDex函数时,可以发现它将脱壳之后的apk写入了一个payload.apk中,然后加载该apk,在删除payload.apk。所以我能想到的思路就是在其脱壳完成后,将payload.apk dump到本地,那么这个apk就是脱壳之后的包了。
此时只需要动态调试smali,在write函数下断。找到payload.apk的具体路径,使用adb pull到本地。
2016华山杯部分android逆向 |WP_第3张图片
2016华山杯部分android逆向 |WP_第4张图片

解密

得到脱壳后的apk后,可以看到正常的验证逻辑。一方面可以去看具体的加密过程,我这里简单点操作,直接smali注入,查看日志得到正确的注册码。
2016华山杯部分android逆向 |WP_第5张图片

题目三 testndk4_Signed4.zip

绕过

拿到题目,无法安装,解压时提示密码,伪加密,修改504b0102的后几位。
安装后运行,提示没有权限!!??直接退出了。
2016华山杯部分android逆向 |WP_第6张图片
调用native层的isExit(),使用IDA查看so
这里写图片描述
有点无语,这么生硬的代码,直接绕过就好了,这里有几种绕过方式。
第一种修改so文件
第二种修改smali,并回编译
第三种无视该activity,使用adb 在root权限下直接运行./MainActivity
如果用第三种方法,前面可以正常的绕过,但是点击确定按钮时会突然退出。所以可能还是不是很可靠。所以我采用修改smali的方法。

动态调试

2016华山杯部分android逆向 |WP_第7张图片
2016华山杯部分android逆向 |WP_第8张图片
代码逻辑很清楚了,在native做了判断,只需要动态调试,在内存中即可观察到正确的密码。
关于动态调试可以参考我的其它文章。
2016华山杯部分android逆向 |WP_第9张图片

总结

这三道题设计的知识点还是比较多的,smali注入,脱壳,动态调试。如果在增加点反调试措施,或者来个加密协议,混淆,难度就会上来了。

你可能感兴趣的:(CTF,android)