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毫秒