线程插入,在托管平台上面,是不能直接实现的。如果想通过托管平台在一个非托管的Process里面插入执行一段托管代码,就需要在非托管Process里面启动CLR。我们可以以此为突破口,通过直接调用CLR提供的功能接口来执行托管代码。
最终效果,是实现了非托管平台下托管代码执行的混合型线程插入。
在开发CLR的时候,MS将CLR作为一个COM服务器放到了一个DLL里面。MS为CLR定义了一个标准的COM接口,同时分配了全局的GUID。在安装Framework的时候,就被安装到了注册表里面去。
基于上一篇文章里面讲的DotNet CLR Hosting的原理,就可以很容易实现在非托管进程里面启动CLR并且执行托管代码:
首先,在非托管宿主里面加载CLR并且启动:
|
然后执行一段托管代码:
|
可以把需要执行的托管函数放到一个编译好的本地代码集或者是dll里面。然后把上面的代码做成一个shellcode,这样就可以实现托管代码的线程插入了。
这种技术,对于可以被插入的进程也是有限制的,仅限所有有权限进程WriteProcessMemory操作的本机进程。
这里仅讨论其实现的可能性和方法,个人感觉这种技术是鸡肋..
下面介绍下非托管下的dll线程插入技术的实现,首先介绍几个dll线程插入的时候的主要的函数:
OpenProcess - 用于打开要寄生的目标进程。
VirtualAllocEx/VirtualFreeEx - 用于在目标进程中分配/释放内存空间。
WriteProcessMemory - 用于在目标进程中写入要加载的DLL名称。
CreateRemoteThread - 远程加载DLL的核心内容,用于控制目标进程调用API函数。
LoadLibrary - 目标进程通过调用此函数来加载病毒DLL。
单纯的加载一个dll到一个具有WriteProcessMemory操作权限的Process并不是很困难,只要利用上面的几个函数,就可以让目标进程执行相应的注入代码:
|
上面把两种技术都列举出来了,基于托管平台和非托管平台实现dll插入的实现和对比。
【相关文章】
|
||||
| · 首届IT工程师调查十大.. · 网管员如何踏上高薪之路 · 汶川大地震 IT技术人在.. · Vista SP1对决XP SP3 · 主流品牌防火墙配置 · 勇闯IT培训黑色围城 · LAMP技术精解 · 访问控制列表(ACL)介绍 |
· Ubuntu 中文开源频道 · 专题:AIX操作系统管理.. · 2008年上半年全国软考.. · 运营商封堵非法ADSL共享 · IPv6协议--拓展网络无.. · 二手仿冒设备与思科再.. · 网络故障排除宝典 · 华为路由器配置 |
|||
|
||||
| · SQL Server 2008/2005.. · SOA 面向服务架构 · SQL Server 2008/2005.. · iSCSI应用与发展 · RAID——磁盘阵列基础 · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 |
· Apache技术专题 · 国际文档格式标准开战 · 路由器设置与口令恢复 · 打造安全服务器 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · ADSL应用面面俱到 |
|||
|
||||
| · iSCSI应用与发展 · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · iSCSI应用与发展 · 三层交换技术专题 · Apache技术专题 |
· 企业数据恢复指南 · RAID——磁盘阵列基础 · 路由器设置与口令恢复 · SOA 面向服务架构 · ADSL应用面面俱到 · ADSL应用面面俱到 · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 |
|||