OD载入程序,停在这里:
005256B0 > 55 PUSH EBP
005256B1 |. 8BEC MOV EBP,ESP
005256B3 |. 83C4 F4 ADD ESP,-0C
005256B6 |. E8 15E1EDFF CALL TMS22.004037D0
005256BB |. E8 340AEEFF CALL TMS22.004060F4
005256C0 |. E8 2F56EEFF CALL TMS22.0040ACF4
005256C5 |. E8 9AC5EEFF CALL TMS22.00411C64
005256CA |. E8 6DD5EEFF CALL TMS22.00412C3C
F9。来到这里:
7C81EB33 5E POP ESI
7C81EB34 C9 LEAVE
7C81EB35 C2 1000 RETN 10
7C81EB38 85FF TEST EDI,EDI
7C81EB3A ^ 0F8E E6D0FEFF JLE kernel32.7C80BC26
7C81EB40 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
7C81EB43 8955 0C MOV DWORD PTR SS:[EBP+C],EDX
7C81EB46 0FB716 MOVZX EDX,WORD PTR DS:[ESI]
7C81EB49 8B7D F8 MOV EDI,DWORD PTR SS:[EBP-8]
7C81EB4C 8A143A MOV DL,BYTE PTR DS:[EDX+EDI]
7C81EB4F 8811 MOV BYTE PTR DS:[ECX],DL
7C81EB51 8B78 0C MOV EDI,DWORD PTR DS:[EAX+C]
7C81EB54 0FB6D2 MOVZX EDX,DL
CPU窗口下方显示:
Stack [0012FD04]=FFFFFFFF
ESI=0012FD8C
整个窗口下方提示:
例外 OEEDFACE-使用 Shift+F7/F8/F9来通过程序例外。
此时的寄存器窗口情况如下:
EAX 0012FD08
ECX 00000000
EDX 0044E150 TMS22.0044E150
EBX 00122208
ESP 0012FD04
EBP 0012FD58
ESI 0012FD8C
EDI 7C930738 ntdll.7C930738
EIP 7C81EB33 kernel32.7C81EB33
C 0 ES 0023 32位 0(FFFFFFFF)
P 0 CS 001B 32位 0(FFFFFFFF)
A 0 SS 0023 32位 0(FFFFFFFF)
Z 0 DS 0023 32位 0(FFFFFFFF)
S 0 FS 003B 32位 7FFDF000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_SUCCESS (00000000)
EFL 00000202 (NO,NB,NE,A,NS,PO,GE,G)
ST0 empty 7.3425752709623961600
ST1 empty 23.352865954566005760
ST2 empty 111.29743639608906240
ST3 empty 2035.6020761245672960
ST4 empty 11345.481353325642240
ST5 empty 1.0000000000000000000
ST6 empty 1.0000000000000000000
ST7 empty 1.0000000000000000000
3 2 1 0 E S P U O Z D I
FST 4020 Cond 1 0 0 0 Err 0 0 1 0 0 0 0 0 (EQ)
FCW 1272 Prec NEAR,53 Mask 1 1 0 0 1 0
堆栈情况如下:
0012FD04 FFFFFFFF
0012FD08 0EEDFACE
0012FD0C 00000001
0012FD10 00000000
0012FD14 7C81EB33 RETURN to kernel32.7C81EB33 from ntdll.RtlRaiseException
0012FD18 00000007
0012FD1C 0044E150 RETURN to TMS22.0044E150 from TMS22.004035A8
0012FD20 00FAE35C
F9后,停在这里:
00FAE343 0016 ADD BYTE PTR DS:[ESI],DL
00FAE345 0000 ADD BYTE PTR DS:[EAX],AL
00FAE347 0090 C4FA0070 ADD BYTE PTR DS:[EAX+7000FAC4],DL
00FAE34D C5FA LDS EDI,EDX ; 非法使用寄存器
00FAE34F 0030 ADD BYTE PTR DS:[EAX],DH
00FAE351 3030 XOR BYTE PTR DS:[EAX],DH
00FAE353 3900 CMP DWORD PTR DS:[EAX],EAX
00FAE355 65: PREFIX GS: ; 多余前缀
00FAE356 64:0D 16000000 OR EAX,16 ; 多余前缀
00FAE35C ^ E0 C3 LOOPDNE SHORT 00FAE321
00FAE35E 44 INC ESP
00FAE35F 00B4E3 FA000000 ADD BYTE PTR DS:[EBX+FA],DH
00FAE366 0000 ADD BYTE PTR DS:[EAX],AL
00FAE368 ^ 70 E3 JO SHORT 00FAE34D
CPU窗口下方显示:
DL=50 ('P')
DS:[FFFFFFFF]=???
整个窗口下方提示:
当写入到 [FFFFFFFF]时访问违规。
此时寄存器窗口如下:
EAX 0012FD08
ECX FFFFFFFF
EDX 0044E150 TMS22.0044E150
EBX 0044E150 TMS22.0044E150
ESP 0012FD78
EBP 0012FF5C
ESI FFFFFFFF
EDI 7C930738 ntdll.7C930738
EIP 00FAE343
C 0 ES 0023 32位 0(FFFFFFFF)
P 1 CS 001B 32位 0(FFFFFFFF)
A 1 SS 0023 32位 0(FFFFFFFF)
Z 0 DS 0023 32位 0(FFFFFFFF)
S 0 FS 003B 32位 7FFDF000(FFF)
T 0 GS 0000 NULL
D 0
O 0 LastErr ERROR_SUCCESS (00000000)
EFL 00010216 (NO,NB,NE,A,NS,PE,GE,G)
ST0 empty 7.3425752709623961600
ST1 empty 23.352865954566005760
ST2 empty 111.29743639608906240
ST3 empty 2035.6020761245672960
ST4 empty 11345.481353325642240
ST5 empty 1.0000000000000000000
ST6 empty 1.0000000000000000000
ST7 empty 1.0000000000000000000
3 2 1 0 E S P U O Z D I
FST 4020 Cond 1 0 0 0 Err 0 0 1 0 0 0 0 0 (EQ)
FCW 1272 Prec NEAR,53 Mask 1 1 0 0 1 0
此时堆栈窗口如下:
0012FD78 00122208
0012FD7C FFFFFFFF
0012FD80 7C930738 ntdll.7C930738
0012FD84 0012FF5C
0012FD88 0012FD8C
0012FD8C 00522D4C ASCII "TMSDATA"
0012FD90 0044E15E RETURN to TMS22.0044E15E from TMS22.0044E12C
0012FD94 0044EEDF RETURN to TMS22.0044EEDF from TMS22.0044E154
0012FD98 0012FDA4 Pointer to next SEH record
0012FD9C 0044EEF5 SE handler
0012FDA0 0012FF5C
0012FDA4 0012FDB0 Pointer to next SEH record
0012FDA8 0044EF92 SE handler
请问各位DX。这两次停顿说明了什么问题。如何修改?谢谢
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!