PEiD (または同様のアプリ) を使用している場合、アプリは開いた実行可能ファイルがどのコンパイラーでコンパイルされたか、またはどのパッカーでパックされたかを伝えることができることを知っています。PEiD は、実行可能な署名を .xml 内のすべての署名と比較して、この作業を行いますUserDB
。
(たとえば) 新しいコンパイラ/パッカー用の新しい署名を作成したいのですが、どうすればよいですか??
実行ファイルからコンパイラ/パッカーの署名を抽出するルーチンを書きました. 新しい署名を取得したいので, 一部の実行ファイル (この場合は 5) からコンパイラ/パッカーの署名を取得し、それを比較して新しい署名を作成する必要があります.たとえば、次の文字列が 5 つのファイルのコンパイラ/パッカー署名である場合:
'E4 55 33 22 00 FF E4 55 33 22 00 11 FF E2 22 00 E0'
'E4 55 32 22 01 FF E4 55 32 22 01 11 FF E2 21 00 E0'
'E4 55 42 22 00 FF E2 55 42 22 00 11 FE E2 22 10 E0'
'E4 55 35 22 01 FF E4 55 35 22 01 11 FF E2 22 00 E0'
'E4 55 25 22 01 FF E4 55 35 22 01 11 FF E2 22 00 E0'
result には次の文字列を取得する必要があります。
'E4 55 ?? 22 ?? FF ?? 55 ?? 22 ?? 11 ?? E2 ?? ?? E0'
つまり: 値 (たとえば「E4」) が他のすべての署名で共通である場合、それは結果に追加され'??'
ます。
次のコードを書きましたが、正しく動作せず、戻ります:
'E4 55 ?? 22 ?? FF E4 55 ?? 22 ?? 11 FF E2 ?? 00 E0'
それ以外の :
'E4 55 ?? 22 ?? FF ?? 55 ?? 22 ?? 11 ?? E2 ?? ?? E0'
コード :
...
uses System.StrUtils, System.Types;
...
var
InputSignatures: TStringList;
I, J: Integer;
CompleteTxt: string;
Con: array of TStringDynArray;
begin
InputSignatures := TStringList.Create;
InputSignatures.Add('E4 55 33 22 00 FF E4 55 33 22 00 11 FF E2 22 00 E0');
InputSignatures.Add('E4 55 32 22 01 FF E4 55 32 22 01 11 FF E2 21 00 E0');
InputSignatures.Add('E4 55 42 22 00 FF E2 55 42 22 00 11 FE E2 22 10 E0');
InputSignatures.Add('E4 55 35 22 01 FF E4 55 35 22 01 11 FF E2 22 00 E0');
InputSignatures.Add('E4 55 25 22 01 FF E4 55 35 22 01 11 FF E2 22 00 E0');
// E4 55 ?? 22 ?? FF ?? 55 ?? 22 ?? 11 ?? E2 ?? ?? E0
SetLength(Con, InputSignatures.Count);
for I := 0 to InputSignatures.Count - 1 do
begin
Con[I] := SplitString(InputSignatures[I], ' ');
end;
J := 0;
for I := 0 to Length(Con[J]) - 1 do
begin
for J := Low(Con) to High(Con) - 1 do
begin
if Con[J][I] <> Con[J + 1][I] then
begin
CompleteTxt := CompleteTxt + '?? ';
Break;
end
else
begin
CompleteTxt := CompleteTxt + Con[J][I] + ' ';
Break;
end;
end;
end;
ShowMessage(CompleteTxt);
end;
...
何か案が ??(私の英語が下手ならすみません)。