Ring3下远程注入DLL干掉IceSword

来源:互联网 发布:淘宝拍卖房产注意事项 编辑:程序博客网 时间:2024/05/17 22:11
 IceSword在很多朋友中被视为国产软件中的骄傲。IceSword的确为手工杀毒带来了不少便捷,想必不少牧马者也十分痛恨吧。

      去年……我偶尔发现了利用SetWindowLong 能准确找到IceSword窗口并且PostMessage关闭IS,此文发表到了黑防上,当时的方法的确很烂,:hugd: 今天的这个方法相对来说比较好了。

      IceSword Hook 了关于远程DLL注入的API,使得在正常情况下无法启动远程线程注入DLL。旁门左道,歪门邪道,一样注入它!!!
:huge:
      相信没有人会让IceSword开机自动运行……我们的木马倒是开机就运行的,所以我们的首要工作是Hook API CreateProcess(这个不在今天讨论范围,而且实现不难),然后注入DLL,接下来就是等待信号,DLL在目标进程内ExitProcess(0); 完美结束进程!:'(
      ///////////////////////
      今天我们在CreateProcess上做手脚(不然我叫你Hook它干嘛?),这个是CreatePrcess的函数原型:
     
引用:
      BOOL CreateProcess(
        LPCTSTR lpApplicationName,
        LPTSTR lpCommandLine,
        LPSECURITY_ATTRIBUTES lpProcessAttributes,
        LPSECURITY_ATTRIBUTES lpThreadAttributes,
        BOOL bInheritHandles,
        DWORD dwCreationFlags,
        LPVOID lpEnvironment,
        LPCTSTR lpCurrentDirectory,
        LPSTARTUPINFO lpStartupInfo,
        LPPROCESS_INFORMATION lpProcessInformation
      );
     
dwCreationFlags这个就是我们做手脚的地方。有个参数是CREATE_SUSPENDED,MSDN的解释是:
     
引用:
The primary thread of the new process is created in a suspended state, and does not run until the ResumeThread function is called.
    就是说,进程一创建,主线程就被挂起了,直到使用ResumeThread来恢复。
      妙吧~哈哈,在这个时候IS什么也没得做,就被挂起了 直到我们注入DLL完毕,再叫它运行,它以是我们池中之物,做什么坏事就随便了。这个也是本程序的精华所在。
      这个方法是被很多木马使用在傀儡进程身上的,这样启动程序占用资源少,不容易被发觉。以前我曾经试过用FindWindow去找灰鸽子所注入的傀儡IE,却总是返回个0,这就是使用CREATE_SUSPENDED启动的原因,程序还未加载完就被挂起了。
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      下面是部分代码:
主程序:
引用:
  char DllName[MAX_PATH] = "KillDll.dll";     //我们注入的DLL
              
             ::GetFullPathName("KillDll.dll", MAX_PATH, DllName, NULL);  //得到DLL的全路径,远程线程LoadLibrary 时候必须是完整路径

             ////////////Create Process//////////////
             char LoadExe[MAX_PATH] = "D://Program Files//IceSword//IceSword.exe";  //我家IS的路径
              
             STARTUPINFO si = {sizeof(si)};     
             ROCESS_INFORMATION pi;
             si.dwFlags = STARTF_USESHOWWINDOW;
             si.wShowWindow = TRUE;

             ::CreateProcess(NULL,
                             LoadExe,
                             NULL,NULL,
                             FALSE,
                           CREATE_SUSPENDED,  //暂停模式启动程序
                             NULL,
                                   NULL,
                             &si,
                                   &pi);  

       //////////////////////省略注入代码 具体参加源文件/////////////////////////

     ///////////////////////注入成功后 用ResumeThread恢复主线程 使程序运行/////////////////////////////////

             ::ResumeThread(pi.hThread);  //恢复主线程

  
    DLL工程相对简单 就不列出了。
      注入以后的图片:
      IceSword中已含有我们的DLL,模块列表中已经现实,IceSword能正常工作。
    
      当确定关闭IceSword的时候 IceSword提示错误,确定后退出
    


///////////////////////////////////////////////////////////////////

今天做了一下修改,方便大家测试。把DLL和EXE放到IceSword目录下运行就OK了,退出要结束IceSword就用运行记事本……(这种通知方法……)
原创粉丝点击