上一篇 《教我兄弟学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/1skClh3f 密码:6u0q
一 分析
1. 牛虽然迁到我们家了 但是不听话呀,那我现在就让它听话好不好 ? 首先打开AndroidKiller需要配置JDK的安装路径 下面是JDK下载的链接
链接:http://pan.baidu.com/s/1c1Ogeg4 密码:1nr6
<ignore_js_op>
2.把JDK的路径填好后 牛就听话了 然后就可以把我们的APK拉到我们的这款工具中来 (这里可能会出现一个小问题 如果把APK拉到软件中程序卡在 正在反编译APK源码请稍后.. 解决方式:重新打开软件,然后双击APK历史工程里面要打开的这个APK即可) 然后点击左边的入口就会打开MainActivity.smali
<ignore_js_op>
3.找到在MainActivity.smali中找到check方法 如果用户名或者密码有一个不对就会跳转到:cond_0出 然后执行下面的代码 也就是登陆失败! 这里会涉及到一些smali代码 smali代码不用去刻意学 这里看到不会的先自己百度然后结合着我下面的分析 自己去尝试着理解 这里的要求:把下面我分析的这些smali代码理解并且记住
<ignore_js_op>
4.用鼠标点击cond_0就能找到:cond_0位置 这个地方就是登陆失败
<ignore_js_op>
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语句直接一条指令让程序执行跳转登录成的代码 也是可以达到程序破解的目的 这里强调一个问题 修改完smali代码后一定要ctrl+s保存 不然程序还是拿原来的smali代码编译。
要求:这三种破解方式都要自己动手去做
<ignore_js_op>
8.最后smali修改完成后 把手机连到电脑上面 选择已找到设备 点击左上角的编译 编译完成后点击安装按钮 破解后的apk就成功安装到自己的手机上面了 然后输入错误的用户名和密码会提示登陆成功 说明破解成功
<ignore_js_op>
二. 结束
最后到本节课的课后作业了 我在吾爱里面找到一篇内购破解教程帖 本节课的作业是跟随此贴的教程完成破解 https://www.52pojie.cn/thread-632178-1-1.htm 当然教程讲的并没有这么详细 破解过程中遇到不懂得自己去百度 再不懂的就来问我 学习逆向就是这样 学不会就会感觉迷茫 但是不用怕 记住多迷茫几次就都学会了 每节课布置的课后作业一定要完成 课后作业都不做的话 那我的帖子你也不用继续跟了 学而不思则罔,思而不学则殆 ,不仅要完成还要能理解 这两节课给你讲了一些编程和破解的基础知识 当然这只是一个抛砖引玉的过程 那么下节课我将会找几个破解的例子带着你去练习
下一篇 《教我兄弟学Android逆向03 破解第一个Android游戏》
本节课用到的Demo:
链接:https://pan.baidu.com/s/1cUInoi 密码:07p9