Programming 版 (精华区)
发信人: Mice (鼠儿), 信区: Programming
标 题: 加密&解密----(31)
发信站: 紫丁香 (Sun Sep 14 16:22:10 1997)
Ultra Editor
1. 算注册码的方法(此软体比对注册码的地方离取得的地方有点远, 因此会须要
Trace 一下程式码)
1. 用 WinICE 载入 UltraEdt.EXE
2. 键入 X 指令执行程式
3. 此时 Ultra Editor 会告诉你尚未注册(若是使用已注册版来算
注册码的话须先把 Ultra Editor 目录下的 UltraEdt
REG 及 Windows 目录下的 UltraEdt. INI 档案内的
[User ID] 段落全部删除存档後再才能用 WinICE 载入
4. 选择 Enter Authorization Code 钮
5. 在 Enter User name 键入姓名并於 Enter Authorization Code
栏中填入长度为 7 的一串数字
6. 按 Ctrl+D 键叫出 WinICE 後键入 BPX GetDlgItem, 执行 X 指令
离开 WinICE
7. 按下 Ok 钮後会触发刚才我们所设定的中断, 此时键入 BC 指令清除
刚才所设定的中断, 并键入 G @SS:ESP 後按下 X 键继续执行程式
8. 在 X 键按下後会立刻再回到 WinICE 的画面, 从此时开始用 T 指令
及 P 指令开始追踪程式, 除了少数的回圈及副程式外会经过不少的
LEAVE 和 RETF 指令, 看到远程呼叫的指令时(CALL ????:????)特别
注意是否符合下列形式:
.
.
PUSH WORD PTR [BP-2C](在此指令之前大约还有二个 PUSH 指令)
CALL ????:1AC ; 此副程式会去比对你所输入的注册码是否正确
ADD SP, +08 ; (在比对之前程式会把你输入的注册码由字串
OR AX, AX ; 转为数值型式)
JNZ 0132
JMP 01FD
9. 看到上面的副程式了没, 我们再追进去後会看到一组比较指令, 形式如下:
.
.
CMP SI, [????] ; 执行到此指令为止并把 DI 及 SI 暂
JNZ ???? ; 存器的数值抄下来
CMP DI, [????]
JZ (或者是 JNZ)
10. 把 DI 暂存器的数值当做高字组, 把 SI 暂存器的数值当做低字组後算
出相当於十进制多少, 此十进制数字即为注册码
例: 假设 DI:0034, SI:0D88,
那么组合後为 00340D88h
转成十进制为 3411336 此即为注册码
--
我是一只好老鼠!
※ 来源:.紫丁香 pclinux.hit.edu.cn.[FROM: 202.118.226.75]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.725毫秒