DeDe ソフトウェアを使用して Delphi プログラムを逆コンパイルしないようにする
これは、DeDe ソフトウェアを使用して Delphi プログラムを逆コンパイルするのを防ぐための記事です ~
「」内は私の注釈、残りはオリジナルです〜
プログラムプロジェクト1;
用途
フォーム、
窓、
sysutils、
Unit1 'Unit1.pas' {Form1} で、
Unit2 'Unit2.pas' {Form2};
関数 RegisterServiceProcess(dwProcessId, dwType: dWord): 整数;
外部「kernel32.dll」
{$R *.RES}
ヴァール
HMUTEX: HWND;
RET: 整数;
hCurrentWindow: HWnd; //逆コンパイルが必要です。
szText: Array[0..254] Of char //逆コンパイルに必要です。
始める
アプリケーションの初期化;
APPLICATION.TITLE := 'デルフィひまわりコレクションのデザイン: 張國鵬';
RegisterServiceProcess(GetCurrentProcessID, 1); //Ctl+Alt+Del でプログラムを消去します。
「作成者が RegisterServiceProcess を使用してプログラムを WINDOWS サービス プログラムとして登録していることがわかります~」
「しかし、この関数は kernel32 に含まれていて、98/ME でのみ動作することは誰もが知っています~」
「だから、これを逆コンパイルの鍵とみなさないでください。これは必要不可欠なものだと言えますよ~」
//逆コンパイルが開始されないようにする
hCurrentWindow := GetWindow(APPLICATION.Handle, GW_HWNDFIRST);
「上記のことから、作成者は自分のプログラム ウィンドウがトップレベル ウィンドウであるかどうかを知りたいと考えていることがわかります。」
while hCurrentWindow <> 0 Do
始める
GetWindowText(hCurrentWindow, @szText, 255) > 0 の場合
If pos('DeDe', StrPas(@szText)) <> 0 then
「そうでない場合は、現在のデスクトップ フォームのタイトルを取得し、それが「DeDe」であるかどうかを判断します。」
始める
APPLICATION.MESSAGEBOX('逆コンパイルしませんか? それは簡単ではありません!',
「ははは…君! '、mb_ok);
//closewindow(hCurrentWindow);//プログラム ウィンドウを最小化します
Enablewindow(hCurrentWindow, false);
// プログラムのウィンドウを非アクティブにする プログラムのスレッド ID 番号を取得できれば、プログラムを使用不能にして閉じることができなくなります。
「上の二文はDEDEの扱いですよ~」
"closewindow: 指定されたウィンドウを最小化しますが、ウィンドウはメモリから消去されません~"
"Enablewindow: 指定されたウィンドウでのマウスとキーボードの入力を許可/無効にします。false は間違いなく機能しません~"
停止します。
終わり;
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
終わり;
//逆コンパイルが終了しないようにする
// プログラムが 2 回実行されるのを防ぎます
HMUTEX := CREATEMUTEX(Nil, FALSE, 'デルフィひまわりコレクション デザイン: 張国鵬');
RET := GETLASTERROR;
RET <> ERROR_ALREADY_EXISTS の場合
始める
Application.CreateForm(TForm1, Form1);
// Application.CreateForm(TForm2, Form2);
アプリケーション.実行;
終わり
それ以外
APPLICATION.MESSAGEBOX('プログラムは実行されました!', 'プロンプト', mb_ok);
releasemutex(hmutex);
終わり。