好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 pasiwa 于 2014-5-29 11:33 编辑
这段代码主要是进行MD5加密处理,中间进行了3次MD5,并且中间加上了相应的字符进行MD5.
这个函数输入一个任意长的字符串,输出10位长的字符串
中间的代码是怎么运行的?拼接了什么字符串反复MD5???为什么返回是长度10的字符串!
本人新手!谢谢!
[Asm] 纯文本查看 复制代码
var_104= -0x104
var_A0= -0xA0
var_48= -0x48
var_34= -0x34
var_2C= -0x2C
var_28= -0x28
STMFD SP!, {R4-R11,LR}
LDR R8, =(_GLOBAL_OFFSET_TABLE_ - 0x2B34)
LDR R11, =(__stack_chk_guard_ptr - 0xA104)
SUB SP, SP, #0xE4
ADD R8, PC, R8
LDR R3, [R8,R11]
ADD R4, SP, #0x108+var_A0
MOV R6, R2
LDR R3, [R3]
MOV R10, R0
MOV R0, R4
STR R3, [SP,#0x108+var_2C]
BL MD5Init
LDR R3, [R10]
MOV R1, R6
MOV R2, #0
MOV R0, R10
MOV LR, PC
LDR PC, [R3,#0x2A4]
LDR R1, =(off_9688 - 0x2B80)
MOV R6, R0
MOV R2, #2
MOV R0, R4
ADD R1, PC, R1
BL MD5Update
MOV R0, R6 ; s
BL strlen
MOV R1, R6
MOV R2, R0
MOV R0, R4
BL MD5Update
LDR R1, =(off_9690 - 0x2BB0)
ADD R5, SP, #0x108+var_48
MOV R2, #2
MOV R0, R4
ADD R1, PC, R1
BL MD5Update
ADD R9, SP, #0x108+var_104
MOV R0, R4
MOV R1, R5
BL MD5Final
MOV R0, R9 ; s
MOV R1, #0 ; c
MOV R2, #0x64 ; n
BL memset
LDR R6, =(a02x - 0x2BE8)
ADD R7, R5, #9
MOV R4, R9
SUB R5, R5, #1
ADD R6, PC, R6 ; "%02x"
下面是IDA的相关代码,不知道有用吗?
[Asm] 纯文本查看 复制代码 loc_2BE4
LDRB R2, [R5,#1]!
MOV R0, R4 ; s
MOV R1, R6 ; format
BL sprintf
CMP R5, R7
ADD R4, R4, #2
BNE loc_2BE4
[Asm] 纯文本查看 复制代码 MOV R12, #0
ADD R3, SP, #0x108+var_34
STR R12, [R3],#4
ADD R4, SP, #0x108+var_28
STR R12, [R4,#-0x10]!
STRH R12, [R3],#2
MOV R2, #0xA ; n
STRB R12, [R3]
ADD R1, R9, #5 ; src
MOV R0, R4 ; dest
BL strncpy
LDR R3, [R10]
MOV R0, R10
MOV R1, R4
MOV LR, PC
LDR PC, [R3,#0x29C]
LDR R3, [R8,R11]
LDR R2, [SP,#0x108+var_2C]
LDR R3, [R3]
CMP R2, R3
BNE loc_2C5C
[Asm] 纯文本查看 复制代码 ADD SP, SP, #0xE4
LDMFD SP!, {R4-R11,PC}
[Asm] 纯文本查看 复制代码 loc_2C5C
BL __stack_chk_fail
|
|