吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14864|回复: 15
收起左侧

[Android 分享] 【Smali】分支判断和条件判断修改方法有几种!

  [复制链接]
傲世V雄哥720 发表于 2014-12-7 10:38
本帖最后由 傲世V雄哥720 于 2014-12-18 16:11 编辑

【原创】   【Smali】分支判断和条件判断修改方法有几种。

如题所示:
smali代码中,分支判断和条件判断的修改方法有哪几种。


1:分支跳转:
之前我发了个帖子,是改分支跳转的,这个修改方法就用到了实例。
传送门:
http://www.52pojie.cn/thread-306127-1-1.html


分支判断有2种跳转方法:
第一种在 低调的视频教程:安卓破解三部曲下中就是这种,
【1】:
[Asm] 纯文本查看 复制代码
packed——switch v0,:pswitch_data_0     【这句和条件判断跳转不同,分支跳转是一个接一个的。直到结束。通过return 返回出去。【goto就是直接让其跳转到目标、或者结果跳转到目标。】】
↓

【 ↑ 上面这句就是判断:如果没有任何动作(一般在付费的分钟代码里是无动作、所以代码为Cancel【购买取消】)就会跳转到这里 ↓ 】

Cancel             ----------------发送取消!
↑
:pswitch_5
return v7
:pswitch_27    
  【   ↑   :pswitch_27 这就是分支判断的标记。标记的跳转位置。和条件判断中的 实现 【:cond_X 】是一样的 !  ←  】
发送成功
---------Code
:pswitch_30
Code
:pswitch_44

goto :pswitch_27     ←← ←← ←←↑
【这个goto,是第一种分支修改方法 ↑ 失败往下走、goto无条件走向成功→标记处27.】
发送失败

【2】:
[Asm] 纯文本查看 复制代码
goto :pswitch_2    
【这一种就是我那个帖子发的这一种。不让它判断。直接跳向成功】
packed——switch v0,:pswitch_data_0  
发送取消!
:pswitch_2
成功!
:pswitch_3
失败!




上面的不是重点,今天要将的是,条件判断跳转有几种改法?
答案是2种。

第一种:示例【这也是最常见的一种,根据Dalvik指令来修改相反的判断:即可实现想要的结果】
[Asm] 纯文本查看 复制代码
    if-lt v1, v2, :cond_e                       
 【这一种,我们的修改方法就是;if-lt改为gt】

    .line 85
    invoke-virtual {v0}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v2

    return-object v2

    .line 82
    :cond_e
    aget-byte v2, p0, v1




第二种修改方法:New:
添加的代码是;
假如我们要让代码跳转到这段代码而不想改跳转,就可以使用goto来强制了。
[Asm] 纯文本查看 复制代码
    .line 85
    invoke-virtual {v0}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v2

    return-object v2




[Asm] 纯文本查看 复制代码
   goto:cond_1                【这个就是添加的代码。】

    if-lt v1, v2, :cond_e                       
    :cond_1
    .line 85
    invoke-virtual {v0}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v2

    return-object v2
    ----------------------------然后执行这段代码。完毕。这就达到了想要的结果了。

    .line 82
    如果想跳转到:cond_e  这里,就可以把:cond_1放到这里即可。

    :cond _1

    :cond_e
    aget-byte v2, p0, v1



图文教程:↓

图文教程.jpg


如上图。手机端修改。我们要这样改:goto :switch_X跳向:switch_X
【电脑端因为是反编译后的。所以格式不一样。】
看图中,修改保存后是不是跳向了该目标代码?
goto 的用法还有这种:

以上的4种方法中。分支有2种。条件判断有2种。各位可以按照个人喜好选择修改。也可以根据代码当前判断修改。

到此。修改方法完毕。

要学会灵活运用一些语句指令,就必须搞懂那些指令的意思,以及原理。跳转到这里实现了什么。






手机端改教程.png
截图3.jpg

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
smith_k + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

神小白 发表于 2014-12-7 10:46
大神{:1_931:}膜拜
MMAKI 发表于 2014-12-7 12:47 来自手机
saifeizhang 发表于 2014-12-7 13:08
小小莱 发表于 2014-12-10 09:05 来自手机
谢谢分享。
血色罗裙 发表于 2014-12-10 12:25
厉害厉害
sndncel 发表于 2014-12-15 16:38
真心学习了呀。。。。。
B6B6B6 发表于 2014-12-16 22:09 来自手机
感谢分享!!!
相约一生 发表于 2014-12-18 15:16
感谢大神,无私分享!
linmoons 发表于 2014-12-23 01:57
学习学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-9 03:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表