Android逆向之旅---静态分析技术来破解Apk (6)

我们看看这个函数的实现,我们一般直接看BL/BLX等信息,跳转逻辑,还有就是返回值,我们在函数的最后部分,发现一个重点,就是:BL __android_log_print  这个是在native层调用log的函数,我们在往上看,发现:tag是System.out.c

我们运行程序看起log看看,但是我们此时也可以在java层添加日志的:我们全局搜索这个方法,在yi这个类中调用的

Android逆向之旅---静态分析技术来破解Apk


我们修改yi.smail代码:

Android逆向之旅---静态分析技术来破解Apk


回编译,在运行程序,开启log:

adb logcat -s JW

adb logcat -s System.out.c

Android逆向之旅---静态分析技术来破解Apk


发现,返回的密码java层和native层是一样的。说明我们静态分析native还是有效的。


好了,到这里我们今天的内容就介绍完了,当然还有很多静态分析apk的方法,这里只是介绍了本人用到的技术。


案例下载:

案例中有个说明文件,运行前请阅读~~


五、未解决的问题

1、如何搞定apktool工具反编译出错的问题

这个我在开始的时候也说了,这里出错的原因大部分是apk进行加固了,所以后面我会专门介绍一下如何解决这样的问题

2、如何搞定让一个Apk可以调试

我们在上面看到一个apk想要能调试的话,需要修改android:debug的值,但是有时候,我们会遇到修改失败,导致程序不能运行,后面会专门介绍有几种方式来让一个发布后的apk可以调试


六、技术总结

这篇文章我们介绍了如何使用静态方式去破解一个apk,我们在破解一个apk的时候,其实就是改点代码,然后能够运行起来,达到我们想要的功能,一般就是:

1、注释特定功能,比如广告展示等

2、得到方法的返回值,比如获取用户的密码

3、添加我们的代码,比如加入我们自己的监测代码和广告等

我们在静态分析代码的时候,需要遵循的大体路线:

1、首先能够反编译,得到AndroidManifest.xml文件,找到程序入口代码

2、找到我们想要的代码逻辑,一般会结合界面分析,比如我们想得让用户登录成功,我们肯定想要得到用户登录界面Activity,这时候我们可以用adb shell dumpsys activity top命令得到Activity名称,然后用Eclipse自带的程序当前视图分析工具:得到控件名称,或者是在代码中获取layout布局文件,一般是setContentView方法的调用地方,然后用布局文件结合代码得到用户登录的逻辑,进行修改

3、在关键的地方通过代码注入技术来跟踪代码执行逻辑

4、注意方法的返回值,条件判断等比较显眼的代码

5、对于有些apk中的源码,可能他有自己的加密算法,这时候我们需要获取到这个加密方法,如果加密方法比较复杂的话,我们就需要大批的测试数据来获取这个加密方法的逻辑,一般是输入和输出作为一个测试用例,比如阿里安全第一届比赛的第一题就可以用静态分析的方式破解,它内部就是一个加密算法,我们需要用测试数据来破解。

6、对于那些System.loadLibrary加载so文件的代码,我们只需要找到这个so文件,然后用IDA打开进行静态分析,因为有些apk中把加密算法放到了so中了,这时候我们也可以通过测试数据来获取加密算法。

7、通过上面的例子,我们可以总结一个方式,就是现在很多apk会做一些校验工作,一般在代码中包含:“signature”字符串信息,所以我们可以全局搜索一下,也许可以获取一些重要信息。

Android逆向之旅---静态分析技术来破解Apk


六、总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgysgd.html