WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
阅读:1852回复:2

[恢复]icesword 驱动部分分析

楼主#
更多 发布于:2007-01-02 21:12
  这是在 2006年12月25日 15:45:01 GMT 检索到的 http://bbs.driverdevelop.com/read.php?tid=98377 的 G o o g l e 缓存内容。
G o o g l e 已先预览各网页,拍下网页的快照存档。
这网页可能有更新的版本,请按此查看最新版。
本缓存网页可能引用了已经不存在的图片。单击此处,只查看缓存文本。
请使用网址 http://www.google.com/search?hl=zh-CN&q=cache:TYNPwCeNzrUJ:http://bbs.driverdevelop.com/read.php%3Ftid%3D98377 链接此页或将其做成书签。


Google 和网页作者无关,不对网页的内容负责。
 

--------------------------------------------------------------------------------
  
 
控制面板 | 短消息 | 搜索 | 会员 | 帮助 | 社区 | 首页 | 无图版  
 

   密码忘了...怎么办?邮件收不到....
欢迎使用驱网身份认证服务。
发送 ARCK#UserName#Password 到 93891152 进行身份认证。
认证后可以用手机直接取回密码。


 驱动程序开发网技术社区 -> Kernel Mode discussion and Soft Driver -> icesword 驱动部分分析 转到动态网页  
 

<<   1   2   3   4   >>  Pages: ( 1/4 total )    
--> 本页主题: icesword 驱动部分分析 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题  
wuyanfeng


 


 
级别: 论坛版主
精华: 1
发帖: 155
威望: 50 点
积分: 464 分
贡献值: 0 点
注册时间:2003-08-26
        

icesword 驱动部分分析

icesword 是如何列出隐藏进程?

icesword 是通过 PspCidTable 这个表来遍厉进程的, PspCidTable 是一个没有被 ntoskrnl.exe 导出的。这就涉及到如何定位
PspCidTable 的问题。icesword 是通过搜索特征串的方式定位 PspCidTalbe. PspCidTable 是一个 HANDLE_TALBE 结构.
PsLookupProcessByProcessId 函数中会引用 PspCidTalbe 变量。icesword 从 PsLookupProcessByProcessId 函数的前几十个字节
内搜索 PspCidTalbe 变量。在icesword 里面是不能调试的即使是用 windbg , softice,syser 调试器下断点调试,也是断不住的。
当然了你也不能用调试器调试,因为 icesword.exe 会在一个timer 中不停的重新设置 int 1,int 3 的中断处理函数。设置成
windows ntoskrnl.exe 中的缺省处理函数。即使你用硬件断点寄存器也是不管用的。那有的人就会说既然设置成 windows ntoskrnl.exe
中的缺省处理函数就可以使用 windbg 双机调试.icesword 也做了处理,icesword 会通过 KdDebuggerEnabled 变量判断是否允许内核
调试。如果允许调试的话. icesword 会调用 KdDisableDebugger 函数禁止内核调试。



写第二部分



这里顺便在说两个分析 icesword 中遇到的反调试小陷阱 这里把代码片段列出来,希望作者原谅

.text:000xxxF0   mov [ebp+IoControlCode], eax
.text:000xxxF3   mov eax, [esp+5Ch-6Ch] ; 反调试代码
.text:000xxxF7   push eax
.text:000xxxF8   mov eax, [esp+60h-6Ch]
.text:000xxxFC   pop ebx
.text:000xxxFD   cmp eax, ebx
.text:000xxxFF   jz short loc_1240B ; 如果没有被调试则会跳转
.text:000xxx01   mov eax, 200EDBh
.text:000xxx06   not eax
.text:000xxx08   push eax
.text:000xxx09   pop edi
.text:000xxx0A   stosd

.text:000xxxF3   mov eax, [esp+5Ch+6Ch] 当单步执行到这条指令或者在这条指令上设置断点的时候,因为当调试器在这条指令上弹出的时候会
用到被调试程序的堆栈来保存 EFLAGS,CS,EIP, (如果 int 1,或 int 3 处理函数用任务门就可以解决这个问题。)例如 当代码执行到这条指令时
ESP = 805E4320h   执行完这条指令是 eax 的值为 [ESP+5Ch-6Ch]=[ESP-10h]=[805E4320h-10h]=[805E4310h] 的值。
当单步执行到 .text:000xxxF8   mov eax, [esp+60h-6Ch] 指令的时候 ESP=805E432Ch 以为其中入栈了一个 eax 所以 ESP=805E432Ch,
执行完 .text:000xxxF8   mov eax, [esp+60h-6Ch] 条指令的时候 eax = [ESP+60h-6Ch]=[ESP-Ch]=[805E432Ch-Ch]=[805E4310h]
如果不调试的情况下 读的是同一个地址的值,所以两个值比较应该是相同的 也就是 .text:000xxxFD   cmp eax, ebx 这条指令的比较结果
应该是相同的。这个指令 .text:000xxxFF   jz short loc_1240B 执行后直接跳转到。
如果是被调试器调试的情况下 .text:000xxxFF   jz short loc_1240B 不会跳转。 如果不跳转时下面的代码 会覆盖掉系统的当前 ETHREAD
指针。接下来在调用很多系统函数都会导致系统崩溃,并且是崩溃到系统模块里面,这样给你定位错误带来误导。哈哈



.text:000xxx68   push 1 ; Alignment
.text:000xxx6A   push 40h ; Length
.text:000xxx6C   push CurrentEProcessObject ; Address
.text:000xxx72   call ds:ProbeForRead

这里是故意做个异常来实现跳转。如果你在 .text:000xxx72   call ds:ProbeForRead 指令上单步执行的时候调试器会跑飞了,
也就是说从调试器退出了,没有继续跟踪下去。


[ 此贴被wuyanfeng在2005-09-19 19:31重新编辑 ]
 
高速无限下载文件,请申请vip会员
 
[楼 主] Posted:2005-09-16 05:42|  
 
 
pjf


 


 
级别: 驱动中牛
精华: 0
发帖: 553
威望: 0 点
积分: 12 分
贡献值: 0 点
注册时间:2001-07-08
        




QUOTE:
下面是引用wuyanfeng于2005-09-15 21:42发表的icesword 驱动部分分析:
icesword 驱动部分分析

icesword.exe 在执行的时候会放出一个驱动程序 ispubdrv.sys .
icesword.exe 装载 这个驱动,这个驱动安装后就不会卸载。直到系统重新启动。这可能是因为驱动中调用了
PsSetCreateThreadNotifyRoutine 函数.下面是这个函数在 ddk 中的介绍。
.......

呵呵,挺不错。
不卸载倒不是因为用了PsSetCreateThreadNotifyRoutine,初始化那么多,每次运行都弄一遍效

率太低,就是因为这个原因。
另外IS访问文件主要不是靠IoCreateFile,不过在初始化完成前文件部分还不能工作,只能用它

,呵呵,  .
这个永久高会是取之无愧呀。  

看来你的调试器也很好用,哈哈
 
高速无限下载文件,请申请vip会员
 
[1 楼] Posted:2005-09-16 06:14|  
 
 
wdynasty


 


 
级别: 驱动大牛
精华: 9
发帖: 628
威望: 175 点
积分: 943 分
贡献值: 0 点
注册时间:2003-10-10
        



不错,分析的很透彻
 
高速无限下载文件,请申请vip会员
 
21世纪是搜索的世界,看看BAIDU的股票就知道了。  
[2 楼] Posted:2005-09-16 06:30|  
 
 
kernel_kernel


 


 
级别: 驱动小牛
精华: 0
发帖: 102
威望: 10 点
积分: 134 分
贡献值: 0 点
注册时间:2002-12-08
        



Syser debugger的作者果然挺牛
 
驱网网上商城-开发板,开发资料光盘
 
[3 楼] Posted:2005-09-16 17:43|  
 
 
wdynasty


 


 
级别: 驱动大牛
精华: 9
发帖: 628
威望: 175 点
积分: 943 分
贡献值: 0 点
注册时间:2003-10-10
        



第一部分最精彩怎么看不见了
 
高速无限下载文件,请申请vip会员
 
21世纪是搜索的世界,看看BAIDU的股票就知道了。  
[4 楼] Posted:2005-09-16 19:19|  
 
 
wuyanfeng


 


 
级别: 论坛版主
精华: 1
发帖: 155
威望: 50 点
积分: 464 分
贡献值: 0 点
注册时间:2003-08-26
        



第三部分


接下来说我们的 PspCidTable 我们找到了 PspCidTable 变量后, PspCidTable [这个 HANDLE_TABLE 的句柄表中,保存着所有进程和线程对象的指针。
PID(进程ID)和 ThreadID(线程ID)就是在这个句柄表中的索引。这个 HANDLE_TABLE 不属于任何进程,也没有链在 HANDLE_TABLE 链上。全局变量
PspCidTable 中是指向这个 HANDLE_TABLE 的指针。这个 HANDLE_TABLE 还有一点和别的 HANDLE_TABLE 都不同,就是它的 HANDLE_TABLE_ENTRY 中的
第一个32bit 放着的是对象体指针(当然需要转换)而不是对象头指针(对象指针就是对象体指针)。] (特别注明 在[]的话不是俺写的是在网上抄来的
这里特别感谢 “JIURL玩玩Win2k进程线程篇 HANDLE_TABLE” 文章的作者:JIURL )
我们之要想到办法遍历这个 PspCidTable 句柄表就可以遍历到系统的所有进程。icesword 为了遍历这个表他使用了系统为公开的 ntoskrnl.exe
的导出函数 ExEnumHandleTable 。

icesword 定位到 ntoskrnl.exe 导出的 ExEnumHandleTable函数。
这个函数是未公开的函数。
这个函数的函数原形可能是 VOID STDCALL ExEnumHandleTable (PULONG HandleTable, PVOID Callback, PVOID Param, PHANDLE Handle OPTIONAL);

其中的参数 PULONG HandleTable 就可以用 PspCidTable 做参数.
PVOID Callback 的类型为 bool (*EXENUMHANDLETABLECALLBACK)(HANDLE_TALBE_ENTRY*,DWORD PID,PVOID Param) 函数指针。
PVOID Param 参数就是传送给回调函数的参数。
PHANDLE Handle OPTIONAL 这个参数俺还没搞懂什么意思。在说俺也用不到他,所以也不管他了随他去吧。

当调用 ExEnumHandleTable 函数的时候 函数在每次枚举到表中的一个句柄时都会调用一次回调函数。

当调用的 Callback 回调函数返回值为 0 时继续枚举句柄表,如果返回 1 时则停止枚举。
 
高速无限下载文件,请申请vip会员
 
[5 楼] Posted:2005-09-17 03:13|  
 
 
slwqw


 


 
级别: 驱动中牛
精华: 0
发帖: 582
威望: 74 点
积分: 729 分
贡献值: 0 点
注册时间:2002-07-18
        



佩服~~~~~~~!!!
 
高速无限下载文件,请申请vip会员
 
[6 楼] Posted:2005-09-17 03:55|  
 
 
xyzreg


 


 
级别: 驱动小牛
精华: 0
发帖: 100
威望: 58 点
积分: 582 分
贡献值: 0 点
注册时间:2005-06-20
        



第一部分呢?怎么不见了哦?
 
高速无限下载文件,请申请vip会员
 
[7 楼] Posted:2005-09-17 11:06|  
 
 
fslife


 


 
级别: 驱动大牛
精华: 0
发帖: 683
威望: 8 点
积分: 57 分
贡献值: 0 点
注册时间:2004-06-07
        



wuyanfeng,贴一下第一部分吧,学习一下。
 
驱网网上商城-开发板,开发资料光盘
 
在交流中学习。。。  
[8 楼] Posted:2005-09-19 23:39|  
 
 
wuyanfeng


 


 
级别: 论坛版主
精华: 1
发帖: 155
威望: 50 点
积分: 464 分
贡献值: 0 点
注册时间:2003-08-26
        

 

[quote]下面是引用fslife于2005-09-19 15:39发表的:


[ 此贴被wuyanfeng在2006-01-08 18:13重新编辑 ]
 
高速无限下载文件,请申请vip会员
 
[9 楼] Posted:2005-09-20 00:04|  
 
 
我最老实


 


 
级别: 驱动小牛
精华: 0
发帖: 104
威望: 38 点
积分: 278 分
贡献值: 0 点
注册时间:2005-09-11
        




QUOTE:
下面是引用wuyanfeng于2005-09-19 16:04发表的:

因为第一部分写的太细了,因为怕被 rootkit 的作者利用.所以就把第一部分给去掉了.如果需要可以单独和我联系


强烈同意 这里有很多hdx的人。安全第一!
 
驱网网上商城-开发板,开发资料光盘
 
养牛专业户  
[10 楼] Posted:2005-09-20 00:19|  
 
 
cvcvxk


 


 
级别: 驱动牛犊
精华: 0
发帖: 10
威望: 2 点
积分: 10 分
贡献值: 0 点
注册时间:2005-09-07
        



呵呵~只要知道是PspCidTable基本上详不详细对Rootkit maker都一样了~嘿嘿~
 
驱网网上商城-开发板,开发资料光盘
 
