傲世V雄哥720 发表于 2014-12-7 10:38

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

本帖最后由 傲世V雄哥720 于 2014-12-18 16:11 编辑

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

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


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


分支判断有2种跳转方法:
第一种在 低调的视频教程:安卓破解三部曲下中就是这种,
【1】:

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】:
goto :pswitch_2   
【这一种就是我那个帖子发的这一种。不让它判断。直接跳向成功】
packed——switch v0,:pswitch_data_0
发送取消!
:pswitch_2
成功!
:pswitch_3
失败!




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

第一种:示例【这也是最常见的一种,根据Dalvik指令来修改相反的判断:即可实现想要的结果】

    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来强制了。
    .line 85
    invoke-virtual {v0}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v2

    return-object v2




   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



图文教程:↓




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

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

到此。修改方法完毕。

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






神小白 发表于 2014-12-7 10:46

大神{:1_931:}膜拜

MMAKI 发表于 2014-12-7 12:47

感谢LZ分享

saifeizhang 发表于 2014-12-7 13:08

感谢分享 吾爱有你更精彩

小小莱 发表于 2014-12-10 09:05

谢谢分享。

血色罗裙 发表于 2014-12-10 12:25

厉害厉害

sndncel 发表于 2014-12-15 16:38

{:1_926:}真心学习了呀。。。。。

B6B6B6 发表于 2014-12-16 22:09

感谢分享!!!

相约一生 发表于 2014-12-18 15:16

感谢大神,无私分享!

linmoons 发表于 2014-12-23 01:57

学习学习
页: [1] 2
查看完整版本: 【Smali】分支判断和条件判断修改方法有几种!