首页
社区
课程
招聘
《SoftICE IceExt 0.70使用手册》一。
发表于: 2007-4-13 17:13 11345

《SoftICE IceExt 0.70使用手册》一。

2007-4-13 17:13
11345
《SoftICE IceExt 0.70使用手册》
一、安装使用
SoftICE作为调试器王者当之无愧,但是对于为专业的程序分析来说还有很多不方便的地方,为此诞生了诸如IceExt之类的扩展SoftICE功能的插件,本文将描述IceExt。并逐步分析内核调试的技术和手段。
   和以往的版本相比,IceExt有了很大的改观,在0.70版本中主要改变了人工的注册IceExt.sys 和使用net start IceExt的方式,这不知道算不算人性化设计,不过也方便了不少,但这不是最主要的,最大的改变是加入了eXTreme tRaCer Engine。使得SoftIce在输入特定的条件下跟踪单步调试,记录调试的过程信息。
  首先,我们先下载IceExt,IceExt可以从http://sourceforge.net/projects/iceext免费获得,在发行版中可以选择二进制版本和源代码,图方便的话,可以下载二进制版本的文件,当然这对于一个专业的调试人员是不适合的,毕竟我们需要研究一下这个东西内部的工作原理,还有是否可以改进的地方,所以我建议还是下载源代码。不过下载源代码的同时你必须保证已经安装了WINDOWXP的DDK,当然你也可以选择WINNT和WIN2000的DDK,但我使用的是WINDOWSXP SP2。
  修改make.bat和source文件中的W2K,将其替换成WXP,以及修改sys\source中的ntoskrnlNT4.LIB为$(DDKLIBPATH)\ntoskrnl.lib,我们可以使用make.bat来生成文件。当然我并不是使用make.bat来生成了,而是先去BUILD了SYS,如果你使用的也和我一样是WINDOWS XP SP2相信也会得到 如下的错误。
