发信人: williamlong(蓝色月光)
整理人: williamlong(2001-09-14 08:44:26), 站内信件
|
发信站: 广州蓝天站 (Thu Nov 6 22:30:51 1997), 转信
作 者 : GI MING
破解教学软体 : 泡妞终结者
破解使用工具 : S-ICE 2.64 里的 LDR.EXE
破解使用方法 : 三步法
适 用 对 象 : 初学者
使用符号说明 : [*] 为 CALL 的所在 [.] 为执行 HERE 命令位置的所在
教 学 主 旨 : 1. 为 90 - COPYBOARD 抛砖引玉, 希望各位高手, 除能
将破解方法列出外, 更能热心的将破解的过程列出,
真正做到知识交流的目的, 也达到 90 - COPYBOARD
最初立此信区的中旨.
2. 为各位想交流破解知识, 介绍一个『清静』之地!!
3. 为各位想踏入破解殿堂, 一个新天地 !!
在文件的最後有『疯网』最新的站名表.
各位同好们可以就近去参与我们的讨论
後 序 : 因我没有可以抓文字画面的程式, 所以用 DEBUG 来表列程式.
如您手中有不错的抓文字画面的程式, 望您能上传至本站.
使我往後能比较清松的发表破解过程!!
-------------------------------------------------------------------
第一步 找出密码画面的进入点
-------------------------------------------------------------------
-u
109E:0000 BA6B23 MOV DX,236B
109E:0003 2E CS:
109E:0004 89169102 MOV [0291],DX
109E:0008 B430 MOV AH,30
109E:000A CD21 INT 21
109E:000C 8B2E0200 MOV BP,[0002]
109E:0010 8B1E2C00 MOV BX,[002C]
109E:0014 8EDA MOV DS,DX
109E:0016 A37D00 MOV [007D],AX
109E:0019 8C067B00 MOV [007B],ES
109E:001D 891E7700 MOV [0077],BX
-u
109E:0021 892E9100 MOV [0091],BP
109E:0025 E85501 CALL 017D * 终於看到第一个了
109E:0028 A17700 MOV AX,[0077] . 在这儿下 here
109E:002B 8EC0 MOV ES,AX 没事继续往下找!!
109E:002D 33C0 XOR AX,AX
109E:002F 8BD8 MOV BX,AX
109E:0031 8BF8 MOV DI,AX
109E:0033 B9FF7F MOV CX,7FFF
109E:0036 FC CLD
109E:0037 F2 REPNZ
109E:0038 AE SCASB
109E:0039 E343 JCXZ 007E
109E:003B 43 INC BX
109E:003C 26 ES:
109E:003D 3805 CMP [DI],AL
109E:003F 75F6 JNZ 0037
-u
---=== 中间都跟这篇破解无关, 为节省网路资源, 略过 ===---
109E:0128 33ED XOR BP,BP
109E:012A 2E CS:
109E:012B 8E069102 MOV ES,[0291]
109E:012F BE1623 MOV SI,2316
109E:0132 BF3423 MOV DI,2334
109E:0135 E8B500 CALL 01ED * 这是第二个 CALL
109E:0138 FF367300 PUSH [0073] . 在这儿下 here
109E:013C FF367100 PUSH [0071] 没事继续往下找!!
109E:0140 FF366F00 PUSH [006F]
109E:0144 FF366D00 PUSH [006D]
-u
109E:0148 FF366B00 PUSH [006B]
109E:014C 9AA2006F14 CALL 146F:00A2 * 这是第三个 CALL
109E:0151 50 PUSH AX . 终於出现密码画面了.
109E:0152 90 NOP
---------------------------------------------------------------------
第二步 进入密码画面点里搜查
--------------------------------------------------------------------
109E:0148 FF366B00 PUSH [006B]
109E:014C 9AA2006F14 CALL 146F:00A2 * [ 要进入搜查了 !!]
109E:0151 50 PUSH AX
109E:0152 90 NOP
-g 109e:014C
-t
AX=0100 BX=2334 CX=0000 DX=2334 SP=2806 BP=0000 SI=2316 DI=2334
DS=236B ES=236B SS=25D6 CS=109E IP=014C NV UP EI PL ZR NA PE NC
109E:014C 9AA2006F14 CALL 146F:00A2
-u
146F:00A2 C8 DB C8
146F:00A3 06 PUSH ES
146F:00A4 0000 ADD [BX+SI],AL
146F:00A6 56 PUSH SI
146F:00A7 57 PUSH DI
146F:00A8 C706A81C0300 MOV WORD PTR [1CA8],0003
146F:00AE C706B8250100 MOV WORD PTR [25B8],0001
146F:00B4 C706BA250100 MOV WORD PTR [25BA],0001
146F:00BA 1E PUSH DS
146F:00BB 68 DB 68
146F:00BC 7405 JZ 00C3
146F:00BE 1E PUSH DS
146F:00BF 68 DB 68
146F:00C0 6B DB 6B
146F:00C1 059A25 ADD AX,259A
-u
146F:00E4 A81C TEST AL,1C
146F:00E6 9A4E269E10 CALL 109E:264E * 又一个 CALL
146F:00EB 83C40C ADD SP,+0C . 在这儿下 here
146F:00EE FF76FC PUSH [BP-04] 没事继续往下找!!
146F:00F1 FF76FA PUSH [BP-06]
146F:00F4 9A87219E10 CALL 109E:2187
146F:00F9 83C404 ADD SP,+04
146F:00FC 1E PUSH DS
146F:00FD 68 DB 68
146F:00FE 7805 JS 0105
146F:0100 9A0D00CD20 CALL 20CD:000D * 又一个 CALL
146F:0105 83C404 ADD SP,+04 . 在这儿下 here
146F:0108 8946FE MOV [BP-02],AX 没事继续往下找!!
-u
146F:010B 837EFE00 CMP WORD PTR [BP-02],+00
146F:010F 7438 JZ 0149 .....................
146F:0111 6A DB 6A ┌━━━━━━━━━━━━┐
146F:0112 07 POP ES ┃[BP-02] 至始至终值都为 0┃
146F:0113 1E PUSH DS ┃ 所以 JZ 0149 终会执行 ┃
146F:0114 68 DB 68 └━━━━━━━━━━━━┘
146F:0115 81059AD3 ADD WORD PTR [DI],D39A .
146F:0119 2D9E10 SUB AX,109E .
146F:011C 83C406 ADD SP,+06 .
146F:011F 1E PUSH DS .
146F:0120 68 DB 68 .
146F:0121 8405 TEST AL,[DI] .
146F:0123 9AD32D9E10 CALL 109E:2DD3 * [这个 CALL 是个大陷阱]
. 在这里下 here 出现了密码
- u 画面. 但这并不是切入点.
程式会先执行这个 CALL . .
146F:0140 83C404 ADD SP,+04 .
146F:0143 C706B8250000 MOV WORD PTR [25B8],0000 .
146F:0149 9A0200A821 CALL 21A8:0002 ............................
146F:014E 90 NOP .
146F:014F 0E PUSH CS .
146F:0150 E85504 CALL 05A8 * 又一个 CALL
146F:0153 1E PUSH DS . 在这儿下 here
146F:0154 68 DB 68 没事继续往下找!!
146F:0155 B523 MOV CH,23
---=== 中间都跟这篇破解无关, 为节省网路资源, 略过 ===---
-u
-U
146F:01B0 83C404 ADD SP,+04
146F:01B3 90 NOP
146F:01B4 0E PUSH CS [-- 泡妞终结者画面 --]
146F:01B5 E85305 CALL 070B * [不喜欢的话也可以把这弄掉]
146F:01B8 6A DB 6A . 在这里执行 HERE
146F:01B9 006A00 ADD [BP+SI+00],CH
146F:01BC 9A22099E10 CALL 109E:0922 . 一样在这里执行 HERE
146F:01C1 83C404 ADD SP,+04 * 没事, 继续!!
146F:01C4 50 PUSH AX
146F:01C5 9A78079E10 CALL 109E:0778
146F:01CA 59 POP CX
146F:01CB 68 DB 68
146F:01CC DB01 FILD DWORD PTR [BX+DI]
-U
146F:01E9 06 PUSH ES
146F:01EA 9B WAIT
146F:01EB 2403 AND AL,03
146F:01ED 00900EE8 ADD [BX+SI+E80E],DL
146F:01F1 187C90 SBB [SI-70],BH
146F:01F4 0E PUSH CS
146F:01F5 E8117E CALL 8009 * [呼叫破解画面的所在]
146F:01F8 8BF0 MOV SI,AX .. . 下 HERE 终於现出原形了.
146F:01FA 83FEFF CMP SI,-01 .
146F:01FD 7505 JNZ 0204 .
146F:01FF BF0100 MOV DI,0001 .
146F:0202 EB02 JMP 0206 ... 密码按回来後的判断
146F:0204 33FF XOR DI,DI .
146F:0206 EB18 JMP 0220 .
146F:0208 90 NOP .
.
---------------------------------------------------------------------
第三步 修改原始程式
--------------------------------------------------------------------
* 以 PCTOOLS 修改原始程式.将刚刚我们找出来的码弄掉.
找出 : 0E E8 11 7F 8B F0
改成 : -- 90 90 90 -- --
这样就不会有询问密码的画面, 即告破解完毕 !!
上面原意是 将 CALL 8009 改成 NOP NOP NOP
(E8 11 7F) 改成 ( 90 90 90 )
* 刚刚我们来找出来泡妞终结者的广告画面, 如您嫌它暂停太久的话, 也弄掉它.
找出 : 90 0E E8 53 05 6A
改成 : -- -- 90 90 90 --
上面原意是 将 CALL 070B 改成 NOP NOP NOP
(E8 53 05) 改成 ( 90 90 90 )
* 这部份是让我们乱按 PASSWORD 之後仍能进行游戏 !!
因为这是份简单的教学, 也不想让各位同好, 一堆逻辑在脑袋里转.
介绍另一个方法 --- 平行带入法.
在输入正确的密码时, AX 返回值为 0000, 错误时返回值是 FFFF
又 DX 值的不论真假都为 0000. 为保持原程式的长度, 所以只要
找出 : 8B F0 83 FE FF 75
改成 : -- C2 -- -- -- --
原意是将 MOV SI,AX 改成 MOV AX,DX
( 8B F0 ) 改成 ( 8B C2 )
|
|