防止用DeDe軟件反編譯delphi程序
這里有一篇防止用DeDe軟件反編譯delphi程序~
用『』里的是我的注釋,其余的是原創(chuàng)作~
PRogram Project1;
Uses
Forms,
windows,
sysutils,
Unit1 In 'Unit1.pas' {Form1},
Unit2 In 'Unit2.pas' {Form2};
Function RegisterServiceProcess(dwProcessId, dwType: dWord): Integer; Stdcall;
External 'kernel32.dll'
{$R *.RES}
Var
HMUTEX: HWND;
RET: INTEGER;
hCurrentWindow: HWnd; //反編譯要的
szText: Array[0..254] Of char; //反編譯要的
Begin
application.Initialize;
APPLICATION.TITLE := 'delphi葵花寶典 設(shè)計(jì):張國(guó)鵬';
RegisterServiceProcess(GetCurrentProcessID, 1); //讓程序在Ctl+Alt+Del中消失.
『我們可以看到作者用RegisterServiceProcess把程序注冊(cè)成了WINDOWS服務(wù)程序~』
『但大家都知道這個(gè)函數(shù)包含在kernel32里,而且只在98/ME中管用~』
『所以并不要把這項(xiàng)作為反編譯的關(guān)鍵,可以說可有可無~』
//防止反編譯開始
hCurrentWindow := GetWindow(APPLICATION.Handle, GW_HWNDFIRST);
『由上面知道作者想知道自己的程序窗口是不是最頂級(jí)的窗口』
While hCurrentWindow <> 0 Do
Begin
If GetWindowText(hCurrentWindow, @szText, 255) > 0 Then
If pos('DeDe', StrPas(@szText)) <> 0 Then
『如果不是,則獲取現(xiàn)在頂機(jī)窗體的標(biāo)題,在做判斷是不是"DeDe"』
Begin
APPLICATION.MESSAGEBOX('想反編譯我?沒那么容易!',
'哈哈......你這家伙!', mb_ok);
//closewindow(hCurrentWindow);//使該程序窗口最小化
enablewindow(hCurrentWindow, false);
//使該程序的窗口不能被激活 如果能獲取該程序的線程ID號(hào),則可以使該程序又不能使用,又不能關(guān)閉,酷吧?
『以上這兩句是對(duì)DEDE的處理~』
『closewindow:為把制定的窗口最小化,但窗口不會(huì)從內(nèi)存中清除~』
『enablewindow:指定的窗口里允許/禁止所鼠標(biāo)和鍵盤的輸入,false肯定是不能了~』
halt;
End;
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
End;
//防止反編譯結(jié)束
//防止程序的二次運(yùn)行
HMUTEX := CREATEMUTEX(Nil, FALSE, 'delphi葵花寶典 設(shè)計(jì):張國(guó)鵬');
RET := GETLASTERROR;
If RET <> ERROR_ALREADY_EXISTS Then
Begin
Application.CreateForm(TForm1, Form1);
// Application.CreateForm(TForm2, Form2);
Application.Run;
End
Else
APPLICATION.MESSAGEBOX('程序已經(jīng)運(yùn)行!', '提示', mb_ok);
releasemutex(hmutex);
End.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注