- UID
- 26066
注册时间2006-10-6
阅读权限50
最后登录1970-1-1
感悟天道
TA的每日心情 | 开心 2016-4-11 20:07 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
发表于 2007-4-24 21:03:48
|
显示全部楼层
delphi大部分把函数写在自己内部,像showmessage()写出来的对话框,很难找到下断的地方。
DeDe,delphi的克星。DeDe可以导出delphi资源。
像这个delphi按钮,被分析了吧!
110.jpg (84.38 KB)
2007-4-12 20:42
__________________________________________________________________________
图一
是不是,怕了吧!
没关系啦,我们来陪DeDe玩玩,让你认错地方!
好了,开工:
首先我们用delphi写个test小程序!
111.jpg (6.95 KB)
2007-4-12 20:42
Code:
[Copy to clipboard] [ - ]CODE:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
procedure PlayDeDe;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.PlayDeDe;
begin
showmessage('只运行了我');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('DeDe里面看到了这里,但我却没有运行');
PlayDeDe;
end;
end.
__________________________________________________________________________
OK,程序写完了,我们来用DeDe定位他吧!
如上[图一],被定位到004530AC。
好,我们用OD调试他,载入,下断bp 004530AC。运行,断下,单步运行到004530C1,返回首个call(也可直接在断下后按Ctrl+F9返回首个call),这个call在delphi程序中一般为
call dword ptr [ebx+120]
[Copy to clipboard] [ - ]CODE:
00433904 |. 8BD3 mov edx, ebx
00433906 |. 8B83 24010000 mov eax, dword ptr [ebx+124]
0043390C |. FF93 20010000 call dword ptr [ebx+120] ;关注这个call
00433912 |> 5B pop ebx ; 断在这里
00433913 \. C3 retn
__________________________________________________________________________
可以得知,调用我们写入的按钮代码正是这个call dword ptr [ebx+120]。
我没分析过DeDe的识别系统,但我还是可以肯定的跟你说,DeDe识别按钮调用不是靠ff9320010000这个。
别问我为什么,他就是这样呗。
我们程序执行时是从call dword ptr[ebx+120]这里进去的,DeDe却不是靠这里识别,那我们就改这里好了,改成我们最终想要调用的地方来执行。[ebx+120]的地方让DeDe去分析吧,不是我们真正执行的代码,随你分析了!
如改成这样90E87AF70100,保存:
[Copy to clipboard] [ - ]CODE:
00433906 |. 8B83 24010000 mov eax, dword ptr [ebx+124]
0043390C 90 nop
0043390D E8 7AF70100 call 0045308C ;改成这样,调用我们真正用的
00433912 |> 5B pop ebx
00433913 \. C3 retn
__________________________________________________________________________
执行,成功调用我们想要的地方,再看一看DeDe的导出:
[Copy to clipboard] [ - ]CODE:
004530AC 53 push ebx
004530AD 8BD8 mov ebx, eax
* Possible String Reference to: ' DeDe里面看到了这里,但我却没有运行'
|
004530AF B8CC304500 mov eax, $004530CC
* Reference to: Dialogs.ShowMessage(AnsiString);
|
004530B4 E8EF42FDFF call 004273A8
004530B9 8BC3 mov eax, ebx
* Reference to: crtl._abort;
| or: dclIntraweb_50_70.@PackageLoad;
| or: dclIntraweb_50_70.@PackageUnload;
| or: Intraweb_50_70.@PackageLoad;
| or: Intraweb_50_70.@PackageUnload;
| or: IntrawebDB_50_70.@PackageLoad;
|
004530BB E8CCFFFFFF call 0045308C
004530C0 5B pop ebx
004530C1 C3 ret
怎么样,过隐了! |
|