小端序,英文名little endian
在ida f5查看伪代码后,如果看到
_DWORD v4[7];
v4[0] = 0xD6C0B67;
v4[1] = 0x175F4078;
v4[2] = 0x3302058;
v4[3] = 0x725D1244;
v4[4] = 0x2E1F3441;
v4[5] = 0x6847404D;
v4[6] = 0x1B;
注意最开始的数据类型,这个数组不光要按照4字节左侧补零对齐,还要将每一组数据翻转拼接才能得到正确的字符串。ida并没有非常智能地帮你捋顺字符串,所以初学的话非常有迷惑性。
例如
v4[2] = 0x3302058;
应为0x03302058-->0x58,0x20,0x30,0x03
这道题后面还涉及前一位和后一位异或,如果字符串的顺序没整对,你离答案就越来越远了。
碰到字符串别偷懒,看汇编捋字符串
MOV R3, #0x67 ; 'g'
STRB R3, [R11,#var_4C]
MOV R3, #0xB
STRB R3, [R11,#var_4B]
MOV R3, #0x6C ; 'l'
STRB R3, [R11,#var_4A]
MOV R3, #0xD
STRB R3, [R11,#var_49]
MOV R3, #0x78 ; 'x'
STRB R3, [R11,#var_48]
MOV R3, #0x40 ; '@'
STRB R3, [R11,#var_47]
MOV R3, #0x5F ; '_'
STRB R3, [R11,#var_46]
MOV R3, #0x17
STRB R3, [R11,#var_45]
MOV R3, #0x58 ; 'X'
STRB R3, [R11,#var_44]
MOV R3, #0x20 ; ' '
STRB R3, [R11,#var_43]
MOV R3, #0x30 ; '0'
STRB R3, [R11,#var_42]
MOV R3, #3
STRB R3, [R11,#var_41]
MOV R3, #0x44 ; 'D'
STRB R3, [R11,#var_40]
MOV R3, #0x12
STRB R3, [R11,#var_3F]
MOV R3, #0x5D ; ']'
STRB R3, [R11,#var_3E]
MOV R3, #0x72 ; 'r'
STRB R3, [R11,#var_3D]
MOV R3, #0x41 ; 'A'
STRB R3, [R11,#var_3C]
MOV R3, #0x34 ; '4'
STRB R3, [R11,#var_3B]
MOV R3, #0x1F
STRB R3, [R11,#var_3A]
MOV R3, #0x2E ; '.'
STRB R3, [R11,#var_39]
MOV R3, #0x4D ; 'M'
STRB R3, [R11,#var_38]
MOV R3, #0x40 ; '@'
STRB R3, [R11,#var_37]
MOV R3, #0x47 ; 'G'
STRB R3, [R11,#var_36]
MOV R3, #0x68 ; 'h'
STRB R3, [R11,#var_35]
MOV R3, #0x1B
STRB R3, [R11,#var_34]