自己程式中的一段**,程序防殺。根據網上面流傳的程序防殺的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 綠色版
程序截殺器可以幫助您優化您的電腦.使用方法 開啟軟體 取消勾選你希望保留的程序 點 開始優化 值的注意的是 他會自動忽略系統核心程序.並同時具備 智慧型分析 與 極限模式 兩種模式 智慧型分析下將會自動分析哪些程序是你不需要的 極限模式則會全部當成是您不需要的全部結束 更是可以儲存系統當前狀態 隨時...