[11 楼] Posted:2005-09-20 04:20|  
 
 
cvcvxk


 


 
级别: 驱动牛犊
精华: 0
发帖: 10
威望: 2 点
积分: 10 分
贡献值: 0 点
注册时间:2005-09-07
        



icesword.exe 会在一个timer 中不停的重新设置 int 1,int 3 的中断处理函数。设置成
windows ntoskrnl.exe 中的缺省处理函数。

对习惯于HOOK Inline on File的变态――这招没什么用~
 
高速无限下载文件,请申请vip会员
 
[12 楼] Posted:2005-09-20 04:21|  
 
 
baiyuanfan


 


 
级别: 驱动小牛
精华: 0
发帖: 105
威望: 33 点
积分: 270 分
贡献值: 0 点
注册时间:2004-11-23
        



wuyanfeng老大,你是不是用的硬件调试器呀,怎么绕开is的anti-debug的,呵呵,要不然,你的调试器不使用int3/int1?呵呵
 
高速无限下载文件,请申请vip会员
 
各类后门,木马,Exp,0day  
[13 楼] Posted:2005-09-21 05:36|  
 
 
铜锣湾井冈山


 


 
级别: 驱动牛犊
精华: 0
发帖: 10
威望: 3 点
积分: 18 分
贡献值: 0 点
注册时间:2005-09-19
        



hook KdDisableDebugger!!!!
 
高速无限下载文件,请申请vip会员
 
[14 楼] Posted:2005-09-21 17:24|  
 
 
yflibra


 


 
级别: 驱动牛犊
精华: 0
发帖: 10
威望: 1 点
积分: 14 分
贡献值: 0 点
注册时间:2005-03-26
        



小弟提供一下ExEnumHandleTable的原型~~~

NTKERNELAPI
BOOLEAN
ExEnumHandleTable (
  IN PHANDLE_TABLE HandleTable,
  IN EX_ENUMERATE_HANDLE_ROUTINE EnumHandleProcedure,
  IN PVOID EnumParameter,
  OUT PHANDLE Handle OPTIONAL
  )

