-
-
[原创]任意版本Delphi 的按钮事件的快速找法
-
发表于:
2012-5-8 01:10
10250
-
[原创]任意版本Delphi 的按钮事件的快速找法
对于delphi较新的版本无法使用DEDE寻找按钮事件,这里我找到了一种比较快捷的方法寻找按钮事件。
用OD载入一个Delphi 2009 写的小程序,ctrl+g 来到401000,
00401000 . /04104000 DD Project1.00401004
00401004 \03 DB 03
00401005 . 07 DB 07
00401006 . 42 6F 6F 6C 6>ASCII "Boolean"
0040100D 01 DB 01
0040100E 00 DB 00
ctrl+b 搜索 Button1Click 不分大小写,
//Button1Click事件
0046E326 . 42 75 74 74 6>ASCII "Button1Click"
0046E332 12 DB 12
0046E333 00 DB 00
0046E334 . C4E34600 DD Project1.0046E3C4
0046E338 . 0B DB 0B
//Edit1Change事件
0046E339 . 45 64 69 74 3>ASCII "Edit1Change"
0046E344 . 06 DB 06
0046E345 . 54 46 6F 72 6>ASCII "TForm1"
0046E34B 03 DB 03
往下翻第一个就是按钮事件的入口:
0046E37C . B8 94E34600 MOV EAX,0046E394 ; ASCII "購/fd"
0046E381 . E8 02D7FCFF CALL 0043BA88
0046E386 . C3 RETN
再往下翻第二个就是Edit1Change事件:
0046E3C4 /. 55 PUSH EBP
0046E3C5 |. 8BEC MOV EBP,ESP
0046E3C7 |. 6A 00 PUSH 0
0046E3C9 |. 53 PUSH EBX
0046E3CA |. 8BD8 MOV EBX,EAX
0046E3CC |. 33C0 XOR EAX,EAX
0046E3CE |. 55 PUSH EBP
0046E3CF |. 68 2FE44600 PUSH 0046E42F
0046E3D4 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0046E3D7 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
0046E3DA |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
0046E3DD |. 8B83 80030000 MOV EAX,DWORD PTR DS:[EBX+380]
0046E3E3 |. E8 D8CDFDFF CALL 0044B1C0
0046E3E8 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0046E3EB |. BA 48E44600 MOV EDX,0046E448 ; UNICODE "12345"
0046E3F0 |. E8 4F76F9FF CALL 00405A44
0046E3F5 |. 75 12 JNZ SHORT 0046E409
0046E3F7 |. BA 60E44600 MOV EDX,0046E460
0046E3FC |. 8B83 7C030000 MOV EAX,DWORD PTR DS:[EBX+37C]
0046E402 |. E8 F1CDFDFF CALL 0044B1F8
0046E407 |. EB 10 JMP SHORT 0046E419
0046E409 |> BA 7CE44600 MOV EDX,0046E47C ; UNICODE "Bad!!!!!"
0046E40E |. 8B83 7C030000 MOV EAX,DWORD PTR DS:[EBX+37C]
0046E414 |. E8 DFCDFDFF CALL 0044B1F8
如果还有其他事件的话继续向下翻,这里就两个事件。
这种方法可以对付任意版本的delphi程序,加壳的程序可能会不行。。。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)