科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航



ZDNet>安全频道>ZD评测>一步一步教你加密解密技术——动态分析技术

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

由于现在最普及的操作系统是 Windows 95/98、Windows NT、Windows Millennium、Windows2000因此就讲讲SOFTICE在这几个平台安装时的一些注意事项。

来源:看雪 2008年10月16日

关键字:加密解密 动态分析技术

  第2章 动态分析技术

  第一节 SoftICE与TRW2000安装安装与配制

  SOFTICE有几个平台的版本,DOS,WINDOWS 3.0,Windows 95/98,WINDOWS NT,等。 由于现在最普及的操作系统是 Windows 95/98、Windows NT、Windows Millennium、Windows2000因此就讲讲SOFTICE在这几个平台安装时的一些注意事项。

  一、SOFTICE for win9x安装与配制

  ㈠、SOFTICE安装 

  1、SOFTICE目前最新版本是4.05,如你的系统是win9x,就请下载for win9x版本的SOFTICE,建议下载SOFTICE的最新版本,这样稳定性好些。运行setup.exe开始安装,出现(图一):

(图一)

  2、然后点击下一步,输入安装序列号(图二)(序列号一般在安装软件的readme.txt或其它说明文件里)

(图二)

  3、然后下面几个画面是要求选定路径和安装组件,不久你会来到显卡配制对话框(图三):

(图三)

  在显卡配制里两种方法:

  ①这种配制使SOFTICE激活状态时类似DOS全屏状态一样(也就是字符模式状态),在显卡列表选择你的显卡类型,Universal Vidoe Driver和Use monochrome card/monitor这两项不要选,然后点击Test按钮,在测试过程中你能看到各种颜色的字符,说明显卡测试通过,就可点击下一步了。

  ② 这种配制使SOFTICE在激活状态下类似windows应用程序的一个窗口那样,这样在调试时可避免显示器不停地在图形和字符模式转换,对提高显示器寿命大有好处。配制时,显卡列表一栏忽略,不用配制,只要把Universal Vidoe Driver这一项选上,然后test,如跳出如(图四)对话框,测试通过。(本人强烈推荐这种方式)

(图四)

  4、再下一步是鼠标的配制(图五):

(图五)

  现在鼠标常见的一般是串行口或ps/2接口,你跟据自己的鼠标接口类型或位置选上合适的就可。如碰到鼠标在SOFTICE调试画面不能用或一用死机,可能是没选好正确的选项,你可在SOFTICE菜单里的,运行mosue setup这个菜单项重新配制鼠标。

  5、最后一步是询问以何种方式装载SOFTICE的主文件winice.exe(图六):

(图六)

  首先要了解SOFTICE for 9x版本是如何装载的,在SOFTICE的安装目录下有winice.exe这个文件,windows启动到纯DOS环境下,运行winice.exe这个文件,将装载SOFTICE。

  安装时默认将C:\PROGRA~1\NUMEGA\SOFTIC~1\WINICE.EXE这一行放时进Autoexec.bat(自动批处理文件),这样windows以后每次都运行Autoexec.bat这个文件,自动装载SOFTICE。另外,你可根据自身需要配制启动模式,具体参考第8步。

  6、然后安装程序将复制文件到硬盘里,来到最后一个对话框(图七):

(图七)

  最后一项是电子注册,注册成功后,以后可在线升级SOFTICE版本,这里选最后一项Regiter later.

  7、至此安装完成,重新启动windows,微机先到DOS下,自动或手动运行相应批处理文件,运行其内的winice.exe文件,装载windows。

  8、启动菜单配制:

  通过配制启动菜单,启动时根据自己的需要选择是否装载SOFTICE。

  AUTOEXEC.BAT配制样例:

  @ECHO OFF

  goto %config%

  :SICE

  C:\PROGRA~1\NUMEGA\SOFTIC~1\WINICE.EXE

  goto common

  :NORM

  goto common

  :common

  CONFIG.SYS配制样例:

  [MENU]

  MENUITEM NORM,Windows 9x

  MENUITEM SICE,Windows 9x with SoftICE

  MENUDEFAULT NORM,2[NORM][SICE][common]

  ㈡、SOFTICE配制

  1、Symbol Loader的使用

