自己动手,丰衣足食
工具
开始
多年前在iOS上进行过逆向,到现在为止还是无法忘记FLEX带给我的冲击是有多大,强大的方法搜索,丰富的社区破解资源。原来逆向可以这么简单,找到对应的方法(俗称G点),修改个返回值,各种VIP沾手就来。后来去搞Android的时候,居然没有对应的软件可以实现上述的功能。由于平台的差异,iOS能够获取到运行时内存上的数据,然后进行修改。Android则不行,需要对Apk进行逆向,修改,打包。
1.准备好你要逆向的apk
2.在手机上用mt管理器查看apk
3.进去之后选择对应的dex文件查看,或者选择多个dex合并一起来看,我通常都是使用Dex++来把所有的dex打开。
4.搜索关键字,isvip,ispro,isbuy等等你能想到的方法名字,通过不断的查看代码,得到G点。对于这个apk的反编译,还得感谢开发者的良好编程习惯。在反编译的过程中,我发现猿哥居然把类的toString完整的输出来了,剩下了很多排查的时间。
5.查看代码
6.最后能够判断出ispro正是此apk来判断是否为vip的方法,那么只需要
在对应的地方进行修改即可,强制返回一个true。
7.保存,去除签名,重新打包即可。
总结
其实上面的例子也没啥营养的,也只是演示了一下apk的破解过程。重点在下面
- 如文中开头所说,逆向的关键在于G点,如何找到这个G点,就有很大学问了。提供一个思路,仅供参考
- 第一步,搜索关键字
isDebug
,通常程序员都会封装一个自己的Log Utils,用于控制日志的开关,release包都会关掉。那么,我们可以通过打开这个开关,接上logcat,你就能看到apk输出所有日志,犹如把apk扒了一成皮。 - 通过apk里面的返回信息进行关键字的搜索,例如,有些app会提示你升级VIP,或者购买套餐,再或者激活失败等等关键词。来找到G点所在。
- 找到G点所在以后。就能为所欲为了。
- 第一步,搜索关键字
- 有时候,一些类里面的toString()方法可能会有意想不到的收获
说说防范措施吧
- 加入签名验证,在apk里面加入对签名文件的验证,先对签名文件md5,然后在程序启动的时候对apk里面的签名进行对比,不一样,则直接退出app,但请注意:不要在java层进行签名的判断,把判断的逻辑放在jni里面去,如果签名不一致,直接so闪退即可。虽说so指标不治本,但是还是能提高破解的难度,在攻与防之间,从来没有说哪一种方法能破解所有的apk,同样也没有任何一种防护措施能一了百了。两者都是互相存在,互相发展。
- apk加壳,在现有的加壳服务提供商中选择一家,来直接对apk进行加壳。但是加壳会增加apk的启动时间。
- 如果你的app跟服务器有关,那么所有的判断逻辑应该在服务器上面,而不是app里面。相信搞服务器的都明白这一点的。例如各种聊天软件的会员,各种音乐软件的会员。你最后破解了vip也还是
ziwei
版的app。
当你发现你的生活离不开一个App,并且它能带给你效益和创造价值。你应该考虑的是为它补上一个车票,而不是花大量的时间去破解。