/*++

Routine Description:

  This function enumerates all the valid handles in a handle table.
  For each valid handle in the handle table, the specified eumeration
  function is called. If the enumeration function returns TRUE, then
  the enumeration is stopped, the current handle is returned to the
  caller via the optional Handle parameter, and this function returns
  TRUE to indicated that the enumeration stopped at a specific handle.

Arguments:

  HandleTable - Supplies a pointer to a handle table.

  EnumHandleProcedure - Supplies a pointer to a fucntion to call for
    each valid handle in the enumerated handle table.

  EnumParameter - Supplies an uninterpreted 32-bit value that is passed
    to the EnumHandleProcedure each time it is called.

  Handle - Supplies an optional pointer a variable that receives the
    Handle value that the enumeration stopped at. Contents of the
    variable only valid if this function returns TRUE.

Return Value:

  If the enumeration stopped at a specific handle, then a value of TRUE
  is returned. Otherwise, a value of FALSE is returned.
 
驱网网上商城-开发板,开发资料光盘
 

生命中不能承受之轻~~  
[15 楼] Posted:2005-09-23 06:27|  
 
 
wowocock


 

 
 
级别: 驱动老牛
精华: 1
发帖: 4037
威望: 448 点
积分: 4407 分
贡献值: 1 点
注册时间:2002-04-08
        



ext:000123D9           mov   eax, [ebp+0Ch]
.text:000123DC           mov   eax, [eax+60h]
.text:000123DF           mov   [ebp-28h], eax
.text:000123E2           mov   eax, [ebp-28h]
.text:000123E5           mov   eax, [eax+8]
.text:000123E8           mov   [ebp-1Ch], eax
.text:000123EB           mov   eax, [ebp-28h]
.text:000123EE           mov   eax, [eax+4]
.text:000123F1           mov   [ebp-34h], eax
.text:000123F4           mov   eax, [ebp-28h]
.text:000123F7           mov   eax, [eax+0Ch]
.text:000123FA           mov   [ebp-30h], eax
.text:000123FD           mov   eax, [esp-10h]
.text:00012401           push   eax
.text:00012402           mov   eax, [esp-0Ch]
.text:00012406           pop   ebx
.text:00012407           cmp   eax, ebx
.text:00012409           jz     short loc_12415
.text:0001240B           mov   eax, 200EDBh
.text:00012410           not   eax
.text:00012412           push   eax
.text:00012413           pop   edi
.text:00012414           stosd
.text:00012415
.text:00012415 loc_12415:
jz     short loc_12415改成JMP,不知道是否就可以调试了???
 
驱网网上商城-开发板,开发资料光盘
 
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠  
[16 楼] Posted:2005-10-09 05:12|  
 
 
我最老实


 


 
级别: 驱动小牛
精华: 0
发帖: 104
威望: 38 点
积分: 278 分
贡献值: 0 点
注册时间:2005-09-11
        



怎么个改法?wowocock快说!
 
高速无限下载文件,请申请vip会员
 
养牛专业户  
[17 楼] Posted:2005-10-10 15:39|  
 
 
bmyyyud


 


 
级别: 驱动老牛
精华: 1
发帖: 2071
威望: 128 点
积分: 1272 分
贡献值: 0 点
注册时间:2002-02-22
        




QUOTE:
下面是引用我最老实于2005-10-10 07:39发表的:
怎么个改法?wowocock快说!

ft,wowocock已经告诉你了
 
高速无限下载文件,请申请vip会员
 
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红
白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中  
[18 楼] Posted:2005-10-10 23:48|  
 
 
yanjl


 


 
级别: 驱动牛犊
精华: 0
发帖: 91
威望: 44 点
积分: 365 分
贡献值: 0 点
注册时间:2005-06-08
        



wuyanfeng你好,你能不能把第一部分给我发一下。谢谢了。
我的邮箱: stone3431@tom.com
 
高速无限下载文件,请申请vip会员
 
Hero  
[19 楼] Posted:2005-10-12 00:44|  
 
 

<<   1   2   3   4   >>  Pages: ( 1/4 total )  快速跳至 >> 初学者入门  |- c/c++入门(含vc使用)  |- InnoSetup 中文讨论区  |- Keil C 使用  |- 电子技术基础  |- ABC初学者  |- 驱动及应用程序安装程序制作 >> 安全技术  |- 反流氓、反木马和rootkit  |- 网络安全技术  |- 病毒技术分析 >> 阅读与交流  |- windows 源码解读  |- 书评 >> 各取所需  |- 求职专区  |- 合作开发  |- 供需信息 >> 驱动开发  |- 每周话题  |- x64移植技术  |- WDF 学习与研究  |- Kernel Mode discussion and Soft Driver  |- USB驱动开发  |- 非USB硬件驱动开发  |- 图形设备驱动版(打印、扫描、显示...驱动)  |- Mac 驱动开发  |- NDIS网络接口开发  |- LINUX&UNIX核心开发  |- 开发工具使用  |- (IEEE1394)FireWire  |- 文件系统(过滤)驱动程序开发  |- 软件工程在驱动开发中的应用  |- 总结、原创区 >> 硬件开发  |- DSP & PLD &FPGA  |- 硬件设计  |- FirmWare  |- 集成电路设计(IC) >> SNMP网管  |- SNMP网管软件开发 >> 嵌入式系统及掌上设备  |- 嵌入式系统开发  |- Wince 程序开发  |- VxWorks >> 程序人生  |- 疯狂灌水  |- 新闻,要闻,花边  |- 情感小屋  |- I love English  |- 程序人生  |- 志宁自语  |- MP3 & FLASH 共享  |- 艺术&帖图区  |- 漂流一族 >> 其它事务  |- 用户留言  |- 软件使用与交流 >> 公司黑白名单  |- 白名单  |- 黑名单 >> 合作网站技术支持论坛  |- 驱动开发网在线商城  |- syser debugger  |- S1系列PCI开发板、FPGA开发板支持  |- PLX PCI 开发板支持  |- DriverStudio 技术支持  

 驱动程序开发网技术社区 -> Kernel Mode discussion and Soft Driver
    

快速发帖 顶端
 
内容:
HTML 代码不可用

使用签名
Wind Code自动转换

[查看帖子长度]  标题:  
表情:        
      

     按 Ctrl+Enter 直接提交    


 


Powered by PHPWind v4.3.2 Code ? 2003-05 PHPWind
This is html template view this page faster

You can contact us

最新喜欢:

HWFDVDHWFDVD
驱动开发者 呵呵
fresharplite
驱动牛犊
驱动牛犊
  • 注册日期2005-08-23
  • 最后登录2013-09-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-28 09:45
谁发一份完整的分析给我;邮箱cnhet@163.com
fresharplite
驱动牛犊
驱动牛犊
  • 注册日期2005-08-23
  • 最后登录2013-09-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-07-01 16:11
Icesword自释放驱动和装载是怎么实现的。谁能指点一下
游客

返回顶部