用户操作
[即时聊天] [发私信] [加为好友]
邓建松ID:jingzu
3546次访问,排名2万外好友0人,关注者1
jingzu的文章
原创 11 篇
翻译 0 篇
转载 1 篇
评论 1 篇
最近评论
mohroq:wow gold,
文章分类
    收藏
      相册
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 注入Winlogon进程示例代码收藏

      新一篇: 向任意进程注入DLL | 旧一篇: 远程线程注入技术 屏蔽ctrl alt del

      注入Winlogon进程示例代码
      作者:未知   来源:本站整理    更新日期:2006-11-09    浏览次数:
       

      “Winlogon通知包(Winlogon Notification Package)”就是处理winlogon在切换状态时发出的事件的DLL。你可以通过“Winlogon Notification Package”来监视winlogon事件的响应。你可以注册这些DLL,那么winlogon.exe会在启动时加载它们,并且会在系统状态切换时来调用注册DLL的事件处理函数。当然这一点用来加载后门是在好不过了,因为加载的后门存在于winlogon.exe的进程中,而 winlogon.exe是系统进程,一般情况下是无法终止它的,况且杀死它会导致系统崩溃或重启,没人会这么做。用“Winlogon Notification Package”来加载后门的又一个好处是——你的后门将运行在system权限下而不用注册为系统服务。

      为了注册你的“Winlogon Notification Package”,必须在“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify”下创建你的“notification package”子键。在我的系统中,存在6个子键,分别是:crypt32chain,cryptnet,cscdll,sclgntfy, SensLogn,termsrv。在“Notify”项下,可以根据需要创建如下键值:

      Asynchronous[REG_DWORD]:表明是否异步处理winlogon事件,如设为 1,winlogon将启动一个新线程来处理。
      DllName[REG_EXPAND_SZ]:指定要加载的DLL名。
      Impersonate[REG_DWORD]:表明是否以登陆用户的权限来处理事件。
      Lock[REG_SZ]:锁定桌面事件。
      Logoff[REG_SZ]:注销事件。
      Logon[REG_SZ]:登陆事件。
      Shutdown[REG_SZ]:关机事件。
      StartScreenSaver[REG_SZ]:启动屏保事件。
      StartShell[REG_SZ]:启动shell(一般指explorer.exe)事件。
      Startup[REG_SZ]:系统开机事件。
      StopScreenSaver[REG_SZ]:停止屏保事件。
      Unlock[REG_SZ]:解除桌面锁定事件。

      其中每个事件对应DLL中的一个导出函数,即每当有事件发生时,winlogon.exe便调用相应的函数。譬如:DllName的值为 “test.dll”,Logoff的值为“testlogoff”,那么系统注销时winlogon.exe将调用test.dll中导出的 “testlogon”函数。

      关于DLL的实现非常地简单:只要导出处理事件是要调用的函数就行,其他和别的DLL无异。以下是代码的简单实现:

      //----------------------------------Start of WNP.C-------------------------------------------
      /*Create file exports.def with content:
      EXPORTS
      testlogoff
      testlogon
      */
      #include <windows.h>
      #pragma comment(linker,"/export:test=_testlogoff@0")
      #pragma comment(linker,"/export:test=_testlogon@0")
      #pragma comment(linker,"/entry:DllEntry")
      #pragma comment(linker,"/subsystem:windows")
      #pragma comment(linker,"/align:4096")
      #pragma comment(linker,"/dll")
      #pragma comment(linker,"/base:1976369152")

      __declspec(dllexport) void __stdcall testlogoff(DWORD unknow)
      {
      MessageBox(NULL,"系统正在注销!","Winlogon Notification Package",MB_OK);
      }

      __declspec(dllexport) void __stdcall testlogon(DWORD unknow)
      {
      MessageBox(NULL,"系统正在登陆!","Winlogon Notification Package",MB_OK);
      }

      BOOL __stdcall DllEntry(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
      {
      switch (ul_reason_for_call)
      {
      case DLL_PROCESS_ATTACH:break;
      case DLL_THREAD_ATTACH:break;
      case DLL_THREAD_DETACH:break;
      case DLL_PROCESS_DETACH:break;
      }return TRUE;
      }
      //----------------------------------End of WNP.C---------------------------------------------

      将编译好的test.dll复制到系统文件夹,修改注册表并重启后,发现C:\WINNT\system32\test.dll已经成功加载到winlogon.exe进程中

      发表于 @ 2007年11月13日 20:33:00|评论(loading...)|编辑

      新一篇: 向任意进程注入DLL | 旧一篇: 远程线程注入技术 屏蔽ctrl alt del

      评论:没有评论。

      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © jingzu