首页
社区
课程
招聘
[原创] 看雪.京东 2018CTF 第二题
发表于: 2018-6-19 02:21 2488

[原创] 看雪.京东 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期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//