大家是否经常听说用SOFTICE或TRW2000装载某某程序,那这是什么意思呢?在SOFTICE里有一Symbol Loader快捷方式,运行后,在其菜单里打开你要调试的程序,然后按LOAD即可装载你要调试和程序。装载一文件后,将中断在这文件的主函数(即程序的入口处)。你也能通过配制 winice.dat装载中断在出口函数处。 一般用这种方法装载的目的是需要从程序的开始代码处跟踪。
TRW2000装载方法类似,在TRW2000运行窗口用Browse选中需调试的程序,然后用Loaf按钮装载。
2、利用S命令查找字符串
S命令是在在内存中搜寻特定数据,很管用,其一般格式:
S [-cu][address L length data-list]
address :搜索的起始地址
length :搜索的长度(字节长)
data-list :可以是一系列字节,也可以是字符串, 字符 串可以用单引号,也可以用双引号括住.
-c :使查找区分大小写
-u :查找Unicode 编码的字符串.
例:S 30:0 L ffffffff 'string'
这条命令是在整个4GB虚拟地址范围里搜寻字符串 'string'。
3、如何比较两文件的不同
一、用Wdasm反来后,用ultraedit来比较;
二、用hex workshop 3.0来直接比较两EXE;
三、你也可用补丁制作工具CodeFusion 3.0来比较两文件,具体参考补本制作一课。
4、抓取SOFTICE和TRW2000的调试画面
①SOFTICE 第一步运行SOFTICE的symbol loader快捷方式,打开菜单的“SoftICE initialisation settings”选项。将历史缓冲区(history buffer)调大些(默认为256,不能放足够多的缓冲数据)。然后切换到SOFTICE调试画面下,来到你要抓取的地方,反汇编这些代码,如:U CS:EIP L 1000 ,立即按CTRL+D返回到windows环境,再次来到symbol loader程序,选择File/Save SoftICE History As ... 。
②在SOFTICE基础下,装载icedump,用命令 PAGEIN N [filename]更加方便灵活。
③在TRW2000下:u 401000,402000 >myfile或 u 401000 L 100 >myfile
5、充分利用条件中断
①在SOFTICE下: BPX <APIName> <Condition> 或 <COMMAND> DO "<COMMAND>"
如:bpx GetWindowTexta if EAX==00000008 // 当 EAX=8中断GetWindowTexta
BPX GetWindowTexta do "x"// 当 GetWindowTexta被中断SOFTICE自动回到windows界面。
BPX GetWindowTexta do "d EAX"// 当 GetWindowTexta被中断,自动显示EAX的值。
②在TRW2000下: BP?? [IF (conditions)] [DO "statement"]
特别推荐:在TRW2000 1.2版本后,支持eip条件设断。
如:g if ((byte)*eip==c2&&eip>401000&&al==ff)
在脱壳时查找入口点时很管用。
6、修改寄存器数据的几种方法
例:用两行指令设置EAX为1.
①XOR EAX,EAX // 设置EAX为0
MOV EAX,00000001 //把1放到EAX
②XOR EAX,EAX // 设置EAX为0
INC EAX // EAX加1
③PUSH 00000001 // Push 1进栈
POP EAX // 出栈1到EAX
7、NOP指令
尽量少用NOP指令补丁原程序,除非实在必要。可用其它更好的方法代替,如:INC EAX, DEC EAX 可替代两个NOP指令等。