-
-
[原创][CTF.TSRC 2018]第二题-半加器(速解)
-
发表于: 2018-12-3 23:23 2855
-
一种极速解法。所用工具:IDA,windbg.
0.0. windbg载入,lm获得base address;IDA rebase至相同地址,方便对比分析。
0.1. 任意输入,提示"输入错误"。IDA载入,轻易发现字符串"输入错误",跳至引用处,开始分析。
1.0. 输入长度判断
.text:00A419FE 68 68 30 B9 00 push offset unk_B93068 ;输入
.text:00A41A03 E8 9E 8F FE FF call sub_A2A9A6 ;获得输入长度
.text:00A41A08 83 C4 04 add esp, 4
.text:00A41A0B 89 45 F8 mov [ebp+var_8], eax
.text:00A41A0E 83 7D F8 1E cmp [ebp+var_8], 1Eh
.text:00A41A12 7F 06 jg short loc_A41A1A
.text:00A41A14 83 7D F8 0A cmp [ebp+var_8], 0Ah
.text:00A41A18 7D 16 jge short loc_A41A30 ;输入长度在10~30之间
1.1. 输入中特定位置的字符限定
.text:00A41A30 68 68 30 B9 00 push offset unk_B93068 ;输入
.text:00A41A35 6A 1E push 1Eh ; buffer最大长度限制
.text:00A41A37 A1 88 30 B9 00 mov eax, dword_B93088 ; 输入长度
.text:00A41A3C 50 push eax
.text:00A41A3D E8 7D CB FE FF call sub_A2E5BF
.text:00A41A42 83 C4 0C add esp, 0Ch
.text:00A41A45 B8 01 00 00 00 mov eax, 1
.text:00A41A4A 6B C8 07 imul ecx, eax, 7
.text:00A41A4D 8B 15 88 30 B9 00 mov edx, dword_B93088
.text:00A41A53 0F BE 04 0A movsx eax, byte ptr [edx+ecx]
.text:00A41A57 83 F8 41 cmp eax, 41h ; 输入字符串偏移0x7为字符A (0x41)
.text:00A41A5A 74 14 jz short loc_A41A70
.text:00A41A5C 68 CC 25 B5 00 push offset aFIAG ; "输入错误;"
.text:00A41A61 E8 75 8C FE FF call sub_A2A6DB
1.2. 处理输入字符串
.text:00A41A75 50 push eax
.text:00A41A76 E8 29 B9 FE FF call sub_A2D3A4
...
.text:00A2D3A4 E9 27 08 01 00 jmp sub_A3DBD0
...
.text:00A3DBF8 B8 01 00 00 00 mov eax, 1
.text:00A3DBFD 6B C8 07 imul ecx, eax, 7
.text:00A3DC00 8B 55 08 mov edx, [ebp+arg_0] ; input
.text:00A3DC03 C6 04 0A 23 mov byte ptr [edx+ecx], 23h ;将原字符串偏移0x7变为字符#(0x23)
...
.text:00A3DC10 loc_A3DC10: ; CODE XREF: sub_A3DBD0+6Ej
.text:00A3DC10 8B 45 F8 mov eax, [ebp+var_8]
.text:00A3DC13 83 C0 01 add eax, 1
.text:00A3DC16 89 45 F8 mov [ebp+var_8], eax
.text:00A3DC19
.text:00A3DC19 loc_A3DC19: ; CODE XREF: sub_A3DBD0+3Ej
.text:00A3DC19 8B 45 08 mov eax, [ebp+arg_0]
.text:00A3DC1C 50 push eax
.text:00A3DC1D E8 84 CD FE FF call sub_A2A9A6
.text:00A3DC22 83 C4 04 add esp, 4
.text:00A3DC25 39 45 F8 cmp [ebp+var_8], eax ;遍历字符串中所有字符
.text:00A3DC28 73 16 jnb short loc_A3DC40
.text:00A3DC2A 8B 45 08 mov eax, [ebp+arg_0]
.text:00A3DC2D 03 45 F8 add eax, [ebp+var_8]
.text:00A3DC30 0F BE 08 movsx ecx, byte ptr [eax]
.text:00A3DC33 83 F1 1F xor ecx, 1Fh ;每个字符与0x1F异或,得到新字符串。
.text:00A3DC36 8B 55 08 mov edx, [ebp+arg_0]
.text:00A3DC39 03 55 F8 add edx, [ebp+var_8]
.text:00A3DC3C 88 0A mov [edx], cl
.text:00A3DC3E EB D0 jmp short loc_A3DC10
1.3. 字符串比较
大杀器来了:
当
sub_A2D3A4完成后,在新字符串地址上直接下内存访问断点,直接来到0xae7df4处,即如下代码片段:
.text:00AE7DE0 8B 54 24 04 mov edx, [esp+arg_0] ; 待比较字符串1
.text:00AE7DE4 8B 4C 24 08 mov ecx, [esp+arg_4] ; 待比较字符串2
.text:00AE7DE8 F7 C2 03 00 00 00 test edx, 3
.text:00AE7DEE 75 40 jnz short loc_AE7E30
.text:00AE7DF0
.text:00AE7DF0 loc_AE7DF0: ; CODE XREF: sub_AE7DE0+3Cj
.text:00AE7DF0 ; sub_AE7DE0+6Ej
.text:00AE7DF0 ; sub_AE7DE0+8Aj
.text:00AE7DF0 8B 02 mov eax, [edx]
.text:00AE7DF2 3A 01 cmp al, [ecx]
.text:00AE7DF4 75 32 jnz short loc_AE7E28 ;内存访问断点在此断下。
.text:00AE7DF6 84 C0 test al, al
.text:00AE7DF8 74 26 jz short loc_AE7E20
.text:00AE7DFA 3A 61 01 cmp ah, [ecx+1]
.text:00AE7DFD 75 29 jnz short loc_AE7E28
.text:00AE7DFF 84 E4 test ah, ah
.text:00AE7E01 74 1D jz short loc_AE7E20
.text:00AE7E03 C1 E8 10 shr eax, 10h
.text:00AE7E06 3A 41 02 cmp al, [ecx+2]
.text:00AE7E09 75 1D jnz short loc_AE7E28
.text:00AE7E0B 84 C0 test al, al
.text:00AE7E0D 74 11 jz short loc_AE7E20
.text:00AE7E0F 3A 61 03 cmp ah, [ecx+3]
.text:00AE7E12 75 14 jnz short loc_AE7E28
.text:00AE7E14 83 C1 04 add ecx, 4
.text:00AE7E17 83 C2 04 add edx, 4
.text:00AE7E1A 84 E4 test ah, ah
.text:00AE7E1C 75 D2 jnz short loc_AE7DF0
.text:00AE7E1E 8B FF mov edi, edi
显然是在比较两个待比较字符串.
分别db ecx, db edx。发现ecx为1.2计算所得,而edx为:
0:000:x86> db edx
00b91000 75 72 6a 7d 70 75 78 3c-7d 6e 7b 69 71 79 72 68 urj}pux<}n{iqyrh
1.4 反向计算正确字符串
1.3中dump得到的字符串每字节异或0x1F, 并将第7位还原为A,得到:jmubojgAbqdvnfmw 经验证为正确答案。
完。
0.0. windbg载入,lm获得base address;IDA rebase至相同地址,方便对比分析。
0.1. 任意输入,提示"输入错误"。IDA载入,轻易发现字符串"输入错误",跳至引用处,开始分析。
1.0. 输入长度判断
.text:00A419FE 68 68 30 B9 00 push offset unk_B93068 ;输入
.text:00A41A03 E8 9E 8F FE FF call sub_A2A9A6 ;获得输入长度
.text:00A41A08 83 C4 04 add esp, 4
.text:00A41A0B 89 45 F8 mov [ebp+var_8], eax
.text:00A41A0E 83 7D F8 1E cmp [ebp+var_8], 1Eh
.text:00A41A12 7F 06 jg short loc_A41A1A
.text:00A41A14 83 7D F8 0A cmp [ebp+var_8], 0Ah
.text:00A41A18 7D 16 jge short loc_A41A30 ;输入长度在10~30之间
1.1. 输入中特定位置的字符限定
0.1. 任意输入,提示"输入错误"。IDA载入,轻易发现字符串"输入错误",跳至引用处,开始分析。
1.0. 输入长度判断
.text:00A419FE 68 68 30 B9 00 push offset unk_B93068 ;输入
.text:00A419FE 68 68 30 B9 00 push offset unk_B93068 ;输入
.text:00A41A03 E8 9E 8F FE FF call sub_A2A9A6 ;获得输入长度
.text:00A41A08 83 C4 04 add esp, 4
.text:00A41A0B 89 45 F8 mov [ebp+var_8], eax
.text:00A41A0E 83 7D F8 1E cmp [ebp+var_8], 1Eh
.text:00A41A12 7F 06 jg short loc_A41A1A
.text:00A41A14 83 7D F8 0A cmp [ebp+var_8], 0Ah
.text:00A41A18 7D 16 jge short loc_A41A30 ;输入长度在10~30之间
1.1. 输入中特定位置的字符限定
.text:00A41A03 E8 9E 8F FE FF call sub_A2A9A6 ;获得输入长度
.text:00A41A08 83 C4 04 add esp, 4
.text:00A41A0B 89 45 F8 mov [ebp+var_8], eax
.text:00A41A0E 83 7D F8 1E cmp [ebp+var_8], 1Eh
.text:00A41A12 7F 06 jg short loc_A41A1A
.text:00A41A14 83 7D F8 0A cmp [ebp+var_8], 0Ah
.text:00A41A18 7D 16 jge short loc_A41A30 ;输入长度在10~30之间
1.1. 输入中特定位置的字符限定
.text:00A41A30 68 68 30 B9 00 push offset unk_B93068 ;输入
.text:00A41A35 6A 1E push 1Eh ; buffer最大长度限制
.text:00A41A37 A1 88 30 B9 00 mov eax, dword_B93088 ; 输入长度
.text:00A41A3C 50 push eax
.text:00A41A3D E8 7D CB FE FF call sub_A2E5BF
.text:00A41A42 83 C4 0C add esp, 0Ch
.text:00A41A45 B8 01 00 00 00 mov eax, 1
.text:00A41A4A 6B C8 07 imul ecx, eax, 7
.text:00A41A4D 8B 15 88 30 B9 00 mov edx, dword_B93088
.text:00A41A53 0F BE 04 0A movsx eax, byte ptr [edx+ecx]
.text:00A41A57 83 F8 41 cmp eax, 41h ; 输入字符串偏移0x7为字符A (0x41)
.text:00A41A5A 74 14 jz short loc_A41A70
.text:00A41A5C 68 CC 25 B5 00 push offset aFIAG ; "输入错误;"
.text:00A41A61 E8 75 8C FE FF call sub_A2A6DB
.text:00A41A30 68 68 30 B9 00 push offset unk_B93068 ;输入
.text:00A41A35 6A 1E push 1Eh ; buffer最大长度限制
.text:00A41A37 A1 88 30 B9 00 mov eax, dword_B93088 ; 输入长度
.text:00A41A3C 50 push eax
.text:00A41A3D E8 7D CB FE FF call sub_A2E5BF
.text:00A41A42 83 C4 0C add esp, 0Ch
.text:00A41A45 B8 01 00 00 00 mov eax, 1
.text:00A41A4A 6B C8 07 imul ecx, eax, 7
.text:00A41A4D 8B 15 88 30 B9 00 mov edx, dword_B93088
.text:00A41A53 0F BE 04 0A movsx eax, byte ptr [edx+ecx]
.text:00A41A57 83 F8 41 cmp eax, 41h ; 输入字符串偏移0x7为字符A (0x41)
.text:00A41A5A 74 14 jz short loc_A41A70
.text:00A41A5C 68 CC 25 B5 00 push offset aFIAG ; "输入错误;"
.text:00A41A61 E8 75 8C FE FF call sub_A2A6DB
1.2. 处理输入字符串
.text:00A41A75 50 push eax
.text:00A41A76 E8 29 B9 FE FF call sub_A2D3A4
.text:00A41A75 50 push eax
.text:00A41A76 E8 29 B9 FE FF call sub_A2D3A4
...
.text:00A2D3A4 E9 27 08 01 00 jmp sub_A3DBD0
...
.text:00A3DBF8 B8 01 00 00 00 mov eax, 1
.text:00A3DBFD 6B C8 07 imul ecx, eax, 7
.text:00A3DC00 8B 55 08 mov edx, [ebp+arg_0] ; input
.text:00A3DC03 C6 04 0A 23 mov byte ptr [edx+ecx], 23h ;将原字符串偏移0x7变为字符#(0x23)
...
.text:00A3DC10 loc_A3DC10: ; CODE XREF: sub_A3DBD0+6Ej
.text:00A3DC10 8B 45 F8 mov eax, [ebp+var_8]
.text:00A3DC13 83 C0 01 add eax, 1
.text:00A3DC16 89 45 F8 mov [ebp+var_8], eax
.text:00A3DC19
.text:00A3DC19 loc_A3DC19: ; CODE XREF: sub_A3DBD0+3Ej
.text:00A3DC19 8B 45 08 mov eax, [ebp+arg_0]
.text:00A3DC1C 50 push eax
.text:00A3DC1D E8 84 CD FE FF call sub_A2A9A6
.text:00A3DC22 83 C4 04 add esp, 4
.text:00A3DC25 39 45 F8 cmp [ebp+var_8], eax ;遍历字符串中所有字符
.text:00A3DC28 73 16 jnb short loc_A3DC40
.text:00A3DC2A 8B 45 08 mov eax, [ebp+arg_0]
.text:00A3DC2D 03 45 F8 add eax, [ebp+var_8]
.text:00A3DC30 0F BE 08 movsx ecx, byte ptr [eax]
.text:00A3DC33 83 F1 1F xor ecx, 1Fh ;每个字符与0x1F异或,得到新字符串。
.text:00A3DC36 8B 55 08 mov edx, [ebp+arg_0]
.text:00A3DC39 03 55 F8 add edx, [ebp+var_8]
.text:00A3DC3C 88 0A mov [edx], cl
.text:00A3DC3E EB D0 jmp short loc_A3DC10
1.3. 字符串比较
大杀器来了:
当
sub_A2D3A4完成后,在新字符串地址上直接下内存访问断点,直接来到0xae7df4处,即如下代码片段:
.text:00AE7DE0 8B 54 24 04 mov edx, [esp+arg_0] ; 待比较字符串1
.text:00AE7DE4 8B 4C 24 08 mov ecx, [esp+arg_4] ; 待比较字符串2
.text:00AE7DE8 F7 C2 03 00 00 00 test edx, 3
.text:00AE7DEE 75 40 jnz short loc_AE7E30
.text:00AE7DF0
.text:00AE7DF0 loc_AE7DF0: ; CODE XREF: sub_AE7DE0+3Cj
.text:00AE7DF0 ; sub_AE7DE0+6Ej
.text:00AE7DF0 ; sub_AE7DE0+8Aj
.text:00AE7DF0 8B 02 mov eax, [edx]
.text:00AE7DF2 3A 01 cmp al, [ecx]
.text:00AE7DF4 75 32 jnz short loc_AE7E28 ;内存访问断点在此断下。
.text:00AE7DF6 84 C0 test al, al
.text:00AE7DF8 74 26 jz short loc_AE7E20
.text:00AE7DFA 3A 61 01 cmp ah, [ecx+1]
.text:00AE7DFD 75 29 jnz short loc_AE7E28
.text:00AE7DFF 84 E4 test ah, ah
.text:00AE7E01 74 1D jz short loc_AE7E20
.text:00AE7E03 C1 E8 10 shr eax, 10h
.text:00AE7E06 3A 41 02 cmp al, [ecx+2]
.text:00AE7E09 75 1D jnz short loc_AE7E28
.text:00AE7E0B 84 C0 test al, al
.text:00AE7E0D 74 11 jz short loc_AE7E20
.text:00AE7E0F 3A 61 03 cmp ah, [ecx+3]
.text:00AE7E12 75 14 jnz short loc_AE7E28
.text:00AE7E14 83 C1 04 add ecx, 4
.text:00AE7E17 83 C2 04 add edx, 4
.text:00AE7E1A 84 E4 test ah, ah
.text:00AE7E1C 75 D2 jnz short loc_AE7DF0
.text:00AE7E1E 8B FF mov edi, edi
显然是在比较两个待比较字符串.
分别db ecx, db edx。发现ecx为1.2计算所得,而edx为:
0:000:x86> db edx
00b91000 75 72 6a 7d 70 75 78 3c-7d 6e 7b 69 71 79 72 68 urj}pux<}n{iqyrh
1.4 反向计算正确字符串
1.3中dump得到的字符串每字节异或0x1F, 并将第7位还原为A,得到:jmubojgAbqdvnfmw 经验证为正确答案。
完。
.text:00A3DBF8 B8 01 00 00 00 mov eax, 1
.text:00A3DBFD 6B C8 07 imul ecx, eax, 7
.text:00A3DC00 8B 55 08 mov edx, [ebp+arg_0] ; input
.text:00A3DC03 C6 04 0A 23 mov byte ptr [edx+ecx], 23h ;将原字符串偏移0x7变为字符#(0x23)
...
.text:00A3DC10 loc_A3DC10: ; CODE XREF: sub_A3DBD0+6Ej
.text:00A3DC10 8B 45 F8 mov eax, [ebp+var_8]
.text:00A3DC13 83 C0 01 add eax, 1
.text:00A3DC16 89 45 F8 mov [ebp+var_8], eax
.text:00A3DC19
.text:00A3DC19 loc_A3DC19: ; CODE XREF: sub_A3DBD0+3Ej
.text:00A3DC19 8B 45 08 mov eax, [ebp+arg_0]
.text:00A3DC1C 50 push eax
.text:00A3DC1D E8 84 CD FE FF call sub_A2A9A6
.text:00A3DC22 83 C4 04 add esp, 4
.text:00A3DC25 39 45 F8 cmp [ebp+var_8], eax ;遍历字符串中所有字符
.text:00A3DC28 73 16 jnb short loc_A3DC40
.text:00A3DC2A 8B 45 08 mov eax, [ebp+arg_0]
.text:00A3DC2D 03 45 F8 add eax, [ebp+var_8]
.text:00A3DC30 0F BE 08 movsx ecx, byte ptr [eax]
.text:00A3DC33 83 F1 1F xor ecx, 1Fh ;每个字符与0x1F异或,得到新字符串。
.text:00A3DC36 8B 55 08 mov edx, [ebp+arg_0]
.text:00A3DC39 03 55 F8 add edx, [ebp+var_8]
.text:00A3DC3C 88 0A mov [edx], cl
.text:00A3DC3E EB D0 jmp short loc_A3DC10
1.3. 字符串比较
大杀器来了:
当
sub_A2D3A4完成后,在新字符串地址上直接下内存访问断点,直接来到0xae7df4处,即如下代码片段:
.text:00AE7DE0 8B 54 24 04 mov edx, [esp+arg_0] ; 待比较字符串1
.text:00AE7DE4 8B 4C 24 08 mov ecx, [esp+arg_4] ; 待比较字符串2
.text:00AE7DE8 F7 C2 03 00 00 00 test edx, 3
.text:00AE7DEE 75 40 jnz short loc_AE7E30
.text:00AE7DF0
.text:00AE7DF0 loc_AE7DF0: ; CODE XREF: sub_AE7DE0+3Cj
.text:00AE7DF0 ; sub_AE7DE0+6Ej
.text:00AE7DF0 ; sub_AE7DE0+8Aj
.text:00AE7DF0 8B 02 mov eax, [edx]
.text:00AE7DF2 3A 01 cmp al, [ecx]
.text:00AE7DF4 75 32 jnz short loc_AE7E28 ;内存访问断点在此断下。
.text:00AE7DF6 84 C0 test al, al
.text:00AE7DF8 74 26 jz short loc_AE7E20
.text:00AE7DFA 3A 61 01 cmp ah, [ecx+1]
.text:00AE7DFD 75 29 jnz short loc_AE7E28
.text:00AE7DFF 84 E4 test ah, ah
.text:00AE7E01 74 1D jz short loc_AE7E20
.text:00AE7E03 C1 E8 10 shr eax, 10h
.text:00AE7E06 3A 41 02 cmp al, [ecx+2]
.text:00AE7E09 75 1D jnz short loc_AE7E28
.text:00AE7E0B 84 C0 test al, al
.text:00AE7E0D 74 11 jz short loc_AE7E20
.text:00AE7E0F 3A 61 03 cmp ah, [ecx+3]
.text:00AE7E12 75 14 jnz short loc_AE7E28
.text:00AE7E14 83 C1 04 add ecx, 4
.text:00AE7E17 83 C2 04 add edx, 4
.text:00AE7E1A 84 E4 test ah, ah
.text:00AE7E1C 75 D2 jnz short loc_AE7DF0
.text:00AE7E1E 8B FF mov edi, edi
显然是在比较两个待比较字符串.
分别db ecx, db edx。发现ecx为1.2计算所得,而edx为:
0:000:x86> db edx
00b91000 75 72 6a 7d 70 75 78 3c-7d 6e 7b 69 71 79 72 68 urj}pux<}n{iqyrh
1.4 反向计算正确字符串
1.3中dump得到的字符串每字节异或0x1F, 并将第7位还原为A,得到:jmubojgAbqdvnfmw 经验证为正确答案。
完。
.text:00A3DC10 loc_A3DC10: ; CODE XREF: sub_A3DBD0+6Ej
.text:00A3DC10 8B 45 F8 mov eax, [ebp+var_8]
.text:00A3DC13 83 C0 01 add eax, 1
.text:00A3DC16 89 45 F8 mov [ebp+var_8], eax
.text:00A3DC19
.text:00A3DC19 loc_A3DC19: ; CODE XREF: sub_A3DBD0+3Ej
.text:00A3DC19 8B 45 08 mov eax, [ebp+arg_0]
.text:00A3DC1C 50 push eax
.text:00A3DC1D E8 84 CD FE FF call sub_A2A9A6
.text:00A3DC22 83 C4 04 add esp, 4
.text:00A3DC25 39 45 F8 cmp [ebp+var_8], eax ;遍历字符串中所有字符
.text:00A3DC28 73 16 jnb short loc_A3DC40
.text:00A3DC2A 8B 45 08 mov eax, [ebp+arg_0]
.text:00A3DC2D 03 45 F8 add eax, [ebp+var_8]
.text:00A3DC30 0F BE 08 movsx ecx, byte ptr [eax]
.text:00A3DC33 83 F1 1F xor ecx, 1Fh ;每个字符与0x1F异或,得到新字符串。
.text:00A3DC36 8B 55 08 mov edx, [ebp+arg_0]
.text:00A3DC39 03 55 F8 add edx, [ebp+var_8]
.text:00A3DC3C 88 0A mov [edx], cl
.text:00A3DC3E EB D0 jmp short loc_A3DC10
1.3. 字符串比较
大杀器来了:
当
sub_A2D3A4完成后,在新字符串地址上直接下内存访问断点,直接来到0xae7df4处,即如下代码片段:
.text:00AE7DE0 8B 54 24 04 mov edx, [esp+arg_0] ; 待比较字符串1
.text:00AE7DE4 8B 4C 24 08 mov ecx, [esp+arg_4] ; 待比较字符串2
.text:00AE7DE8 F7 C2 03 00 00 00 test edx, 3
.text:00AE7DEE 75 40 jnz short loc_AE7E30
.text:00AE7DF0
.text:00AE7DF0 loc_AE7DF0: ; CODE XREF: sub_AE7DE0+3Cj
.text:00AE7DF0 ; sub_AE7DE0+6Ej
.text:00AE7DF0 ; sub_AE7DE0+8Aj
.text:00AE7DF0 8B 02 mov eax, [edx]
.text:00AE7DF2 3A 01 cmp al, [ecx]
.text:00AE7DF4 75 32 jnz short loc_AE7E28 ;内存访问断点在此断下。
.text:00AE7DF6 84 C0 test al, al
.text:00AE7DF8 74 26 jz short loc_AE7E20
.text:00AE7DFA 3A 61 01 cmp ah, [ecx+1]
.text:00AE7DFD 75 29 jnz short loc_AE7E28
.text:00AE7DFF 84 E4 test ah, ah
.text:00AE7E01 74 1D jz short loc_AE7E20
.text:00AE7E03 C1 E8 10 shr eax, 10h
.text:00AE7E06 3A 41 02 cmp al, [ecx+2]
.text:00AE7E09 75 1D jnz short loc_AE7E28
.text:00AE7E0B 84 C0 test al, al
.text:00AE7E0D 74 11 jz short loc_AE7E20
.text:00AE7E0F 3A 61 03 cmp ah, [ecx+3]
.text:00AE7E12 75 14 jnz short loc_AE7E28
.text:00AE7E14 83 C1 04 add ecx, 4
.text:00AE7E17 83 C2 04 add edx, 4
.text:00AE7E1A 84 E4 test ah, ah
.text:00AE7E1C 75 D2 jnz short loc_AE7DF0
.text:00AE7E1E 8B FF mov edi, edi
显然是在比较两个待比较字符串.
分别db ecx, db edx。发现ecx为1.2计算所得,而edx为:
0:000:x86> db edx
00b91000 75 72 6a 7d 70 75 78 3c-7d 6e 7b 69 71 79 72 68 urj}pux<}n{iqyrh
1.4 反向计算正确字符串
1.3中dump得到的字符串每字节异或0x1F, 并将第7位还原为A,得到:jmubojgAbqdvnfmw 经验证为正确答案。
完。
.text:00A3DC10 loc_A3DC10: ; CODE XREF: sub_A3DBD0+6Ej
.text:00A3DC10 8B 45 F8 mov eax, [ebp+var_8]
.text:00A3DC13 83 C0 01 add eax, 1
.text:00A3DC16 89 45 F8 mov [ebp+var_8], eax
.text:00A3DC19
.text:00A3DC19 loc_A3DC19: ; CODE XREF: sub_A3DBD0+3Ej
.text:00A3DC19 8B 45 08 mov eax, [ebp+arg_0]
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2018-12-3 23:25
被supercolin编辑
,原因: 高亮关键代码
赞赏
他的文章
看原图
赞赏
雪币:
留言: