随笔-60  评论-262  文章-1  trackbacks-0
今天终于完成了往 vista 内所有 ring 3 进程的注入. 包括 csrss.exe 进程.

主要的中心思想就是,
    1. 提升本进程访问令牌, 使其有调试权限.
    2. 获得本进程的当前线程的内核对象的安全描述符, 将其复制出来备用.
    3. 准备远程线程的执行代码以及执行参数. 其中包括 loadlibrarya 和 RtlExitUserThread 调用, 例子嘛, 本来前一篇文章里有, 再次贴在这里方便各位看官.
#define LoadLibraryA_ADDR       0xDDDDDDDD 
#define RtlExitUserThread_ADDR  0xEEEEEEEE 

static __declspec(naked) DWORD WINAPI ThreadDummy(LPVOID lpParam) 
{
    __asm { 
        push    dword ptr [esp
+4]           ; // 将传进来的线程函数的参数压栈 
        mov     eax, LoadLibraryA_ADDR      ; // LoadLibraryA 或 FreeLibrary 函数的地址 
        call    eax                         ; // 调用 LoadLibraryA 函数
        push    eax                         ; // 将 RtlExitUserThread 函数的参数压栈
        mov     eax, RtlExitUserThread_ADDR ; // RtlExitUserThread 函数的地址 
        call    eax                         ; // 调用 RtlExitUserThread 函数
        ret     4                           ; // 返回 
    } 
}

    4. 以第 2 步获取的安全描述符以及第 3 步准备的代码和数据作为参数调用 RtlCreateUserThread 函数, 在目标进程创建远线程. 等待执行完毕.
    5. 清理第 2 步和第 3 步分配的内存. 整个过程完毕.

总结: 整个 dll injection 的探索开发历时月余, 开始看似顺利, 后期艰难困苦. 特别是那个超级变态要求: 必须注入到 csrss.exe 进程里去. 从普通的 SetWindowHookEx 和 known dll, 到 CreateRemoteThread, 最后到 NtCreateThread 以及 NtCreateThreadEx, 最后回归到 RtlCreateUserThread 函数. 中间夹杂了 DPC, APC, 以及在内核修改 knowndlls\\kernel32.dll 可执行映像 inline hook CreateThread 函数等等等等. 从应用层到内核, 再回归应用层, 搞了个遍.

现在我可以牛逼哄哄的说一句了, Injection DLL? Just so so!!!

顺便 BS 一下 Rising, 这个宝贝杀软竟然直接 kill 掉了所有远程线程函数, 不对用户做任何通知和给用户选择的机会. 但我在内核修改任何可执行映像时, 这个宝贝却愉快的告诉我, 我的系统很安全. 再次 BS 一下.

一个小小的测试程序, 在这里下载

posted on 2008-06-20 11:24 free2000fly 阅读(3219) 评论(11)  编辑 收藏 引用

评论:
# re: 完成 windows nt 系列的 DLL injection 功能的开发 2008-06-20 12:58 | cppexplore
描述的太简单太简单了 看了之后难以跟进重现啊
放首页,炫耀意义大于借鉴意义  回复  更多评论
  
# re: 完成 windows nt 系列的 DLL injection 功能的开发 2008-06-20 13:01 | free2000fly
@cppexplore
工作成果, 不便公开详情, 可以看看头两篇文章, 相信您会明白究竟的.   回复  更多评论
  
# re: 完成 windows nt 系列的 DLL injection 功能的开发 [未登录] 2008-06-20 13:10 | CppExplore
@free2000fly
不好意思 原来是是连续的 呵呵   回复  更多评论
  
# re: 完成 windows nt 系列的 DLL injection 功能的开发 2008-06-22 23:04 | 影视剧
博主就是牛啊,牛是要有资本滴。赞一个  回复  更多评论
  
# re: 完成 windows nt 系列的 DLL injection 功能的开发 2008-06-23 12:52 | 查看
大哥, 你以前是搞驱动的吧?
QQ:244089156  回复  更多评论
  
# re: 完成 windows nt 系列的 DLL injection 功能的开发 2008-06-23 14:43 | free2000fly
@查看
是啊, 现在也是  回复  更多评论
  
# re: 完成 windows nt 系列的 DLL injection 功能的开发 2008-06-27 14:24 | UI Automation
能不能给点提示,如何提升token的权限?我给你发了留言,有问题想请教。  回复  更多评论
  
# re: 完成 windows nt 系列的 DLL injection 功能的开发 2008-06-27 14:44 | free2000fly
@UI Automation
提升令牌权限的代码满大街都是. 没什么稀奇的.
至于要注入到所有进程, 当然得编写驱动了, 不然你就得时时刻刻枚举进程的总数, 然后一个一个注入, 累死你, 而且效率低下, 实时性也不强.   回复  更多评论
  
# re: 完成 windows nt 系列的 DLL injection 功能的开发 2008-06-29 16:33 | UI Automation
谢了,我尝试了下dll Process_Attach事件时,同时安装系统钩子,似乎还行在Vista上,以后再有问题继续请教,呵呵.  回复  更多评论
  
# re: 完成 windows nt 系列的 DLL injection 功能的开发 2008-12-15 14:49 | 啊啊啊
几百年前的东西还在研究, 真让人吃精.  回复  更多评论
  
# re: 完成 windows nt 系列的 DLL injection 功能的开发 2008-12-15 14:58 | free2000fly
@啊啊啊
吃精!? 你真幽默  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理