首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-12-17 
200分求 inline api hook隐藏注册表启动项?个人电脑有个程序需要保持启动,所以求这个代码实现,隐藏run下指

200分求 inline api hook隐藏注册表启动项?
个人电脑有个程序需要保持启动,所以求这个代码
实现,隐藏run下指定的启动项,网上看了一些代码,全是c的,求个d的?
网上c代码一般是全部隐藏了,我要隐藏指定的,如a.exe
api hook 用户模式下实现!
[最优解释]



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;  

[其他解释]
mark
[其他解释]
这个要驱动才可以实现吧。我这几天一直在折腾隐藏进程呢。
------其他解决方案--------------------


网上有c代码,不是驱动实现的
[其他解释]
有C了,那翻译成D不难吧,不知可否贴出C的代码。
[其他解释]


核心部分

    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; 



[其他解释]
不用驱动,不考虑防火墙拦截,inline HOOK才有效果,这C的代码只是HOOK后的实现函数,inline HOOK部分需要重新写
[其他解释]
看到ExAllocatePool,就知道你这代码是驱动代码。
[其他解释]
这段代码用到的类型,宏函,数都是驱动里面用的,楼主说这个不是驱动实现的?
[其他解释]
我对c不懂
只是稍微参考一下
d的hook实在太少
[其他解释]
等的就是你,高手!
[其他解释]
引用:
等的就是你,高手!

对,同膜拜。

热点排行