(图八)

  你在开始SOFTICE的菜单里有一项ymbol Loader快捷方式,运行后,在其菜单EDITSOFTICE Initialization Settings选项,打开后如图(图八)。这里你就可配制SOFTICE了。

  ①General选项

  在Initialization string里,你可填上需要SOFTICE一启动自动运行的命令。如:

  WD 2; WC 14; FAULTS OFF; IXHERE OFF; IYHERE OFF; set font 2;lines 40;x;(各行以分号分开)

  ②Exports选项

  在这里可添加相关的DLL文件,以便在SOFTICE下拦截这些DLL的函数。特别是破解VB程序时,定要将VB运行库装载进去。

  ③Keyboard Mappings选项

  这里配制各功能热键。如:F5="^x;"用F5键代替命令X.

  ④Macro Definitions选项

  宏定义,你可定制各种命令宏,以方便平时的操作。

  如:s7878="S 30:0 L ffffffff '78787878' " 用命令s7878代替一串命令:S 30:0 L ffffffff '78787878'

  ⑤Remote Debugging

  利用网络远程调试配制。

  注:以上所有配制好后的参数,都保存在winice.dat文件里。

  2、winice.dat配制

  在Windows 9x下 SoftICE配制除了用上面的方法外,也可通过文件winice.dat来实现的。Soft-ICE 在启动的时候通过它装入一些 DLL/EXE 的信息。

  你可在SOFTICE安装目录下发现winice.dat,可用任何文本编辑软件打开它(如记事本)。如我机子里的winice.dat:(你可参考我的来修改你的winice.dat)

  ;注意分号后是描述语言,不被执行。

  PENTIUM=ON;<=Pentium Op-Codes

  NMI=ON

  ECHOKEYS=OFF

  NOLEDS=OFF

  NOPAGE=OFF

  SIWVIDRANGE=ON

  THREADP=ON

  LOWERCASE=OFF

  WDMEXPORTS=OFF

  MONITOR=0

  PHYSMB=128;<=这个值是你的物理内存大小

  SYM=1024

  HST=256;<=历史缓冲区为256K

  TRA=8

  MACROS=32;<=宏操作的最大个数,此处是32个

  DRAWSIZE=2048;<= 我的显卡内存是2MB ,此处值是你显卡内存大小

  INIT=" wd 2;wc 20;FAULTS OFF; IXHERE OFF; IYHERE OFF; set font 2;lines 40;code on;x;";<=初始化,此处默认的是800*600分分辨率

  如你是全屏请换上:lines 57

  F1="h;"

  F2="^wr;"

  F3="^src;"

  F4="^rs;"

  F5="^x;"

  F6="^ec;"

  F7="^here;"

  F8="^t;"

  F9="^bpx;"

  F10="^p;"

  F11="^G @SS:ESP;"

  F12="^p ret;"

  SF3="^format;"

  CF8="^XT;"

  CF9="TRACE OFF;"

  CF10="^XP;"

  CF11="SHOW B;"

  CF12="TRACE B;"

  AF1="^wr;"

  AF2="^wd;"

  AF3="^S 0 L FFFFFFFF 8B,CA,F3,A6,74,01,9F,92,8D,5E,08;";<=VB3特征字符串

  AF4="^s 0 l ffffffff 56,57,8B,7C,24,10,8B,74,24,0C,8B,4C,24,14,33,C0,F3,66,A7;" ;<=VB4特征字符串

  AF5="^s 0 l ffffffff FF,75,E0,E8,85,EF,FF,FF,DC,1D,28,10,40,00,DF,E0,9E,75,03;" ;<=VB5特征字符串

  AF8="^XT R;"

  AF11="^dd dataaddr->0;"

  AF12="^dd dataaddr->4;"

  CF1="altscr off; lines 60; wc 32; wd 8;"

  CF2="^wr;^wd;^wc;"

  <=以下是宏操作命令:

MACRO s7878="S 30:0 L ffffffff '78787878' "

MACRO sname="S 0 L FFFFFFFF 'toye' "

MACRO swide="s 0 l FFFFFFFF '7','8,'7','8,'7','8,'7','8,'7','8,'7','8,'7','8','7','8' "

