Subject: [HC] pro顽劣家族 & 存 WICE 的 Disassembling code Date: Thu, 02 Jul 1998 17:03:17 +0800 From: ADSP 各位好, 最近友人那了「顽劣家族」的 GAME 要小弟破它的密码, 它的密码表是用相近的颜色来防拷贝,蛮伤眼睛的。 看到各位用 bpx hmemcpy 就可拦到,於是小弟也试了一试, 结果...不行,拦不到 :< 於是用 Symbol Loader 开启,打算一步一步追。 首先看到的是 WinMain 如下: WinMain 014F:0042F3DC 55 PUSH EBP 014F:0042F3DD 8BEC MOV EBP,ESP 014F:0042F3DF 83C498 ADD ESP,-68 ... WinMain 好熟的名字呀!(小弟正开始学写 Window 的程式) 暂且不管它,一步一步追下去吧! 追到进入问密码的画面(这个 GAME 是一开始就先问密码)後, ... 014F:0042F594 E8589C0000 CALL 004391F1 014F:0042F599 EB12 JMP 0042F5AD 014F:0042F59B 8D5598 ===> LEA EDX,[EBP-msg] 014F:0042F59E 52 PUSH EDX 014F:0042F59F E8539C0000 CALL 004391F7 014F:0042F5A4 8D4D98 LEA ECX,[EBP-msg] 014F:0042F5A7 51 PUSH ECX 014F:0042F5A8 E8149C0000 CALL 004391C1 014F:0042F5AD 6A00 PUSH 00 014F:0042F5AF 6A00 PUSH 00 014F:0042F5B1 6A00 PUSH 00 014F:0042F5B3 8D4598 LEA ll (EAX),[EBP-msg] 014F:0042F5B6 50 PUSH ll (EAX) 014F:0042F5B7 E8ED9B0000 CALL 004391A9 014F:0042F5BC 85C0 TEST ll (EAX),ll (EAX) 014F:0042F5BE 75DB JNZ 0042F59B JUMP↑ 014F:0042F5C0 E8DFE4FFFF CALL KillFadPalette ... 发现程式就在 cs:0042F59B 到 cs:0042F5BE 之间作 loop , 单步追,不管追几圈,都还是在这个 loop 内, 无法作输入密码的动作,而在这 loop 内的叁个 subroutine call 追进去之後就到了 USER! 或 KERNEL! 等 window 的模组, 将 014F:0042F5BE JNZ 直接跳过,直接执行 cs:0042F5C0 CALL KillFadPalette 之後的程式,结果是游戏结束! 所以,应该还是在这个 loop 内要处理密码的读取/比较才是。 这时想到在写 window 程式时 WinMain 只是负责初始, 在 WinMain 的最後就是处理讯息的 loop ,所以,以上的 loop 应该就是处理讯息的 loop 吧。 又想想,这个程式在 WICE 中可以看到 WinMain ,那是不是其他 subroutine 的名字都可以看到呢? 於是就在 Code Window 找了一下, WndProc 014F:0042F669 55 PUSH EBP ... InitAll_OnEnterProc ... 014F:0042F986 E8F0020000 CALL OpenPasswordScreen 014F:0042F98B E891050000 CALL GetPasswordIndex ... InitAll_OnKey ... 014F:0042F9D2 E8FC060000 CALL CheckPassword 014F:0042F9D7 85C0 TEST EAX,EAX 014F:0042F9D9 742B JZ 0042FA06 ... 哇!看到 CALL CheckPassword 了,之後又是 TEST 及 JZ 指令, 二话不说,先设中断点在 JZ 指令上,RUN RUN 看。 ... 输入密码之後,真拦在 JZ 指令上,真是兴奋呀! 将 JZ 指令改为 NOP NOP ,就破解了。 有点瞎猫遇上死老鼠的感觉... 之前好像有人问到如何将 WinICE Code Window 内的资料转到档案, 小弟翻了一下手册「Using SoftICE」在 82 页上有提到 Saving the Command Window History Buffer to a File 只要将您想要的资料,想办法让它在 Command Window 内出现, 就可以存档。 一、先将资料秀在 Command Window 内,以这个例子,小弟用 :u cs:0042f3dc L 1024 ←┘ 就列出了想要的部分了。 二、开启 Symbol Loader 叁、在 File 选单上选 Save Softice History As... 四、选择路径给个档名,就 OK 了。 PS.小弟已经很久没追程式了,用惯了别人破好的软体(或方法), 到现在脑子里都还有 DOS 下的程式一步一步追总会追得到观念,有待加强。 -- Have a nice day! ------------------------------------------------------ Lee Dong-Liang -- 个人首页 http://www.taconet.com.tw/~dllee 电子信箱 mailto:dllee@ms1.palmary.net.tw 运动控制实验室首页 http://www.yp.at-taiwan.com/~com01165