【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种。各位可以按照个人喜好选择修改。也可以根据代码当前判断修改。
到此。修改方法完毕。
要学会灵活运用一些语句指令,就必须搞懂那些指令的意思,以及原理。跳转到这里实现了什么。
大神{:1_931:}膜拜 感谢LZ分享 感谢分享 吾爱有你更精彩 谢谢分享。 厉害厉害 {:1_926:}真心学习了呀。。。。。 感谢分享!!! 感谢大神,无私分享! 学习学习
页:
[1]
2