能力值:
( LV2,RANK:10 )
13 楼
整个反汇编代码很长现在贴出来
主要流程:
.text:0001C14C ; *************** S U B R O U T I N E ***************************************
.text:0001C14C
.text:0001C14C ; Attributes: bp-based frame
.text:0001C14C
.text:0001C14C sub_1C14C ; CODE XREF: 000156C8p
.text:0001C14C ; sub_1C268+88p
.text:0001C14C
.text:0001C14C var_20= -0x20
.text:0001C14C var_1C= -0x1C
.text:0001C14C var_18= -0x18
.text:0001C14C oldR4= -0x14
.text:0001C14C oldR5= -0x10
.text:0001C14C oldR11= -0xC
.text:0001C14C oldSP= -8
.text:0001C14C oldLR= -4
.text:0001C14C
.text:0001C14C MOV R12, SP
.text:0001C150 STMFD SP!, {R4,R5,R11,R12,LR}
.text:0001C154 ADD R11, SP, #0x14
.text:0001C158 SUB SP, SP, #0xC
.text:0001C15C MOV R4, R1 ; R4=R1,即R4=输入的注册码
.text:0001C160 MOV R0, R4 ; R0=R4
.text:0001C164 BL wcslen ; 获取输入的注册码长度赋给R0
.text:0001C164
.text:0001C168 CMP R0, #0x12 ; 输入的注册码长度是否为18,不是则跳走
.text:0001C16C BEQ loc_1C178 ; 输入的注册码长度为18则跳至此处
.text:0001C16C ; R0=R4,即R0=输入的注册码
.text:0001C16C
.text:0001C170
.text:0001C170 loc_1C170 ; CODE XREF: sub_1C14C+38j
.text:0001C170 MOV R4, #0
.text:0001C174 B loc_1C22C
.text:0001C174
.text:0001C178 ; ---------------------------------------------------------------------------
.text:0001C178
.text:0001C178 loc_1C178 ; CODE XREF: sub_1C14C+20j
.text:0001C178 MOV R0, R4 ; 输入的注册码长度为18则跳至此处
.text:0001C178 ; R0=R4,即R0=输入的注册码
.text:0001C17C BL sub_16FE8 ; 使[地址]BL=PC+4,并跳至sub_16FE8
.text:0001C17C
.text:0001C180 MOVS R5, R0 ; R5=R0,即R5为WideCharToMultiByte处理后的注册码
.text:0001C184 BEQ loc_1C170
.text:0001C184
.text:0001C188 STR R5, [R11,#var_1C] ; 将R5中的字数据写入以R11-0X1C为地址的存储器中
.text:0001C18C MOV R0, R5 ; R0=R5,即R0=处理后的注册码
.text:0001C190 BL sub_1C054 ; 使[地址]BL=PC+4,并跳至注册码处理转换过程
.text:0001C190
.text:0001C194 MOVS R4, R0 ; R4=R0,即R4=处理后的注册码
.text:0001C198 BNE loc_1C1AC ; 将R4中的字数据写入以R11-0X18为地址的存储器中
.text:0001C198
.text:0001C19C
.text:0001C19C loc_1C19C ; CODE XREF: sub_1C14C+88j
.text:0001C19C MOV R0, R5
.text:0001C1A0 BL operator delete[](void *)
.text:0001C1A0
.text:0001C1A4 MOV R4, #0
.text:0001C1A8 B loc_1C22C
.text:0001C1A8
.text:0001C1AC ; ---------------------------------------------------------------------------
.text:0001C1AC
.text:0001C1AC loc_1C1AC ; CODE XREF: sub_1C14C+4Cj
.text:0001C1AC STR R4, [R11,#var_18] ; 将R4中的字数据写入以R11-0X18为地址的存储器中
.text:0001C1B0 LDRB R1, [R4,#7] ; R1=R4数据后移7位的值
.text:0001C1B4 LDRB R2, [R4,#8] ; R1=R4数据后移8位的值
.text:0001C1B8 MOVL R3, 0xBB8 ;注册码后4位与0XBB8比较
.text:0001C1C0 ORR R0, R1, R2,LSL#8 ; R0=R1 ORR R2*2^8
.text:0001C1C4 CMP R0, R3 ; R0与R3比较
.text:0001C1C8 BLT loc_1C1D8 ; 小于则跳至loc_1C1D8
.text:0001C1C8
.text:0001C1CC MOV R0, R4
.text:0001C1D0 BL operator delete[](void *)
.text:0001C1D0
.text:0001C1D4 B loc_1C19C
.text:0001C1D4
.text:0001C1D8 ; ---------------------------------------------------------------------------
.text:0001C1D8
.text:0001C1D8 loc_1C1D8 ; CODE XREF: sub_1C14C+7Cj
.text:0001C1D8 LDR R1, =loc_236C0
.text:0001C1DC MOV R3, #7 ; R3=7
.text:0001C1E0 MOV R2, R4 ; R2=R4
.text:0001C1E4 LDR LR, [R1,R0,LSL#2] ; LR=R1+R0*2^2,R1=R1+R0*2^2
.text:0001C1E8 MOV R1, #4 ; R1=4
.text:0001C1EC SUB R0, R11, #0x20 ; R0=R11-0X20
.text:0001C1F0 STR LR, [R11,#var_20]
.text:0001C1F4 BL sub_1E1CC ; 进入密文计算过程
.text:0001C1F4
.text:0001C1F8 LDR R2, =0x4C12F0
.text:0001C1FC LDR R3, [R11,#var_20] ; 密文赋给R3
.text:0001C200 CMP R3, R2 ; 判断密文是否正确
.text:0001C204 BEQ loc_1C218
.text:0001C204
.text:0001C208 MOV R0, R4
.text:0001C20C BL operator delete[](void *)
.text:0001C20C
.text:0001C210 MOV R4, #0
.text:0001C214 B loc_1C224
.text:0001C214
.text:0001C218 ; ---------------------------------------------------------------------------
.text:0001C218
.text:0001C218 loc_1C218 ; CODE XREF: sub_1C14C+B8j
.text:0001C218 MOV R0, R4
.text:0001C21C BL operator delete[](void *)
.text:0001C21C
.text:0001C220 MOV R4, #1
.text:0001C220
.text:0001C224
.text:0001C224 loc_1C224 ; CODE XREF: sub_1C14C+C8j
.text:0001C224 MOV R0, R5
.text:0001C228 BL operator delete[](void *)
.text:0001C228
.text:0001C22C
.text:0001C22C loc_1C22C ; CODE XREF: sub_1C14C+28j
.text:0001C22C ; sub_1C14C+5Cj
.text:0001C22C MOV R0, R4
.text:0001C230 SUB SP, R11, #0x14
.text:0001C234 LDMFD SP, {R4,R5,R11,SP,PC}
.text:0001C234
.text:0001C234 ; End of function sub_1C14C
注册码处理转换过程:
.text:0001C054 ; *************** S U B R O U T I N E ***************************************
.text:0001C054
.text:0001C054
.text:0001C054 sub_1C054 ; CODE XREF: sub_1C14C+44p
.text:0001C054 STMFD SP!, {R4-R9,LR}
.text:0001C058 MOV R8, R0 ; R8=R0,即R8=处理后的注册码
.text:0001C05C BL strlen ; 使[地址]BL=PC+4,并调用strlen函数。R0=处理后的注册码长度
.text:0001C05C
.text:0001C060 MOV R5, R0 ; R5=R0,即R5=处理后的注册码长度
.text:0001C064 ADD R3, R5, R5,LSR#31 ; R3=R5+(R5 >> 31)=R5
.text:0001C068 MOV R9, R3,ASR#1 ; R9=R3 > 1(R3=10010,R3>1=01001)
.text:0001C06C SUBS R3, R5, R9,LSL#1 ; R3=R5-(R9<<1)
.text:0001C070 MOV R4, #0 ; R4=0
.text:0001C074 BNE loc_1C130
.text:0001C074
.text:0001C078 CMP R5, #0 ; R5与0比较
.text:0001C07C BLE loc_1C0A0 ; 小于等于则跳至loc_1C0A0
.text:0001C07C
.text:0001C080
.text:0001C080 loc_1C080 ; CODE XREF: sub_1C054+48j
.text:0001C080 LDRSB R0, [R8] ; 判断输入的注册码各位是否合法
.text:0001C080 ; R0=当前数字的ASCII值
.text:0001C084 MOV R1, #0x80 ; R1=0X80
.text:0001C088 BL _isctype ; 如果为整数,则R0=R1
.text:0001C088
.text:0001C08C CMP R0, #0
.text:0001C090 BEQ loc_1C138
.text:0001C090
.text:0001C094 ADD R4, R4, #1 ; R4=R4+1
.text:0001C098 CMP R4, R5 ; R4与R5的值比较,即与注册码长度比较
.text:0001C09C BLT loc_1C080 ; 小于则跳至loc_1C080
.text:0001C09C
.text:0001C0A0
.text:0001C0A0 loc_1C0A0 ; CODE XREF: sub_1C054+28j
.text:0001C0A0 MOV R0, R9 ; R0=R9
.text:0001C0A4 BL operator new[](uint) ; 申请内存
.text:0001C0A4
.text:0001C0A8 MOV R4, R0 ; R4=R0
.text:0001C0AC MOV R7, #0 ; R7=0
.text:0001C0B0 CMP R9, #0 ; R9的值与0比较,再次确认注册码长度有效
.text:0001C0B4 BLE loc_1C130 ; 小于等于则跳至loc_1C130
.text:0001C0B4
.text:0001C0B8
.text:0001C0B8 loc_1C0B8 ; CODE XREF: sub_1C054+D8j
.text:0001C0B8 LDRB R5, [R8] ; 注册码验证
.text:0001C0B8 ; 将当前位置注册码的ASCII赋值给R5
.text:0001C0BC MOV R1, #1 ; R1=1
.text:0001C0C0 MOV R0, R5 ; R0=R5
.text:0001C0C4 BL _isctype ; 判断是否是大写字母,是则R0=R1
.text:0001C0C4
.text:0001C0C8 CMP R0, #0 ; R0与0比较
.text:0001C0CC BEQ loc_1C0DC ; 相等则跳至loc_1C0DC
.text:0001C0CC
.text:0001C0D0 MOV R0, R5
.text:0001C0D4 BL tolower
.text:0001C0D4
.text:0001C0D8 MOV R5, R0
.text:0001C0D8
.text:0001C0DC
.text:0001C0DC loc_1C0DC ; CODE XREF: sub_1C054+78j
.text:0001C0DC SUB R6, R5, #0x30 ; R6=R5-0X30
.text:0001C0E0 CMP R6, #9 ; R6的值与9比较
.text:0001C0E4 SUBHI R6, R5, #0x57 ; 大于则执行操作R6=R5-0X57
.text:0001C0E8 LDRB R5, [R8,#1] ; R5=当前注册码位置后一位字符的ASCII
.text:0001C0EC MOV R1, #1 ; R1=1
.text:0001C0F0 MOV R0, R5 ; R0=R5
.text:0001C0F4 BL _isctype ; 判断是否是大写字母,是则R0=R1
.text:0001C0F4
.text:0001C0F8 CMP R0, #0 ; R0与0比较
.text:0001C0FC BEQ loc_1C10C ; 相等则跳至loc_1C10C
.text:0001C0FC
.text:0001C100 MOV R0, R5
.text:0001C104 BL tolower
.text:0001C104
.text:0001C108 MOV R5, R0
.text:0001C108
.text:0001C10C
.text:0001C10C loc_1C10C ; CODE XREF: sub_1C054+A8j
.text:0001C10C SUB R3, R5, #0x30 ; R3=R5-0X30
.text:0001C110 CMP R3, #9 ; R3的值与9比较
.text:0001C114 SUBHI R3, R5, #0x57 ; 大于则执行操作R3=R5-0X57
.text:0001C118 ADD R3, R3, R6,LSL#4 ; R3=R3+(R6<<4)
.text:0001C11C STRB R3, [R7,R4] ; 将寄存器R3中的字节数据写入以R7+R4为地址的存储器中
.text:0001C120 ADD R7, R7, #1 ; R7=R7+1
.text:0001C124 CMP R7, R9 ; R7与R9比较
.text:0001C128 ADD R8, R8, #2 ; R8=R8+2
.text:0001C12C BLT loc_1C0B8 ; 注册码验证
.text:0001C12C ; 将当前位置注册码的ASCII赋值给R5
.text:0001C12C
.text:0001C130
.text:0001C130 loc_1C130 ; CODE XREF: sub_1C054+20j
.text:0001C130 ; sub_1C054+60j
.text:0001C130 MOV R0, R4
.text:0001C134 LDMFD SP!, {R4-R9,PC}
.text:0001C134
.text:0001C138 ; ---------------------------------------------------------------------------
.text:0001C138
.text:0001C138 loc_1C138 ; CODE XREF: sub_1C054+3Cj
.text:0001C138 MOV R4, #0
.text:0001C13C MOV R0, R4
.text:0001C140 LDMFD SP!, {R4-R9,PC}
.text:0001C140
.text:0001C140 ; End of function sub_1C054
中间过程
.text:0001E1CC sub_1E1CC
.text:0001E1CC
.text:0001E1CC var_114= -0x114
.text:0001E1CC var_10= -0x10
.text:0001E1CC
.text:0001E1CC STMFD SP!, {R4,R5,LR}
.text:0001E1D0 SUB SP, SP, #0x108 ; SP=SP-0X100
.text:0001E1D4 MOV R4, R1 ; R4=R1
.text:0001E1D8 MOV R5, R0 ; R5=R0
.text:0001E1DC LDR LR, =loc_236B8
.text:0001E1E0 LDR LR, [LR]
.text:0001E1E4 STR LR, [SP,#0x114+var_10]
.text:0001E1E8 MOV R0, R2 ; R0=R2
.text:0001E1EC ADD R2, SP, #0x114+var_114
.text:0001E1F0 MOV R1, R3 ; R1=R3
.text:0001E1F4 BL sub_1E028 ;密文计算参数表过程
.text:0001E1F8 ADD R2, SP, #0x114+var_114 ; R2=SP
.text:0001E1FC MOV R1, R4 ; R1=R4
.text:0001E200 MOV R0, R5 ; R0=R5
.text:0001E204 BL sub_1E0F4 ;密文计算过程
.text:0001E208 LDR R0, [SP,#0x114+var_10]
.text:0001E20C BL sub_1B710
.text:0001E210 ADD SP, SP, #0x108
.text:0001E214 LDMFD SP!, {R4,R5,PC}
.text:0001E214 ; End of function sub_1
密文计算参数表过程,参数表长256
.text:0001E028 ; *************** S U B R O U T I N E ***************************************
.text:0001E028
.text:0001E028
.text:0001E028 sub_1E028 ; CODE XREF: sub_1E1CC+28p
.text:0001E028
.text:0001E028 var_28= -0x28
.text:0001E028
.text:0001E028 STMFD SP!, {R4-R11,LR}
.text:0001E02C SUB SP, SP, #4
.text:0001E030 MOV R11, R1
.text:0001E034 MOV R1, R0 ; R1=R0,即R1=处理后的注册码
.text:0001E038 STR R1, [SP,#0x28+var_28] ; SP的值=R1
.text:0001E03C MOV R7, R2 ; R7=R2
.text:0001E040 MOV LR, #0 ; LR=0
.text:0001E044 MOV R2, #0 ; R2=0
.text:0001E044
.text:0001E048
.text:0001E048 loc_1E048 ; CODE XREF: sub_1E028+38j
.text:0001E048 ADD R3, R2, #1 ; R3=R2+1
.text:0001E04C STRB LR, [R2,R7] ; 将寄存器LR中的字节数据写入以R2+R7为地址的存储器中
.text:0001E050 MOV LR, R3,LSL#16 ; LR=R3<<16
.text:0001E054 MOV LR, LR,ASR#16 ; LR=LR>16
.text:0001E058 MOV R2, LR ; R2=LR
.text:0001E05C CMP LR, #0x100 ; LR与0X100比较
.text:0001E060 BLT loc_1E048 ; 小于则循环
.text:0001E060
.text:0001E064 MOV R3, #0
.text:0001E068 LDR R8, =__rt_sdiv
.text:0001E06C STRB R3, [R7,#0x100]
.text:0001E070 STRB R3, [R7,#0x101]
.text:0001E074 MOV LR, #0 ; LR=0
.text:0001E078 MOV R10, #0 ; R10=0
.text:0001E07C MOV R9, #0 ; R9=0
.text:0001E07C
.text:0001E080
.text:0001E080 loc_1E080 ; CODE XREF: sub_1E028+BCj
.text:0001E080 MOV R6, R9 ; R6=R9
.text:0001E084 LDRB R2, [R6,R7]! ; 将存储器地址为R6+R7的字节数据读入寄存器R2,并将R2的高 24 位清零。
.text:0001E088 LDRB R3, [LR,R1] ; 将存储器地址为LR+R1的字节数据读入寄存器R3,并将R3的高 24 位清零。
.text:0001E08C ADD R1, LR, #1 ; R1=LR+1
.text:0001E090 MOV R0, R11 ; R0=R11
.text:0001E094 ADD R3, R3, R2 ; R3=R3+R2
.text:0001E098 ADD R2, R3, R10 ; R2=R3+R10
.text:0001E09C MOVS R3, R2 ; R3=R2
.text:0001E0A0 ADDMI R3, R3, #0xFF
.text:0001E0A4 MOV R3, R3,ASR#8 ; R3=R3>8
.text:0001E0A8 SUB R3, R2, R3,LSL#8 ; R3=R2-R3*2^8
.text:0001E0AC AND R10, R3, #0xFF ; R10=R3+0XFF
.text:0001E0B0 MOV R4, R10 ; R4=R10
.text:0001E0B4 LDRB R3, [R4,R7]! ; R4=R4+R7;R3=[R4]并将R3高24位清零
.text:0001E0B8 LDRB R2, [R6]
.text:0001E0BC STRB R3, [R6]
.text:0001E0C0 STRB R2, [R4]
.text:0001E0C4 MOV LR, PC ; LR=PC
.text:0001E0C8 LDR PC, [R8]
.text:0001E0CC ADD R3, R9, #1 ; R3=R9+1
.text:0001E0D0 MOV R9, R3,LSL#16 ; R9=R3*2^16
.text:0001E0D4 MOV R9, R9,ASR#16 ; R9=R9>16
.text:0001E0D8 AND LR, R1, #0xFF ; LR=R1+0XFF
.text:0001E0DC LDR R1, [SP,#0x28+var_28]
.text:0001E0E0 CMP R9, #0x100 ; R9与0X100比较
.text:0001E0E4 BLT loc_1E080 ; R6=R9
.text:0001E0E4
.text:0001E0E8 ADD SP, SP, #4 ; SP=SP+4
.text:0001E0EC LDMFD SP!, {R4-R11,PC}
.text:0001E0EC
.text:0001E0EC ; End of function sub_1E028
.text:0001E0EC
.text:0001E0EC ; ---------------------------------------------------------------------------
.text:0001E0F0 off_1E0F0 DCD __rt_sdiv ; DATA XREF: sub_1E028+40r
.text:0001E0F4
.text:0001E0F4 ; *************** S U B R O U T I N E ***************************************
.text:0001E0F4
.text:0001E0F4
.text:0001E0F4 sub_1E0F4 ; CODE XREF: sub_1E1CC+38p
.text:0001E0F4 STMFD SP!, {R4-R11,LR}
.text:0001E0F8 MOV R6, R2
.text:0001E0FC MOV R8, R1
.text:0001E100 MOV R9, R0
.text:0001E104 LDRB R7, [R6,#0x100]
.text:0001E108 LDRB LR, [R6,#0x101]
.text:0001E10C CMP R8, #0
.text:0001E110 BLE loc_1E1B8
.text:0001E110
.text:0001E114 MOV R11, R7
.text:0001E118 MOV R2, LR
.text:0001E11C MOV R10, #0
.text:0001E11C
.text:0001E120
.text:0001E120 loc_1E120 ; CODE XREF: sub_1E0F4+C0j
.text:0001E120 ADD LR, R11, #1 ; LR=R11+1
.text:0001E124 MOVS R3, LR ; R3=LR
.text:0001E128 ADDMI R3, R3, #0xFF
.text:0001E12C MOV R3, R3,ASR#8 ; R3=R3>8
.text:0001E130 SUB R3, LR, R3,LSL#8 ; R3=LR-R3<<8
.text:0001E134 AND R7, R3, #0xFF
.text:0001E138 MOV R4, R7 ; R4=R7
.text:0001E13C LDRB LR, [R4,R6]!
.text:0001E140 ADD R3, R10, #1 ; R3=R10+1
.text:0001E144 MOV R5, R10 ; R5=R10
.text:0001E148 MOV R10, R3,LSL#16 ; R10=R3<<16
.text:0001E14C ADD R2, LR, R2 ; R2=LR+R2
.text:0001E150 MOVS R3, R2 ; R3=R2
.text:0001E154 ADDMI R3, R3, #0xFF
.text:0001E158 MOV R3, R3,ASR#8 ; R3=R3>8
.text:0001E15C SUB R3, R2, R3,LSL#8 ; R3=R2-R3<<8
.text:0001E160 AND LR, R3, #0xFF
.text:0001E164 LDRB R3, [LR,R6]
.text:0001E168 LDRB R2, [R4]
.text:0001E16C MOV R10, R10,ASR#16 ; R10=R10>16
.text:0001E170 STRB R3, [R4]
.text:0001E174 STRB R2, [LR,R6]
.text:0001E178 AND R2, R2, #0xFF
.text:0001E17C MOVS R3, R2 ; R3=R2
.text:0001E180 ADDMI R3, R3, #0xFF
.text:0001E184 LDRB R1, [R4]
.text:0001E188 MOV R3, R3,ASR#8 ; R3=R3>8
.text:0001E18C SUB R3, R2, R3,LSL#8 ; R3=R2-R3<<8
.text:0001E190 ADD R3, R3, R1 ; R3=R3+R1
.text:0001E194 LDRB R0, [R5,R9]!
.text:0001E198 AND R3, R3, #0xFF
.text:0001E19C LDRB R3, [R3,R6]
.text:0001E1A0 MOV R11, R7 ; R11=R7
.text:0001E1A4 MOV R2, LR ; R2=LR
.text:0001E1A8 EOR R3, R3, R0 ; R3=R3 EOR R0
.text:0001E1AC STRB R3, [R5]
.text:0001E1B0 CMP R10, R8
.text:0001E1B4 BLT loc_1E120 ; LR=R11+1
.text:0001E1B4
.text:0001E1B8
.text:0001E1B8 loc_1E1B8 ; CODE XREF: sub_1E0F4+1Cj
.text:0001E1B8 STRB R7, [R6,#0x100]
.text:0001E1BC STRB LR, [R6,#0x101]
.text:0001E1C0 LDMFD SP!, {R4-R11,PC}
.text:0001E1C0
.text:0001E1C0 ; End of function sub_1E0F4
.text:0001E1C0
.text:0001E1C0 ; ---------------------------------------------------------------------------
.text:0001E1C4 DCD sub_1D840
.text:0001E1C8 DCD loc_22834
.text:0001E1CC
.text:0001E1CC ; *************** S U B R O U T I N E ***************************************
.text:0001E1CC
.text:0001E1CC
.text:0001E1CC sub_1E1CC ; CODE XREF: sub_19A98+39Cp
.text:0001E1CC ; sub_1A4C0+620p
.text:0001E1CC ; sub_1A4C0+6C8p
.text:0001E1CC ; sub_1BB28+48p
.text:0001E1CC ; sub_1BD18+7Cp
.text:0001E1CC ; sub_1BD18+98p ...
.text:0001E1CC
.text:0001E1CC var_114= -0x114
.text:0001E1CC var_10= -0x10
.text:0001E1CC
.text:0001E1CC STMFD SP!, {R4,R5,LR}
.text:0001E1D0 SUB SP, SP, #0x108 ; SP=SP-0X100
.text:0001E1D4 MOV R4, R1 ; R4=R1
.text:0001E1D8 MOV R5, R0 ; R5=R0
.text:0001E1DC LDR LR, =loc_236B8
.text:0001E1E0 LDR LR, [LR]
.text:0001E1E4 STR LR, [SP,#0x114+var_10]
.text:0001E1E8 MOV R0, R2 ; R0=R2
.text:0001E1EC ADD R2, SP, #0x114+var_114
.text:0001E1F0 MOV R1, R3 ; R1=R3
.text:0001E1F4 BL sub_1E028
.text:0001E1F4
.text:0001E1F8 ADD R2, SP, #0x114+var_114 ; R2=SP
.text:0001E1FC MOV R1, R4 ; R1=R4
.text:0001E200 MOV R0, R5 ; R0=R5
.text:0001E204 BL sub_1E0F4
.text:0001E204
.text:0001E208 LDR R0, [SP,#0x114+var_10]
.text:0001E20C BL sub_1B710
.text:0001E20C
.text:0001E210 ADD SP, SP, #0x108
.text:0001E214 LDMFD SP!, {R4,R5,PC}
.text:0001E214
.text:0001E214 ; End of function sub_1E1CC
.text:0001E214
.text:0001E214 ; ---------------------------------------------------------------------------
.text:0001E218 off_1E218 DCD loc_236B8 ; DATA XREF: sub_1E1CC+10r
.text:0001E21C
.text:0001E21C ; *************** S U B R O U T I N E ***************************************
.text:0001E21C
.text:0001E21C
.text:0001E21C sub_1E21C ; CODE XREF: 0001DAF4p
.text:0001E21C LDR R3, =off_22614
.text:0001E220 MOVL R2, 0xFFFFFFFF
.text:0001E224 MOV R1, #0
.text:0001E228 STR R3, [R0]
.text:0001E22C STR R2, [R0,#4]
.text:0001E230 STR R1, [R0,#8]
.text:0001E234 RET
.text:0001E234
.text:0001E234 ; End of function sub_1E21C
密文计算过程
.text:0001E0F4 ; *************** S U B R O U T I N E ***************************************
.text:0001E0F4
.text:0001E0F4
.text:0001E0F4 sub_1E0F4 ; CODE XREF: sub_1E1CC+38p
.text:0001E0F4 STMFD SP!, {R4-R11,LR}
.text:0001E0F8 MOV R6, R2
.text:0001E0FC MOV R8, R1
.text:0001E100 MOV R9, R0
.text:0001E104 LDRB R7, [R6,#0x100]
.text:0001E108 LDRB LR, [R6,#0x101]
.text:0001E10C CMP R8, #0
.text:0001E110 BLE loc_1E1B8
.text:0001E110
.text:0001E114 MOV R11, R7
.text:0001E118 MOV R2, LR
.text:0001E11C MOV R10, #0
.text:0001E11C
.text:0001E120
.text:0001E120 loc_1E120 ; CODE XREF: sub_1E0F4+C0j
.text:0001E120 ADD LR, R11, #1 ; LR=R11+1
.text:0001E124 MOVS R3, LR ; R3=LR
.text:0001E128 ADDMI R3, R3, #0xFF
.text:0001E12C MOV R3, R3,ASR#8 ; R3=R3>8
.text:0001E130 SUB R3, LR, R3,LSL#8 ; R3=LR-R3<<8
.text:0001E134 AND R7, R3, #0xFF
.text:0001E138 MOV R4, R7 ; R4=R7
.text:0001E13C LDRB LR, [R4,R6]!
.text:0001E140 ADD R3, R10, #1 ; R3=R10+1
.text:0001E144 MOV R5, R10 ; R5=R10
.text:0001E148 MOV R10, R3,LSL#16 ; R10=R3<<16
.text:0001E14C ADD R2, LR, R2 ; R2=LR+R2
.text:0001E150 MOVS R3, R2 ; R3=R2
.text:0001E154 ADDMI R3, R3, #0xFF
.text:0001E158 MOV R3, R3,ASR#8 ; R3=R3>8
.text:0001E15C SUB R3, R2, R3,LSL#8 ; R3=R2-R3<<8
.text:0001E160 AND LR, R3, #0xFF
.text:0001E164 LDRB R3, [LR,R6]
.text:0001E168 LDRB R2, [R4]
.text:0001E16C MOV R10, R10,ASR#16 ; R10=R10>16
.text:0001E170 STRB R3, [R4]
.text:0001E174 STRB R2, [LR,R6]
.text:0001E178 AND R2, R2, #0xFF
.text:0001E17C MOVS R3, R2 ; R3=R2
.text:0001E180 ADDMI R3, R3, #0xFF
.text:0001E184 LDRB R1, [R4]
.text:0001E188 MOV R3, R3,ASR#8 ; R3=R3>8
.text:0001E18C SUB R3, R2, R3,LSL#8 ; R3=R2-R3<<8
.text:0001E190 ADD R3, R3, R1 ; R3=R3+R1
.text:0001E194 LDRB R0, [R5,R9]!
.text:0001E198 AND R3, R3, #0xFF
.text:0001E19C LDRB R3, [R3,R6]
.text:0001E1A0 MOV R11, R7 ; R11=R7
.text:0001E1A4 MOV R2, LR ; R2=LR
.text:0001E1A8 EOR R3, R3, R0 ; R3=R3 EOR R0
.text:0001E1AC STRB R3, [R5]
.text:0001E1B0 CMP R10, R8
.text:0001E1B4 BLT loc_1E120 ; LR=R11+1
.text:0001E1B4
.text:0001E1B8
.text:0001E1B8 loc_1E1B8 ; CODE XREF: sub_1E0F4+1Cj
.text:0001E1B8 STRB R7, [R6,#0x100]
.text:0001E1BC STRB LR, [R6,#0x101]
.text:0001E1C0 LDMFD SP!, {R4-R11,PC}
.text:0001E1C0
.text:0001E1C0 ; End of function sub_1E0F4