MACRO reg="bpx regqueryvalueexa if *(esp->  MACRO s7878="S 30:0 L ffffffff '78787878' "

  MACRO sname="S 0 L FFFFFFFF 'toye' "

  MACRO swide="s 0 l FFFFFFFF '7','8,'7','8,'7','8,'7','8,'7','8,'7','8,'7','8','7','8' "

  MACRO reg="bpx regqueryvalueexa if *(esp->8)>='Soft' do "d(esp->14)" "

  MACRO bpxpe="bpx loadlibrarya do "dd esp->4" "

  MACRO bpxgeta="bpx GetDlgItemTextA; bpx getwindowtexta; bpx getdlgitemint; bpx getdlgitemtext;"

  ***** Examples of sym files that can be included if you have the SDK *****

  Change the path to the appropriate drive and directory

  LOAD=c:\windows\system\user.exe

  LOAD=c:\windows\system\gdi.exe

  LOAD=c:\windows\system\krnl386.exe

  LOAD=c:\windows\system\mmsystem.dll

  LOAD=c:\windows\system\win386.exe

  Exports - change the path to the appropriate drive and directory

  EXP=c:\windows\system\advapi32.dll ;<=这四行前不要加分号,否则不被装载,SOFTICE可能什么也拦不到 :

  EXP=c:\windows\system\kernel32.dll

  EXP=c:\windows\system\user32.dll

  exp=c:\windows\system\gdi32.dll

  exp=c:\windows\system\comctl32.dll ;

  如你要破解VB程序,下面的VB运行库将要装载,SOFTICE默认值是没有这几行,你需手动加上。

  EXP=c:\windows\system\msvbvm60.dll;<= Visual Basic 6 具体参考第十五课VB破解

  EXP=c:\windows\system\msvbvm50.dll ;<= Visual Basic 5 注意在这五个DLL中最好不要同时装载2个以上

  EXP=c:\windows\system\vb40032.dll;<= Visual Basic 4(32bit)

  EXP=c:\windows\system\vb40016.dll;<=Visual Basic 4(16-bit)较少见

  EXP=c:\windows\system\vbrun300.dll;<=Visual Basic 3

  EXP=c:\windows\system\vga.drv;

  EXP=c:\windows\system\vga.3gr

  EXP=c:\windows\system\sound.drv

  EXP=c:\windows\system\mouse.drv

  EXP=c:\windows\system\netware.drv

  EXP=c:\windows\system\system.drv

  EXP=c:\windows\system\keyboard.drv

  EXP=c:\windows\system\toolhelp.dll

  EXP=c:\windows\system\shell.dll

  EXP=c:\windows\system\commdlg.dll

  EXP=c:\windows\system\olesvr.dll

  EXP=c:\windows\system\olecli.dll

  EXP=c:\windows\system\mmsystem.dll

  EXP=c:\windows\system\winoldap.mod

  EXP=c:\windows\progman.exe

  EXP=c:\windows\drwatson.exe

  ***** Examples of export symbols that can be included for Windows 95 *****

  Change the path to the appropriate drive and directory

  EXP=c:\windows\system\kernel32.dll

  EXP=c:\windows\system\user32.dll

  EXP=c:\windows\system\gdi32.dll

  EXP=c:\windows\system\comdlg32.dll

  EXP=c:\windows\system\shell32.dll

  EXP=c:\windows\system\advapi32.dll

  EXP=c:\windows\system\shell232.dll

  EXP=c:\windows\system\comctl32.dll

  EXP=c:\windows\system\crtdll.dll

  EXP=c:\windows\system\version.dll

  EXP=c:\windows\system\netlib32.dll

  EXP=c:\windows\system\msshrui.dll

  EXP=c:\windows\system\msnet32.dll

  EXP=c:\windows\system\mspwl32.dll

  EXP=c:\windows\system\mpr.dll

  启动windows装载SOFTICE后,咦!怎么没反应,没调试画面!哈哈,别着急,按CTRL+D看看,再按一下回到windows下,或按F5也能回来。此时调试窗口象windows开的一窗口,如是象全屏DOS一样窗口,那就是安装显卡时,参数没选好,此时按上文修正即可。下面的命令是调整SOFTICE窗口状态:

  set font n(n=1,2,3)设置字体;本人建议set font 2(在800*600条件下)

  set origin x,y(x,y)锁定窗口;

  lines n n=(25-128)设置显示行数;本人建议lines 40

  Ctrl+Alt+光标键 移动窗口;

  Ctrl+Alt+home 重设窗口位置原点(0,0);

  Ctrl+L 刷新。

  如你以默认winice.dat启动SOFTICE,有可能需用WD打开数据窗口;用SET FONT 2 设置字体等重复工作。你可在winice.dat文件内设置自动执行命令操作,方法是在INIT这一行,各命令用分号分开,如:

  INIT=" WD 2; WC 14; FAULTS OFF; IXHERE OFF; IYHERE OFF; set font 2;lines 40;x;"这样配制后界面类似TRW2000。(这些是在800*600条件下的情况,如你不是此分辩率可调整set font n;lines n)

  摘要:SOFTICE有几个平台的版本,DOS,WINDOWS 3.0,Windows 95/98,WINDOWS NT,等。 由于现在最普及的操作系统是 Windows 95/98、Windows NT、Windows Millennium、Windows2000因此就讲讲SOFTICE在这几个平台安装时的一些注意事项。

  标签:加密 解密 crack 破解

  二、SOFTICE for Windows Millennium

  由于Windows Millennium没有了DOS平台,因此不能用常用的方法来安装SOFTICE,在此平台上可以运行SOFTICE for WIN9x版本和TRW2000版本。要实现SOFTICE在Windows Millennium平台的安装,需要工具Winice Loader,安装过程如下:

  1 正常安装Windows Millennium,如在C:\WIN98ME;

  2 正常安装Softice 405 Build 334;

  3 复制WINICE.EXE、WINICE.DAT、SIWVID.386 三个文件到 C:\WIN98ME下;

  4 从Winice Loader内解压 LOADER.EXE,复制这个文件到C:\WINME98\SYSTEM\VMM32\ 下.

  5 重新启动系统。

  三、SOFTICE for NT/2K安装与配制

  1、SOFTICE for NT/2k的安装与for 9x版本差不多,所不同的是在第五步:装载SOFTICE方式选择,如图(图九):