errors in directory c:\iceext\iceext-0.70-src\sys
libmad.lib(stream.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(synth.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(frame.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(bit.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(layer3.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(layer12.obj) : error LNK2026: module unsafe for SAFESEH image.
libmad.lib(timer.obj) : error LNK2026: module unsafe for SAFESEH image.
objfre_wxp_x86\i386\iceext.sys : error LNK1281: Unable to generate SAFESEH image.
  什么是SAFESEH? safeseh是一项保护和检测和防止堆栈中的seh被覆盖而导致利用的技术。
在指定 /SAFESEH 后,只有在链接器还可以生成映像的安全异常处理程序表的情况下,该链接器才会生成一个映像。该表指定其异常处理程序适合于该映像的操作系统。
只有在对 x86 目标进行链接时,/SAFESEH 才有效。已说明异常处理程序的平台不支持 /SAFESEH。例如,在 x64 和 Itanium 上,所有异常处理程序都在 PDATA 中说明。ML64.exe 支持添加批注,这些批注将 SEH 信息(XDATA 和 PDATA)发出到映像中,允许您通过 ml64 函数展开。有关更多信息,请参见 MASM for x64 (ml64.exe)。

如果未指定 /SAFESEH,链接器将生成具有安全异常处理程序表的映像(如果所有模块都与安全异常处理功能兼容)。如果任意模块与安全异常处理功能不兼容,则最终的映像将不会包含安全异常处理程序表。如果 /SUBSYSTEM 指定 WINDOWSCE 或某一 EFI_* 选项,则链接器将不尝试生成具有安全异常处理程序表的映像,因为上述任何子系统都不可以利用这些信息。

如果指定了 /SAFESEH:NO,则链接器将不会生成具有安全异常处理程序表的映像,即使所有模块都与安全异常处理程序功能兼容。

链接器无法生成映像的最常见的原因是:该链接器的一个或多个输入文件(模块)与安全异常处理程序功能不兼容。模块与安全异常处理程序不兼容的一个常见原因是:该模块是通过来自以前版本的 Visual C++ 的编译器创建的。

通过使用 .SAFESEH,还可以将函数注册为结构化的异常处理程序。

在 Microsoft Visual C++ 2005 中,无法将现有的二进制文件标记为具有安全异常处理程序(或不具有异常处理程序);必须在生成时添加关于安全异常处理的信息。

链接器能否生成安全异常处理程序表取决于使用 C 运行时库的应用程序。如果使用 /NODEFAULTLIB 进行链接,并希望得到一张安全异常处理程序表,则需要提供加载配置结构(例如可在 loadcfg.c CRT 源文件中找到的结构),此结构包含为 Visual C++ 定义的所有项。

为了编译通过我们必须取消/SAFESEH的连接参数,打开DDK中的i386mk.inc文件,将/SAFESEH参数去掉。好了,我们成功的生成了ICEEXT.SYS,将编译好的ICEEXT.SYS复制到/EXE文件夹,打开ICEExt.rc将
#ifdef _DEBUG
1 BINARY DISCARDABLE "..\\sys\\objchk_w2k_x86\\i386\\IceExt.sys"
#else
1 BINARY DISCARDABLE "..\\sys\\objfre_w2k_x86\\i386\\IceExt.sys"
#endif
改写成
#ifdef _DEBUG
1 BINARY DISCARDABLE "IceExt.sys"
#else
1 BINARY DISCARDABLE "IceExt.sys"
#endif
保存后,BUILD。
OK,我们得到了iceext.exe.
接下来我们要修改SOFTICE的注册表信息。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\NTice]
"KDHeapSize"=dword:00008000
"KDExtensions"=""
好了,可以使用iceext –s来启动softice了。
迫不及待,我CTRL+D;
Lines 45;
Set font 2;
!help后调出了新的ICEEXT的全部功能。
!BC -  清除内存区块中所有的断点
!BL -  列出内存区块中所有的断点
!BPR - 中断在内存范围中
!CP - 设定当前代码页(866 or 1251)
!DUMP - dump内存到磁盘
!DUMPSCREEN - dumpSoftICE屏显成RAW格式到磁盘
!INTSAVE - 存储中断句柄
!INTREST - 恢复中断句柄
!INTXCHG - 置换中断句柄
!INTSHOW - 显示内部中断句柄表
!EB -内存补丁patch byte in memory (restores PTE after patching)
!FONT - 设定屏幕字体
!FPOS        - 显示文件指针
!LASTBRANCH - 显示最后的MSR分支信息
!LOADFILE - 打开硬盘文件载入到内存镜像
!PROTECT - 开关 SoftICE 自我保护功能
!HELP - 显示帮助
!SUSPEND - 挂起当前执行的线程(仅ring-3线程)
!RESUME - 唤醒被挂起的线程
!TETRIS - 俄罗斯方块
!TRCINIT-初始化跟踪。
!TRACE-跟踪
!TRCCODE-察看跟踪代码。

书写仓促,下次我将继续将我使用ICEEX的过程和遇到的问题和大家讨论

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (7)
雪    币: 110
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
写的太有技术性了 ICE 我从来没成功用过一次,但就是喜欢那个黑屏 哈哈哈
2007-4-13 17:43
0
雪    币: 47147
活跃值: (20410)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
等全部完成再设精华。;)
2007-4-13 20:19
0
雪    币: 216
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
嗯,不错!楼主再发一些有关于ICEEXT的how what...
期待ing...
2007-4-13 20:43
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
请楼主发一下Softice4.05的使用说明.网上的使用说明都是老版本的,谢谢!
2007-4-13 22:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不错!不错!
2007-4-14 15:21
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
7
可惜SI不更新了。
2007-4-15 20:42
0
雪    币: 223
活跃值: (85)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
SoftICE的翻译工作,工程浩大,翻译english无法了解softice的内部运行机制,通过学习SoftICE插件,我们可以清晰的理解SoftICE,至少可以理解50%的工作原理。剩余的50%需要通过使用来学习。
2007-4-16 08:47
0
游客
登录 | 注册 方可回帖
返回
//