peterdocter 发表于 2014-12-22 16:49:37

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

本帖最后由 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,
.text:00000C66 A7 23 9B 00                     MOVS    R3, #0x29C
.text:00000C6A D3 58                           LDR   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大神给力补充{:5_121:}
((((taregtAddr-fromAddr)-4)>>1)AND (7FF)) + E000
-4是 ARM流水线的问题
AND (7FF))为什么要and 7FF呢
这个就得问高通为什么这么规定了记住就行了
这个公式屡试不爽相当于葵花宝典了你们赚到了

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

飞机 发表于 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
页: [1] 2
查看完整版本: 谷子我来踢馆了------------装B指令大神记录