(图九)

  你可根据需要选择不同的装载方式,注:如你选择了Manual方式,要装载SOFTICE,需要来SOFTICE的菜单里运行选项:START SOFTICE快捷方式来装载SOFTICE。

  2、在NT下,配制SOFTICE是用SOFTICE Loader(从你的开始菜单选),选择Edit/SoftICE,一般的选项是初始化,这里你可参考手册了解不同的开关选项的详细描述。如:

  CODE ON; FAULTS OFF; I3HERE OFF; WD 3; WF; X;

  其它两个重要的选项是Symbols &Exports。如果你拥有自己系统的SDK(软件开发工具包),你可用SOFTICE装载并调试它。那些没有SDK应该用exports选项从%WINNT%/System32 目录下增加下面的DLL文件。

  advapi32.dll, comctl32.dll, comdlg32.dll, gdi32.dll, kernel32.dll, msvbvm(50/60).dll (如果需要), msvcrt.dll (如果需要), ole32.dll, oleaut32.dll, shell32.dll, user32.dll, version.dll.

  四、TRW2000的安装与配制

  ㈠、TRW2000安装

  TRW安装简单多了,没SOFTICE那样复杂,但目前TRW2000不支持windows NT。它发布版本是一个ZIP压缩包,才200多K。只要将其解压缩到一个目录下,然后运TRW2000.EXE即可(图十) , 无须安装或者重启计算机。

