程序防殺Delphi版 DLL部分

2021-04-27 12:53:18 字數 3710 閱讀 4414

自己程式中的一段**,程序防殺。根據網上面流傳的程序防殺的c++**改編。

dll部分:

pimage_import_descriptor = ^_image_import_descriptor;

pimageimportdescriptor = pimage_import_descriptor;

_image_import_descriptor = packed record

characteristicsororiginalfirstthunk: dword;

timedatestamp: dword;

forwarderchain: dword;

name: dword;

firstthunk: dword;

end;

pimage_thunk_data = ^_image_thunk_data;

pimagethunkdata = pimage_thunk_data;

_image_thunk_data = packed record

case integer of

0 : (forwarderstring: dword);

1 : (function_: dword);

2 : (ordinal: dword);

3 : (addressofdata: dword);

end;

var

originalopenprocess : function (dwdesiredaccess: dword; binherithandle: bool;

dwprocessid: dword): thandle; stdcall;

function hookapifunction(hfrommodule: hmodule;pszfunctionmodule: pansichar;

pszfunctionname: pansichar;pfnnewproc: pointer): pointer;

var

pfnoriginalproc: pointer;

pdosheader: pimagedosheader;

pntheader: pimagentheaders;

pimportdesc: pimageimportdescriptor;

pthunk: pimagethunkdata;

dwprotectionflags,dwscratch: dword;

pszmodname: pansichar;

begin

result := nil;

pfnoriginalproc := getprocaddress(getmodulehandle(pszfunctionmodule),

pszfunctionname);

pdosheader := pimagedosheader(hfrommodule);

pntheader := pimagentheaders(dword(pdosheader)+dword(pdosheader^._lfanew));

pimportdesc := pimageimportdescriptor(dword(pdosheader)+

dword(pntheader^.optionalheader.

datadirectory[image_directory_entry_import].

virtualaddress));

while pimportdesc^.name <> 0 do

begin

pszmodname := pansichar(pointer(dword(pdosheader) + dword(pimportdesc^.name)));

if lowercase(pszmodname) = lowercase(pszfunctionmodule) then break;

inc(pimportdesc);

end;

if pimportdesc^.name = 0 then exit;

pthunk := pimagethunkdata(dword(pdosheader) + dword(pimportdesc^.firstthunk));

while pthunk^.function_ <> 0 do

begin

if (pthunk^.function_ = dword(pfnoriginalproc)) then

begin

dwprotectionflags := page_readwrite;

virtualprotect(@pthunk^.function_,4096,dwprotectionflags,@dwscratch);

pthunk^.function_ := dword(pfnnewproc);

result := pfnoriginalproc ;

break;

end;

inc(pthunk);     

end;

end;

function openprocesshandler(dwdesiredaccess: dword; binherithandle: bool;

dwprocessid: dword): thandle; stdcall;

begin

result := originalopenprocess(dwdesiredaccess, binherithandle, dwprocessid);

if (dwprocessid = pid) and (pid <> 0) then result := 0;

end;

//防殺的程序id,從登錄檔中獲得

procedure gethookprocessid;

var

tempkey: hkey;

datatype,size: integer;

begin

pid := 0;

size := sizeof(integer);

if regopenkeyex(hkey_local_machine,』software/vssoft』, 0,key_read,

tempkey) = error_success then

begin

regqueryvalueex(tempkey,』processid』,nil,@datatype,pbyte(@pid),@size);

regclosekey(tempkey);

end;

end;

function hookopenprocess(ncode: integer;wparam: wparam;lparam: lparam): lresult;stdcall;

begin

gethookprocessid;

if not assigned(originalopenprocess) then

originalopenprocess := hookapifunction(getmodulehandle(nil),

』kernel32.dll』,』openprocess』,@openprocesshandler);

result := 0; 

end;

exports

hookopenprocess;

程序防殺 雙程序守護

程序a為主程序,程序b為守護程序,例如 通過乙個事件event,判斷程序a是否存在,若存在,無動作,若不存在,則啟動程序a b 啟動臨時程序 啟動程序a 臨時程序的作用是防止通過 程序樹把兩個程序同時殺死。雙程序守護的思想 假設我想保護a程序,不想被別人結束掉。比如通過程序管理器等方式。那麼就建立乙...

程序截殺器 1 1 1 2 綠色版

程序截殺器可以幫助您優化您的電腦.使用方法 開啟軟體 取消勾選你希望保留的程序 點 開始優化 值的注意的是 他會自動忽略系統核心程序.並同時具備 智慧型分析 與 極限模式 兩種模式 智慧型分析下將會自動分析哪些程序是你不需要的 極限模式則會全部當成是您不需要的全部結束 更是可以儲存系統當前狀態 隨時...

程序截殺器 1 1 0 4 綠色版

程序截殺器可以幫助您優化您的電腦.使用方法 開啟軟體 取消勾選你希望保留的程序 點 開始優化 值的注意的是 他會自動忽略系統核心程序.並同時具備 智慧型分析 與 極限模式 兩種模式 智慧型分析下將會自動分析哪些程序是你不需要的 極限模式則會全部當成是您不需要的全部結束 更是可以儲存系統當前狀態 隨時...