Android逆向工程(mt管理器)——基础练习

smail语法

1. 通过E4A简单制作一个简单的登录验证APK

a. 首先做出这个设计界面,两个标签,两个编辑框,一个按钮

b. 对他们进行属性设置
c. 双击进入按钮被单击事件,编写代码

如果 编辑框1.内容="123" 且 编辑框2.内容="456" 则
		信息框("提示","登陆成功","确定")
		否则
		信息框("提示","登陆失败","确定")
结束 如果

语法相信知道易语言的对于这并不陌生,就用了如果这个判断

d. 接下来点击编译,点击后生成apk

这里我使用雷神模拟器进行安装

e. 尝试登录一下看看提示框有没有弹出来

随便输入用户名或者密码,会提示登陆失败,

我们正确的用户名是123,456,

我们用正确的用户名试试,登陆成功了,

尝试输入错误的账号密码

目前为止,登录程序是符合我的预期的,接下来我会通过mt管理器来对apk进行反编译

2. 通过mt管理器进行反编译

a. 通过安装好的应用来提取安装包

b. 查看安装包内容

c. 使用mt内置的dex编辑器++打开classes.dex

classes.dex文件里面会有大量的文件夹,我们要从这些文件里面找到自己需要的内容,少不了用到这里的搜索功能

d. 搜索关键词

之前我们进行登录测试的时候,输入错误的密码会弹出登录失败的文字提示,所以这里我们就搜索“登录失败”这个关键词来进行定位

这里因为我们只设置了一个登录失败的提示词,所以只找到了一个内容,正常的APP安装包里面会出现很多的内容,那时候就需要我们进行进一步的筛选了

点击以后直接定位到了我们需要的地方,我们来分析下这段smail语句

e. 分析语句

 .line 63  #第63行,这个为了便于记代码行数
iget-object v0, p0, Lcom/mobile/myapp/主窗口;->编辑框1:Lcom/e4a/runtime/components/impl/android/n2/编辑框;

invoke-interface {v0}, Lcom/e4a/runtime/components/impl/android/n2/编辑框;->内容()Ljava/lang/String;

move-result-object v0   #这三行是编辑框的具体操作,我们不用理会
 const-string v1, "123"  
 #定义一个字符串,定义v1=“123”.字符串型,类似的v0、v1、p0、p1之类的,不用去理会,可以把他当成一个名字
 move-result v0  #这里是一个判断等于不等于,这条语句需要记住,因为他经常参与到我们的解锁操作当中
 if-eqz v0, :cond_26  	#if是如果的意思,表示判断,这一行的意思是如果v0等于0,则跳转到cond_26。eqz是等于0的缩写。意思是判断出账号密码输入错误,跳转到登录失败的弹窗
 if-eqz v0, :cond_26 #这个和上面的语句一样,如果相等就跳转。否则继续往下执行

    const-string v0, "登陆成功"

    .line 64
    invoke-static {v2, v0, v1}, Lcom/e4a/runtime/对话框类;->信息框(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I    #调用对话框类

    goto :goto_2b

    :cond_26    #与上面的if相对应, if-eqz v0, :cond_26条件满足则跳转到这里,coud后面常跟字母或数字的组合,用来作为标记
    const-string v0, "登陆失败"

    .line 66
    invoke-static {v2, v0, v1}, Lcom/e4a/runtime/对话框类;->信息框(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I

    :goto_2b	#goto与cond类似,代表无条件跳转,即直接跳转到goto_2b所在的那一行
    return-void #返回

大致的内容就是这样,讲的可能不对,但大体意思都差不多接下来我们尝试破解

f. 开始破解

首先说一下思路,既然上面的判断条件说是等于0跳转,我们改成不等于0跳转试试,eqz是等于,nez是不等于,我们改一下试试

 if-nez v0, :cond_26

    iget-object v0, p0, Lcom/mobile/myapp/主窗口;->编辑框2:Lcom/e4a/runtime/components/impl/android/n2/编辑框;

    invoke-interface {v0}, Lcom/e4a/runtime/components/impl/android/n2/编辑框;->内容()Ljava/lang/String;

    move-result-object v0

    const-string v3, "456"

    invoke-virtual {v0, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

  if-nez v0, :cond_26 

    const-string v0, "登陆成功"

改完以后进行保存,一路返回,选择保存并退出

接下来再对安装包进行重新安装

可以看到我们输入了错误的密码一样弹出了登陆成功的提示,这说明我们的破解是成功的,但是这样又出现了一个新的问题,那就是我们的账号和密码不能有任何一个是正确的,不然就是登录失败,不知道大佬们有没有其他的方法呢?

PS:顺便贴上if条件跳转分支:

if-eq vA, vB, :cond_**  #如果vA等于vB则跳转到:cond_**
if-ne vA, vB, :cond_**  #如果vA不等于vB则跳转到:cond_**
if-lt vA, vB, :cond_**  #如果vA小于vB则跳转到:cond_**
if-ge vA, vB, :cond_**  #如果vA大于等于vB则跳转到:cond_**
if-gt vA, vB, :cond_**  #如果vA大于vB则跳转到:cond_**
if-le vA, vB, :cond_**  #如果vA小于等于vB则跳转到:cond_**
if-eqz vA, :cond_**     #如果vA等于0则跳转到:cond_**
if-nez vA, :cond_**     #如果vA不等于0则跳转到:cond_**
if-ltz vA, :cond_**     #如果vA小于0则跳转到:cond_**
if-gez vA, :cond_**     #如果vA大于等于0则跳转到:cond_**
if-gtz vA, :cond_**     #如果vA大于0则跳转到:cond_**
if-lez vA, :cond_**     #如果vA小于等于0则跳转到:cond_**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值