-
-
[原创]第二题writeup
-
2018-12-3 19:39 2175
-
我觉得厉害之处就是我找不到什么时候输出ok的,算法倒是不难,两个异或,一个是0x1c一个是0x1f,用od跟一下,就可以找到线索,跟第一题差不多,这里就不多说了。jmubojgAbqdvnfmw
难的是,跳转太多,我没有整理出分支出来,ida也用上了,想要逆向整个分支逻辑,还是没搞出来,想学习一下这种跟踪不到输出的手段。准备后天看大神们是怎么逆向算法的。
补充一下:
0034DC80 /> \55 push ebp
0034DC81 |. 8BEC mov ebp,esp
0034DC83 |. 81EC F0000000 sub esp,0xF0
0034DC89 |. 53 push ebx
0034DC8A |. 56 push esi
0034DC8B |. 57 push edi
0034DC8C |. 51 push ecx
0034DC8D |. 8DBD 10FFFFFF lea edi,[local.60]
0034DC93 |. B9 3C000000 mov ecx,0x3C
0034DC98 |. B8 CCCCCCCC mov eax,0xCCCCCCCC
0034DC9D |. F3:AB rep stos [dword es:edi]
0034DC9F |. 59 pop ecx
0034DCA0 |. 894D F8 mov [local.2],ecx
0034DCA3 |. B9 07604A00 mov ecx,Exam.004A6007 ; āāāāāāāāāāāāāāāāāāāā
0034DCA8 |. E8 07FBFEFF call Exam.0033D7B4
0034DCAD |. 837D 08 00 cmp [arg.1],0x0
0034DCB1 |. 74 7B je XExam.0034DD2E
0034DCB3 |. C745 EC 00000>mov [local.5],0x0
0034DCBA |. EB 09 jmp XExam.0034DCC5
0034DCBC |> 8B45 EC /mov eax,[local.5]
0034DCBF |. 83C0 01 |add eax,0x1
0034DCC2 |. 8945 EC |mov [local.5],eax
0034DCC5 |> 8B45 08 mov eax,[arg.1]
0034DCC8 |. 50 |push eax
0034DCC9 |. E8 D8CCFEFF |call Exam.0033A9A6
0034DCCE |. 83C4 04 |add esp,0x4
0034DCD1 |. 3945 EC |cmp [local.5],eax
0034DCD4 |. 73 16 |jnb XExam.0034DCEC
0034DCD6 |. 8B45 08 |mov eax,[arg.1]
0034DCD9 |. 0345 EC |add eax,[local.5]
0034DCDC |. 0FBE08 |movsx ecx,[byte ds:eax]
0034DCDF |. 83F1 1C |xor ecx,0x1C ;这里是将invalid argument异或0x1c
0034DCE2 |. 8B55 08 |mov edx,[arg.1]
0034DCE5 |. 0355 EC |add edx,[local.5]
0034DCE8 |. 880A |mov [byte ds:edx],cl
0034DCEA |.^ EB D0 \jmp XExam.0034DCBC
0034DCEC |> A1 88304A00 mov eax,[dword ds:0x4A3088]
0034DCF1 |. 50 push eax
0034DCF2 |. 8B4D 08 mov ecx,[arg.1]
0034DCF5 |. 51 push ecx
0034DCF6 |. E8 47FEFEFF call Exam.0033DB42 ;这里跟输入的flag 0x1f异或之后的值进行对比,正确则返回0
0034DCFB |. 83C4 08 add esp,0x8
0034DCFE |. 85C0 test eax,eax
0034DD00 |. 75 2C jnz XExam.0034DD2E
0034DD02 |. C645 E3 6F mov [byte ss:ebp-0x1D],0x6F ;这里是 o
0034DD06 |. C645 D7 6B mov [byte ss:ebp-0x29],0x6B ;这里是 k
0034DD0A |. 0FB645 E3 movzx eax,[byte ss:ebp-0x1D]
0034DD0E |. 50 push eax
0034DD0F |. 68 E0314A00 push Exam.004A31E0
0034DD14 |. E8 91D7FEFF call Exam.0033B4AA
0034DD19 |. 83C4 08 add esp,0x8
0034DD1C |. 0FB645 D7 movzx eax,[byte ss:ebp-0x29]
0034DD20 |. 50 push eax
0034DD21 |. 68 E0314A00 push Exam.004A31E0
0034DD26 |. E8 7FD7FEFF call Exam.0033B4AA
0034DD2B |. 83C4 08 add esp,0x8
0034DD2E |> 33C0 xor eax,eax
0034DD30 |. 5F pop edi
0034DD31 |. 5E pop esi
0034DD32 |. 5B pop ebx
0034DD33 |. 81C4 F0000000 add esp,0xF0
0034DD39 |. 3BEC cmp ebp,esp
0034DD3B |. E8 F5FBFEFF call Exam.0033D935
0034DD40 |. 8BE5 mov esp,ebp
0034DD42 |. 5D pop ebp
0034DD43 \. C2 0400 retn 0x4
0034DC81 |. 8BEC mov ebp,esp
0034DC83 |. 81EC F0000000 sub esp,0xF0
0034DC89 |. 53 push ebx
0034DC8A |. 56 push esi
0034DC8B |. 57 push edi
0034DC8C |. 51 push ecx
0034DC8D |. 8DBD 10FFFFFF lea edi,[local.60]
0034DC93 |. B9 3C000000 mov ecx,0x3C
0034DC98 |. B8 CCCCCCCC mov eax,0xCCCCCCCC
0034DC9D |. F3:AB rep stos [dword es:edi]
0034DC9F |. 59 pop ecx
0034DCA0 |. 894D F8 mov [local.2],ecx
0034DCA3 |. B9 07604A00 mov ecx,Exam.004A6007 ; āāāāāāāāāāāāāāāāāāāā
0034DCA8 |. E8 07FBFEFF call Exam.0033D7B4
0034DCAD |. 837D 08 00 cmp [arg.1],0x0
0034DCB1 |. 74 7B je XExam.0034DD2E
0034DCB3 |. C745 EC 00000>mov [local.5],0x0
0034DCBA |. EB 09 jmp XExam.0034DCC5
0034DCBC |> 8B45 EC /mov eax,[local.5]
0034DCBF |. 83C0 01 |add eax,0x1
0034DCC2 |. 8945 EC |mov [local.5],eax
0034DCC5 |> 8B45 08 mov eax,[arg.1]
0034DCC8 |. 50 |push eax
0034DCC9 |. E8 D8CCFEFF |call Exam.0033A9A6
0034DCCE |. 83C4 04 |add esp,0x4
0034DCD1 |. 3945 EC |cmp [local.5],eax
0034DCD4 |. 73 16 |jnb XExam.0034DCEC
0034DCD6 |. 8B45 08 |mov eax,[arg.1]
0034DCD9 |. 0345 EC |add eax,[local.5]
0034DCDC |. 0FBE08 |movsx ecx,[byte ds:eax]
0034DCDF |. 83F1 1C |xor ecx,0x1C ;这里是将invalid argument异或0x1c
0034DCE2 |. 8B55 08 |mov edx,[arg.1]
0034DCE5 |. 0355 EC |add edx,[local.5]
0034DCE8 |. 880A |mov [byte ds:edx],cl
0034DCEA |.^ EB D0 \jmp XExam.0034DCBC
0034DCEC |> A1 88304A00 mov eax,[dword ds:0x4A3088]
0034DCF1 |. 50 push eax
0034DCF2 |. 8B4D 08 mov ecx,[arg.1]
0034DCF5 |. 51 push ecx
0034DCF6 |. E8 47FEFEFF call Exam.0033DB42 ;这里跟输入的flag 0x1f异或之后的值进行对比,正确则返回0
0034DCFB |. 83C4 08 add esp,0x8
0034DCFE |. 85C0 test eax,eax
0034DD00 |. 75 2C jnz XExam.0034DD2E
0034DD02 |. C645 E3 6F mov [byte ss:ebp-0x1D],0x6F ;这里是 o
0034DD06 |. C645 D7 6B mov [byte ss:ebp-0x29],0x6B ;这里是 k
0034DD0A |. 0FB645 E3 movzx eax,[byte ss:ebp-0x1D]
0034DD0E |. 50 push eax
0034DD0F |. 68 E0314A00 push Exam.004A31E0
0034DD14 |. E8 91D7FEFF call Exam.0033B4AA
0034DD19 |. 83C4 08 add esp,0x8
0034DD1C |. 0FB645 D7 movzx eax,[byte ss:ebp-0x29]
0034DD20 |. 50 push eax
0034DD21 |. 68 E0314A00 push Exam.004A31E0
0034DD26 |. E8 7FD7FEFF call Exam.0033B4AA
0034DD2B |. 83C4 08 add esp,0x8
0034DD2E |> 33C0 xor eax,eax
0034DD30 |. 5F pop edi
0034DD31 |. 5E pop esi
0034DD32 |. 5B pop ebx
0034DD33 |. 81C4 F0000000 add esp,0xF0
0034DD39 |. 3BEC cmp ebp,esp
0034DD3B |. E8 F5FBFEFF call Exam.0033D935
0034DD40 |. 8BE5 mov esp,ebp
0034DD42 |. 5D pop ebp
0034DD43 \. C2 0400 retn 0x4
像下面这个我本应该看出来的,但是却由于要写代码,不能一心两用,急急忙忙的,却没看出问题来。
003F7DE0 8B5424 04 mov edx,[dword ss:esp+0x4]
003F7DE4 8B4C24 08 mov ecx,[dword ss:esp+0x8]
003F7DE8 F7C2 03000000 test edx,0x3
003F7DEE 75 40 jnz XExam.003F7E30
003F7DF0 8B02 mov eax,[dword ds:edx]
003F7DF2 3A01 cmp al,[byte ds:ecx]
003F7DF4 75 32 jnz XExam.003F7E28
003F7DF6 84C0 test al,al
003F7DF8 74 26 je XExam.003F7E20
003F7DFA 3A61 01 cmp ah,[byte ds:ecx+0x1]
003F7DFD 75 29 jnz XExam.003F7E28
003F7DFF 84E4 test ah,ah
003F7E01 74 1D je XExam.003F7E20
003F7E03 C1E8 10 shr eax,0x10
003F7E06 3A41 02 cmp al,[byte ds:ecx+0x2]
003F7E09 75 1D jnz XExam.003F7E28
003F7E0B 84C0 test al,al
003F7E0D 74 11 je XExam.003F7E20
003F7E0F 3A61 03 cmp ah,[byte ds:ecx+0x3]
003F7E12 75 14 jnz XExam.003F7E28
003F7E14 83C1 04 add ecx,0x4
003F7E17 83C2 04 add edx,0x4
003F7E1A 84E4 test ah,ah
003F7E1C ^ 75 D2 jnz XExam.003F7DF0
003F7E1E 8BFF mov edi,edi
003F7E20 33C0 xor eax,eax
003F7E22 C3 retn
003F7E23 EB 03 jmp XExam.003F7E28
003F7E25 CC int3
003F7E26 CC int3
003F7E27 CC int3
003F7E28 1BC0 sbb eax,eax
003F7E2A 83C8 01 or eax,0x1
003F7E2D C3 retn
003F7E2E 8BFF mov edi,edi
003F7E30 F7C2 01000000 test edx,0x1
003F7E36 74 18 je XExam.003F7E50
003F7E38 8A02 mov al,[byte ds:edx]
003F7E3A 83C2 01 add edx,0x1
003F7E3D 3A01 cmp al,[byte ds:ecx]
003F7E3F ^ 75 E7 jnz XExam.003F7E28
003F7E41 83C1 01 add ecx,0x1
003F7E44 84C0 test al,al
003F7E46 ^ 74 D8 je XExam.003F7E20
003F7E48 F7C2 02000000 test edx,0x2
003F7E4E ^ 74 A0 je XExam.003F7DF0
003F7E50 66:8B02 mov ax,[word ds:edx]
003F7E53 83C2 02 add edx,0x2
003F7E56 3A01 cmp al,[byte ds:ecx]
003F7E58 ^ 75 CE jnz XExam.003F7E28
003F7E5A 84C0 test al,al
003F7E5C ^ 74 C2 je XExam.003F7E20
003F7E5E 3A61 01 cmp ah,[byte ds:ecx+0x1]
003F7E61 ^ 75 C5 jnz XExam.003F7E28
003F7E63 84E4 test ah,ah
003F7E65 ^ 74 B9 je XExam.003F7E20
003F7E67 83C1 02 add ecx,0x2
003F7E6A ^ EB 84 jmp XExam.003F7DF0
003F7DE4 8B4C24 08 mov ecx,[dword ss:esp+0x8]
003F7DE8 F7C2 03000000 test edx,0x3
003F7DEE 75 40 jnz XExam.003F7E30
003F7DF0 8B02 mov eax,[dword ds:edx]
003F7DF2 3A01 cmp al,[byte ds:ecx]
003F7DF4 75 32 jnz XExam.003F7E28
003F7DF6 84C0 test al,al
003F7DF8 74 26 je XExam.003F7E20
003F7DFA 3A61 01 cmp ah,[byte ds:ecx+0x1]
003F7DFD 75 29 jnz XExam.003F7E28
003F7DFF 84E4 test ah,ah
003F7E01 74 1D je XExam.003F7E20
003F7E03 C1E8 10 shr eax,0x10
003F7E06 3A41 02 cmp al,[byte ds:ecx+0x2]
003F7E09 75 1D jnz XExam.003F7E28
003F7E0B 84C0 test al,al
003F7E0D 74 11 je XExam.003F7E20
003F7E0F 3A61 03 cmp ah,[byte ds:ecx+0x3]
003F7E12 75 14 jnz XExam.003F7E28
003F7E14 83C1 04 add ecx,0x4
003F7E17 83C2 04 add edx,0x4
003F7E1A 84E4 test ah,ah
003F7E1C ^ 75 D2 jnz XExam.003F7DF0
003F7E1E 8BFF mov edi,edi
003F7E20 33C0 xor eax,eax
003F7E22 C3 retn
003F7E23 EB 03 jmp XExam.003F7E28
003F7E25 CC int3
003F7E26 CC int3
003F7E27 CC int3
003F7E28 1BC0 sbb eax,eax
003F7E2A 83C8 01 or eax,0x1
003F7E2D C3 retn
003F7E2E 8BFF mov edi,edi
003F7E30 F7C2 01000000 test edx,0x1
003F7E36 74 18 je XExam.003F7E50
003F7E38 8A02 mov al,[byte ds:edx]
003F7E3A 83C2 01 add edx,0x1
003F7E3D 3A01 cmp al,[byte ds:ecx]
003F7E3F ^ 75 E7 jnz XExam.003F7E28
003F7E41 83C1 01 add ecx,0x1
003F7E44 84C0 test al,al
003F7E46 ^ 74 D8 je XExam.003F7E20
003F7E48 F7C2 02000000 test edx,0x2
003F7E4E ^ 74 A0 je XExam.003F7DF0
003F7E50 66:8B02 mov ax,[word ds:edx]
003F7E53 83C2 02 add edx,0x2
003F7E56 3A01 cmp al,[byte ds:ecx]
003F7E58 ^ 75 CE jnz XExam.003F7E28
003F7E5A 84C0 test al,al
003F7E5C ^ 74 C2 je XExam.003F7E20
003F7E5E 3A61 01 cmp ah,[byte ds:ecx+0x1]
003F7E61 ^ 75 C5 jnz XExam.003F7E28
003F7E63 84E4 test ah,ah
003F7E65 ^ 74 B9 je XExam.003F7E20
003F7E67 83C1 02 add ecx,0x2
003F7E6A ^ EB 84 jmp XExam.003F7DF0
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
最后于 2018-12-4 10:10
被simpower编辑
,原因:
赞赏
他的文章
看原图