200分求 inline api hook隐藏注册表启动项?

hjkto 2012-01-31 09:27:06
个人电脑有个程序需要保持启动,所以求这个代码
实现,隐藏run下指定的启动项,网上看了一些代码,全是c的,求个d的?
网上c代码一般是全部隐藏了,我要隐藏指定的,如a.exe
api hook 用户模式下实现!
...全文
228 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hjkto 的回复:]

等的就是你,高手!
[/Quote]
对,同膜拜。
hjkto 2012-02-01
  • 打赏
  • 举报
回复
等的就是你,高手!
Lactoferrin 2012-02-01
  • 打赏
  • 举报
回复


function RegQueryValueExWindex( name1:string):DWORD;
var
buf : array [0..255] of char;
iRes : integer;
hKeyx : HKEY;
dwIndex, dwSize : DWORD;
begin
Result:=Cardinal(-1);
if RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Run\', 0,
KEY_QUERY_VALUE, hKeyx ) = ERROR_SUCCESS then
begin
dwIndex := 0;
repeat
dwSize := 255;
iRes := RegEnumValue( hKeyx, dwIndex, buf, dwSize ,nil,nil,nil,nil);
if iRes = ERROR_NO_MORE_ITEMS then
break
else if (iRes = ERROR_SUCCESS) or (iRes = ERROR_MORE_DATA) then
begin
if buf=name1 then
begin
Result:=dwIndex;
end;
inc( dwIndex );
end;
until iRes <> ERROR_SUCCESS;
RegCloseKey( hKeyx );
end;


end;


PCardinal(Cardinal(View)+SizeOf(Cardinal)*3)^:=RegQueryValueExWindex('Project1');

function RegEnumValueWCallback(hKey: HKEY; dwIndex: DWORD; lpValueName: PWideChar;
var lpcbValueName: DWORD; lpReserved: Pointer; lpType: PDWORD;
lpData: PByte; lpcbData: PDWORD): Longint; stdcall;
var ObjectName:PWideChar;Length:Cardinal;RunName:UNICODE_STRING;
begin
GetMem(ObjectName,4096);
if ObjectName<>nil then begin

if NtQueryObject(hKey,1,ObjectName,4096,@Length)=0 then begin
RunName.Buffer:='\Registry\MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'; RunName.Length:=126; RunName.MaximumLength:=126; if RtlCompareUnicodeString(PUNICODE_STRING(ObjectName),@RunName,True)=0 then
if dwIndex>=PCardinal(Cardinal(View)+SizeOf(Cardinal)*3)^ then Inc(dwIndex);
end;
FreeMem(ObjectName);
end;

Result:= RegEnumValueWNext(hKey,dwIndex,lpValueName,lpcbValueName,lpReserved,lpType,lpData,lpcbData);

end;
hjkto 2012-02-01
  • 打赏
  • 举报
回复
网上有c代码,不是驱动实现的
代码跳动 2012-02-01
  • 打赏
  • 举报
回复
这个要驱动才可以实现吧。我这几天一直在折腾隐藏进程呢。
hjkto 2012-02-01
  • 打赏
  • 举报
回复
我对c不懂
只是稍微参考一下
d的hook实在太少
Jekhn 2012-02-01
  • 打赏
  • 举报
回复
这段代码用到的类型,宏函,数都是驱动里面用的,楼主说这个不是驱动实现的?
pathletboy 2012-02-01
  • 打赏
  • 举报
回复
看到ExAllocatePool,就知道你这代码是驱动代码。
蓝色光芒 2012-02-01
  • 打赏
  • 举报
回复
不用驱动,不考虑防火墙拦截,inline HOOK才有效果,这C的代码只是HOOK后的实现函数,inline HOOK部分需要重新写
hjkto 2012-02-01
  • 打赏
  • 举报
回复

核心部分

NTSTATUS ntstatus;
NTSTATUS status=STATUS_SUCCESS;
void *sjm;
ULONG vvb=0;
ULONG asp=100;
UNICODE_STRING zxm,yy;
PKEY_VALUE_BASIC_INFORMATION pvbi =(KEY_VALUE_BASIC_INFORMATION)ExAllocatePool(PagedPool,asp);
RtlInitUnicodeString(&yy,L"zhu");
ntstatus = ZHURUINAN( KeyHandle,Index,KeyValueInformationClass,KeyValueInformation, Length,ResultLength);
if( NT_SUCCESS( ntstatus ))
{
if (KeyValueInformationClass==0)
sjm = ((KEY_VALUE_BASIC_INFORMATION)KeyValueInformation)->Name;
if (sjm="Run")
{
status=ZwQueryValueKey(KeyHandle,&yy,KeyValuePartialInformation,pvbi,asp,&vvb);
if (NT_SUCCESS(status))
{
zxm.Length = zxm.MaximumLength =pvbi->NameLength;
zxm.Buffer = pvbi->Name;
if(wcsstr(zxm.Buffer,L"C:\\a.exe")!=NULL)
{
Index=Index+100;
}
}
}
ntstatus = ZHURUINAN(KeyHandle,Index,KeyValueInformationClass,KeyValueInformation,Length,ResultLength);
}

return ntstatus;


Jekhn 2012-02-01
  • 打赏
  • 举报
回复
有C了,那翻译成D不难吧,不知可否贴出C的代码。
erhan 2012-02-01
  • 打赏
  • 举报
回复
mark

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