第二節(jié) Delphi反向工程
目前 ,Borland沒(méi)有提供任何產(chǎn)品用于反編譯可執(zhí)行(.exe)文件或“Delphi 編譯文件”(.dcu)為原始的程序代碼(.pas)。
Delphi編譯單元:DCU(Delphi compiled unit: DCU)
當(dāng)一個(gè)Delphi工程被編譯或運(yùn)行時(shí),一個(gè)編譯單元(.dcu)文件便產(chǎn)生了。默認(rèn)情況下,每個(gè)單元的編譯版本都存放在獨(dú)立的二進(jìn)制文件中,該文件的文件名與單元文件同名,同時(shí)它的擴(kuò)展名為.DCU。例如:unit1.dcu文件包含有在unit1.pas文件中聲明的代碼和數(shù)據(jù)。
這意味著如果你有某些資源,如編譯過(guò)的組件,你所必須做的是反編譯它并獲得源代碼。錯(cuò)了,DCU文件格式是非文檔的(所有者格式)并且它可以隨版本的改變而改變。
編譯器之后:Delphi反向工程(After the compiler: Delphi Reverse Engineering)
如果你試圖反編譯一個(gè)Delphi可執(zhí)行文件,有幾件事你應(yīng)該知道:
Delphi源程序文件通常以兩種文件類型存儲(chǔ):ASCII代碼文件(.pas、.d
所有被Delphi編譯過(guò)的程序都有以下幾個(gè)部分:CODE、DATA、BSS、.idata、tls、.rdata、.rsrc。從反編譯的角度來(lái)看,最重要的部分是:CODE、.rsrc。在“Adding functionality to a Delphi program"(“在Delphi程序中增加功能”)(譯者加:陸續(xù)譯出)文章中討論了關(guān)于Delphi可執(zhí)行格式、類信息和DFM資源的一些有趣的內(nèi)容:怎樣分配事件給同一個(gè)表單中定義的其他事件句柄(handler)處理、怎樣增加你自己的事件句柄(handler)從而在可執(zhí)行文件中增加代碼改變按鈕的標(biāo)題。
存放在.exe文件中的各種類型的資源里,RT_RCDATA或application-defined(程序定義)資源(原始數(shù)據(jù))擁有編譯前DFM文件所包含的信息。為了從.exe文件中選出DFM數(shù)據(jù),我們可以調(diào)用EnumResourceNames API函數(shù)...關(guān)于從.exe文件中選出DFM數(shù)據(jù)的更多的信息,可以參考:“Coding a Delphi DFM explorer”(“編寫一個(gè)Delphi DFM探測(cè)器”)。(譯者加:陸續(xù)譯出)
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注