资料整理: 高春辉, 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. ===