上一篇
《教我兄弟学Android逆向01 编写第一个Android程序
》我带你熟悉了Android编程的基础知识 课后给你留的作业你也发给我了 我看了你完成的不错 说明你对Android编程已经有了基础的了解 结合着上篇教程的那个Demo 我们今天就正式进入破解教程
在开始今天的教程之前我有个疑惑 就是上一个Demo编译出来是一个.apk文件 把这个文件用
adb install命令安装到手机上就可以点开运行了 现在我的手头只有这样一个apk文件
那么我怎么去破解它呢 也就是
我输入错误的用户名和密码也可以登陆成功
我相信你应该和我也有同样的疑惑,但是不单单是我们吧 我们的前人很早以前就想到过这样的问题 然后他就自己写出来一个工具叫 Android Killer 通过把这个.apk文件拉到他的软件中来 就可以把这个apk反编译成smali文件 然后去改这些一些smali文件 改好后重新打包成新的apk 就会生成一个和原来apk一样的新的apk 这个新的apk就是破解后的apk
那么我们是不是也可以写一款这样的软件呢 ?答案:可以 但是很花费时间 我因为想喝一杯牛奶就去养一头牛 太不值得对不对 我们不如直接去把别人家的牛迁过来 以后想什么时候喝牛奶直接挤就是了 那么牛在哪呢?
点击下面的链接下载软件 我们这里就把牛迁到我们家了。
链接:http://pan.baidu.com/s/1eSeqQ6u 密码:66qb
一 分析
1. 牛虽然迁到我们家了 但是不听话呀,那我现在就让它听话好不好 ? 首先打开AndroidKiller需要配置JDK的安装路径 下面是JDK下载的链接
链接:http://pan.baidu.com/s/1c1Ogeg4 密码:1nr6
![](https://i-blog.csdnimg.cn/blog_migrate/10dd558c73f8e59e47ce0a5bc697455b.png)
2.把JDK的路径填好后 牛就听话了 然后就可以把我们的APK拉到我们的这款工具中来 (这里可能会出现一个小问题 如果把APK拉到软件中程序卡在 正在反编译APK源码请稍后.. 解决方式:重新打开软件,然后双击APK历史工程里面要打开的这个APK即可) 然后点击左边的入口就会打开MainActivity.smali
![](https://i-blog.csdnimg.cn/blog_migrate/c37f14972582780add1b76157729b19a.png)
3.找到在MainActivity.smali中找到check方法 如果用户名或者密码有一个不对就会跳转到:cond_0出 然后执行下面的代码 也就是登陆失败! 这里会涉及到一些smali代码 smali代码不用去刻意学 这里看到不会的先自己百度然后结合着我下面的分析 自己去尝试着理解 这里的要求:把下面我分析的这些smali代码理解并且记住
![](https://i-blog.csdnimg.cn/blog_migrate/0c57ed1cfc2d81ef1df0de0fe4f46be6.png)
4.用鼠标点击cond_0就能找到:cond_0位置 这个地方就是登陆失败
![](https://i-blog.csdnimg.cn/blog_migrate/ad484c1eb4a14609817ef466564da32b.png)
5.这里要补充两个smali指令 一个是if-eqz 另一个是if-nez 这两条指令是相对的
(1)if-eqz vA, vB, :cond_**" 如果vA等于vB则跳转到:cond_**
(2)if-nez vA, vB, :cond_**" 如果vA不等于vB则跳转到:cond_**
6.小总结
(1)首先程序把我们输入的用户名和密码给了p1和p2 然后把真正的用户名给我v0 再拿p1和v0对比 对比的结果放在v0中
如果这两个值不相等v0就等于0
(2)然后用
if-eqz v0, :cond_0这条指令去判断v0是不是0
如果v0等于0 也就是用户名和密码不相等 就跳转到
:cond_0位置 执行登录失败 否则继续往下面执行
(3)这里假设用户名输入正确了 程序往下继续执行 后面会进行同样的判断密码是不是相等 只有用户名和密码都是正确的 程序才不会跳转到:
cond_0位置执行登录失败
7.结合着上面的总结那么思路来了 我如果不让程序跳转到:
cond_0位置 让程序每次在
if-eqz v0, :cond_0这条关键指令上继续往下执行 是不是就可以执行登录成功代码了? 那怎么能让它不跳转呢? 这里程序有两个
if-eqz 分别是用来判断用户名和密码是否正确的 我现在有三种思路
第一种 我把
if-eqz改成if-nez 第二种 我直接把这两条指令删除掉 第三种也是最省事最懒的一种 我直接用goto语句直接一条指令让程序执行跳转登录成的代码 也是可以达到程序破解的目的
要求:这三种破解方式都要自己动手去做
![](https://i-blog.csdnimg.cn/blog_migrate/cb70ef47af76cfd9f2b523e8146adcf5.png)
8.最后smali修改完成后 把手机连到电脑上面 选择已找到设备 点击左上角的编译 编译完成后点击安装按钮 破解后的apk就成功安装到自己的手机上面了 然后输入错误的用户名和密码会提示登陆成功 说明破解成功
![](https://i-blog.csdnimg.cn/blog_migrate/29db1325a20eab298f2c541110dae299.png)
最后到本节课的课后作业了 我在吾爱里面找到一篇内购破解教程帖 本节课的作业是跟随此贴的教程完成破解 https://www.52pojie.cn/thread-632178-1-1.htm 当然教程讲的并没有这么详细 破解过程中遇到不懂得自己去百度 再不懂的就来问我 学习逆向就是这样 学不会就会感觉迷茫 但是不用怕 记住多迷茫几次就都学会了 每节课布置的课后作业一定要完成 课后作业都不做的话 那我的帖子你也不用继续跟了 学而不思则罔,思而不学则殆 ,不仅要完成还要能理解 这两节课给你讲了一些编程和破解的基础知识 当然这只是一个抛砖引玉的过程 那么下节课我将会找几个破解的例子让你去练习