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