资料整理: 高春辉, ID: Paul Gao, 沈阳华储 BBS 站. BBS 站台电话: (024)3846411. ====== Error Free 01/20 ======================================================= Drag & Zip > >Drag And File Win 95/NT : 7000000000 > > 上项对的, 但是不适用 Drag & Zip ; 在线上找了半天也找不到 (其 > 实我有找到一 Cracker 站, 画面有 Drag & Zip 但拉了老半天, 让 > 中华电信又多赚了好几百, 就是拉不下来) 所以只好用 SoftICE95 > 追追看罗! > > 我就用 '7878787878' 当 Key! 为什么我要用 '7878787878' 当 Key > ? 因为用 '0123456789' 常常会和软体内的资料相冲, 待会 Search > 出来的位址, 可能就不是我打的 '字串' 之位址. > > 那为什么我不用 '6767676767' 而要用 '7878787878' ? 因为我是 " > 男生" 啊! 遇到很龟毛的事, 习惯说 "怎么那么 X X ". > > SoftICE 找出 '7878787878' 字串的位址, 拦到 Memory 的 Read / > Write 的点之後, 就开始一步一步 Trace, 设断点, 用笔在纸上记录 > 可疑的位址 ... :) > > 准备找出 "注册无效" 的地点, 不停的按 [F-10], [F-10] 起码按了 > 近千次....按按按, 这个 Call 有显示动作了, 看是不是 "注册无效 > " 嗯? "注册完成" ?? 张大眼睛再看, 真的是 "注册完成" ! 奇怪? > 我有动到任何东西吗? > > 莫非注册码真的是 '7878787878' ? 有 Drag & Zip 的人, 不妨试试 > 看, 看是不是 Drag & Zip 装死骗我. 瞎猫碰到死老鼠猜中注册码, > 有史以来我还是第一遭... ====== Error Free 02/20 ======================================================= CAD/DRAW 4.1 Level 2 > 1.用 Winice 载入 Win95 > 2.执行 CAD/DRAW 4.1, 选择注册, > 3.输入大名, 注册码先填 78787878 , 用此时O习惯问题. > 4.按 Ctrl_D 进入 winice > 5.用 S 30:0 L FFFFFFFF '78787878' , 会搜出位址 ss:ssssssss > 6.用 BPM ss:ssssssss 设断点. > 7.按 F5 返回 CAD/DRAW 4.1. > 8.按 <钥匙> 後, winice 会拦截到, 而又进入 winice . > 9.用 BD * 清除断点 > 10.在 winice 画面下, 一直按 F10, 按到如下: (<- 会按蛮久的, 但还好啦!) > > 14F:402332 CALL EDI > LEA EAX,[ESP+20] > MOV EDI,[0064...] > : : > LEA EAX,[ESP+00000024] > LEA ECX,[ESP+20] > PUSH EAX > PUSH ECX > 14F:4023AD CALL 4719F0 <-- 按 F10 到此, 记得换 F8 进入 CALL > > 11.进入 CALL 继续压 F10, 如下: > > 14F:4719F0 PUSH EBX > : : > : : > 14F:471A11 CALL 471870 <-- 至此请压 F9 设断点. > > 12.再按 F5 返回 CAD/DRAW 4.1 > 13.请输入如下格式的注册码: > > 04200-04.00-00000-000 <- 後面不得有看不见的空白. > > 14.再按 <钥匙> 後, 又会被 winice 会拦截到. > > 假如以上的 address 14F:?????? 都与我的一样 ( ?????? 应该一样才对, > 不一样的应该是 14F: ), 就用 G 471A69 > > 14F:471A69 CMP ECX,EAX <- 把 EAX 抄下来换成十进位 kkkkk. > JZ 471A74 ECX 应是 0, 因为你打 00000 . > > 15.再按 F5 返回 CAD/DRAW 4.1 > 16.把换算出来的十进位的 5 个数字(kkkkk), 输入到如下格式的注册码: > > 04200-04.00-kkkkk-000 > > 17.再按 <钥匙> 後, 又会被 winice 会拦截到. > > 就用 G 471AB7 > > 14F:471AB7 SUB EAX,EDX <- 把 EDX 抄下来换成十进位 ggg. > POP EBP EAX 应是 0, 因为你打 000 . > POP EDI > > 18.用 BD * 先暂停拦截, 再按 F5 返回 CAD/DRAW 4.1 > 19.把换算出来的十进位的 3 个数字(ggg), 输入到如下格式的注册码: > > 04200-04.00-kkkkk-ggg > > 20.再按 <钥匙> 後, 注册成功! Ya! > > 注: 第一个 04200 是可以到 04399 的, 04.00 也可以到 04.19 的; > 但上两个的数值, 会影响到後面的数字, 故改大名及这边时, 都要 > 再 Trace 一次, 看看 kkkkk & ggg 的变化. ====== Error Free 03/20 ======================================================= Eudora 3.0 Pro 没有 2.x, 用SICE 也可以安装 > 1.用 softice95 载入 win95. > 2.执行 eudora.tmp 目录下的 setup . <- 想必你早已用 "暴力" 解开了 >                     只是没有 2.1.2. > > 3.按 <Next> 按到目录设定的地方, 有 brower 那里. > 4.先把目标路径设定好, 再按 ctrl-d 进入 winice . > 5.用 BPX USER!LOCKMYTASK 设断点 > > 6.用 F5 返回 SETUP, 按 <NEXT> 一定会显示 2.1.2 不在, > 不过没关系, 按 <确定> 後就又会被 winice 拦截到.? > > 用 BC * 先清掉断点. > > 7.再来就一直在 WINICE 下按住 F10, 按住不放比较轻松啦! 因为要 > 按一阵子. 不过你要注意一下 SOFTICE 下半部所写的字, 一开始 > 应该是 USER(08) . > > 8.当那个字变成 _INST0432!.text+??? 就停下来, 没马上停没关系 > , 但不要嫌著没事, 再那里硬撑. > > 9.用 U 0043B76C, 就会看到: > > 14F:0043B76C CMP DWORD PTR [EBP-14],01 <- 把这里设断点. > JMP 0043B683 > CMP DWORD PTR [EBP-14],02 > JMP 0043B6A7 > CMP DWORD PTR [EBP-14],03 > JMP 0043B6CB > CMP DWORD PTR [EBP-14],04 > JMP 0043B6EF > CMP DWORD PTR [EBP-14],05 > : : > > 10.先用 BD * 暂停拦截一下, 按 F5 回 SETUP, 等画面稳定 > 两秒後, 再按 Ctrl-d , 才用 BE * 使 winice 恢复拦截. > > 11.按 F5 返回 SETUP . > 12.按 BROWER 画面上的 <NEXT> , 此时会被 winice 拦到. > > 13.第一次按 F5 , 这又会被 winice 拦到. > 14.第二次按 F5 , 一定还会被 winice 拦下来. > > 15.用 E EBP-14 来改记忆体的内容. 原本应该是 5. 现在你就 > 把它改成 1. > > 16.用 BD * 暂停中_, 按 F5 就 pass 啦! > > 对啦! s-ice 会把中断时的时间停下来, 以便对时间一比一 > 的模拟, 用完之後, 别忘了, 对一对你电脑上的时钟! ====== Error Free 04/20 ======================================================= Instant File Access > 这个程式很好追, 想练习破解的人, 你们不妨只看我的 (1)-(11) > 的步骤, 然後其它的就自己先追一追 (Trace & Trace), 追的到 > 了, 那你在 Hacker 学院就注册完成了. > > (1) 用 winice 载入 Win95 . > (2) 执行 IFA 选择注册, 输入大名、等等东西 .. > (3) 注册码先填 78787878 <- 用此数 (78787878) 是习惯问题. > (4) 按 Ctrl_D 进入 winice > (5) S 30:0 L FFFFFFFF '78787878' > > WINICE 会搜出一个位址 ss:ssssssss > > (6) BPM ss:ssssssss <- 设断点 > (7) 按 F5 把控制权还给 IFA . > (8) 在 IFA 下按 OK ! 被 WINICE 拦截, 如下 > > xxxx:9EAA REPZ MOVSD ; <- 在此点拦下, 你就开始按 F10 > POP ECX > AND ECX,3 > REPZ MOVSB > XOR DX,DX ; <- 按到此, 先停下来 > > (9) 用 BD * 暂停以前的断点 > (10) 用 BPM ES:EDI-8 设另外一个. > (11) 按 F5 返回 IFA, 一下子又被拦了下来, 如下: > > xxxx:1AA7 CMP AL,20 ; <- 在此点拦下. > JZ 1AA6 ; <- 不要看到 JZ 就以为到站了 > CMP AL,9 ; 这边不是啦! 才到中坜而已 > JZ 1AA6 ; 台北还很远. 而且等一下要 > ; 先去休息站 > > (12) 再用 BD * 暂停以前的断点, 一直按 F10 按到如下: > > xxxx:1AB8 LODSB ; <- 你会在这里跑迥圈 > CMP AL,39 ; > JA 1ADC > : : > JMP 1AB8 ; <- 你看又上去了 > > ; 不过没关系, 它不是死胡同, 它只跑八次, 因为注册码你打 > ; 八个字, 它在检查那八个字是不是数字等. 好了, 在休息站 > ; 休息过了, 可以继续走了, 起程吧! > > xxxx:1ADC POP AX ; <- 我们就不要再流连忘怀, 游标移到此 ? > CMP AL,2D ; 按 F7 再按 F10, 继续慢慢走慢慢看. > > (13) 用 F10 走走走, 走到..... > > xxxx:D5ED CALL D934 > ADD SP,06 > CMP AX,[EP-08] ; <- 走到这里停起来, 台北到啦! 下车了. > JNZ D602 ; <- 跳到 D602 就没戏唱了哦! > CMP DX,[BP-06] > JNZ D602 > > (14) 把 DX 和 AX 的值准确的抄下来, DX 是 MSWord, AX 是 LSWord > , 排成一个 4 bytes 的 16 进位码, 再它换算成 10 进位, > 就是你要的东西了.. ====== Error Free 05/20 ======================================================= ACDsee for win95 1.0 > 本版的注册核对 routine 和 beta10 的一模一样, ACDsee95 1.0 beta > 10 我讲过了, 本篇就是完全 Copy beta10 的那篇示范, 再改了一下 > 小地方而已. > ----- ----- ----- ----- > 这个程式很好追, 比上次那个 IFA 难追一点点而已, 但是因为注册的 > 运算式蛮复杂的, 所以我就不分析了, 建议直接用强迫跳过去的. > > 想练习破解的人, 此程式说难也不难, 你们不妨只看我的 (1)-(11) 的 > 基本动作, 其它的自己先练习看看. 追的到了, 那你在 Hacker 学院的 > 新生训练也就过啦! > > (1) 用 winice 载入 Win95 . > (2) 执行 acdsee version 1.0, 选择注册, 输入大名. > (3) 注册码先填 78787878 <- 用此数 (78787878) 是习惯问题. > (4) 按 Ctrl_D 进入 winice > (5) S 30:0 L FFFFFFFF '78787878' > > WINICE 会搜出一个位址 ss:ssssssss > > (6) BPM ss:ssssssss <- 设断点 > (7) 按 F5 把控制权还给 acdsee . > (8) 在 acdsee 下按 OK ! 被 WINICE 拦截, 如下 > > xxxx:9EAA REPZ MOVSD > POP ECX ; <- b此点拦下, 你就开始按 F10 > AND ECX,3 > REPZ MOVSB > XOR DX,DX ; <- 按到此, 先停下来 > > (9) 用 BD * 暂停以前的断点 > (10) 用 BPM ES:EDI-8 设另外一个. > (11) 按 F5 返回 acdsee, 一下子又被拦了下来, 如下: > > MOV EDI,EBX > 14F:40363C REPNZ SCASB ; <- 在此点拦下 > NOT ECX > DEC ECX > > (12) 再用 BD * 暂停以前的断点, 用 F10 一直走到如下: > > 注: 你会经过许多判别, B算的 Loop , 自己用眼睛分析一下 > , 利用游标的上下及 F7 键, 来缩简追踪的时间哦! > > 14F:4035C9 CALL 403620 ; <- 你会从此 Subroutine > LEA EAX,[ESP+48] ; <- 返回至此 > > LEA ECX,[ESP+74] ; 想用 '排列组合' 来猜码, > ADD ESP,10 ; <- 可以把断点设在此. > ; 用 "d eax" 或 "d ecx" 来看资料. > > ; 不过此软体用 Username 来顺著猜 '注册码' 并不好猜; 不过你可以牵 > ; N它产生的名字, 就是先选注册码, 再用 '排列组合' 反推可注册成功 > ; 的 Username , 就比较容易多了. > > MOV DL,[EAX] ; > CMP DL,[ECX] ; <- 比较奇数字符? > 4035DD JNZ $Error ; -> 跳到 4035F9 就玩完了 > > OR DL,DL > JZ $Yes ; <- 是零, 就是比较完了. > > MOV DL,[EAX+1] > CMP DL,[ECX+1] ; <- 比较偶数字符? > JNZ $Error ; -> 让 CPU 走到 $Error 就寿了. > OR DL,DL > JNZ $next.. ; 不是零, 就是比较还没完 > > $Yes XOR EAX,EAX ; <-- Yes! > JMP $Ret_Rdy > ; 最後的提示: > $Error SBB EAX,EAX ; <- 绝对不能让 cpu 走到这一行 > SBB EAX,-01 ; > : : > $Ret_Rdy : : > > (13) 重点就是在 4035DD , 要害我已经告诉你们了, 其它的自己想办 > 法改. 会的人不要说答案, 我一定要强迫想入门 Hacker 的线上 > "魔友" 去看组语的书. > > 一个 Soft-ICE 的指令说明: 当你想看机械码时, 可以用 code on .. ====== Error Free 06/20 ======================================================= Paint Shop Pro 4.12 beta2 > 先把系统的日期改一下, 通常我为了方便, 我会递增一年. > 试著执行, 果然跑出了被打 X 的窗子.. > > 用 ldr 载入後你会看见... > > 14F:4CF3F0 INVALID ; <- 这是 Soft-ICE 奇怪的地方, 不过没关系 > : ; 按一下 [F8] 就正常了. 如下 > > 4CF3F6 PUSH EBP ; <- 游标在此, 开始按 [F10] 追罗! > MOV ESP,ESP > MOV EBP,ESP > : : > CALL [.....] > PUSH EAX > 4CF542 CALL 4CFB54 ; 追至此请按 [F8] 进入 CALL . > ; 再换 [F10] > > 我为什么知道以上这个 call 要换 f8 进入? 因为我用 f10 带过 > 那个 call 时, 就跳出 "抬头主画面" 和 "过期告示" 了, 所以我 > 知道那个 call 有问题, 必须进入观查.. > ---- > : : > PUSH DWORD PTR [EBP+..] > 4CFB64 CALL 4CFBC2 ; 追至此再按 [F8] 进去看看. > > 这个 call 要用 f8 进入观查的原由那还要问吗? 因为我有用 f10 > 带过那个 call 嘛! O.K ? > ---- > 4CFBC2 JMP [4F8748] ; 再按一次 [F8] (又追到别的档案 > ; 去了! ) > > 这里为什么我要用 f8 ? 因为手刚好放在 F8 上面嘛! 除了 CALL > 之外, F8 & F10 之作用都一样, 都是单步执行. > ---- > 此时已经到了 MFC42!.TEXT 的范围了. 因没其它的线索, 只好用 > [F10] 继续追.. > > PUSH EBP > MOV EBP,ESP > : : > 5F40A51B CALL [EBX+58] ; <- 最讨厌追到这个. 用 [F8] 再往里面伸. > ---- > 4031B6 INVALID ; <- 又来了, 没关系再按一下 [F8] > : ; 就好了, 如下: > > 这个 invalid 我还是不知道会什么会这样, 不过出现此东西时, 按 > F8 大多不会有什么问题, 但按 F10 会依不同的软体而定, 有时会 > 当掉. > ---- > Ya! 又回到了 psp!.text , 这下子你 psp 竟放我回来, 有你好看. > > 448420 MOV EAX,FS[0....] > : : > : : ; 哇! 这一条龙真长, 按了好久好久 > MOV EBX,[EAX] > PUSH 00000080 > 4487B4 CALL [EBX+000000C0] ; <- 用 F10 经过此, 主画探N出来了. > TEST EAX,EAX > JZ 448... ; Jz!? 别穷紧张, 你若强制让 eax为零时, 表 > : : ; 示开窗不成功, 但是系统已经开成功了, 所以 > : : ; 会使程式错乱. 开窗一次, 会送一个旗号回来. > : : ; > : : ; 又按 F10 按了好久. > ; : ; > CALL 40280B ; <- 这是要害 .. > TEST EAX,EAX > JZ ... ; <- 有没有看见 'JZ' ? > PUSH 00 > PUSH 10 > 44896A CALL 4CE668 ; 哇! 被打 x 的窗子弹出来了. > : : ; 往上一看... Jz !! > > 想当 Hacker 的人, 自己进入要害的 call 内分析看看, 程式很短 > , 所以我就不公布答案了! 其他的高手, 最好不要说答案, 我想训 > 练一下想入门 hacker 的人, 我希望他们没事就去啃组语. > > 当你追到手修改完成後, 别忘了把 "系统日期时间" 改回来, 再执 > 行 ScanDisk , 要把 "无效暾? 和 "无效档名" 两项的检查项目 > 打勾, 再来 Scan 所有的 Disk . > > 因为 Win95 对日期很敏感, 日期矛盾时, Win95 的某些 Appz 会 > 当掉; 有的主机板异常会跳到 209x 年, 那就会不时的当. ====== Error Free 07/20 ======================================================= Lunar FTP V1.1 > 触机: 算命者预测未来的一种感觉; 如: 测字, 虽然同一个字, 但 > 面对的时地物不同时, 算出来的未来也不同, 那种不同的 > feeling 就叫 "触机" . 英文是不是叫 "sense"? 先死? > > 破这程式的注册码最好要有那种 "触机" , 没有的话, 你可能会猜 > 的蛮累的, 不然你就要很深入的一行一行分析此软体, 但是这样会 > 很耗时; 想要拥有那种有如作家灵感般的 hacker 触机, 你就要没 > 事多看书, 多拿软体来破, 经验足了它自然会成为你的一种本能. > > 不多说了! 进入正题..... 按照基本动作 (1)-(11) 就可以飞到目 > 标软体的领空了. > > (1) 用 winice 载入 Win95 . > (2) 执行 LunarFTP 先选择注册 > (3) 先填 78787878 一行就好. > (4) 按 Ctrl_D 进入 winice > (5) S 30:0 L FFFFFFFF '78787878' > > WINICE 会搜出一个位址 ss:ssssssss > > (6) BPM ss:ssssssss <- 设断点 > (7) 按 F5 把控制权还给 LunarFTP . > (8) 在 LunarFTP 下按 OK ! 被 WINICE 拦截, 如下 > > xxxx:9EAA REPZ MOVSD ; <- 在此点拦下, 你就开始按 F10 > POP ECX > AND ECX,3 > REPZ MOVSB > XOR DX,DX ; <- 按到此, 先停下来 > > (9) 用 BD * 暂停以前的断点 > (10) 用 BPM ES:EDI-8 设另外一个. ; <- 因为你打 8 个字, 所以减 8. > (11) 按 F5 返回 LunarFTP 一下子又被拦了下来, 如下: > > 14F:4875FB REPNZ SCASB ; <- 在此点拦下 > NOT ECX > LEA EAX,[ECX-01] > > (12) 用 BD * 暂停以前的断点. 用 F10 开始走...走到: > > POP ECX > LEA EAX,[ESI+00001055] > 14F:412DAF PUSH EAX ; <- 至此先停下来. 先按 F9 设一下断点 > > 此时你用 D EAX 看资料, 你会看到 USERNAME, SERIALNO.. 等敏感的 > 字眼. 但是并没有看见你打的字. > > 此察动作只是其中之一例, 但它是最重要门槛之一, 若你是要练习追, > 不妨类似的地方都要 Dump 出来看; 看不出资料有任何关联也没关系, > 但有嫌疑形像时, 就用笔记录下来; 这类的观查记录动作, 有益於你的 > Hacker sense! 不是 "先死" 啦! 是 "触机" 啦! > > 那位同学, 把你隔壁那个摇起来... O.K ! 我们继续... > > (13) 按 F5 返回 LunarFTP , 重新再选注册, 照著如下四行的格式打, > 别忘了, 先打在 "笔记本" 再用 Copy 的, 不然你会後悔.. > > USERNAME: (你的大名) > SERIALNO: (随便, 我是打 8 个数字) > KEY: > ABCDEFGH Z > > 我为什么会知道以上的格式, 除了做了许多类似 (12) 的 D EAX 的 > 观察动作外, 其实还带点猜测性, 所以说 "触机" 对一个 Hacker 而 > 言很重要. 这种感觉我一时也说不上来, 大概是我的表达能力有限吧 > ! 只好暂用 "触机" 一词. > > 幸好今天运气不错, 我只猜了两次注册格式. 我不是说过吗, 破解程 > 式除 "毅力" 之外, 另外一个很重要的就是 "运气" ! > > (14) 按下 OK 之後, 又会被 WINICE 拦下来, 也就是刚刚你停下来的 > 位址, 你就继续按 F10 .... 走到如下 (会走很久很久, 这里也 > 也是很长的一条龙) : > > 14F:41320D CALL 436FB6 ; <- 这是要害, 必须用 F8 进入观察 > POP ECX > TEST EAX,EAX ; <- 强迫让 EAX=1, 会弹出 "成功视窗" > JNZ 413239 ; <- 不是 0, 就跳走 > MOV EDX,[EBP+..] > : : > PUSH EAX > 413232 CALL 492AC3 ; <- 当你走过这里的时候, 失败视窗就 > JMP 413259 ; 会弹出来, 往上一看啊! 上面有个 > ; JNZ , 以上那个 CALL 必有问题. > > 为什么我会知 eax=1 会弹出 "成功视窗" 咧? 因为我有试嘛! 我用 > R EAX=1可不可以? 当然可以, 否则 S-ICE 就有 BUG 了. 分析软 > 体就是要多试, 这个试试, 那个试试, 多猜多试多做记录.. > > (15) 用 F8 进入那个 CALL (要害) 内, 你n分析程式, 有那些情况 > 返回时, EAX 不会等於 "零". 用 F10 走到如下: > > 14F:436FB5 PUSH EBP > : : ; 要害的心脏在此. 如下: > 437058 XOR EAX,EAX ; 比较第一个字符时, EAX 必须等於 0 .? > > $loop MOV DL,[EAX+EBP+FFFFFCD4] ; 先拿一个字符. > CMP DL,[EAX+EBP+FFFFFED4] ; 这是一个字符的比较? > JZ $next ; 相等就准备比较下一个. > > XOR EAX,EAX ; 在此返回 EAX 就是 0 '? > JMP $Return_Ready ; eax=0 就没救了. > > $next INC EAX ; 指标 + 1 > CMP EAX,0C8 ; 这下子你可有得抄了, 居然比较 0C8 次! > JL $loop ; 慢慢的抄, 仔细的抄, 不要抄错. 被电脑 > ; 罚写的滋味不错吧! > > (16) 注册的标准格式 > > USERNAME: (你的大名) > SERIALNO: (随便, 我是打 8 个数字) > KEY: (後面空白) > (你抄到的码, 总共 200 (C8) 个英文字母, 可换行, 怕打错时, > 可以插空白没关系, 我是每四个字就插一个空白) > Z ( <- 结尾时, 请多加这个 Z 字当终结 ) > > 要害内的重点分析已经说给你听了, 只要你看的懂组合语言, 你就 > 找的到那两百个英文字母.. > > 再叮咛一次, 先打在笔记本上, 打好 Save 再 Copy 过来注册, 否 > 则要是抄错一个字, 必昏无疑... 你会干死的.. > > 一个 S-ICE 指令, 当你想看某个位置的资料时, 可以用 "D" , > , 它就是 Dump 的缩写. 范例如下: > > D 800000 > D DS:EAX > D EBP+0FCD4 ====== Error Free 08/20 ======================================================= 007 for Win32 1.0d > 1.用 Winice 载入 Win95 > 2.执行 Ask007 . 等待抬头的延迟画面. 按 [I Agree] . > 3.把滑鼠移到视窗上的顶行的 [007 for Win32] > 4.按下右键, 选 [About 007] . 此时又会跑出刚刚的抬头. > > 为什么不用刚刚那一个? 两个都一样, 我为什么就一定要用刚 > 刚那一个? 我就偏偏要用这一个. > > 每次的 "猜测" 及 "设断" 总是要再来一次, 你若执意要用进 > 入程式那一个, 要再来一次时, 就必须结束程式再从新执行, > 比较麻烦啦! 不是不可以用啦! > > 分析软体要 "多猜多试" 忘了吗? 试一次那段程式就执行过啦 > ! 想再来一次, 当然就是想办法再让要试的地方从Y走一次罗! > > 5.用 bpx lockmytask , 设断点. 当你又按下[I Agree] 时, > 在它抬头消失完成之刹那, 就会被 S-ice 拦下, 如下: > > USER!LOCKMYTASK > xxxx:636C ENTER 0004,00 ; <- 在此拦下. > PUSH SI > PUSH DS > --- USER(3) --- > > 把这个 lockmytask 记起来, 假如你没有其它比较好的断点可 > 设时, 这个总是能发挥效用. 专门在抓关窗子的点. 不要问我 > 原理, 这个点是试出来的. > > 记住! 多试就会抓到未知系统的某些规则. > > 6.此时你按一下 F12, 如下: > > yyyy:44B1 CALL USER!LOCKMYTASK > MOV EAX,[BP+0A] ; <- 在此点拦下, > LES BX,[BP-04] > --- USER(8) --- > > 你们可以看看拦下点的上一行, 是 CALL 那里啊? 不熟 S-ICE > 的人, 自己猜猜看, F12 是内设为 P RET, 那 P RET 是做什么 > 用的? 这个指令不错吧! > > 注: s-ice 是可以自定功能键的, 不过我都用内设的. 想当 hacker > 的人, 到 s-ice 的目录下找, 找找看 "定义档" 在那里? > > 7.接下来就不管了, 你就一直按 F12, 一直按, 要按有一阵哦! > 第二次 ASK007! 又再度的跑出来时, 如下: > > 14F:00403F41 CMP [ESP+121],3F1 ; > JNZ 403FA7 ; 不等於时, 就跳走. > MOV ESI,[ESP+0124] > : : > 14F:00403F66 CALL 00402820 ; <- 这个就是那个抬头 > LEA EAX,[ESP+30] ; <- 刚到时, 你会在此 > ADD ESP,10 > : : > 14F:00403F74 CMP [ESP+20],7CD ; <- 换成十进位看看 > JBE 403FA7 > PUSH 40 > > 我为什知道那个 CALL 是完整的 "抬头" routine ? 我把断点设在 > 那行 CALL , 然後再选一次 About 007, 这样试行不行? > > 当然要找出这个 CALL , 就是每按一次 F12, 就在上面的 Call , > 设断点试之; 再按一次, 就再设断试一次..... 最终就会让你找到 > 了, 不对吗? > > 那如果按一百次呢? 当然就要试一百次啊! 破软体要有毅力, 不是 > 说假的, 这一点你们一定要接受, 没办法..... 不过在 Win95 下 > 的此程式你可以在 ASK007! 的范围时, 才设断试之便可. ====== Error Free 09/20 ======================================================= Gif gif gif > 1.用 wice 辑载入 95 . > 2.执行 ggg , 选择注册, 打下大名 > 3.注册号码先填 78787878. > 4.按 Ctrl-D , 进入 s-ice, > 5.用 S 30:0 L FFFFFFFF '78787878' > > 此时 sice 会搜到一个位址 30:004xxxxx . 唉! 以前不是都搜到 > :8xxxxxxx 吗? 怎么这一次会搜到 004xxxxx ?? > > 管它的, 按照 hacker 以往的习性, 就在按一次 s 试之! 果然搜 > 到另一个位址 :8xxxxxxx. 常常用这个 :8xxxxxxx 来追也蛮烦的 > , 这次就换一条新路走走看.. > > 6.用 bpm 30:4xxxxx 设断, 压 F5 返回 ggg . > 7.按下 ok 後, 会被 sice 拦下来, 如下: > > 14F:BFF780DC MOV [EAX+08],ESI ; <- 在此拦下. > MOV [ESI+08],EDX > MOV [EDX+04],ESI > > --- KERNEL32! --- > > 8.按 F12 几下就到 ggg 的领空了, 如下: > > 14F:4358F4 CALL 4504EC > POP EDI ; <- 刚到时在此. > POP EBP > --- GGG! --- > > 9.若己进入射程范围, 接下我通常会按 F10 开始走. > > 通常要 hack (砍) 掉一个保护时, 你必须先了解原程式的走向; 用 > F12 往往会跳的太快, 比较不容易看清楚程式是怎么走的. 必竟现在 > 已经登陆了, 还是小心一点好. > > 走走走, 不久你就会走到.... > > 14F:00410F70 CALL 0043E26D > ADD ESP,P4 ; <- 你会跳回至此 > : : > ### CALL 00410C52 ; <- 可能有问题, > ADD ESP,08 > *** TEST AL,AL ; 强迫 AL=1 似乎没什么事 > JZ 00410FA1 ; 若是 0, 就注册失败了. > : : > 14F:00410F9F JMP 00410FD1 ; 跳开 > 14F:00410FA1 PUSH 38 > : : > 14F:00410FC9 CALL 0041E8E1 ; <-这里会跳出讯息的背框, 大 > ADD ESP,1C ; 小和 "失败窗" 一样, 因此 > : : ; 暂时猜测至此就危险了. > > 这个地方和通`的情况不太一样, 因为在 *** 那里时, 若令 AL=1 > 并不会发生什么事, 只是会把注册窗收掉而已; 但若令 AL=0 就必定 > 失败. 手上没线其他线索, 所以只能用 F8 , 进入那个 "可能有问题 > " 的 ### CALL . > > 10.好吧! 那我们就进去看看吧! 如下: > > : : : > 14F:410C5D CALL 00410A40 ; <- 要害在此, 进去观摩一下. > ADD ESP,08 > MOVZX EAX,AL > TEST EAX,EAX ; <- 再做一次实验, 令 EAX=1 > JNZ 00410C70 ; 居然注册成功.? > XOR AL,AL ; <- 在此又让 AL 填 0 了.? > JMP 00410CA4 > > 有 "注册成功" 样子 (想当 hacker-乱砍者, 就自己找, 看看画面的 > 那里有注册成功的痕迹) , 那 410C5D 那个 CALL 保证有问题, 而且 > 问题可大了..呵呵! 这下子总部, 即在不远的前方.. > > 11.用 F8 进入 410C5D 那个 CALL . 如下:? > > : : > 14F:00410A4A CALL 00420785 > ADD ESP,04 > CMP EAX,10 ; 这个 10 ? > JZ 00410A5B > XOR AL,AL ; 若让 CPU 走至此, 会 AL=0 > JMP Return_Ready ; 返回, 那就完蛋了. > : : > > 举例了那么多次的范例给你们看, 我倒要看看你们的樵夫触机 (Hacker > Sense ) 有没有变的更灵敏? > > 在 CMP EAX,10 那行停下来, 看看此时的 EAX 为 8, 你们有没有联想 > 到什么? 试著猜猜看....哎啊! 再想想看! ....有人说啦! 对对对, 没 > 错! 很可能就是注册号码的字数. > > 不过推断并不一定等於事 因为程式不是你写的, 所以一定要求证看 > 看, 这样比较不会被先入为主的观念套死, 而困在这个恐怖的迷宫中. > 很多保护砍不掉, 通常就是 "太靠势" . > > 实验很简单, 用 BD * 暂停以前的断点, 在 CMP EAX,10 那一行设断, > 从新注册, 注册码填随便填两三个字, 按 OK , 当被 sice 拦下来时, > 看一下 EAX 是不是你刚刚打字数. 对了! 可不要再打同样的字数 8, > 否则若运气不好, 这下子你就追惨了.? > > 12.好! CMP EAX,10 那个 10 就是十进位的 16 嘛! 刚刚那个断点还要 > 用, 按 F5 返回重新注册, 注册码暂时打 16 个数字. 按下 OK ! 被 > sice 拦下在刚设断的地方, 此时你就继续用 F10 慢慢走, 分析一 > 下此戒备森严的路程. 走到.... > > OK! 在谈之前, 我们必须再回忆一下我们主要的任务到底是什么? 不然 > 你来这边干嘛? 我们要分析此 Routine, 在什么条件下执行完毕时, 不 > 会让 AL=0 返回. > > : : : > 14F:00410A7A CALL 004108BB ; <- 依下看, 此 CALL 很有看头. > ADD ESP,08 > PUSH ESI > MOV [EBP-10],AL ; 把 AL 存起来, > CALL 004208CD ; 先假设此 CALL 对返回的 AL 无关 > ADD ESP,04 > MOV AL,[EBP-10] ; 把 AL 提回来 > POP ESI > POP EDI > LEAVE > RET ; <- 这个就是 x86 ASM 的 Return 指令哦! > > 求证一下第二个 CALL 与 AL 是否於返回的 AL 值无关; 在 [EBP-10],AL > 那一行之前, 令 AL=1 就知道, 自己实验试之. > > 13.用 F8 再进入 410A7A 个行 CALL , 按 F10 没多久就... > > : : > 14F:0041954 MOV EDX,0046009C > MOVZX EAX,BYTE[EDX+EAX] > MOV AL,[EAX+EDI] ; 拿一个 Byte > CMP AL,[EBP-14] ; 比较一个 Byte > JZ $Next ; 相等就比较下一个 > > XOR AL,AL ; <- 这个是令 AL=0 的指令. > JMP Return_Ready ; 在此返回就... > > $Next INC SI ; 指标 + 1 > CMP SI,05 ; 比较 5 次 > JB 004108F6 ; 小於就跳到前面准备继续比 > MOV AL,01 ; <- 有没有看到 AL=1 > : : > > 哇! 这里就是比较的核心了, 可惜啊! 这里的被比较之两个值, 居然是 > 被运算过的, 我懒的再分析前面的运算式了, 你们就看著办吧! ====== Error Free 10/20 ======================================================= WinJammer 2.30 > 由於 Winjammer 有附一个 Wjmrplay , 它也有注册选项, 所以我们就 > 拿它 (Wjmrplay) 来开刀, 因为程式比较小通常执行岜冉峡? 路比较 > 少通常也比较容易追. > > 你们还记得前几堂课讲的追踪密码示范吗? 没忘记吧! 不错不错, 你们 > 也蛮行的嘛! 平常我在上课时, 看你们都在睡觉, 想不到你们对课堂上 > 的东西, 也都记得蛮清楚的. 那 (1)-(11) 密码拦截的基本动作, 我就 > 不再重覆了哦! > > 12.到了第十一动时, 也就是 bpm ds:di-8 之後的拦截点, 如下: > > xxxx:5BAF JZ 5BAB ; <-- 你会在此拦下. > JMP 5BC5 > CMP BYTE PTR [SI],20 > --- wjmrplay ---? > > 13.此时你按一下 F12, 如下: > > 因为上一段有很多 LOOP , 若按 F10 要按蛮久的, 而且我分析之後, > 也没什么重点, 就是光在那边跑圈圈, 除非你是自己独立追的, 才会跟 > 著它跑几圈, 然後发现没什么要紧, 之後你自然也会跳走. > > xxxx:5A87 CALL 5B9C > POP BX ;<- 你会从这跑出来 > PUSH > > 14.此时你开始用 F10 走走, 走到 ... > > xxxx:5B72 CALL 15EC ; <- 这是要害, > ADD SP,04 > OR AX,AX ; <- 在此试 RAX=0 , 会弹出成功视窗 > JNZ 5B82 > PUSH WORD PTR [.. > PUSH AX > JMP 5B93 ; > 5B82 PUSH DS > PUSH 096C > CALL 344E ; <- 当用 F10 带过这个 CALL 时, > ; 失败视窗就弹出来了. 往上一看 > ; 啊! 上面有个 CALL , 中奖 > > 15.你用 F8 进入那个要害. 如下: > > xxxx:15EC PUSH BP > : : > 15F7 MOV SI,[BP+04] > MOV DI,[BP+06] > XOR AX,AX > MOV CX,FFFF > REPNZ SCASB > NOT CX > SUB DI,CX > REPNZ CMPSB > JZ $Return_Ready > SBB AX,AX > SBB AX,-1 > > 比较的核心就在上面, 你们越来越来厉害了, 那我给你们的考题, 当然 > 难度也就要比以前高了哦! 要注册码就自己分析如上的程式, 高手不要 > 说答案, 我要强迫 Hacker 新生多啃几个 x86 的指令. ====== Error Free 11/20 ======================================================= TIPPY FOR WINDOWS 95 V 1.32 > 通常遇到有注册选项时, 我们都先用「 78787878 拦截法」试追 > 之, 但是我试的结果, 此招失效, 拦不下来. > > 拦不下来怎么办? 答案很简单, 要嘛就放弃不追 (老子不跟你玩 > 了, 你保护又奈我何? ) , 不死心就换步试试看. > > 当 hacker 就是要多试, 还是那一句老话, 多猜多试多做记录, > 因为目标程式不会是 Hacker 写, 所以 hacker 整天面对的就是 > 茫茫大海, 当然程式的作者不会发疯打电话来告诉你要害在那里 > ; 再则 Hacker 是人不是神, 亦不可能每猜必中. > > 那个 78787878 不可行, 当然就不要一直死要用 78787878 来对 > 招; 我们要用智取, 不可用力敌. 大丈夫要能屈能伸, 识实务者 > 为俊杰. 人在屋檐下不得不低头, 好干! 你就抬头看看, 给撞出 > 了一个包, 在那边叫痛, 那我可不管你. > > 我们就换一招在 007! 那篇曾讲的 "收窗拦截法" , 还记得吧? > 不知用什么设断时, 这个 bpx lockmytask 往往可以发挥效用. > 以前声明过了, 这个点是「试」出来, 不要问我原理.. > > 把 Username 打下去, 注册码先填 78787878 好了, 一按 ok ! > 注册程式毫不留情马上亮出 "失败窗" 这张王牌. > > 没关系, 没有三两三, 岂敢上梁山, 换我们按一下 ctrl-d , 就 > 用 bpx lockmytask 设断, 压 F5 返回 Tippy, 当你按一下 "失 > 败窗" 上的按钮时, 马上就被 wice 拦下; 呵呵! 厉害的 wice > 果然名不虚传. > > 此时先用 bd * 暂停刚刚的断点, 你就开始按 F12, 要按有一阵 > 子哦! 当跑到 Tippy 的 踬 你就马上停下来如下: > > 14F:473255 CALL 473897 ; <- 把游标移至此设断, > ; 因为要 "试" 了! > JMP ... ; <- 你会跳出来至此. > > 我们先把上面的 CALL 设断来试试看 (记得试点时, 别忘了先用 > BD * 暂停先前的断点) , 用 F5 返回 Tippy 时, 操作注册时 > , 你会发现按下 ok 时, 就会被 wice 拦下来. > > 当你用 F10 带过这个 CALL 时 , "失败窗" 就会弹出来; 当你 > 在点一下按钮时, "失败窗" 一消失, 又会被 wice 拦下; 这代 > 表此 CALL 有问题. > > 嘿! 找到第一个重大线索, 有机会啦! 我们就往上分析看看, 在 > 什么情况下, CPU 的执行才不会跑到此地. 往上一看..如下: > > 14F:473214 MOV EAX,[4804F0] > CMP EAX,[4804E0] ; 在此设断猜码试之. > > JZ 47325C ; 在此试强制跳到 47325C > PUSH 50 ; Tippy 会缩起来... > : : > CALL 4738D9 > : : > CALL 4738A3 > : : > 473255 CALL 473897 ; 这个可说是失败窗的总部了 > 47325A JMP 4732AF ; 往上一看有个 JZ ! 嘿, 爽吧! > > 47325C MOV EAX,[4804F0] > > 好像找到要害了哦! 好! 我们就把以前的断点先暂停, 在 CMP EAX > 那一行设断试之; 来用 d 4804e0 来观查与 eax 有什么关系. 注 > 册码试著改几组... > > 咿~!两数值皆不超过 1FF ! 而且有某一方是固定的, 当然固定 > 的那一方就是用你的 Username 算出来的, 反正 1FF 才 512 嘛 > , 那注册码你们就 q一下罗! > > 这个机率为 1/512 排列组合猜码, 给 Hacker 新生练习一下; 要 > 新生分析整个注册运算的 Routine, 似乎是太残忍了点. 因为我也 > 懒的去分析, 我自己 ID 的注册码, 也是用排列组合试出来的, 我 > 约试了五、六十次吧! > > 底下的! 不要再那边鬼叫鬼叫, 五、六十次的试码, 对 Hacker 是 > 小事一庄, 没上千次就偷笑了. 你们看一下, 光是本篇文章内总共 > 有几个 "试" 字? 以上只是所有过程的精华那一小部份哦! 若再加 > 上在非精华的背後误 "试" , 那就不计其数了. > > 再提示一点, 注册码要八个字. ====== Error Free 12/20 ======================================================= roboword.exe is 249,360 bytes > 首先我们要先谈一谈如何拦截本程式--其实只要 wice 在手, > 你是可以随时中断进去 trace 的. 你就像一个潜水夫, 潜水 > 配备亦是一级棒, 若海底内没有任何指标, 你要如何找出海中 > 的一支银针呢? 很难吧! 除非踩到狗屎, 好运当头才找的到. > > 像一般的注册号码拦截, 你在画面上会看到注册的窗子, 那个 > 窗子或你打的 78787878 , 就是在海中的 "显眼指标" , 只要 > 拼命的往 78787878 游过去, 若银针没有伪装的话, 通常是容 > 易找到银针的. > > 像以前我讲的 bpx lockmytask 的收窗拦截, 也是把 "打x窗 > 子" 当成一个的指标, 然後再找进去. 故破解软体的第一指标 > , 若能够预设的够适当, 那么以後的路子就会很好走. > > 这之的目标主角 "ROBOWORD" , 既没有注册窗子、又不能让你 > 打 78787878 、亦没 "打x窗子" , 那你如何预设断点? > > 说了一堆纸上谈兵的东西, 有一个很重要的 "前戏" , 我们却 > 还没做. 因为破了要有用才行, 我们要先检查一下, 破了到底 > 有没有用? 因为这是测试版, 依经验, 测试版是有很多东西不 > 存在的. > > 重要资料不存在, 就算你破了比对核心, 依然没什么鸟用, 除 > 非你改写程式的功力一级 若要改写一大串的东西, 不如重 > 写还来得比较快, 写出来了, 你还可以光明正大的卖钱. > > 前戏不是要你对女朋友怎样, 而是要你用 Ultraedit 把字典 > 档载进来观察. 一看! 这个测试版居然有 G-Z 的资料, 这下 > 子你女朋友完了, 不! 是金点完了... > > 教了你们这么多堂课, 眼看著一学期又要过, 我想再看看你们 > 的樵夫触机 (hacker sense) 提升到那里, 看看你们有没有资 > 格脱离 hacker 断奶期. > > Ok! 我问你们, 在 ROBOWORD 的执行期间, 在画面上有什么东 > 西, 可以让你当成设断的参考指标? 想一想..... 有没有想到 > ? 想到的举手..... 好! 你举手, 请说... 对! 画面有 "A to > F...demo version" 等字. > > 这个 "demo version" 就是我们要攻进去的第一据点. 不过千 > 万不可以为这类的指标, 都很容易的就会被你找到. 也不可先 > 入为主以为就是找不到, hacker 就是一想到方法, 就先 trace > 再讲; trace 不到, 再想其它的... > > 1.执行 roboword . > 2.切入 wice . > 3.用 s 30:0 L FFFFFFFF 'demo version' > > 有一点爽了..因为搜到了一个位置 30:xxxxxxxx > > 4.用 bpm 30:xxxxxxxx 设断. > 5.按 F5 返回. > > 好! 第一个猜试断点设好了, 接下怎么办? 当然就是想办法让 > 我们可爱的 "金点罗伯兄" 走到你预设的断点罗! 你就随便指 > 一个字看看, 要是条件成立就会被 wice 拦下来. > > 什么? 拦不下来? 我看看..... 哎呀! 你这个死小子, 没事老 > 让字典程式查 "fuck" ! 不要查 "fuck" 啦! "fuck" 它的字 > 头是在 A-F 之内! 旁边有个 "shit" 字你试试看.. > > 什么? 还是拦不下来? 我再看看... 哎哟! 你怎么用破解档在 > 练习破解呢? 快去找 "纯" 试用版的回来, 再 install 一次 > 试之. > > 6.经过了一番努力, 你们总算给拦下来了. 如下: > > xxxx:AA8D REPNZ SCASB ; <- 被拦下的地方 > LDS SI,[BP+06] > LES DI,[BP+0A] > MOV AX,DI > : : > --- KERNEL(01) --- > > 这下是更爽了, 因为预测的条件是成立的. 不过要爽太早, 因 > 为程式不是你写的, 好不好追, 还是个未知数. > > 7.你先按一下 F12, 到 roboword 的领空观查看看. 如下 > > yyyy:06DE CALL KERNEL!LSYRCPY > MOV AX,0001 ; <- 返回至此... > POP SI > : : > --- ROBOWORD(03) --- > > 每到一个新地方时, 你就大略的分析一下附近的程式, 我们先 > 往上看, 因为这里是出现 'A TO F ..' 的地方, 我要了解一 > 下, 有那些条件会使 CPU 走到这里. > > 8.你把游标往上移, 你会看到...如下: > > yyyy:0D0C CMP AX,0064 ; 和 64 比较? > JZ 0D74 > : : > 0D2E CMP AX,0065 ; 65? > JZ 0D74 > : : > 0D50 CMP AX,0066 ; 66? > JZ 0D74 > INC WORD PTR[...] > : : > 0D69 CALL KERNEL!... > MOV AX,0001 ; <- 刚刚返回的地方. > > --- ROBOWORD(03) --- > > 以上有 64,65,66 你们想一想, 比较这些数字有什么特殊的意 > 义? 你们再往上看时, 亦有 61,62,63 , 那倒底有什么意义? > 若是常常玩电脑的人, 应该一看就知道那是小写的 a,b,c...f > 的 ASCII 码. 这下子你们可爽翻了a! > > 以上是给新生的第一个习题... 若搜到很多个 'demo version' > , 请从断电重开机. 或是用最後一个 30:8xxxxxxx . > > 等一等! 等一下再收拾书包, 因为还没下课. 假如你不喜欢它 > 的抬头的话... 怎样? 还想听下去吧! > > 9.离开 roboword , 用 ldr 载入 roboword . 如下: > > xxxx:3F3A XOR BP,BP ; 用 F10 开始走 > PUSH BP > : : > 3FCF CALL yyyy:3FE4 ; 用 F8 进入 > > 10.进入 yyyy:3FE4 的地方如下, 用 F10 开始走. > > yyyy:3FE4 MOV AX,DS > NOP > : : > 4002 CALL zzzz:0000 ; 用 F8 再深入 > > 11.进入 zzzz:0000 你会看如下, 亦是用 F10 继续走. > > zzzz:0000 ENTER ... > CMP WORD PTR[BP+0C... > : : > 0197 CALL KERNEL!GETPRI... > $$ PUSH WORD PTR[2200] > PUSH 7D > PUSH 00 > PUSH 2C9F > PUSH 0330 > ## CALL USER!DIALOGBOX ; <- 跑出抬头的 call . > @@ CALL wwww:098E > > 我们已经知道 ## 那个 call 是显示抬头的, 但你不可以进去 > user! 的地盘改东西. 因为 user! 是系统的范围, 改它的程 > 式码, 你的系统会完蛋. > > 当然你可以插 jmp 的指令, 使程式飞过 call user! 的上空 > , 也就是直到达 @@ . 但是 jmp 不可以乱插. 因为那些 push > 是一些引数, 是要给 dialogbox 用的, 但是 dialogbox 会 > 自动补回 sp 值, 所以 jmp 不可乱插. > > 当执行光棒走到 @@ 时, 你就把 sp 值记下来; 你再重新执行 > roboword 一次, 当到了走 0197 时就开始注意 sp 值哦! 慢 > 慢的一步一步走, 当 sp 和刚刚一样时, 光棒所停留的那一行 > push , 也就是你要改成 jmp @@ 的地方. > > 其它的就自行练习吧! ====== Error Free 13/20 ======================================================= In Curcuit Emulator > In Curcuit Emulator, 实体电路模拟器. 为了踪软体执行的动 > 作明细, 所用的一个模拟 CPU 的电子设备. > > 注: "ICE" 字眼, 若未注明, 通常是指 "模拟 CPU 之设备" > > 你可以想像一下, 有一台机器叫 ICE, 它会有一条排线, 排线端 > 有一个很像 CPU 多脚的插头. 你把它目标板子上的 CPU 拆下 > 来, 把这个头插到 CPU 的座上面. > > 那你就可以在 ICE 这边的萤幕键盘上, 控制, 观查 CPU 所有 > 动作. > > 当然 NuMage 非常臭屁, 居然取名为 Soft-"ICE" . 但他也非常 > 厉害, 用光用 Soft 就可以作出类似於真实 ICE 的功能. > > 要破解软体, 就要先追踪观查软体的走向, ICE 就是用来追踪用 > . 用没钱买真的 386,486,586,686 的 ICE, 就只好用 Soft-ICE. > > 586 的 ICE 少说也有廿万.. ====== Error Free 14/20 ======================================================= 破解程式和抓虫是很相像 > >大家都说s-ice很好用 > >可是各位先进谁知道那有s-ice修改的相关资料? > >最好是针对初学者写的... > > Soft-ICE 只是给会低阶者的一种追踪操作的工具而已, 使用者 > 本身的基本条件一定要了解低阶语言. 最起你手边也要有一本 > 80x86 的指令群来待查, 因为现在 80x86 一票又一票, 指令多 > 的记不完. > > 像以前的 6502 就免了, 我连机械码都背起来了, 因为以前的 Apple > 在 monitor 下, 并没提供线上组译器, 改程式就是查表, 然後 > 把机械码打下去, 查久了自然就背起来了! > > LDA # 是 A9, STA 是 85, JSR 是 20 对不对? <-- 十几年後的 > 今天, 照样记了这几个最常用的 . 4C 好像是 JMP ... > > 其实破解程式和抓虫是很相像, 举例来说吧! > > 假设回到十几年前, 同班同学因专题制做, 必须用组语写了一个 > 程式; 但是呢! 却不能跑, 因交期快到了, 除错了老半天, 不得 > 已只好求救於我. > > 若程式不短时, 我当然不可能只用看的罗! 我会用除错器去执行 > 的它的程式, 若是写 APPLE ][ 上面的, 当然一打 call -151, > 就可以进入内建的除错藿 以前 APPLE ][ 称做 monitor (监 > 督系统, 意谓著是一种程式走向的监控环境. ) > > 像 PC 当然就是用 debug.exe 或 Soft-ICE 之类的环境, 以前 > Soft-ICE 还没有出来时, 大家都嘛用 debug.exe, 也有人用真 > 正的 ICE 啦! 不过那太贵了, 个人用户是比较不可能去用那个 > 的, 大不了借公司的回来用. > > 程式写不好想改正, 你也要知道是那一点在搞鬼, 不然你怎么改 > ? 找问题最实在最准确的方法, 当然就是看著它执行, 直到看到 > 它出 , 就找到了. > > 你在除错环境下来监控程式的走向, 你的眼睛跟著程式的指令一 > 步一步慢慢的走, 看看几个地方资料改变, 就这样的一直跟到一 > 个死胡同. 当然你要看的懂低阶的指令, 也要有写程式的基本暹 > 辑思考, 不然你怎知道那一段程式, 是个死胡同?? > > 找到死胡同了, 事情也就好办了, 因为只要你有办法把那一段死 > 胡同, 改写後, 使程式依照你的意愿走, 那么你就除错成功了, > 那就可以向你的同学敲份牛排来吃了! 当然! 你的同学也可以顺 > 利毕业. > > 破解呢? 其实过程也是一样, 因为使你不能使用的那段程式, 就 > 是前面所讲的死胡同而已, Soft-ICE 只是比 Debug 好用, 环 > 境更好而已, 两者的使用方法大同小异. 只要你会 debug, Soft > ICE 就不难学习. > > 像前代已久的 Apple ][ , 它的 monitor, 操作也是蛮类似的. > 所以, 只要你会低阶语言, 你就会使用这些除错工具. 破解的基? > 本条件: > > 第一. 你要会写程式. > 第二. 你要会低阶语言. > 第三. 你要有除错的毅力 (毅力? 没错! 就是 "毅力" !) > > 第四. 会用除错工具, 当然只要你写过低阶的程式, 这项工具 > 你一定没问题. 打 ? 看看功能键, 五分钟不了解六、 > 七成才怪 (有六、七成就够用了啦! 因为其它三成都嘛 > 很少用的) . ====== Error Free 15/20 ======================================================= Dr Eye 2 磁片还魂记 >第一、你必须有原版的磁片,并且已安装、注册。 > (为什么要有这一步呢?? 就是请用原版 !!!!) >第二、copy dreye20\peadict\*.* ,其时只要有dict.exe > (如果要dict.exe不要找我,我不想作的太绝了) 第二可以改成 "省略" . >第三、到登录编辑程式(如果找不到那你的95 学分就不级格了), > 找∶ > [HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\Explorer] > "link"= > "Version"= > ^^^^^^後面的资料(资料不是一定的)不告诉你,问那些想当坏人的人 > 将登录档资料汇出 !!!!!! >第四、大功告成,以後在安装时就不用注册片来注册, > 只要将dict.exe盖掉、登录档汇入就行了!!!! 第四可以改成: A.「控制台」->「移除程式」->「Dr.Eye 2」 (只移注册, 不要全移掉 , 所以对话框选 No ), B.用 RegEdit 把刚刚写出的 "登录档" 汇入! C.塞在磁碟机中的那一片「还魂」的原版磁片, 就可以拿出来了. >另外有一件事就是它的磁片保护是怎么作的,我曾经去physical copy 磁片 >可是没有用,这个能不能教教我!!!! 1.找不到雷射孔, 应该不是雷射保护. 2.用 Physical Copy 无效, 有可能是「弱磁位元」, 或则是「检查轨长」. 3.「弱磁位元」要用比较特朱的磁碟机来制作, 且会挑 User 方的磁碟机, 不适合薄利多销的产品. 4.「检查轨长」比较容易做. 且不容易 Copy , 因为要找到两台转速丝毫不差 的磁碟机有困难. ====== Error Free 16/20 ======================================================= Roland VSC-88 软体音源 在进入手术房示范刀法之前, 我先说说对这类程式的看法: 我第一次动手下去追之前, 其实我也想了几天; 因为它播放 50 秒的 计时终了, 使 User 不能继续聆听的手法, 并不是跳出一个窗子警告 中断, 而是慢慢的渐弱缩尾; 也就是说 50.00 秒和 50.00+ 秒的表 面状况差异不明显, 这会造成 Hacker 在设断上的困扰. 那个 50 秒的临界点, 前後差异因为太不明显, 所以想要在刚好 50 秒渐弱之刹那断下来, 不容易吧! 那怎么办? 没辄就是看天吃饭! 在 Win 起始後, 其第一次使用 VSC-88 的开头, 会跑出一个日裔的 窗子来警告嘛! 那我们就先把这个窗子决解掉再说. 至於那个 50 秒 的计时, 顺其自然. 1.用 winice 载入 95 , 执行 VSC-88 . 它会弹出一个 50 秒的警告 窗子. 有没有忘记我以前曾讲的拦窗子的点 lockmytask ? 只要用 这个设断成功, 依经验, 约有八成的程式不是很难解的. 2.注意哦! 这次的窗子, 若没把握到, 就得重开机了哦! 在窗子中, 按下 Ctrl-d 切入 winice . 3.打 BPX LOCKMYTASK 设断, 压 F5 返回 VSC-88 的画面. 4.按下窗内的 "确定" , 一收窗, 就会被 winice 拦下来, 如下: USER!LOCKMYTASK CS:636C ENTER 0004,00 ; <- 在这里拦下来. PUSH SI : : 5.就开始用 F12 键, 往外层的常式跳! 注意按! 一按到了 VSC 的 地盘, 就要马上停下来! 如下: 1E07:4D00 CMP WORD PTR[005C],0 ; JZ 4D27 ; <- JZ CMP WORD PTR[00D4],0 ; JZ 4D27 ; <- JZ : : 4D1C CALL USER!MESSAGEBOX ; MOV WORD PTR[00D4],0 ; <- 返回至此, 由此可知, 上 CMP : : ; 面的 CALL 与窗子有关. --- VSC(1) --- 往上一看, 有两个 JZ 会飞越这个 MESSAGEBOX ! 有两个 JZ , 通常 我会先试第一个. 那要强迫第一个跳至 4D27 , 有几种方式可行. 如 下: 一、把 JZ 改成 JMP . 二、把第一个 CMP 那行最後的 0, 改成 [005C] 相同的资料. 三、把 [005C] 内填零. 通常我会用第三种. 因为在 WINICE 中, 用 E Addr 比较方便. 上两 种必须用 A Addr 来组译, 必须注意组译出来的 Bytes 数. 6.用 E DS:005C, 此时的资料栏如下: --- VSC(2) --- DS:005C 01 00 05 00 01 00 ^^^^^ 有没有注意到第一个 CMP 後面的 "WORD" 字眼? 那个 WORD 就是指 使用的资料长度是一个 Word , 也就是两个 Bytes, 因此就是把上面 画底线的两个 Bytes 填零就可以了. 7.把 DS:005C 的地方填零後, 按 F5 再返回 VSC-88 试看看. 结果, 试听时发现 "老天爷居然给饭吃" ! 50 秒的限制不见了? 有 没有注意到资料栏的地盘是 VSC ? 那表示东西不是在 VSC.DLL, 就 是在 VSC.EXE 罗! 其实还没完, 因为我改了把上头的 01 改成 00 之後, 再进入 Win95 时, 会弹出一个视窗, 说 "波形的资料毁损" ! 天啊! 那我只好再改程式段再试试看吧! 也就是第一个 CMP 那个地 方. 因为资料段和程式段不同, 说不定它只检查资料段. 8.我们再看一下那一段, 如下: 1E07:4D00 CMP WORD PTR[005C],0 JZ 4D27 是不是改成如下就好了? 1E07:4D00 MOV WORD PTR[005C],0 JMP 4D27 但是改成如上会多出一个 BYTE , 因为第二个 BYTE 是 0, 所以只要 改一个 BYTE 的叙述就好了, 你可以用 BYTE PTR 的叙述来改. 也许你会想, 最好连那个 JZ 都不要改; 正在想办法把 [005C] 放 0 , 又可使 Zero 旗标举起来的叙述. 答案是有的, 那就是 AND ! ====== Error Free 17/20 ======================================================= 丑丑字型 & 中文 Win95. 平常 Hacker 有大半的时间, 大概都在砍别人所设下的防护 措施吧! 不过有时候呐! 也会修改到非保护关卡的常式; 或 是撞到他人撰写程式时, 不小心所留下来的 Bug. 呵! 有时候会不小心帮忙抓软体中的 Bug Routine, 这大概 就是 Hacker 要存在的意义吧! 我在追踪 ShellWizard 3.0 窗子上的字型问题时, 分析了 老半天! 似乎有愈来愈明显的趋势, 显示的 CWin95 本身的 字型系统有问题. 因为我追进了 User32.dll , 把它存取资料改掉後, 居然所 有 "丑丑字型的视窗" 之软体, 都变成很漂亮! 追踪过程很繁索, 我就直接讲重点好了. 有 "丑丑字型的视 窗" 之软体, 都会呼叫「CreateDialogIndirectParamA」这 个 Routine 来画窗子. 在呼叫「CreateDialogIndirectParamA」之前, 它会先去呼 叫「GetSystemMetrics」, 这个常式在使用之前, 必须先 Push 一个值给她, 如下: PUSH xx CALL USER32!GetSystemMetrics 若有像 ShellWizard 3.0 主窗那种丑丑字型之软体, 都是 PUSH 2A . 如下: PUSH 2A ; <- 会出问题的都是 2A .? CALL USER32!GetSystemMetrics CMP EAX,EBX ; <- 会出 "丑" 时, EAX 都是 1. 1.切入 S-ICE, 用「bpx GetSystemMetrics if @(ESP+04)==2A」 来条件设断. 以上是 SICE 3.0x 的设断语法哦! 在 2.0 中, 并不适用. 2.按 F5 返回 Win95, 一执行 ShellWizard 3.0 Pro, 会被 S-ICE 拦下来, 就开始单步执行罗! 如下: :u getsystemmetrics l 40 USER32!GetSystemMetrics 014F:BFF648C7 XOR EAX,EAX ; <- 在此拦下. 014F:BFF648C9 MOV EDX,[ESP+04] 014F:BFF648CD CMP EDX,00 014F:BFF648D0 JL BFF64919 014F:BFF648D2 CMP EDX,4A 014F:BFF648D5 JA BFF64919 014F:BFF648D7 CMP EDX,29 014F:BFF648DA JZ BFF64929 014F:BFF648DC MOV EAX,[BFF6714E] 014F:BFF648E1 ADD EAX,000003C4 014F:BFF648E6 ADD EAX,EDX 014F:BFF648E8 ADD EAX,EDX 014F:BFF648EA MOVZX EAX,WORD PTR [EAX] ; <- 执行到此先停住 014F:BFF648ED CMP EDX,16 014F:BFF648F0 JAE BFF64919 3.当执行光棒停在 MOVZX EAX,WORD PTR [EAX] 时, 用 D EAX 来看资料. 如下: :d eax 0157:81EB2418 01 00 02 00 00 00 02 00-02 00 A0 00 18.. ^^^^^ 4.用 E EAX 来吧把第一个 01 填 00 吧! 再用 BD * 暂停 所有的断点, 然後按 F5 返回. 怎样? ShellWizard 3.0 Pro 有没有变的相当漂亮? 妙的是! 她 这次的画面, 居然给多出了四个原先被盖住的选项. 5.此时系统的参数就被你改过了, 就开始试变丑的各种软体 吧! CuteFTP、FTP Explorer、CAMCAD 2.0.9e 的 About & WinPack 的 About、WinHacker 95... 最後别忘了试 Clean Sweep ! 看她的面孔有没有变的很正常.... 注: 因为手边没有 GetSystemMetrics 的资料, 系统的东西若 要动, 还是要谨慎一点好, 故我尚在考虑中, 尚未产生固 定的改法, 所以暂时先在 S-ICE 下, 改著玩吧! 若有人有 GetSystemMetrics & CreateDialogIndirectParamA 两常式的呼叫使用法, 请提供一下吧! ====== Error Free 18/20 ======================================================= Re: 丑丑字型 & 中文 Win95. > 若是要直接修改user32.dll档,应该怎么做呢? > 因为不太用会SoftICE,所以还希望您能够指导如 > 何修改user32.dll:)谢 你真的要动它? 我还没有想出固定的改法呐! 因为系统的东东 , 不像应用程式一般, 不能开玩笑的, 不先了解原 Routine、 考虑再三, 我是不会去研究永久性改法的. 不然若传开了, 那 天出大槌了, 会害死一票国人 ... 目前我有发现一个程式会出槌, 用 Anawave Gravity 1.1 看 中文信时, 会完蛋. 我这边其它的软体, 看起倒是还算正常. 当这类丑丑的软体, 若 GetSystemMetrics(2Ah) 传回非零值 时, 在中文 95 系统会使用的字型是 "细明体 8" (它若使用 "细明体 9" 不知有好! 可惜呀!...唉...) . 英文软体的基本字型, 好像是使用 "MS Sans Serif 8" 才会 比较正常. 否则用 "细明体 8" 除了字丑以外, 字高太短才是 大事, 否则 SW30pro 的那四个选项, 就不会被那张图给盖住 了. 对了! 谁找的到 Ture Type 的 "MS Sans Serif" 之字形? 不过在应用软体层面上, 你们倒是可以先动. 追法如下: 1.切入 S-ICE, 用「bpx GetSystemMetrics if @(ESP+04)==2A」 来条件设断. 以上是 SICE 3.0x 的设断语法哦! 在 2.0 中, 并不适用. 2.按 F5 返回 Win95, 一执行 ShellWizard 3.0 Pro, 会被 S-ICE 拦下来, 按一下 F12 or F11 . 你就会看你如下的 样子了: 原来: PUSH 2A ; <- 会出问题的都是 2A .? CALL USER32!GetSystemMetrics CMP EAX,EBX ; or TEST EAX,EAX ; <- 会出 "丑" 时, EAX 都是 1. 改成: PUSH 2A CALL USER32!GetSystemMetrics XOR EAX,EAX ; <- 这样子该应用软体就正常了 注: SW30pro 是在 MFC42.DLL , 其它大半的都是在主 .EXE 档中. 修改 MFC42.DLL 应该不致於牵扯太广. 「改之前先备份原来的档案! 切记! 切记! 」 ====== Error Free 19/20 ======================================================= More Space 2.7 ! 减肥示范教材! 通常在追一个软体之前, 就是要找一个 "明显变化" and "即时可试" 的事件出来. 要找这个, 就是要多操作你的目标软体. 像是要砍之前的 先玩玩看. 先熟目标软体的操作特性, 是有助於设断的 Sense 的! 对 啦! 再问你们一次! Sense 是不是念做 "先死" ? 不过这一点我很放心, 因为会主动去砍的软体, 想必也对它唾涎有一阵 子罗! 是不是有点像追女孩子一样? 还没有说过一句话, 对方的一切周 遭, 老早就都背得滚瓜烂熟了! 至是否闭著眼睛, 就可以走到她的房间 ? 那等以後追上了, 再去求证吧! 太早求证, 会被人家骂 "猪哥" 哦! 经过对目标软体 More Space 2.7 的熟悉, 我知道在 Duplicate Files 的视窗中, 点右上角的磁碟机选择栏时, 会跳出一个小窗子来告诉你要 注册罗! 且履试不爽, 故这个小窗子就是我们的第一据点. 以前我讲过 lockmytask 有没有忘记? ..什么! 忘光啦! .. O.K! 没关 系, 反正它在今天是英雄无用武之地, 发挥不出来. 我们再换一招, 试 试 destroywindow 看看. 1.进入 More Space 2.7 的 Duplicate Files 的地盘. 2.点一下磁碟机选择栏的其中一个方格, 此时会跳出一个小窗子. 3.按 Ctrl-d , 切入 sice . 4.打 bpx destroywindow, 按 F5 返回. 5.当点一下 "OK" 时, 会被 sice 拦下来. 如下: 14F:BFF62391 MOV CL,B4 ; <- 在此拦下 JMP BFF623D7 6.按一下 F12 , 居然就到了目标领空! 如下: 14F:417BB4 RET ; <- 返回至此. 7.再按一下 F12 , 如下: 14F:423C6B CALL [EDX+68] MOV EDX,[EBP-04] ; <- 返回至此. 有没有注意到上行有个 CALL ? 通常有 CALL 时, 你就要先看看上面有 没有判断式. 有的话, 你先暂停所有的断点, 在那个 CALL 设断. 返回 程式之後, 点一下磁碟机选择栏, 被 sice 拦下来之後, 再用 F10 带 过那个 CALL , 看是不是小窗子的整个领域之 CALL . 如果不是, 则必须暂停所有的断点, 再跳到 "步骤-5" , 再按 "OK" 前 , 再把 DestroyWindow 打开. 按 "OK" 断下来後, 再一直按 F12, 直 到返回此地的上一层 CALL 为止. 8.就这样不断的重来按 F12 的往回跳, 最终你会反返回到..如下: 14F:4C079C CALL 470FF8 ; <- 在此设断试带 F10 看看. JMP ; <- 返回至此. 9.当然这个 CALL 470FF8 就是小窗子的总领空罗! 往上看有..如下: 14F:4C078E CALL 4B9378 ; <- 想必是核对总部, 进入观查. TEST AL,AL ; <- 在此设断试之.. JNZ 4C97A3 10.把先前的所有断点再暂停一次. 在 TEST AL,AL 那一行设断, 压 F5 , 回目标程式. 一点磁碟机小格, 又会被 SICE 拦下. 11.把 AL 改成 1, 试之. 试的结果, 不会跑出小窗子了, 最重要最重 要的是, 你点的磁碟机, 居然出现打勾! 12.那我们就进入那个 CALL 看看..如下: :u 4b9378 l 80 014F:004B9378 PUSH EBX PUSH ESI XOR EBX,EBX : : 13.等一等. 我们进来要干嘛? 因为我们 <步骤-9> 试 AL 时, 知道 AL=0 返回不利! 所以我们要分 析此地的 routine, 在什么情况下 , AL 才不会带 0 返回... 继续 , 如下: 014F:004B937C PUSH 00008000 CALL KERNEL32!SetErrorMode MOV ESI,EAX PUSH 004B93EC ; <- 此位址 Dump 出来看 CALL KERNEL32!LoadLibraryA ; <- 载 .DLL 档时, 大多 ; 会用到此函式. 看一 ; 此软体 Help 的注册 ; 章节. 014F:004B9392 MOV [004C2C00],EAX MOVZX EAX,SI PUSH EAX CALL KERNEL32!SetErrorMode CMP DWORD PTR [004C2C00],20 JL 004B93E4 ; <- 这里有一个判断. 014F:004B93A9 PUSH 004B93F8 MOV EAX,[004C2C00] PUSH EAX CALL KERNEL32!GetProcAddress 014F:004B93B9 MOV ESI,EAX MOV [004C3964],ESI TEST ESI,ESI JZ 004B93D9 ; <- 这里也有一个判断.. 014F:004B93C5 MOV EAX,000004D2 CALL [004C3964] CMP EAX,000004D2 JNZ 004B93D9 ; <- 这里又是一个判断. 014F:004B93D7 MOV BL,01 ; <- 01 ? 生命之泉! 4B93D9 MOV EAX,[004C2C00] PUSH EAX CALL KERNEL32!FreeLibrary ; 把 .DLL 放掉. 014F:004B93E4 MOV EAX,EBX ; 哦! 原来 EAX 是用 EBX 的 POP ESI POP EBX RET 好啦! 就讲到此为止. 要玩, 就自己看著办! 要害的总部, 已经告诉你 们了; 高手不要说答案, 留给 Hacker 新生自行单步执行练习吧! 也让 他们多啃一些组合语言的书! O.K ?...下课.... ====== Error Free 20/20 ======================================================= Cwin95 丑字型- 细明 8 之一 今天再来谈谈有点偏离 Hacking (砍事) 的 "字型" 话题... 其实我现在可以决解 CWin95 丑字型的方法, 依这段期间的修改记录 看来, 已经可以达到八、九成的满意度了; 剩下的那一成, 就是找不 到我心中想要的那个字型档. 所以迟迟没有把方法 Post 上来, 因为没有那个我心目中想要的字型 档, 故 Post 上来, 对网友也没什小路用.. 我们最常见的问题, 就是英文软体会使用 MS Sans Serif - 8 的字 型, 但这类软体其字型问题大概可分成两种: 1.当 GetSystemMetrics(2Ah) 传回非零值时, 它会以 "细明-8" 来显示. 如: UltraEdit, Win Hacker ..等. 2.应用软体本身不受系统的引响, 依然我行我素, 正常的以 "MS Sans Serif-8", 来显示. 表面上好像很正常, 但是若那一行带到中文字 时, 中文字照样以 "细明-8" 呈现. 当你把它改成 "MS Sans Serif-9 " 时, 遇到中文字一样是 "细明 -8" , 会照成中文化的困难. 应该是 CWin95 用的 MS Sans Serif 不是 True Type 的吧! 如: Agent .. 以上两种类形的软体, 不管是那一种, 在中文化时, 都会有一个问题 存在, 就是字高的问题, 因为 "MS Sans Serif -8" 居然会比 "细明 -9" 来的高. 若用的字形, 其字高不对时, 会照成某些表格画面的不搭调、出轨画 面、乌云遮半月... 等情况. 如: 「Powertoy 的 tweakui」. 「Paint Shop Pro -> Color -> Edit Palette」 「ShellWizard 3.0 的主画面」 如果可以找的到某个 True Type 的字型档, 若它的 -9 和 "MS Sans Serif-8 " 一样高、一样宽, 那不就...!! 没错! 的确如此.. 这些日子我就是在找那种字型档, 包括也再找建立字型档的软体, 因 为自己建造, 慢慢画慢慢改总可以了吧! 但是理想归理想, 字形建造 器想不到在 PC 界是如此的....唉! 不提也罢.. 在 MAC 界, 居然有一大票的全功能免费试用版; 在 PC 界, 一大票 都是字型流漤器, 字形建造器只有小猫两三支, 而且都是几百年前的 老软体, 连 "狂人" 都不屑一顾. 只好拉那超古老的试用版来试之, 但是并不好用. 幸好我在网上有拉到一个 Fmonster35 , 可以改字形档的一些定义, 但是字高还是改不了. 翻遍了我所有的光碟片中的几千个 Font 档, 总算找到了一个. 唯一可惜的它是斜体字. 但它算是合格中的最美了. 这个的 font 名, 我把它改为 TS Sans Serif, 和 MS Sans Serif 差一个字, 在 UltraEdit 中, 改 Appz 时, 会比较方便嘛! 而且 有许多 Appz 只允许你改等长的名字, 多一个少一个字都不行. 所 以我才取名为 TS Sans Serif . 想要转成较好看的 "细明 9" , 总算有了一些生机, 下列三个方法 记起来: 1.搜 08 00 4D 00 53 00 20 00 53 00 . 09 00 54 00 53 00 20 00 53 00 . ^^ ^^ 用 Replace ALL . 09 是指 -9, 54 是 T, 把 MS Sans Serif 改成 TS Sans Serif. 要不要改成 TS Sans Serif 因情况而定, 若有 "细明-9" 的英字 有出轨才要改, 如: Easy CD Pro 95 V2.11(20) 按钮上的字. 或, 它本来就是显示正常的 MS Sans Serif-8 了, 只是要中文化 , 光改成 -9 也没有用. 如: Agent . 2.若还有表格不正常, 再搜 4D 00 53 00 20 00 53, 若有搜到时, 你会看到前面有几个零, 如下: 搜 08 00 00 00 00 01 4D 00 53 00 20 改 09 54(T) 如: FsPatch, WinPatch 等. 这改成 TS Sans Serif-9 比较好看. 3.若还有问题, 再搜 08 00 48 00 65 00 6C 00 76 00 Replace All 09 00 48 00 65 00 6C 00 76 00 把 Helv-8 改成 Helv-9 , 如: UltraEdit .. 另外在 win.ini 中, 有如下这个, 你们就自行研究看看吧! [fonts] [FontSubstitutes] Helv=MS Sans Serif Tms Rmn=MS Serif Times=Times New Roman Helvetica=Arial MS Shell Dlg=MS Sans Serif Arial Cyr,204=Arial,204 Courier New Cyr,204=Courier New,204 Times New Roman Cyr,204=Times New Roman,204 Arial Greek,161=Arial,161 Courier New Greek,161=Courier New,161 Times New Roman Greek,161=Times New Roman,161 Arial CE,238=Arial,238 Courier New CE,238=Courier New,238 Times New Roman CE,238=Times New Roman,238 最重要最重的 TS Sans Serif 档名是 Tnimbusi.zip , 我把它放 在 ftp.tku.edu.tw 的 upload 目录中, 等一, 两天, 读取权应 该就会开放了. 抓到解开後, 放在临时目录中, 再用滑鼠把它丢到 windows\fonts 中就可以了. == E-mail: paulgao@nease.net = 完 = 资料整理: 高春辉 于 06/09/97, 08/28/97. ===