(图十)

  激活方式同SOFTICE不一样:

  1. Ctrl + M 特权级0级的热键,能够立即中断Win9x。 相当于 Soft-ICE 的热键 Ctrl+D.

  2. Ctrl + N 特权级3级的热键。 在绝大多数时候,我们并不需要在0级上中断。 Ctrl + N可以中断Windows的特权级3级的前台线程。 这应该是我们最常用的。

  其它指令同SOFTICE兼容,也就说你在上一节学得东西完全可用在TRW2000上。

  但是TRW2000有许多更新的思想,具体看后面几课介绍及范例。

  另外,TRW2000可支持plug-ins,也可装载dll文件,在1.15版本以上,在安装目录下有一DLL目录,如你特别需要的dll复制到此目录,即可装载,如破解VB时,就需要将VB dll复制此目录,具体参考后面的VB破解。

  其它的请读其Readme.

  ㈡、TRW2000的配制

  TRW2000的配制是通过其安装目录下的

  TRW2000.ini 来实现的,你可按自己的需要配制它(一般按默认即可)。

  这个段是32位数据类型,长度为4G ,我们还可以看到很多的段,它们有可能会指向同一个物理地址,但它们的类型,属性可能不同。如一些段指向的地址是不可读写的,但另外一个段指向的同一物理地址是可读写的!如果我们通过不可写的那段的编号放到段选择器,然后进行读写操作,肯定死掉了。 但换了另外一个段对同一个地方读写那就没问题!保护模式的内存管理挺有趣的,感兴趣的不妨看看这方面的书,当然作为初学者只需稍微了解就可。

  ②号位置00000000:此处表示内存的虚拟地址。

  ③号位置的值是当前内存的数据,以十六进制表示。

  ④号位置的值是"③"处值的另一种表示方法:ASCII码。

  3、代码窗口

  此处显示的是当前程序的代码,因为不管是什么程序,最终在CPU执行时都是以机器语言方式,而汇编语言和机器语言是一一对应的,因此SoftICE为了方便我们理解,把所监视的代码以汇编代码形式显示在我们面前。例如:

  (图四)

  ①段选择器;

  ②虚拟地址;

  ③机器码:这就是CPU执行的机器代码,此处是以十六进制表示。你可用Code on/off打开或关闭这项的显示。

  ④汇编指令:和机器码对应的程序代码。

  4、堆栈窗口

  这个是TRW2000特有的,通过它很方便监视堆栈的状况。

  5、命令窗口

  这是各种命令执行的地方,在屏幕底部的动作状态行显示执行命令的各种提示,以及可提供指令语法帮助。

  6、程序领空

  所谓领空,实际上是指:在某一时刻,CPU 的 CS:IP(EIP) 所指向的某一段代码的所有者所在的区域。此例中SoftICE所停下来时光标所指的那一句代码是属于KERNEL32.DLL的,因此就叫KERNEL32.DLL领空,在图2.14中,可看到的领空名是KERNEL32!.text,那我怎么知道它就是KERNEL32.DLL文件呢?这个主要是经验,KERNEL32.DLL是Windows系统文件,在SoftICE里显示领空名时不显示扩展名,只是显示前一部份。

  二、SoftICE常用命令简介

  由于SoftICE命令操作较多,在此就把几个常用的命令介绍一下,其它详细说明请参考附录的"SoftICE手册"。

  1、 G命令

  语法:G [=start-address] [break-address]

  作用:执行程序,后面如果加地址,则执行到该地址为止。

  注意: TRW2000 中G命令与SoftICE稍有不同,SoftICE中G命令必须是在当前段中,这时IP(EIP)为指定值才中断;而TRW2000则不管段址如何,只要IP(EIP)是指定的值便停下,TRW2000这个特性大大方便我们的操作。

  2、P命令

  语法: P [ret]

  作用:单步执行程序。

  只执行P时,相当于按下F10键。在汇编模式中,当遇到 CALL、INT、LOOP、REP指令时,P将不跟踪进去,直到这些指令执行完毕,控制才返回SoftICE,换句话说,P命令是"跨"过这些指令的。

  P RET 命令相当于快捷键 F12。SoftICE将一直单步执行直到它找到一条返回语句(RET、RETF),也就是说让SoftICE一直执行代码,直到出现 RET (XXXX) 命令,再跳出来拦截,这时,当前 IP(EIP) 会是停在 RET (XXXX) 后的某一条语句上,通常是在某一个CALL XXXXXXXX 后面。由于我们通常用SoftICE在某些底层的Windows函数上设置断点,所以 F12 是很管用的。因为程序的作者用的是高级语言,Windows又是提倡"透明",不希望程序员知道底层的操作,而只提供给他们高层的接口,而相当多的高级函数调用某个一定的底层函数,所以当你在底层函数上下断点,再用F12,就可以知道他用的是什么函数了。

  3、T命令

  语法:T [=start-address] [count]

  start-address:执行起始地址;

  count:指定SoftICE将单步跟踪多少次才停止。

  作用:单步跟踪。

  T命令相当于功能键F8,如没指定起始地址,将从CS:IP(EIP)指向的指令开始执行,此时当遇到 CALL、LOOP等指令时,T将跟踪进去。

  注意: F8和F10功能键的主要差别就在这,遇到 CALL、LOOP等指令时,F10是路过,而F8是跟进去。

  4、BPX命令

  语法:BPX [address] [IF expression] [DO "command1;command2;..."]

  address :断点所在的线性地址;

  IF expression:条件表达式,只有条件为"真"时,SoftICE才在断点处弹出;

  Do command:当SoftICE弹出时,自动执行的一些命令。

  作用:在可执行语句上设置(或清除)断点。

  BPX 用来在指令处下断点,程序一旦执行到此,SoftICE就会弹出。当光标在代码窗口中时,直接打入BPX就会在光标所在语句处设断点,再打BPX 就取消。BPX的快捷键是 F9,当光标在代码窗口中时,按F9就是设定(取消)。

  BPX 也可用函数名来作地址参数:格式为"BPX 函数名"。

  这个函数名可以是任意一个API函数、虚拟机指令、DLL文件的引出函数等等,功能强劲。例:

  :bpx messageboxa(不用区分大小写)//只要程序调用了此函数,SoftICE将中断;

  :bpx GetWindowTexta if EAX==8 // 当调用GetWindowTexta函数时EAX=8,SoftICE将中断;

  :BPX GetWindowTexta do "d EAX"// 当 GetWindowTexta被中断,自动显示EAX的值。

  注意: TRW2000与SoftICE条件格式有点不同,如在SoftICE下的是:bpx loadlibrarya do "dd esp->4",而相同的用法在TRW2000中是:bpx loadlibrarya do "dd *(esp+4)" 。另外SoftICE中用鼠标双击指令行可设断,而TRW2000中不行,只能按F9.

  5、BPM命令

  语法:BPM[size] address [条件表达式] DO[执行的命令]

  size:内存单元大小,B为字节(默认);W 为字;D 为双字;

  verb:所进行的操作,R为读;W为写;RW为读写(默认);X 为执行。

  作用:设置内存访问断点。

  注意: BPM用了DR3-DR0寄存器,所以最多只能设四个断点。

  6、BMSG命令

  语法:BMSG window-handle [条件表达式] DO[执行的命令]

  window-handle:消息发向的窗口句柄,即消息名

  作用:在Windows的消息上下断点。

  Windows本身是由消息驱动的, 所以跟踪一个消息会得到相当底层的答案。如:

  我们执行记事本程序(Notepad),然后Ctrl+D激活SoftICE输入:

  :bmsg wm_char

  :g

  然后回到Notepad中,随便按一个键,SoftICE就激活了;原因在于我们在按键消息上设置了断点(退出SoftICE别忘下命令"BC *"清除刚才下的断点)。

  7、BL命令

  语法:BL

  作用:显示当前所设的断点

  注意: SoftICE会把所有断点按从0开始的编号列出,而TRW2000是从1开始编号列出。

  8、BC命令

  语法:BC list | *

  list:可以清除指定编号的断点,多个时中间用空格或逗号隔开。

  * :清除所有的断点。

  作用:清除一个或多个断点

  9、BD命令

  语法: BD list | *

  list:可以是单个,也可以是一系列断点,中间用空格或逗号隔开。

  * :禁止所有的断点

  作用:使一个或多个断点失效。

  10、BE命令

  语法:BE list | *

  作用:使一个或多个断点恢复有效。

  用来恢复前次用 BD 命令使之失效的断点。 (每当新定义断点或编辑断点时,系统自动将其置为有效)

  11、BPE命令

  语法:BPE index_number(断点索引号)

  作用:编辑一个已存在的断点。

  12、R命令

  语法:R 寄存器名

  作用:显示或更改寄存器的内容。

  其可更改所有的寄存器的值。此命令较常用的一个功能是更改状态寄存器(PSW )的值,格式:R FL 标志位。比如当前 Z标志位(零位)为置位状态,执行"r fl z"之后会被清除;如果C标志位为清除状态,那么"r fl c"将使之置位。

  注意: 利用此命令很方便在一些跳转指令上改变方向。

  13、A命令

  语法:A [地址]

  作用:进入小汇编状态,可直接写入汇编代码。

  如不加地址值,直接在当前CS:IP(EIP)处汇编。用SoftICE内置的汇编器在内存中写入汇编代码。汇编器支持标准的80x86指令集,包括386、486、Pentium、Pentium-Pro、MMX协处理器,新版的SoftICE还支持AMD的3D Now!、PII、PIII的特有指令集。

  14、D命令

  语法:D[size] [address [l length]]

  size:B 字节;W 字;D 双字; S 短实型;L 长实型;T 10b长实型

  作用:显示某内存区域的内容。

  15、S命令

  语法:S [-cu][address L length data-list]

  address:搜索的起始地址

  length :搜索的长度(字节长)

  data-lis:可以是一系列字节,也可以是字符串,字符串可以用单引号,也

  可以用双引号括住.

  -c :使查找区分大小写

  -u :查找Unicode 编码的字符串.

  作用:在内存中搜寻特定数据,如果找到数据,那将在数据窗口中显示出来,如果在找到后,你还要继续查找,使用不带参数的S命令。由于S命令忽略不在内存中的页面,因此你可以使用32位平面地址数据段描述符30h在整个4GB(0~FFFFFFFFh )空间查找。如:

  s 30:0 l FFFFFFFF "78787878" //在此令在内存中查找字串"78787878"位置。

  注意: TRW2000中S命令的字串应是单引号(而SoftICE皆可)。如:s 30:0 l FFFFFFFF '78787878'.

  16、E命令

  语法:E[size] [address [data-list]]

  作用: 修改内存单元

  17、U命令

  语法:U [address [l length]] | [symbol-name]

  address :段:偏移量或选择符:偏移量

  symbol-name:将从指定的函数开始反汇编

  length :反汇编的长度(字节)

  作用: 反汇编指令

  你可以利用此命令抓取汇编代码,运行LOADER32后,将历史缓冲区(history buffer)调大些(默认为256,不能放足够多的缓冲数据)。然后切换到SoftICE调试画面下,来到你要抓取的地方,反汇编这些代码,如:U CS:EIP L 1000 ,立即按Ctrl+D返回到Windows环境,再次来到symbol loader程序,选择"File/Save SoftICE History As…"。

  注意: 在TRW2000下可以直接反汇编代码输出到一个文件:

  u 401000,402000 >路径/myfile。

  18、FAULTS命令

  语法:FAULTS [on | off]

  作用:打开或关闭错误跟踪功能

  由于SoftICE做为一个DEBUGGER,FAULTS 默认为ON,所以一旦CPU有非法指令,SoftICE就会不停地弹出。

  19、?命令

  语法:? 表达式

  作用:计算一个表达式的值

  一个非常高级的计算器,另外由于可以显示ASCII,所以可以很方便地在各种数制之间察看。

  20、.命令

  语法: .

  作用:在代码窗口中定位当前指令

  当你在代码窗口中上下浏览时,有可能走得很远,那么这时一个"."命令会让你在下一瞬间回到SoftICE当前所在的CS:EIP处。

  21、EXP命令

  语法: EXP [函数名]

  作用: 显示DLL中的出口函数

  函数名可以指定出其前几个字符, 可以用?来做替代不定字符,这样你就可查找相关函数及其是哪个DLL文件了。这对于你在Win2K系统上非常实用,Win2K系统的KERNEL32.DLL中许多函数形式和Windows 9x可能不同,用此命令你就可找到正确的函数名了。

  22、PMODULE命令(TRW2000特有命令)

  作用:'pret'(相当于按<F12>) 直至CS:EIP位于模块中,但比F12更实用,其可以快速回到你的当前程序领空,不用按多次F12了

  23、SUSPEND命令(TRW2000特有命令)

  作用: 暂停当前的线程,并退出 TRW2000,按热键返回,此命令相当方便。

  24、ver blue命令(TRW2000特有命令)

  如你的TRW2000背景颜色很暗,可通过此命令来调整背景。

  摘要:SOFTICE有几个平台的版本,DOS,WINDOWS 3.0,Windows 95/98,WINDOWS NT,等。 由于现在最普及的操作系统是 Windows 95/98、Windows NT、Windows Millennium、Windows2000因此就讲讲SOFTICE在这几个平台安装时的一些注意事项。

  标签:加密 解密 crack 破解

  第三节 常用Win32 API函数简介

  现在很多讲Windows程序设计的书都是讲基于MFC库和OWL库的Windows设计,对Windows实现的细节都鲜有讨论,而调试程序都是和系统底层打交道,所以有必要掌握一些Win32 API函数的知识,这样我们可快捷地找出程序调用错在哪?是哪个参数出了问题。

  Windows程序模块包括KERNEL、USER和GDI,其中KERNEL完成内存管理、程序的装人与执行和任务调度等功能,它需要调用原MS―DOS中的文件管理、磁盘输入输出和程序执行等功能;USER是一个程序库,它用来对声音、时钟、鼠标器及键盘输入等操作进行管理;GDI是一功能十分丰富的子程序库,它提供了图形与文字输出、图象操作和窗口管理等各种与显示和打印有关的功能。上述KERNEL、USER和GDI模块中的库函数可被应用程序调用,也可被其他程序模块调用。把包含库函数的模块称为输出者(export)。你应明白为什么跟踪软件时经常在KERNEL32!.text和USER32.text等系统领空转的问题吧。

  这里列出几个经常碰到的Win 32 API函数,它们都是存在Windows系统核心文件KERNEL32.DLL中和视窗管理文件USER32.DLL中。

  Windows函数是区分字符集的:A表示ANSI,W表示Wide,即Unicode (Wide character-set),前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。Windows的所有与字符有关的函数都提供两种方式的版本。尽管你编程时使用GetWindowText,但实际上编译程序会根据设置自动调用GetWindowTextA或GetWindowTextW。函数的最后一个字母告诉我们函数是使用单字节还是双字节字符串。

  1、 Hmemcpy函数

  void hmemcpy(hpvDest, hpvSource, cbCopy)

  void _huge* hpvDest; // 目的数据地址

  const void _huge* hpvSource; // 源数据地址

  long cbCopy; // 数据大小 (Bytes)

  这个函数在KERNEL32.DLL中,它很常用,俗称万能断点,但一般的编程书籍上很少提到,原因它是底层的东西,没有特殊需要,一般不直接调用。但的确它是很有用的!有意思的是它执行的操作很简单,只是将内存中的一块数据拷贝到另一个地方。

  注意:此函数只在Windows 9x系统上有效,在Win NT/2K系统上相关的函数是memcpy,但在Win NT/2K上不同于Windows 9x上,很少再调用memcpy来处理数据了,用此函数设断基本上什么也拦不住。

  2、 GetWindowText函数

  此函数在USER32.DLL用户模块中,它的作用是复制指定窗口中的字符到缓冲区。函数原型:

  int GetWindowText(

  HWND hWnd//欲获取文字的那个窗口的句柄

  LPTSTR lpString //预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入

  int nMaxCount//lpString缓冲区的长度

  );

  16位:GetWindowText

  32位:GetWindowTextA,GetWindowTextW

  3、 GetDlgItemText

  此函数在USER32.DLL用户模块中,它的作用是返回对话框中某一个窗口的标题或文字。函数原型:

  UINT GetDlgItemText(

  HWND hDlg, // 对话框句柄

  int nIDDlgItem, //控制标识符

  LPTSTR lpString, / 预定义的一个字符缓冲区

  int nMaxCount// 字符缓冲区的长度

  );

  16位:GetDlgItemText

  32位:GetDlgItemTextA,GetDlgItemTextW

  4、 MessageBox函数

  此函数是在USER32.DLL用户模块中,它的作用创建、显示和操作信息框。函数原型:

  int MessageBox(

  HWND hWnd, //窗口句柄

  LPCTSTR lpText, // 信息框中文字的地址

  LPCTSTR lpCaption, // 信息框标题地址

  UINT uType // 信息框类型

  );

  16位:MessageBox

  32位:MessageBoxA,MessageBoxW

推广二维码
邮件订阅

如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

重磅专题