破解第一个Android程序

破解第一个Android程序

源程序分析

这里使用Android studio新建个登录框程序

然后使用Android Kiler对该程序进行反编译为smali文件

由于该程序只有登录功能,只需将用户输入的用户名和密码进行验证即登录成功。

我们来分析该check方法,smali代码如下:

可以看到该方法中有两个字符串型的参数,通过Dalvik字节码中的p命名法可以判断得出p1和p2。

将”hfdcxy”字符串赋值给v0寄存器,然后调用equals()函数将p1寄存器的值和v0寄存器的值作比较,返回boolean类型的值。这里的move-result v0即将返回的值赋值于v0。

这里if-eqz v0,:cond_0判断v0的值是否为0,若为0则执行跳转到cond_0处;否则继续执行下面的语句。

我们先来看看判断错误的情况下执行的语句,如下

继续对p2寄存器使用equals()方法进行比较判断是否为”1234”字符串,判断为假时则调用show()方法显示登录错误,为真则显示登录成功。

接下来分析;cond_0后面的语句,如下

当用户名不为指定字符串时,调用show()方法显示登录失败

源程序破解

根据上面的分析,不让程序跳转到;cond_0位置处,让程序一直执行下面的执行即可执行登录成功代码。如何修改代码实现跳转呢?这需要从if-eqz这个判断语句入手。

if-nez

将if-eqz修改为if-nez,实现相反判断来实现任意账号密码实现登录,若不修改其他语句的话输入正确的账号密码时提示登录失败

goto

在用户名比较语句后面直接使用goto跳转到登录成功

任意账号密码登录成功

直接删除

直接删除掉判断语句,使得语句执行达到登录成功。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 John Doe
  • 访问人数: | 浏览次数:

让我给大家分享喜悦吧!

微信