-
-
[原创] 看雪.京东 2018CTF 第二题
-
发表于: 2018-6-19 02:21 2488
-
程序运行基址: 012E0000
0x00 main函数:
012E2220 /$ 55 PUSH EBP ; main 012E2221 |. 8BEC MOV EBP, ESP 012E2223 |. 83EC 54 SUB ESP, 0x54 012E2226 |. A1 08702E01 MOV EAX, DWORD PTR DS:[0x12E7008] 012E222B |. 33C5 XOR EAX, EBP 012E222D |. 8945 FC MOV DWORD PTR SS:[EBP-0x4], EAX 012E2230 |. 6A 20 PUSH 0x20 ; /Arg3 = 00000020 012E2232 |. 8D45 BC LEA EAX, DWORD PTR SS:[EBP-0x44] ; | 012E2235 |. 50 PUSH EAX ; |Arg2 012E2236 |. 68 F0512E01 PUSH 012E51F0 ; |Arg1 = 012E51F0 ASCII "%s" 012E223B |. E8 30EFFFFF CALL 012E1170 ; \2018CMv4.012E1170 012E2240 |. 83C4 0C ADD ESP, 0xC 012E2243 |. 8D4D DC LEA ECX, DWORD PTR SS:[EBP-0x24] 012E2246 |. 51 PUSH ECX ; /Arg1 012E2247 |. E8 14F1FFFF CALL 012E1360 ; \解密正确答案提示字符串 012E224C |. 83C4 04 ADD ESP, 0x4 012E224F |. 8D55 EC LEA EDX, DWORD PTR SS:[EBP-0x14] 012E2252 |. 52 PUSH EDX ; /Arg1 012E2253 |. E8 A8EFFFFF CALL 012E1200 ; \解密错误答案提示字符串 012E2258 |. 83C4 04 ADD ESP, 0x4 012E225B |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-0x14] 012E225E |. 50 PUSH EAX ; /Arg2 012E225F |. 8D4D BC LEA ECX, DWORD PTR SS:[EBP-0x44] ; | 012E2262 |. 51 PUSH ECX ; |Arg1 012E2263 |. E8 18FFFFFF CALL 012E2180 ; \输入字符有效性校验,0-9 a-z A-Z 012E2268 |. 83C4 08 ADD ESP, 0x8 012E226B |. 0FB6D0 MOVZX EDX, AL 012E226E |. 85D2 TEST EDX, EDX 012E2270 |. 75 20 JNZ SHORT 012E2292 012E2272 |. 33C0 XOR EAX, EAX 012E2274 |. 8945 DC MOV DWORD PTR SS:[EBP-0x24], EAX 012E2277 |. 8945 E0 MOV DWORD PTR SS:[EBP-0x20], EAX 012E227A |. 8945 E4 MOV DWORD PTR SS:[EBP-0x1C], EAX 012E227D |. 8945 E8 MOV DWORD PTR SS:[EBP-0x18], EAX 012E2280 |. 33C9 XOR ECX, ECX 012E2282 |. 894D EC MOV DWORD PTR SS:[EBP-0x14], ECX 012E2285 |. 894D F0 MOV DWORD PTR SS:[EBP-0x10], ECX 012E2288 |. 894D F4 MOV DWORD PTR SS:[EBP-0xC], ECX 012E228B |. 894D F8 MOV DWORD PTR SS:[EBP-0x8], ECX 012E228E |. 33C0 XOR EAX, EAX 012E2290 |. EB 7E JMP SHORT 012E2310 012E2292 |> 8D55 BC LEA EDX, DWORD PTR SS:[EBP-0x44] 012E2295 |. 8955 B4 MOV DWORD PTR SS:[EBP-0x4C], EDX 012E2298 |. 8B45 B4 MOV EAX, DWORD PTR SS:[EBP-0x4C] 012E229B |. 83C0 01 ADD EAX, 0x1 012E229E |. 8945 B0 MOV DWORD PTR SS:[EBP-0x50], EAX 012E22A1 |> 8B4D B4 /MOV ECX, DWORD PTR SS:[EBP-0x4C] 012E22A4 |. 8A11 |MOV DL, BYTE PTR DS:[ECX] 012E22A6 |. 8855 BB |MOV BYTE PTR SS:[EBP-0x45], DL 012E22A9 |. 8345 B4 01 |ADD DWORD PTR SS:[EBP-0x4C], 0x1 012E22AD |. 807D BB 00 |CMP BYTE PTR SS:[EBP-0x45], 0x0 012E22B1 |.^ 75 EE \JNZ SHORT 012E22A1 012E22B3 |. 8B45 B4 MOV EAX, DWORD PTR SS:[EBP-0x4C] 012E22B6 |. 2B45 B0 SUB EAX, DWORD PTR SS:[EBP-0x50] 012E22B9 |. 8945 AC MOV DWORD PTR SS:[EBP-0x54], EAX 012E22BC |. 837D AC 16 CMP DWORD PTR SS:[EBP-0x54], 0x16 ; 输入字符串长度:0x16 012E22C0 |. 74 0E JE SHORT 012E22D0 012E22C2 |. 8D4D EC LEA ECX, DWORD PTR SS:[EBP-0x14] 012E22C5 |. 51 PUSH ECX ; /Arg1 012E22C6 |. E8 05EFFFFF CALL 012E11D0 ; \2018CMv4.012E11D0 012E22CB |. 83C4 04 ADD ESP, 0x4 012E22CE |. EB 14 JMP SHORT 012E22E4 012E22D0 |> 8D55 EC LEA EDX, DWORD PTR SS:[EBP-0x14] 012E22D3 |. 52 PUSH EDX ; /Arg3 012E22D4 |. 8D45 DC LEA EAX, DWORD PTR SS:[EBP-0x24] ; | 012E22D7 |. 50 PUSH EAX ; |Arg2 012E22D8 |. 8D4D BC LEA ECX, DWORD PTR SS:[EBP-0x44] ; | 012E22DB |. 51 PUSH ECX ; |Arg1 012E22DC |. E8 5FF9FFFF CALL 012E1C40 ; \验证核心函数 012E22E1 |. 83C4 0C ADD ESP, 0xC 012E22E4 |> 33D2 XOR EDX, EDX 012E22E6 |. 8955 EC MOV DWORD PTR SS:[EBP-0x14], EDX 012E22E9 |. 8955 F0 MOV DWORD PTR SS:[EBP-0x10], EDX 012E22EC |. 8955 F4 MOV DWORD PTR SS:[EBP-0xC], EDX 012E22EF |. 8955 F8 MOV DWORD PTR SS:[EBP-0x8], EDX 012E22F2 |. 33C0 XOR EAX, EAX 012E22F4 |. 8945 DC MOV DWORD PTR SS:[EBP-0x24], EAX 012E22F7 |. 8945 E0 MOV DWORD PTR SS:[EBP-0x20], EAX 012E22FA |. 8945 E4 MOV DWORD PTR SS:[EBP-0x1C], EAX 012E22FD |. 8945 E8 MOV DWORD PTR SS:[EBP-0x18], EAX 012E2300 |. 68 F4512E01 PUSH 012E51F4 ; /command = "pause" 012E2305 |. FF15 D4502E01 CALL DWORD PTR DS:[<&api-ms-win-crt-runtime-l1-1-0.system>] ; \system 012E230B |. 83C4 04 ADD ESP, 0x4 012E230E |. 33C0 XOR EAX, EAX 012E2310 |> 8B4D FC MOV ECX, DWORD PTR SS:[EBP-0x4] 012E2313 |. 33CD XOR ECX, EBP 012E2315 |. E8 8B1A0000 CALL 012E3DA5 012E231A |. 8BE5 MOV ESP, EBP 012E231C |. 5D POP EBP 012E231D \. C3 RET
0x01 验证核心函数:
012E1C40 /$ 55 PUSH EBP 012E1C41 |. 8BEC MOV EBP, ESP 012E1C43 |. 6A FF PUSH -0x1 012E1C45 |. 68 084C2E01 PUSH 012E4C08 012E1C4A |. 64:A1 0000000>MOV EAX, DWORD PTR FS:[0] 012E1C50 |. 50 PUSH EAX 012E1C51 |. 81EC 70040000 SUB ESP, 0x470 012E1C57 |. A1 08702E01 MOV EAX, DWORD PTR DS:[0x12E7008] 012E1C5C |. 33C5 XOR EAX, EBP 012E1C5E |. 8945 F0 MOV DWORD PTR SS:[EBP-0x10], EAX 012E1C61 |. 50 PUSH EAX 012E1C62 |. 8D45 F4 LEA EAX, DWORD PTR SS:[EBP-0xC] 012E1C65 |. 64:A3 0000000>MOV DWORD PTR FS:[0], EAX 012E1C6B |. B8 01000000 MOV EAX, 0x1 012E1C70 |. D1E0 SHL EAX, 1 012E1C72 |. 8945 C0 MOV DWORD PTR SS:[EBP-0x40], EAX 012E1C75 |. 837D C0 03 CMP DWORD PTR SS:[EBP-0x40], 0x3 012E1C79 |. 73 02 JNB SHORT 012E1C7D 012E1C7B |. EB 05 JMP SHORT 012E1C82 012E1C7D |> E8 57220000 CALL 012E3ED9 012E1C82 |> 8B4D C0 MOV ECX, DWORD PTR SS:[EBP-0x40] ; 分割输入字符串为多个子字符串结束位置 012E1C85 |. C6440D E0 00 MOV BYTE PTR SS:[EBP+ECX-0x20], 0x0 012E1C8A |. BA 01000000 MOV EDX, 0x1 012E1C8F |. D1E2 SHL EDX, 1 012E1C91 |. B8 01000000 MOV EAX, 0x1 012E1C96 |. 6BC8 00 IMUL ECX, EAX, 0x0 012E1C99 |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1C9C |. 8A1410 MOV DL, BYTE PTR DS:[EAX+EDX] 012E1C9F |. 88540D CC MOV BYTE PTR SS:[EBP+ECX-0x34], DL 012E1CA3 |. B8 01000000 MOV EAX, 0x1 012E1CA8 |. 6BC8 03 IMUL ECX, EAX, 0x3 012E1CAB |. 894D BC MOV DWORD PTR SS:[EBP-0x44], ECX 012E1CAE |. 837D BC 04 CMP DWORD PTR SS:[EBP-0x44], 0x4 012E1CB2 |. 73 02 JNB SHORT 012E1CB6 012E1CB4 |. EB 05 JMP SHORT 012E1CBB 012E1CB6 |> E8 1E220000 CALL 012E3ED9 012E1CBB |> 8B55 BC MOV EDX, DWORD PTR SS:[EBP-0x44] 012E1CBE |. C64415 C8 00 MOV BYTE PTR SS:[EBP+EDX-0x38], 0x0 012E1CC3 |. B8 01000000 MOV EAX, 0x1 012E1CC8 |. C1E0 00 SHL EAX, 0x0 012E1CCB |. B9 01000000 MOV ECX, 0x1 012E1CD0 |. C1E1 00 SHL ECX, 0x0 012E1CD3 |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] 012E1CD6 |. 8A0402 MOV AL, BYTE PTR DS:[EDX+EAX] 012E1CD9 |. 88440D E0 MOV BYTE PTR SS:[EBP+ECX-0x20], AL 012E1CDD |. B9 01000000 MOV ECX, 0x1 012E1CE2 |. 6BD1 0C IMUL EDX, ECX, 0xC 012E1CE5 |. B8 01000000 MOV EAX, 0x1 012E1CEA |. 6BC8 03 IMUL ECX, EAX, 0x3 012E1CED |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1CF0 |. 8A1410 MOV DL, BYTE PTR DS:[EAX+EDX] 012E1CF3 |. 88540D E8 MOV BYTE PTR SS:[EBP+ECX-0x18], DL 012E1CF7 |. B8 01000000 MOV EAX, 0x1 012E1CFC |. C1E0 04 SHL EAX, 0x4 012E1CFF |. B9 01000000 MOV ECX, 0x1 012E1D04 |. 6BD1 00 IMUL EDX, ECX, 0x0 012E1D07 |. 8B4D 08 MOV ECX, DWORD PTR SS:[EBP+0x8] 012E1D0A |. 8A0401 MOV AL, BYTE PTR DS:[ECX+EAX] 012E1D0D |. 884415 D4 MOV BYTE PTR SS:[EBP+EDX-0x2C], AL 012E1D11 |. B9 01000000 MOV ECX, 0x1 012E1D16 |. 6BD1 09 IMUL EDX, ECX, 0x9 012E1D19 |. B8 01000000 MOV EAX, 0x1 012E1D1E |. 6BC8 00 IMUL ECX, EAX, 0x0 012E1D21 |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1D24 |. 8A1410 MOV DL, BYTE PTR DS:[EAX+EDX] 012E1D27 |. 88540D E8 MOV BYTE PTR SS:[EBP+ECX-0x18], DL 012E1D2B |. B8 01000000 MOV EAX, 0x1 012E1D30 |. 6BC8 07 IMUL ECX, EAX, 0x7 012E1D33 |. BA 01000000 MOV EDX, 0x1 012E1D38 |. 6BC2 00 IMUL EAX, EDX, 0x0 012E1D3B |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] 012E1D3E |. 8A0C0A MOV CL, BYTE PTR DS:[EDX+ECX] 012E1D41 |. 884C05 E4 MOV BYTE PTR SS:[EBP+EAX-0x1C], CL 012E1D45 |. BA 01000000 MOV EDX, 0x1 012E1D4A |. 6BC2 0A IMUL EAX, EDX, 0xA 012E1D4D |. B9 01000000 MOV ECX, 0x1 012E1D52 |. C1E1 00 SHL ECX, 0x0 012E1D55 |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] 012E1D58 |. 8A0402 MOV AL, BYTE PTR DS:[EDX+EAX] 012E1D5B |. 88440D E8 MOV BYTE PTR SS:[EBP+ECX-0x18], AL 012E1D5F |. B9 01000000 MOV ECX, 0x1 012E1D64 |. C1E1 03 SHL ECX, 0x3 012E1D67 |. BA 01000000 MOV EDX, 0x1 012E1D6C |. C1E2 00 SHL EDX, 0x0 012E1D6F |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1D72 |. 8A0C08 MOV CL, BYTE PTR DS:[EAX+ECX] 012E1D75 |. 884C15 E4 MOV BYTE PTR SS:[EBP+EDX-0x1C], CL 012E1D79 |. BA 01000000 MOV EDX, 0x1 012E1D7E |. 6BC2 14 IMUL EAX, EDX, 0x14 012E1D81 |. B9 01000000 MOV ECX, 0x1 012E1D86 |. C1E1 00 SHL ECX, 0x0 012E1D89 |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] 012E1D8C |. 8A0402 MOV AL, BYTE PTR DS:[EDX+EAX] 012E1D8F |. 88440D C4 MOV BYTE PTR SS:[EBP+ECX-0x3C], AL 012E1D93 |. B9 01000000 MOV ECX, 0x1 012E1D98 |. C1E1 02 SHL ECX, 0x2 012E1D9B |. 894D B8 MOV DWORD PTR SS:[EBP-0x48], ECX 012E1D9E |. 837D B8 05 CMP DWORD PTR SS:[EBP-0x48], 0x5 012E1DA2 |. 73 02 JNB SHORT 012E1DA6 012E1DA4 |. EB 05 JMP SHORT 012E1DAB 012E1DA6 |> E8 2E210000 CALL 012E3ED9 012E1DAB |> 8B55 B8 MOV EDX, DWORD PTR SS:[EBP-0x48] 012E1DAE |. C64415 E8 00 MOV BYTE PTR SS:[EBP+EDX-0x18], 0x0 012E1DB3 |. B8 01000000 MOV EAX, 0x1 012E1DB8 |. 6BC8 0F IMUL ECX, EAX, 0xF 012E1DBB |. BA 01000000 MOV EDX, 0x1 012E1DC0 |. D1E2 SHL EDX, 1 012E1DC2 |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1DC5 |. 8A0C08 MOV CL, BYTE PTR DS:[EAX+ECX] 012E1DC8 |. 884C15 D0 MOV BYTE PTR SS:[EBP+EDX-0x30], CL 012E1DCC |. BA 01000000 MOV EDX, 0x1 012E1DD1 |. D1E2 SHL EDX, 1 012E1DD3 |. 8955 B4 MOV DWORD PTR SS:[EBP-0x4C], EDX 012E1DD6 |. 837D B4 03 CMP DWORD PTR SS:[EBP-0x4C], 0x3 012E1DDA |. 73 02 JNB SHORT 012E1DDE 012E1DDC |. EB 05 JMP SHORT 012E1DE3 012E1DDE |> E8 F6200000 CALL 012E3ED9 012E1DE3 |> 8B45 B4 MOV EAX, DWORD PTR SS:[EBP-0x4C] 012E1DE6 |. C64405 CC 00 MOV BYTE PTR SS:[EBP+EAX-0x34], 0x0 012E1DEB |. B9 01000000 MOV ECX, 0x1 012E1DF0 |. D1E1 SHL ECX, 1 012E1DF2 |. 894D B0 MOV DWORD PTR SS:[EBP-0x50], ECX 012E1DF5 |. 837D B0 03 CMP DWORD PTR SS:[EBP-0x50], 0x3 012E1DF9 |. 73 02 JNB SHORT 012E1DFD 012E1DFB |. EB 05 JMP SHORT 012E1E02 012E1DFD |> E8 D7200000 CALL 012E3ED9 012E1E02 |> 8B55 B0 MOV EDX, DWORD PTR SS:[EBP-0x50] 012E1E05 |. C64415 E4 00 MOV BYTE PTR SS:[EBP+EDX-0x1C], 0x0 012E1E0A |. B8 01000000 MOV EAX, 0x1 012E1E0F |. 6BC8 06 IMUL ECX, EAX, 0x6 012E1E12 |. BA 01000000 MOV EDX, 0x1 012E1E17 |. D1E2 SHL EDX, 1 012E1E19 |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1E1C |. 8A0C08 MOV CL, BYTE PTR DS:[EAX+ECX] 012E1E1F |. 884C15 C8 MOV BYTE PTR SS:[EBP+EDX-0x38], CL 012E1E23 |. BA 01000000 MOV EDX, 0x1 012E1E28 |. 6BC2 0E IMUL EAX, EDX, 0xE 012E1E2B |. B9 01000000 MOV ECX, 0x1 012E1E30 |. C1E1 00 SHL ECX, 0x0 012E1E33 |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] 012E1E36 |. 8A0402 MOV AL, BYTE PTR DS:[EDX+EAX] 012E1E39 |. 88440D D0 MOV BYTE PTR SS:[EBP+ECX-0x30], AL 012E1E3D |. B9 01000000 MOV ECX, 0x1 012E1E42 |. C1E1 02 SHL ECX, 0x2 012E1E45 |. BA 01000000 MOV EDX, 0x1 012E1E4A |. 6BC2 00 IMUL EAX, EDX, 0x0 012E1E4D |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] 012E1E50 |. 8A0C0A MOV CL, BYTE PTR DS:[EDX+ECX] 012E1E53 |. 884C05 C8 MOV BYTE PTR SS:[EBP+EAX-0x38], CL 012E1E57 |. BA 01000000 MOV EDX, 0x1 012E1E5C |. 6BC2 03 IMUL EAX, EDX, 0x3 012E1E5F |. B9 01000000 MOV ECX, 0x1 012E1E64 |. C1E1 00 SHL ECX, 0x0 012E1E67 |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] 012E1E6A |. 8A0402 MOV AL, BYTE PTR DS:[EDX+EAX] 012E1E6D |. 88440D CC MOV BYTE PTR SS:[EBP+ECX-0x34], AL 012E1E71 |. B9 01000000 MOV ECX, 0x1 012E1E76 |. 6BD1 0D IMUL EDX, ECX, 0xD 012E1E79 |. B8 01000000 MOV EAX, 0x1 012E1E7E |. 6BC8 00 IMUL ECX, EAX, 0x0 012E1E81 |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1E84 |. 8A1410 MOV DL, BYTE PTR DS:[EAX+EDX] 012E1E87 |. 88540D D0 MOV BYTE PTR SS:[EBP+ECX-0x30], DL 012E1E8B |. B8 01000000 MOV EAX, 0x1 012E1E90 |. 6BC8 03 IMUL ECX, EAX, 0x3 012E1E93 |. 894D AC MOV DWORD PTR SS:[EBP-0x54], ECX 012E1E96 |. 837D AC 04 CMP DWORD PTR SS:[EBP-0x54], 0x4 012E1E9A |. 73 02 JNB SHORT 012E1E9E 012E1E9C |. EB 05 JMP SHORT 012E1EA3 012E1E9E |> E8 36200000 CALL 012E3ED9 012E1EA3 |> 8B55 AC MOV EDX, DWORD PTR SS:[EBP-0x54] 012E1EA6 |. C64415 D4 00 MOV BYTE PTR SS:[EBP+EDX-0x2C], 0x0 012E1EAB |. B8 01000000 MOV EAX, 0x1 012E1EB0 |. 6BC8 05 IMUL ECX, EAX, 0x5 012E1EB3 |. BA 01000000 MOV EDX, 0x1 012E1EB8 |. C1E2 00 SHL EDX, 0x0 012E1EBB |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1EBE |. 8A0C08 MOV CL, BYTE PTR DS:[EAX+ECX] 012E1EC1 |. 884C15 C8 MOV BYTE PTR SS:[EBP+EDX-0x38], CL 012E1EC5 |. BA 01000000 MOV EDX, 0x1 012E1ECA |. 6BC2 11 IMUL EAX, EDX, 0x11 012E1ECD |. B9 01000000 MOV ECX, 0x1 012E1ED2 |. C1E1 00 SHL ECX, 0x0 012E1ED5 |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] 012E1ED8 |. 8A0402 MOV AL, BYTE PTR DS:[EDX+EAX] 012E1EDB |. 88440D D4 MOV BYTE PTR SS:[EBP+ECX-0x2C], AL 012E1EDF |. B9 01000000 MOV ECX, 0x1 012E1EE4 |. 6BD1 00 IMUL EDX, ECX, 0x0 012E1EE7 |. B8 01000000 MOV EAX, 0x1 012E1EEC |. 6BC8 00 IMUL ECX, EAX, 0x0 012E1EEF |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1EF2 |. 8A1410 MOV DL, BYTE PTR DS:[EAX+EDX] 012E1EF5 |. 88540D E0 MOV BYTE PTR SS:[EBP+ECX-0x20], DL 012E1EF9 |. B8 01000000 MOV EAX, 0x1 012E1EFE |. 6BC8 15 IMUL ECX, EAX, 0x15 012E1F01 |. BA 01000000 MOV EDX, 0x1 012E1F06 |. D1E2 SHL EDX, 1 012E1F08 |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1F0B |. 8A0C08 MOV CL, BYTE PTR DS:[EAX+ECX] 012E1F0E |. 884C15 C4 MOV BYTE PTR SS:[EBP+EDX-0x3C], CL 012E1F12 |. BA 01000000 MOV EDX, 0x1 012E1F17 |. 6BC2 03 IMUL EAX, EDX, 0x3 012E1F1A |. 8945 A8 MOV DWORD PTR SS:[EBP-0x58], EAX 012E1F1D |. 837D A8 04 CMP DWORD PTR SS:[EBP-0x58], 0x4 012E1F21 |. 73 02 JNB SHORT 012E1F25 012E1F23 |. EB 05 JMP SHORT 012E1F2A 012E1F25 |> E8 AF1F0000 CALL 012E3ED9 012E1F2A |> 8B4D A8 MOV ECX, DWORD PTR SS:[EBP-0x58] 012E1F2D |. C6440D D0 00 MOV BYTE PTR SS:[EBP+ECX-0x30], 0x0 012E1F32 |. BA 01000000 MOV EDX, 0x1 012E1F37 |. 6BC2 13 IMUL EAX, EDX, 0x13 012E1F3A |. B9 01000000 MOV ECX, 0x1 012E1F3F |. 6BD1 00 IMUL EDX, ECX, 0x0 012E1F42 |. 8B4D 08 MOV ECX, DWORD PTR SS:[EBP+0x8] 012E1F45 |. 8A0401 MOV AL, BYTE PTR DS:[ECX+EAX] 012E1F48 |. 884415 C4 MOV BYTE PTR SS:[EBP+EDX-0x3C], AL 012E1F4C |. B9 01000000 MOV ECX, 0x1 012E1F51 |. 6BD1 0B IMUL EDX, ECX, 0xB 012E1F54 |. B8 01000000 MOV EAX, 0x1 012E1F59 |. D1E0 SHL EAX, 1 012E1F5B |. 8B4D 08 MOV ECX, DWORD PTR SS:[EBP+0x8] 012E1F5E |. 8A1411 MOV DL, BYTE PTR DS:[ECX+EDX] 012E1F61 |. 885405 E8 MOV BYTE PTR SS:[EBP+EAX-0x18], DL 012E1F65 |. B8 01000000 MOV EAX, 0x1 012E1F6A |. 6BC8 12 IMUL ECX, EAX, 0x12 012E1F6D |. BA 01000000 MOV EDX, 0x1 012E1F72 |. D1E2 SHL EDX, 1 012E1F74 |. 8B45 08 MOV EAX, DWORD PTR SS:[EBP+0x8] 012E1F77 |. 8A0C08 MOV CL, BYTE PTR DS:[EAX+ECX] 012E1F7A |. 884C15 D4 MOV BYTE PTR SS:[EBP+EDX-0x2C], CL 012E1F7E |. BA 01000000 MOV EDX, 0x1 012E1F83 |. 6BC2 03 IMUL EAX, EDX, 0x3 012E1F86 |. 8945 A4 MOV DWORD PTR SS:[EBP-0x5C], EAX 012E1F89 |. 837D A4 04 CMP DWORD PTR SS:[EBP-0x5C], 0x4 012E1F8D |. 73 02 JNB SHORT 012E1F91 012E1F8F |. EB 05 JMP SHORT 012E1F96 012E1F91 |> E8 431F0000 CALL 012E3ED9 012E1F96 |> 8B4D A4 MOV ECX, DWORD PTR SS:[EBP-0x5C] 012E1F99 |. C6440D C4 00 MOV BYTE PTR SS:[EBP+ECX-0x3C], 0x0 012E1F9E |. 33D2 XOR EDX, EDX 012E1FA0 |. 8955 D8 MOV DWORD PTR SS:[EBP-0x28], EDX 012E1FA3 |. 8955 DC MOV DWORD PTR SS:[EBP-0x24], EDX 012E1FA6 |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] ; 分割输入字符串为多个子字符串结束位置 012E1FA9 |. E8 420A0000 CALL 012E29F0 012E1FAE |. C745 FC 00000>MOV DWORD PTR SS:[EBP-0x4], 0x0 ; Trie树插入字符串开始位置 012E1FB5 |. 8D45 D0 LEA EAX, DWORD PTR SS:[EBP-0x30] 012E1FB8 |. 50 PUSH EAX ; /Arg1 012E1FB9 |. 8D8D 20FFFFFF LEA ECX, DWORD PTR SS:[EBP-0xE0] ; | 012E1FBF |. E8 EC1A0000 CALL 012E3AB0 ; \2018CMv4.012E3AB0 012E1FC4 |. 8D8D 20FFFFFF LEA ECX, DWORD PTR SS:[EBP-0xE0] 012E1FCA |. 51 PUSH ECX ; /Arg1 012E1FCB |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] ; | 012E1FCE |. E8 6D0B0000 CALL 012E2B40 ; \2018CMv4.012E2B40 012E1FD3 |. 8D55 E0 LEA EDX, DWORD PTR SS:[EBP-0x20] 012E1FD6 |. 52 PUSH EDX ; /Arg1 012E1FD7 |. 8D8D 9CFEFFFF LEA ECX, DWORD PTR SS:[EBP-0x164] ; | 012E1FDD |. E8 CE1A0000 CALL 012E3AB0 ; \2018CMv4.012E3AB0 012E1FE2 |. 8D85 9CFEFFFF LEA EAX, DWORD PTR SS:[EBP-0x164] 012E1FE8 |. 50 PUSH EAX ; /Arg1 012E1FE9 |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] ; | 012E1FEC |. E8 4F0B0000 CALL 012E2B40 ; \2018CMv4.012E2B40 012E1FF1 |. 8D4D E8 LEA ECX, DWORD PTR SS:[EBP-0x18] 012E1FF4 |. 51 PUSH ECX ; /Arg1 012E1FF5 |. 8D8D 18FEFFFF LEA ECX, DWORD PTR SS:[EBP-0x1E8] ; | 012E1FFB |. E8 B01A0000 CALL 012E3AB0 ; \2018CMv4.012E3AB0 012E2000 |. 8D95 18FEFFFF LEA EDX, DWORD PTR SS:[EBP-0x1E8] 012E2006 |. 52 PUSH EDX ; /Arg1 012E2007 |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] ; | 012E200A |. E8 310B0000 CALL 012E2B40 ; \2018CMv4.012E2B40 012E200F |. 8D45 C8 LEA EAX, DWORD PTR SS:[EBP-0x38] 012E2012 |. 50 PUSH EAX ; /Arg1 012E2013 |. 8D8D 94FDFFFF LEA ECX, DWORD PTR SS:[EBP-0x26C] ; | 012E2019 |. E8 921A0000 CALL 012E3AB0 ; \2018CMv4.012E3AB0 012E201E |. 8D8D 94FDFFFF LEA ECX, DWORD PTR SS:[EBP-0x26C] 012E2024 |. 51 PUSH ECX ; /Arg1 012E2025 |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] ; | 012E2028 |. E8 130B0000 CALL 012E2B40 ; \2018CMv4.012E2B40 012E202D |. 8D55 CC LEA EDX, DWORD PTR SS:[EBP-0x34] 012E2030 |. 52 PUSH EDX ; /Arg1 012E2031 |. 8D8D 10FDFFFF LEA ECX, DWORD PTR SS:[EBP-0x2F0] ; | 012E2037 |. E8 741A0000 CALL 012E3AB0 ; \2018CMv4.012E3AB0 012E203C |. 8D85 10FDFFFF LEA EAX, DWORD PTR SS:[EBP-0x2F0] 012E2042 |. 50 PUSH EAX ; /Arg1 012E2043 |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] ; | 012E2046 |. E8 F50A0000 CALL 012E2B40 ; \2018CMv4.012E2B40 012E204B |. 8D4D E4 LEA ECX, DWORD PTR SS:[EBP-0x1C] 012E204E |. 51 PUSH ECX ; /Arg1 012E204F |. 8D8D 8CFCFFFF LEA ECX, DWORD PTR SS:[EBP-0x374] ; | 012E2055 |. E8 561A0000 CALL 012E3AB0 ; \2018CMv4.012E3AB0 012E205A |. 8D95 8CFCFFFF LEA EDX, DWORD PTR SS:[EBP-0x374] 012E2060 |. 52 PUSH EDX ; /Arg1 012E2061 |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] ; | 012E2064 |. E8 D70A0000 CALL 012E2B40 ; \2018CMv4.012E2B40 012E2069 |. 8D45 D4 LEA EAX, DWORD PTR SS:[EBP-0x2C] 012E206C |. 50 PUSH EAX ; /Arg1 012E206D |. 8D8D 08FCFFFF LEA ECX, DWORD PTR SS:[EBP-0x3F8] ; | 012E2073 |. E8 381A0000 CALL 012E3AB0 ; \2018CMv4.012E3AB0 012E2078 |. 8D8D 08FCFFFF LEA ECX, DWORD PTR SS:[EBP-0x3F8] 012E207E |. 51 PUSH ECX ; /Arg1 012E207F |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] ; | 012E2082 |. E8 B90A0000 CALL 012E2B40 ; \2018CMv4.012E2B40 012E2087 |. 8D55 C4 LEA EDX, DWORD PTR SS:[EBP-0x3C] 012E208A |. 52 PUSH EDX ; /Arg1 012E208B |. 8D8D 84FBFFFF LEA ECX, DWORD PTR SS:[EBP-0x47C] ; | 012E2091 |. E8 1A1A0000 CALL 012E3AB0 ; \2018CMv4.012E3AB0 012E2096 |. 8D85 84FBFFFF LEA EAX, DWORD PTR SS:[EBP-0x47C] 012E209C |. 50 PUSH EAX ; /Arg1 012E209D |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] ; | 012E20A0 |. E8 9B0A0000 CALL 012E2B40 ; \Trie树插入字符串结束位置 012E20A5 |. 68 487E2E01 PUSH 012E7E48 ; /Arg1 = 012E7E48 012E20AA |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] ; | 012E20AD |. E8 2E100000 CALL 012E30E0 ; \Trie树对比,成功返回1 012E20B2 |. 0FB6C8 MOVZX ECX, AL 012E20B5 |. 85C9 TEST ECX, ECX 012E20B7 |. 74 22 JE SHORT 012E20DB 012E20B9 |. 8B55 10 MOV EDX, DWORD PTR SS:[EBP+0x10] 012E20BC |. 52 PUSH EDX ; /Arg6 012E20BD |. 8B45 0C MOV EAX, DWORD PTR SS:[EBP+0xC] ; | 012E20C0 |. 50 PUSH EAX ; |Arg5 012E20C1 |. 8D4D D4 LEA ECX, DWORD PTR SS:[EBP-0x2C] ; | 012E20C4 |. 51 PUSH ECX ; |Arg4 012E20C5 |. 8D55 D0 LEA EDX, DWORD PTR SS:[EBP-0x30] ; | 012E20C8 |. 52 PUSH EDX ; |Arg3 012E20C9 |. 8D45 E4 LEA EAX, DWORD PTR SS:[EBP-0x1C] ; | 012E20CC |. 50 PUSH EAX ; |Arg2 012E20CD |. 8D4D E0 LEA ECX, DWORD PTR SS:[EBP-0x20] ; | 012E20D0 |. 51 PUSH ECX ; |Arg1 012E20D1 |. E8 AAFAFFFF CALL 012E1B80 ; \对子字符串位置进行验证 012E20D6 |. 83C4 18 ADD ESP, 0x18 012E20D9 |. EB 0C JMP SHORT 012E20E7 012E20DB |> 8B55 10 MOV EDX, DWORD PTR SS:[EBP+0x10] 012E20DE |. 52 PUSH EDX ; /Arg1 012E20DF |. E8 ECF0FFFF CALL 012E11D0 ; \2018CMv4.012E11D0 012E20E4 |. 83C4 04 ADD ESP, 0x4 012E20E7 |> C745 FC FFFFF>MOV DWORD PTR SS:[EBP-0x4], -0x1 012E20EE |. 8D4D D8 LEA ECX, DWORD PTR SS:[EBP-0x28] 012E20F1 |. E8 CA090000 CALL 012E2AC0 012E20F6 |. 8B4D F4 MOV ECX, DWORD PTR SS:[EBP-0xC] 012E20F9 |. 64:890D 00000>MOV DWORD PTR FS:[0], ECX 012E2100 |. 59 POP ECX 012E2101 |. 8B4D F0 MOV ECX, DWORD PTR SS:[EBP-0x10] 012E2104 |. 33CD XOR ECX, EBP 012E2106 |. E8 9A1C0000 CALL 012E3DA5 012E210B |. 8BE5 MOV ESP, EBP 012E210D |. 5D POP EBP 012E210E \. C3 RET
0x02 验证Trie树数据解析对比:
程序启动后在012E7980地址处初始化验证Trie树,用于和输入字符串生成的Trie树对比。 012E7980为root节点,初始化树结构如下: c 2 0 7 1 1 M 1 2 k 0 1 t 2 1 9 0 1 f 0 1 kx 0 1 结构解析: kx 0 1 kx -- 字符串信息 offset+0x4 0 -- 子节点数量 offset+0x108 1 -- 出现次数 offset+0x10c 如果子节点数量非0,则从offset+0x88位置顺序存储子节点指针地址。 通过上面初始化Trie树解析可以得到如下字符串 kx c7 c7M c7M c7Mk ct ct9 ctf 调试运行程序,输入0123456789abcdefghijkl(选择这个字符串是为了方便定位位置) 在Trie树插入字符串开始位置下断,一直到结束位置,可以得到分割的子字符串如下 def 01 9abc 456 23 78 ghi jkl 通过字符串长度和出现次数,我们随意拼接一组字符串如下 kxc7c7Mctc7Mkctfct9c7M 到这里Trie树对比完成,但还是提示错误,应为后面还有最后一步,对子字符串位置进行验证。
0x03 子字符串位置验证:
012E1B80 /$ 55 PUSH EBP 012E1B81 |. 8BEC MOV EBP, ESP 012E1B83 |. B8 01000000 MOV EAX, 0x1 012E1B88 |. 6BC8 00 IMUL ECX, EAX, 0x0 012E1B8B |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] 012E1B8E |. 0FBE040A MOVSX EAX, BYTE PTR DS:[EDX+ECX] 012E1B92 |. B9 01000000 MOV ECX, 0x1 012E1B97 |. C1E1 00 SHL ECX, 0x0 012E1B9A |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] 012E1B9D |. 0FBE0C0A MOVSX ECX, BYTE PTR DS:[EDX+ECX] 012E1BA1 |. 33C1 XOR EAX, ECX 012E1BA3 |. 83F8 54 CMP EAX, 0x54 ; 第1个子字符串字节异或结果必须为0x54 012E1BA6 |. 75 7B JNZ SHORT 012E1C23 012E1BA8 |. BA 01000000 MOV EDX, 0x1 012E1BAD |. 6BC2 00 IMUL EAX, EDX, 0x0 012E1BB0 |. 8B4D 0C MOV ECX, DWORD PTR SS:[EBP+0xC] 012E1BB3 |. 0FBE1401 MOVSX EDX, BYTE PTR DS:[ECX+EAX] 012E1BB7 |. B8 01000000 MOV EAX, 0x1 012E1BBC |. C1E0 00 SHL EAX, 0x0 012E1BBF |. 8B4D 0C MOV ECX, DWORD PTR SS:[EBP+0xC] 012E1BC2 |. 0FBE0401 MOVSX EAX, BYTE PTR DS:[ECX+EAX] 012E1BC6 |. 33D0 XOR EDX, EAX 012E1BC8 |. 83FA 13 CMP EDX, 0x13 ; 第2个子字符串字节异或结果必须为0x13 012E1BCB |. 75 56 JNZ SHORT 012E1C23 012E1BCD |. B9 01000000 MOV ECX, 0x1 012E1BD2 |. D1E1 SHL ECX, 1 012E1BD4 |. 8B55 10 MOV EDX, DWORD PTR SS:[EBP+0x10] 012E1BD7 |. 0FBE040A MOVSX EAX, BYTE PTR DS:[EDX+ECX] 012E1BDB |. B9 01000000 MOV ECX, 0x1 012E1BE0 |. C1E1 00 SHL ECX, 0x0 012E1BE3 |. 8B55 10 MOV EDX, DWORD PTR SS:[EBP+0x10] 012E1BE6 |. 0FBE0C0A MOVSX ECX, BYTE PTR DS:[EDX+ECX] 012E1BEA |. 33C1 XOR EAX, ECX 012E1BEC |. 83F8 12 CMP EAX, 0x12 ; 第6个子字符串后2个字节异或结果必须为0x12 012E1BEF |. 75 32 JNZ SHORT 012E1C23 012E1BF1 |. BA 01000000 MOV EDX, 0x1 012E1BF6 |. C1E2 00 SHL EDX, 0x0 012E1BF9 |. 8B45 14 MOV EAX, DWORD PTR SS:[EBP+0x14] 012E1BFC |. 0FBE0C10 MOVSX ECX, BYTE PTR DS:[EAX+EDX] 012E1C00 |. BA 01000000 MOV EDX, 0x1 012E1C05 |. D1E2 SHL EDX, 1 012E1C07 |. 8B45 14 MOV EAX, DWORD PTR SS:[EBP+0x14] 012E1C0A |. 0FBE1410 MOVSX EDX, BYTE PTR DS:[EAX+EDX] 012E1C0E |. 33CA XOR ECX, EDX 012E1C10 |. 83F9 4D CMP ECX, 0x4D ; 第7个子字符串后2个字节异或结果必须为0x4D 012E1C13 |. 75 0E JNZ SHORT 012E1C23 012E1C15 |. 8B45 18 MOV EAX, DWORD PTR SS:[EBP+0x18] 012E1C18 |. 50 PUSH EAX ; /Arg1 012E1C19 |. E8 B2F5FFFF CALL 012E11D0 ; \验证正确提示 012E1C1E |. 83C4 04 ADD ESP, 0x4 012E1C21 |. EB 0C JMP SHORT 012E1C2F 012E1C23 |> 8B4D 1C MOV ECX, DWORD PTR SS:[EBP+0x1C] 012E1C26 |. 51 PUSH ECX ; /Arg1 012E1C27 |. E8 A4F5FFFF CALL 012E11D0 ; \2018CMv4.012E11D0 012E1C2C |. 83C4 04 ADD ESP, 0x4 012E1C2F |> 5D POP EBP 012E1C30 \. C3 RET
0x04 正确答案:
c7ctc7Mkxc7Mkctfct9c7M
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
看原图
赞赏
雪币:
留言: