发新帖

谷子我来踢馆了------------装B指令大神记录

[复制链接]
55362 17
本帖最后由 peterdocter 于 2015-2-4 11:03 编辑

.text:00000C40                                   EXPORT Java_com_ggndktest1_JniGg_VipLevel
.text:00000C40                   Java_com_ggndktest1_JniGg_VipLevel
.text:00000C40 08 B5                             PUSH    {R3,LR}
.text:00000C42 02 2A                             CMP     R2, #2
.text:00000C44 0C D0                             BEQ     loc_C60 ---->(1)
.text:00000C46 03 2A                             CMP     R2, #3
.text:00000C48 04 D0                             BEQ     loc_C54 ---->(2)
.text:00000C4A 01 2A                             CMP     R2, #1
.text:00000C4C 05 D1                             BNE     loc_C5A ---->(3)
.text:00000C4E 08 49                             LDR     R1, =(aGoldVip - 0xC54)
.text:00000C50 79 44                             ADD     R1, PC          ; "Gold Vip"
.text:00000C52 07 E0                             B       loc_C64
.text:00000C54                   ; ---------------------------------------------------------------------------
.text:00000C54
.text:00000C54                   loc_C54                                 ; CODE XREF: Java_com_ggndktest1_JniGg_VipLevel+8j
.text:00000C54 07 49                             LDR     R1, =(aCopperVip - 0xC5A)
.text:00000C56 79 44                             ADD     R1, PC          ; "Copper Vip"
.text:00000C58 04 E0                             B       loc_C64
.text:00000C5A                   ; ---------------------------------------------------------------------------
.text:00000C5A
.text:00000C5A                   loc_C5A                                 ; CODE XREF: Java_com_ggndktest1_JniGg_VipLevel+Cj
.text:00000C5A 07 49                             LDR     R1, =(aNormalUser - 0xC60)
.text:00000C5C 79 44                             ADD     R1, PC          ; "Normal User"
.text:00000C5E 01 E0                             B       loc_C64
.text:00000C60                   ; ---------------------------------------------------------------------------
.text:00000C60
.text:00000C60                   loc_C60                                 ; CODE XREF: Java_com_ggndktest1_JniGg_VipLevel+4j
.text:00000C60 06 49                             LDR     R1, =(aSilveryVip - 0xC66)
.text:00000C62 79 44                             ADD     R1, PC          ; "Silvery Vip"
.text:00000C64
.text:00000C64                   loc_C64                                 ; CODE XREF: Java_com_ggndktest1_JniGg_VipLevel+12j
.text:00000C64                                                           ; Java_com_ggndktest1_JniGg_VipLevel+18j ...
.text:00000C64 02 68                             LDR     R2, [R0]
.text:00000C66 A7 23 9B 00                       MOVS    R3, #0x29C
.text:00000C6A D3 58                             LDR     R3, [R2,R3]
.text:00000C6C 98 47                             BLX     R3
.text:00000C6E 08 BD                             POP     {R3,PC}
.text:00000C6E                   ; End of function Java_com_ggndktest1_JniGg_VipLevel

之前都在整理手册,很久没有操作过刀了。。。
从上面分析得到三个跳转,都不是目标地方。。。
一般方法都是nop掉。。。
想一下为什么不直接飞到想要到达的目标了。。。
不是有一个装B指令吗?:lol
由于太久没有玩,都不知道是否有理解错。。。
现在也不知道以前实战装B记录那里去,就重写一份随便来踢一下谷子的馆。。。;P
BEQ 或 BNE
这里修改成反指令是可以但是如果在一个正常app中就有这样的问题,你会发现注册户反而失败。。。:D

B Thumb指令修改:
This differs from the Thumb instruction, because the offset in the ARM instruction is shifted left by 2 before
being added to the PC, whereas the offset in the Thumb instruction is shifted left by 1. Also, the PC values
read by the ARM and Thumb instructions are different.
PC = PC + (SignExtend(signed_immed_11) << 1)

B 指令
B(2)
B <target_address>
111 0 0
补码:
1110 0000
0xE0

偏移量=(目标地址-当前地址-4) >>1
offset=(C4E-C44-4)/2
offset=6/2
offset=0x3

B offset
E0 03
机器码(最后高低对调)
03 E0

效果已经实现了
.text:00000C44 03 E0                             B       loc_C4E

指令类别区别:
同样以B指令来说明吧。。。
thumb:
.text:00000C58 04 E0                             B       loc_C64
Arm32:
.text:00000CD4 56 00 00 EA                       B       loc_E34

本人比较喜欢让ida pro直接显示机器码出来,一看就知道当前是什么类别的指令。。。
定制ida pro
ida.cfg
OPCODE_BYTES            = 6   // don't display instruction/data bytes
反汇编文本模式显示

GRAPH_OPCODE_BYTES          = 6         // don't display instruction/data bytes
反汇编流程模式显示
如果不想显示就赋值为0

Allen大神给力补充
((((taregtAddr-fromAddr)-4)>>1)AND (7FF)) + E000
-4是 ARM流水线的问题
AND (7FF))为什么要and 7FF呢
这个就得问高通为什么这么规定了  记住就行了
这个公式屡试不爽  相当于葵花宝典了  你们赚到了

自己再补充一下:
不懂自己脑补
arm >>2
thumb >>1

已有1人评分 NB 荣获致谢 理由
ceshi999 + 1 + 1 很给力!

查看全部评分 总评分: NB +1  荣获致谢 +1 

举报 使用道具

回复

精彩评论17

飞机    发表于 2014-12-22 17:18:45 | 显示全部楼层
前排,打PP~

举报 使用道具

回复
默小坑    发表于 2014-12-22 17:24:58 来自手机  | 显示全部楼层
前排看打PP

举报 使用道具

回复 支持 反对
小白    发表于 2014-12-22 17:28:33 | 显示全部楼层
搬个板凳  看打PP

举报 使用道具

回复 支持 反对
szs6008    发表于 2014-12-22 20:19:11 | 显示全部楼层
打个地铺,看 看打PP

举报 使用道具

回复 支持 反对
海鸥    发表于 2014-12-23 00:35:26 来自手机  | 显示全部楼层
那就打PP吧

举报 使用道具

回复 支持 反对
JackIO    发表于 2014-12-24 09:51:32 | 显示全部楼层
拿个摄像机,录制打PP。

举报 使用道具

回复 支持 反对
chensi_123    发表于 2014-12-24 10:26:13 | 显示全部楼层
pp到底是谁,怎么这么惨

举报 使用道具

回复 支持 反对
737672679    发表于 2014-12-25 13:40:41 | 显示全部楼层
后排。 路过打PP

举报 使用道具

回复 支持 反对
荆轲刺秦琼    发表于 2014-12-29 15:24:56 | 显示全部楼层
我也来打PP

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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