这个技术完全靠眼,我们在运行程序之后,会看到程序中出现的字符串,比如文本框,按钮上的文本,toast显示的信息等,都可能是重要信息,然后我们可以在jd-gui工具中全局搜索这个字符串,这样就会很快的定位到我们想要找的逻辑地方:
当然我们还有一个重要点就是Android中的Log信息,因为在一个大的项目中,会有多人开发,所以每个模块每个人开发,每个人都会调试信息,所以就会添加一些log信息,但是不是所有的人都会记得在项目发布的时候关闭项目中的所有log信息,这个也是我们在项目开发的过程中不好的习惯。这时候我们就可以通过程序运行起来之后,会打印一些log信息,那么我们可以通过这些信息获取突破点,Android中的log可以根据一个应用来进行过滤的,或者我们可以通过log信息中的字符串在jd-gui中进行全局搜索也是可以的。
2、代码的注入技术
在第一种方式中我们通过全局搜索一些关键的字符串来找突破点,但是这招有时候不好使,所以这时候我们需要加一些代码了来观察信息了,这里有一个通用的方法就是加入我们自己的log代码,来追踪代码的执行逻辑,因为这里讲的是静态分析技术,所以就用代码注入技术来跟踪执行逻辑,后面介绍了动态分析技术之后,那就简单了,我们可以随意的打断点来进行调试。这里的添加代码,就是修改smail代码,添加我们的日志信息即可,在下面我们会用例子来进行讲解,这个也是我们最常用的一种技术。
3、使用系统的Hook技术,注入破解程序进程,获取关键方法的执行逻辑
关于Android中的进程注入和Hook技术,这里就不做详细介绍了,不了解这些技术的同学可以转战:
注入技术:
Hook技术:
这两篇文章介绍了这两项技术,但是我们在实际操作过程中不用这两篇文章中用到的方式,因为这两篇文章只是介绍原理,技术还不是很成熟,关于这两个技术,网上有两个框架很成熟,也很实用,就是人们熟知的:Cydia和Xposed,关于这两个框架的话,网上的资料太多了,而且用起来也很容易,这里就不做太多的详细介绍了。
我们在实际的破解的过程中,这种方式用的有点少,因为这种方式效率有点低,所以只有在特定的场景下会使用。
4、使用IDA来静态分析so文件
这里终于用到了IDA工具了,本人是感觉这个工具太强大了,他可以查看so中的代码逻辑,我们看到的的可能是汇编指令,所以这里就有一个问题了,破解so的时候,我们还必须掌握一项技能,就是能看懂汇编指令,不然用IDA来破解程序,会很费经的,关于汇编指令,大学的时候,我们接触过了,但是我们当时感觉这东西又难,而且用的地方也很少,所以就没太在意,其实不然呀,真正懂汇编的人才是好的程序员:
看到些汇编指令,头立马就大了,不过这个用多了,破解多了,还是可以的。我们可以看到左边栏中有我们的函数,我们可以找到指定函数的定义的地方进行查看即可。其实IDA最强大的地方是在于他动态调试so文件,下一篇文章会介绍怎么动态调试so文件。当然IDA可也是可以直接查看apk文件的:
可以查看apk文件中的所有文件,我们可以选择classes.dex文件: