Programming 版 (精华区)
发信人: Mice (鼠儿), 信区: Programming
标 题: 加密&解密----(15)
发信站: 紫丁香 (Sun Sep 14 15:50:29 1997)
9. Game 的实例破解教学--01
西游记外传密码破解教学
----------------------
程式保护是以 PASSWORD 的方式, 你有三次机会输入 PASSWORD, 三次都错
误, 回到 DOS 後你会发觉系统马上就会当掉了.
此保护最 "不人道" 的地方就是要用一片红色的 "压克力" 板子放在手册上
方能看出真正的密码, 这对 "原版" 的使用者而言实在 "不人道", 但对非
法拷贝的盗版者而言跟本就发生不了任何 "保护" 的效用.
底下的范例是我最早发现, 以为就是保护的地方, CS 及 IP 当然不是原来
的位址, 纯脆是为了解说方便 Keyin 进记忆体再反组译出来的, 所以有些
CALL 及 JUMP 的位址不是真正的位址, 但只要了解原理就好.
当用 SOFT-ICE 分析完其读入 Keyboard 的副程式後 (你如果不知道它是如
何作的, 可以拦一下 I/O 60h 的地方, 因为 60h/61h 就是 Keyboard 硬体
I/O 的位址), 程式会执行到 CS:0119h 的地方, 执行完 CALL 副程式後以
AX 的值来判定刚刚输入的密码正确与否, 你会发现如果密码错误, AX 的值
会是 1, 所以 OR AX,AX 的命令执行完後, Zero 的旗标为 0, 因为 OR 1,1
的结果还是 1, 程式会跳到 CS:130h 的地方, 然後将 [BP-0A] 的内容加 1
并判断是否小於或等於 3, 如果小於或等於 3 则跳到 CS:148h 的地方, 然
後程式会在回到输入密码的副程式去, 如果大於 3, 表示你的 "机会" 都用
完了, 而且没有一次输入对密码, 将 [BP-16] 设定为 0, 再跳回主程式段
去, 如果在 CS:121h 处 AX 为 0 代表密码正确, 则 [BP-16] 会设定为 1
再跳回主程式段, 所以刚开始以为不管 CS:11Fh 的 OR AX,AX 执行结果如
何, 都继续执行 CS:123h 的程式, 也就是不管密码比对正确与否, 都将
[BP-16] 设定为 1, 让以後的主程式段以为密码比对正确, 所以 CS:121h
的程式改成 JMP 0123 (75 00) 或 NOP (90 90) 就可以骗过保护了.
--
我是一只好老鼠!
※ 来源:.紫丁香 pclinux.hit.edu.cn.[FROM: 202.118.226.75]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.444毫秒