0%

Android学习篇(二)

主要学习smali,通过实际上手修改smali代码加深理解。

JVM

JVM是Java虚拟机,运行Java字节码程序。

Dalvik

Dalvik是Google专门为Android设计的一个虚拟机,Dalvik有专属的文件执行格式dex(Dalvik executable)。

smali及其语法

smali是Dalvik的寄存器语言,smali代码是dex反编译而来的。可以把Dalvik理解成x86,那么smali就是x86汇编。在反编译的时候不能修改该java代码,只能修改smali代码。

jadx

分析apk的工具,可以理解为分析java的ida。

vip终结

任务是一键三连,但是他弹窗提醒需要充值大会员,直接在jadx中使用搜索功能,搜索大会员。直接定位到这段代码。

首先他会判断我们的硬币数量,在判断我们是不是vip,解决方法

  1. 进入这个方法之后直接goto到 ChallengeSecond challengeSecond2 = challengeSecond;
  2. 修改硬币和isvip的判断
  3. 修改寄存器中的值

通过修改判断

jadx不支持修改代码,要使用mt管理器,提取apk文件并定位,反编译dex文件,搜索硬币,点击进入

if-ge全称greater equal(a>=b),a大于或等于则跳,在mt里直接修改成if-le也就是小于等于即可,这样我们就会直接跳转到标签cood_15处,下面看isvip判断

1
if-eqz p0, :cond_43

如果p0等于0则跳转到cond_43处,而cood_43是提示请充值大会员的标签,所以我们可以选择直接注释掉这段代码,这样就不会发生跳转,或者讲逻辑改成不等于0.

保存并重新安装即可。

通过修改寄存器的值

p0是我们的硬币数量,v0被赋成了10,我们只需要将 const/16 v0, 0xa改成 const/16 v0, 0x0即可。下面跳转到isvip判断,长按点击跳转

逻辑是这样的

也就是返回0即假,直接const/4 v0,0x1即可

强制跳转

看一下goto的用法

直接照着葫芦画瓢

成功。