实验环境
Win10、Android killer1.3.1、APKIDE
- 反编译apk。
可能会卡在正在反编译源码,请稍后…… 解决方法是重新打开软件然后双击APK历史工程里面要打开的这个apk即可。
- 找到在MainActivity.smali中找到check方法 如果用户名或者密码有一个不对就会跳转到:cond_0出 然后执行下面的代码 也就是登陆失败!
用鼠标点击cond_0就能找到:cond_0位置 这个地方就是登陆失败
- 补充两个smali指令 一个是if-eqz 另一个是if-nez 这两条指令是相对的
(1)if-eqz vA, vB, :cond_**" 如果vA等于vB则跳转到:cond_**
(2)if-nez vA, vB, :cond_**" 如果vA不等于vB则跳转到:cond_** - 小总结
(1) 首先程序把我们输入的用户名和密码给了p1和p2 然后把真正的用户名给了v0 再拿p1和v0对比 对比的结果放在v0中 如果这两个值不相等v0就等于0
(2) 然后用if-eqz v0, :cond_0这条指令去判断v0是不是0 如果v0等于0 也就是用户名和密码不相等 就跳转到:cond_0位置 执行登录失败 否则继续往下面执行
(3) 这里假设用户名输入正确了 程序往下继续执行 后面会进行同样的判断密码是不是相等 只有用户名和密码都是正确的 程序才不会跳转到:cond_0位置执行登录失败。
- 结合上面的分析,如果不让程序跳转到:cond_0位置 让程序每次在if-eqz v0, :cond_0这条关键指令上继续往下执行 是不是就可以执行登录成功代码了? 那怎么能让它不跳转呢?我们可以有三种思路:
(1) 程序有两个if-eqz 分别是用来判断用户名和密码是否正确的 我把这两个if-eqz都改成if-nez
(2) 直接把这两条指令删除掉
(3) 直接用goto语句直接一条指令让程序执行跳转登录成的代码 也是可以达到程序破解的目的.
自己添加goto语句
上面是1和3的操作方法,修改完了之后保存一下,然后编译成APK,安装到手机或者模拟器上测试是否成功。
原文链接:https://www.52pojie.cn/thread-650395-1-1.html