精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>汇编语言>>各种教程>>解密教程>>解秘教程4

主题:解秘教程4
发信人: shangbings()
整理人: cobe(2001-08-06 13:03:58), 站内信件
第四章 程序跟踪的动作
4-1 DEBUG 的跟踪程序功能
  在汇编指令中有数百个指令,程序中又有数以万计的指令,到底那里才是保护的所在地呢,这就要牵扯到 DEBUG 的 TRACE 的功能了。
  DEBUG 较常用的指令有 :
   "N"     = 定义程序名称
   "L"     = 根据定义的文件名作 LOAD 文件
   "W"     = 根据定义的文件名作 SAVE 文件
   "U"     = 列出程序 (相当于 LIST)
   "T"     = 执行一个指令码,遇到 CALL 则跳到内部继续执行
   "P"     = 执行到下一行,遇到 CALL 时则执行完那个 CALL
   "G"     = 执行程序,又可分成下列几种
           "G=<Address>" 不管现在执行到那,直接跳到<Address>
                  继续执行(不常用)
           "G <Address>" 从现在的地方执行到<Address> 后停下来
           "G"      从现在的地方执行到结束为止

4-2 汇编指令简介
  MOV AA,BB  将 BB 放到 AA 里
  CALL     调用子程序 (相当于 BASIC 的 GOSUB)
  RET 与 RETF 返回程序  (相当于 BASIC 的 RETURN)
  CMP XX,YY  比较 XX 与 YY
  JZ      若相等则转移
  JNZ     若不相等则转移
  JB      若小于则转移
  JG      若大于则转移
  JMP     无条件转移
  J???     (各种转移指令)
  LOOP     循环
  INT XX    类似 CALL 的中断涵数
  以后凡是遇到上述指令都停下来查看一下 ,即键入 G<该行号>
  兹举例如下(随压缩文件内附文件) :
   CW.EXE (唯我读尊执行文件)
  A>DEBUG
  -N CW.EXE  请您随时键入 "U" 键看看程序
  -L
  -G 37
  -G 60    ┐ 一个循环,程序在此打转
  -T (JZ 6B)  ┃ 为了能继续执行,因此最后一定会跳出此循环
  -G 71    ┃ 前面三个条件转移不管是否成立都跳不出此循环
  -T (JZ 7C)  ┃ 因此肯定它一定是在 CS:9C 不成立下跳出
  -G 8A    ┃ 所以我们可以键入 G 9E(CS:9C的下一行)
  -T (JNZ 92) ┃
  -G 98    ┃ 如果没有把握只能用试的,或您时间多慢慢跟踪程序
  -G 9C    ┃ 个数圈以后也会跳出。
  -T (JZ 58)  ┘
  -G 9E (循环跳出后继续跟踪)
  -G AD    ┐
  -T     ┃ 第二个循环,可能从 "CS:BB JZ CE" 或 "CS:C6 JZ DE" 跳出
  -G BB    ┃ 于是先假设是 CS:BB ,当您键入 "G CE" 时程序执行了,可见
  -T     ┃ 假设错误,应该是由 CS:C6 跳出,于是再重新 LOAD ,
  -G C6    ┃ 前面已 TRACE 过,故直接键入 G37、T、GFE、T
  -T     ┘ (因为 RETF 与 IRET、JMP FAR、CALL FAR 指令会改变 CS 
          段落,故需在此停下后再按"T" ,如 "CS:37 的 RETF" ,
          "CS:FE 的 JMP FAR") 
  -G DE (循环跳出后继续跟踪)
  -G FE
  -T
  -G 483
  -T
  -G 495 \ 从 495 到 4A9 中间有个 "CALL" ,当您执行完此 CALL 竟
  -T   - "问你密码" ... 表示如杀掉此 CALL 则不会再问你密码了
  -G 4A9 / 但以下程序仍稍追一断试试。
  -T (JNZ 4AE) --> 如果你密码输入正确,则会转移,若错误就不跳,因此
           你必须将它改为无条件转移 (JMP)
  -于是将此两位置 ASCII 码抄下后用 PCTOOLS(Find) 修改后执行看看结果执行无误 ,此文件以后就不再须要输入密码了 !
   PS : 1. 在解的过程中一定要拿支笔来记下已追到那儿了 !!
     2. CW.EXE 必须再配合其它文件才能执行此 Game ,因文件过大       所以未全部压进此文件。

[关闭][返回]