已知一個PE文件是由delphi編譯的,但如何知道到底由哪個delphi版本編譯的呢? |
尚未結案
|
test123
一般會員 發表:1 回覆:0 積分:0 註冊:2004-08-15 發送簡訊給我 |
我查看了DEDE 3.10 build 1527版本的源碼(網上提供的最高版本就是這個了,實際版本是3.50.2),他是這樣實現的,我測試了一下,好像D6/D7無法區分,但3.50.2就可以,什麼原理,請高手賜之,另問這是最好的獲取delphi版本方式嗎? function MemGetDelphiVersion(MemStr: TMemoryStream; ImageBase, CodeRVA,
CodeSize, HeaderSize: DWORD): DWORD;
const
IDS = 'TControl';
arrBoolean: array[0..7] of byte = ($07, $42, $6F, $6F, $6C, $65, $61, $6E);
var
b1, b2: Byte;
dw, dw1, bkup, Delta, i: DWORD;
s: string;
buff: array of Byte;
bD2, bClassFound: Boolean; function InCODE(DW: DWORD): boolean;
begin
result := (dw > ImageBase (CodeRVA)) and (dw < ImageBase (CodeRVA)
CodeSize)
end; begin
Result := $FFFE;
bD2 := False;
Delta := ImageBase CodeRVA - HeaderSize; MemStr.Seek(HeaderSize 5, soFromBeginning);
//MemStr.Seek(HeaderSize 1,soFromBeginning); FOR Delphi 2
SetLength(buff, 9);
MemStr.ReadBuffer(buff[0], 9);
if not CompareMem(@buff[0], @arrBoolean[0], 8) then
begin
// Check For Delphi 2
MemStr.Seek(HeaderSize 1, soFromBeginning);
SetLength(buff, 9);
MemStr.ReadBuffer(buff[0], 9);
if not CompareMem(@buff[0], @arrBoolean[0], 8) then
bD2 := False
else
bD2 := True;
end;
if bD2 then
Result := $FFF0
else
Result := $FFFF; MemStr.Seek(HeaderSize, soFromBeginning);
repeat
MemStr.ReadBuffer(dw, 4);
bkup := MemStr.Position;
bClassFound := dw - Delta = MemStr.Position; if bClassFound then
begin
MemStr.ReadBuffer(b1, 1);
if b1 <= 16 then
begin
//Nasty anti-tirck for nasty dump-hide trick
if CodeSize = 0 then
CodeSize := $7F000000;
MemStr.ReadBuffer(b2, 1);
SetLength(s, b2);
MemStr.ReadBuffer(s[1], b2);
MemStr.ReadBuffer(dw, 4);
if InCODE(dw) then
begin
dw1 := dw - Delta;
MemStr.Seek(dw1 - 40, soFromBeginning);
MemStr.ReadBuffer(dw, 4);
if s = IDS then
begin
Result := dw;
exit;
end;
end;
end;
end;
MemStr.seek(bkup, soFromBeginning);
until (MemStr.Position >= CodeSize); { MemStr.Seek(CodeRVA 5,soFromBeginning);
SetLength(s,3);
MemStr.ReadBuffer(s[1],3); // Correction for BCB5
if s='C ' then if dw=$120 then Result:=$121;
} // $0 : 'D3';
// $B4 : 'BCB4'
// $114 : 'D4';
// $120 : 'D5';
// $121 : 'BCB5';
// $15C, $160 : D6
// $FFFF : 'Unknown';
// $FFF0 : 'D2'
end;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |