Crack之亲历手迹3--Delphi程序中是如何获得一个Edit的Text内容的
----------Crack之亲历手迹2--我的第一个注册机----之续集
//--------------------------------------------------------------
实验工具:IDA Pro、Delphi 6、SoftICE4.05
实验目的:发现Delphi编的程序如何获得文本框(Edit)的数据(Text)而不用API函数
//--------------------------------------------------------------
1.用Delphi编个简单的试验程序
一个Form包含一个Edit、一个Button、代码如下
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Edit1.Text);
end;
-------^~
而Edit.text好像是调用下面的类似函数(从IDA的反汇编可以看出,不过那叫TControl::GetText)
//摘录自Delphi6的source\vcl\controls.pas目录
function TControl.GetTextBuf(Buffer: PChar; BufSize: Integer): Integer;
begin
Result := Perform(WM_GETTEXT, BufSize, Longint(Buffer));
//Perform(Msg: Cardinal; WParam, LParam: Longint): Longint;
//Responds as if the control received a specified Windows message.
end;
从中我们可以看出Delphi时通过Perform函数直接模拟向Edit发送WM_GETTEXT消息来获得Text的内容的!
注意这个WM_GETTEXT消息发送是模拟的,你用BPX MSGFUN时栏不到的,其实是通过Call WndProc的方式!
2。用IDA反汇编1中的exe同样可见到
call @TControl@GetText ;
//--------------------------
@TControl@GetText proc near
...
call unknown_libname_169
...
//--------------------------
unknown_libname_169 proc near
...
call @Controls@TControl@Perform$qqruiii ; Controls::TControl::Perform(uint,int,int)
...
3.结论:Delphi通过向Edit发送WM_GETTEXT(直接调用WNDProc,而没有使用消息函数)消息来获得Text的内容的!
GetText(){
Call WndProc(WM_GETTEXT);
}
|
WndProc(Msg){
DefWndProc(Msg);
}
Text的自值由DefWndProc系统函数给出!
附:看来Borload的那些家伙写出的东西的确与众不同
Email:y97523@hotmail.com
- 标 题:Crack之亲历手迹3--Delphi程序中是如何获得一个Edit的Text内容的 (1千字)
- 作 者:y97523
- 时 间:2002-3-9 19:58:37
- 链 接:http://bbs.pediy.com