我们看看这个函数的实现,我们一般直接看BL/BLX等信息,跳转逻辑,还有就是返回值,我们在函数的最后部分,发现一个重点,就是:BL __android_log_print 这个是在native层调用log的函数,我们在往上看,发现:tag是System.out.c
我们运行程序看起log看看,但是我们此时也可以在java层添加日志的:我们全局搜索这个方法,在yi这个类中调用的
我们修改yi.smail代码:
回编译,在运行程序,开启log:
adb logcat -s JW
adb logcat -s System.out.c
发现,返回的密码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”字符串信息,所以我们可以全局搜索一下,也许可以获取一些重要信息。