安卓逆向学习

第一天

入门核心源码

页面自己随便设计个form表单登录即可
在这里插入图片描述

反编译后smali代码(部分截图)

在这里插入图片描述

  1. invoke-static 是类静态方法的调用,编译时,静态确定的;
  2. invoke-virtual 虚方法调用,调用的方法运行时确认实际调用,和实例引用的实际对象有关,动态确认的,一般是带有修饰符protected或public的方法;
  3. invoke-direct 没有被覆盖方法的调用,即不用动态根据实例所引用的调用,编译时,静态确认的,一般是private或方法;
  4. invoke-super 直接调用父类的虚方法,编译时,静态确认的。
  5. invokeinterface 调用接口方法,调用的方法运行时确认实际调用,即会在运行时才确定一个实现此接口的对象。
  6. 这里要补充两个smali指令 一个是if-eqz 另一个是if-nez 这两条指令是相对的
    if-eqz vA, vB, :cond_" 如果vA等于vB则跳转到:cond_
    if-nez vA, vB, :cond_" 如果vA不等于vB则跳转到:cond_

分析部分代码

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i7KmxKNx-1651756394532)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220505204331149.png)]

小总结

  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这条关键指令上继续往下执行 是不是就可以执行登录成功代码了? 那怎么能让它不跳转呢?

我现在有三种思路:
第一种 程序有两个if-eqz 分别是用来判断用户名和密码是否正确的 我把这两个if-eqz都改成if-nez

第二种 我直接把这两条指令删除掉

第三种也是最省事最懒的一种 我直接用goto语句直接一条指令让程序执行跳转登录成的代码 也是可以达到程序破解的目的 这里强调一个问题 修改完smali代码后一定要ctrl+s保存 不然程序还是拿原来的smali代码编译。

破解操作记录

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

闪退思路

有概率闪退看是否是没有加签名,以及APK壳之类得问题

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值