这里先补充两个smali指令 一个是if-eqz 另一个是if-nez 这两条指令是相对的
(1)if-eqz vA, vB, :cond_** 如果vA等于vB则跳转到:cond_**,可以看成boolean a = VA==VB,if-eqz a, :cond_** 当a为true,也就是VA等于VB,就执行cond_**,否则,就跳过cond_**,执行下一行代码
(2)if-nez vA, vB, :cond_** 如果vA不等于vB则跳转到:cond_**,同上,boolean a = VA!=VB, if-nez a,:cond_** 当a为true,也就是VA不等于VB,就执行cond_**,否则,就跳过cond_**,执行下一行代码
补充:v5为假,则说明用户名不对,所以弹出登录失败,v5为真,也就是用户名对了,就继续判断密码是否正确,密码不正确,也是弹出登录失败的对话框
破解方法:
破解之前强调一个问题 修改完smali代码后一定要ctrl+s保存 不然程序还是拿原来的smali代码编译
1.将上述的两个判断用户名与密码的判断,也就是if-eqz修改为if-nez,那么输入不对的账号名与密码就会跳过cond_0,相当于不弹出登录失败的对话框,直接往下执行,之后就是弹出登录成功的对话框
PS:如果输入的是原本的那个正确的用户名和密码,就会弹出登录失败
2.将这两个if-eqz删除掉,不管输入什么,即使是正确的账号名与密码均是弹出登录成功的对话框
3.利用goto语句,直接跳过这两个if-eqz
修改完之后,点击编译
之后就可以看到编译成功的提示,点击红色方框那行,就会跳转到资源管理器中
之后,就将该apk发给手机,在手机安装测试效果
这里提一下,还可以使用adb功能连接手机进行测试,或者连接到Android模拟器,将apk安装到模拟器中测试