皮特陳,這個是中文的不必翻譯啦。 (7千字)
程式名:Crkme12.com
這是皮特陳給我的3個DOS的CRACKME中的一個,另外的一個太簡單,還有一個又太複雜,只有這個適中,所以用
他來寫過程,也算對皮特陳有個交代,免得問的我連QQ都不敢上,呵呵。
跟蹤工具:DEBUG
-U 100 L 142
128E:0100 E9EE00 JMP 01F1
.
.
128E:01F1 E80000 CALL 01F4
;跳到此處
128E:01F4 5D POP BP
;取得相對偏移,這可是外殼病毒常用的手法哦
128E:01F5 33DB XOR BX,BX
128E:01F7 8BC3 MOV AX,BX
128E:01F9 BFC300 MOV DI,00C3
128E:01FC 893F MOV [BX],DI
;將PSP+0的地方放一個RET,這可是有目的。
128E:01FE 81C39000 ADD BX,0090 ;這個90做為結束程式碼的入口
128E:0202 53 PUSH BX
128E:0203 2E CS:
128E:0204 FF363600 PUSH [0036] ;取段址,因是COM檔案,其實沒必要
128E:0208 1F POP DS
128E:0209 1E PUSH DS
;此處壓入DS,SI用做下面的RETF到程式入口用
128E:020A 56 PUSH SI
;!!!!!!這可是他的巧妙之處,後面再說
128E:020B 8D76E2 LEA SI,[BP-1E]
128E:020E 8BFB MOV DI,BX
128E:0210 B90F00 MOV CX,000F ;此處移動0F位元組到PSP+90的地方,移了些什麼,看注一
128E:0213 F2 REPNZ
128E:0214 A4 MOVSB
128E:0215 C64625BE MOV BYTE PTR [BP+25],BE
;注意,此處會改變219的程式碼
128E:0219 64 DB 64
;被改為MOV SI,103
128E:021A 0301 ADD AX,[BX+DI]
128E:021C 66 DB 66
;此處其實就是MOV EDX,[BP-0F],只不過DEBUG太老土,識別不了
128E:021D 8B56F1 MOV DX,[BP-0F]
128E:0220 66 DB 66
;同上
128E:0221 8B5EF5 MOV BX,[BP-0B]
128E:0224 66 DB 66
128E:0225 8B6EF9 MOV BP,[BP-07]
128E:0228 8B0E0101 MOV CX,[0101]
;CX為EE
128E:022C AC LODSB
;下面在做解碼
128E:022D 66 DB 66
;如果你用32位偵錯程式就可以看到它們的真面目
128E:022E C1 DB C1
128E:022F C20866 RET 6608
128E:0232 33D3 XOR DX,BX
128E:0234 66 DB 66
128E:0235 03D5 ADD DX,BP
128E:0237 66 DB 66
128E:0238 D3C5 ROL BP,CL
128E:023A 32C2 XOR AL,DL
128E:023C 8844FC MOV [SI-04],AL
128E:023F E2EB LOOP 022C
128E:0241 CB RETF ;解碼完畢,進入程式。如果程式正常執行會返回到128E:100處執行程式,
;如在DEBUG下,會返回到PSP+0的地方執行那條RET指令,之後回到PSP+90
;的結束程式碼處,這就是上面那個SI的妙處
;此處為程式的入口,可以脫殼了,將BX=0,CX=EE,再取個名字,W 回寫就不用我說了吧.
128E:0100 B409 MOV AH,09
128E:0102 BA7201 MOV DX,0172
128E:0105 CD21 INT 21
128E:0107 B40A MOV AH,0A
128E:0109 BAD201 MOV DX,01D2
128E:010C CD21 INT 21
128E:010E B409 MOV AH,09
128E:0110 BABA01 MOV DX,01BA
128E:0113 CD21 INT 21
128E:0115 BF7201 MOV DI,0172
128E:0118 33ED XOR BP,BP
128E:011A 33DB XOR BX,BX
128E:011C 33C0 XOR AX,AX
128E:011E 33F6 XOR SI,SI
128E:0120 56 PUSH SI
128E:0121 BED201 MOV SI,01D2
;下面是一連串的運算
128E:0124 8A0ED301 MOV CL,[01D3]
;誰數學好,去做這道題吧,呵呵.
128E:0128 80C102 ADD CL,02
128E:012B 50 PUSH AX
128E:012C AC LODSB
128E:012D 8A25 MOV AH,[DI]
128E:012F 84E4 TEST AH,AH
128E:0131 7422 JZ 0155
128E:0133 02D8 ADD BL,AL
128E:0135 1B45FE SBB AX,[DI-02]
128E:0138 12C4 ADC AL,AH
128E:013A 03E8 ADD BP,AX
128E:013C 86CB XCHG CL,BL
128E:013E D3D5 RCL BP,CL
128E:0140 86CB XCHG CL,BL
128E:0142 AA STOSB
128E:0143 E2E7 LOOP 012C
128E:0145 58 POP AX
128E:0146 5E POP SI
128E:0147 31AC6601 XOR [SI+0166],BP
;注三 ,此處的BP值隨密碼變動的
128E:014B 0F DB 0F
128E:014C 95 XCHG BP,AX
128E:014D C0 DB C0
128E:014E 02E0 ADD AH,AL
128E:0150 83C602 ADD SI,+02
128E:0153 EBCB JMP 0120
128E:0155 BAC501 MOV DX,01C5
128E:0158 58 POP AX
128E:0159 84E4 TEST AH,AH
;如想爆破,就是這裡了
128E:015B 7503 JNZ 0160
128E:015D BACC01 MOV DX,01CC
128E:0160 B409 MOV AH,09
128E:0162 CD21 INT 21
128E:0164 5E POP SI
128E:0165 C3 RET
;返回到PSP+90處執行退出程式碼。注二
注一:
128E:0090 33C0 XOR
AX,AX ;程式執行完後將自己清0,想不讓我們看他的程式碼
128E:0092 BF0001 MOV
DI,0100 ;在KV300中也有類似程式碼。
128E:0095 B9FFFE MOV
CX,FEFF
128E:0098 F3 REPZ
128E:0099 AA STOSB
128E:009A B8004C MOV
AX,4C00 ;由於程式破壞了PSP+0的程式碼,所以不能用INT 20結束
128E:009D CD21 INT
21
可以看出程式結束的最終程式碼在PSP+90的地方
注二:
我們脫殼後,此處已不在適合用RET了,我們可以用INT 20 或MOV AX,4C00,INT 21 來體面的結束它.
我用了INT 21來結束它,我們改了程式後,結果又被注三處改為其他程式碼,所以在注三處將[SI+166]改為[SI+16B]
也就是讓他去修改後面的程式碼,只要不動到我的結束部分就行了.
其實我們還可以將程式裁剪小一些,留給你去做吧.
現在我講一下那個SI的用處,其實就是程式正常執行時SI=IP=100,而在DEBUG下,SI被清0了,其中DX(它本該=DS)也一樣,也有程式用它來做反跟蹤。
我們只要用DEBUG載入程式後,手工將SI=100,就可正常進入程式入口了。說穿了,就是這麼詐。
飛刀浪子 留
2001.6.4
相關文章
- 科技翻譯的特點2013-06-17
- 翻譯英文軟體哪個好?中文翻譯英文最便捷的方法2019-10-22
- 這段話的翻譯哪個好?2013-01-17
- bulma中文翻譯2024-08-31
- socket中文翻譯2024-11-09
- 中文翻譯英語的軟體哪個好?如何完成中翻譯英2019-09-27
- 如何完成中文翻譯日文線上翻譯2019-09-23
- PHP 7:真實世界的應用開發(中文翻譯)2020-10-04PHP
- Promise A+中文翻譯2018-08-01Promise
- 翻譯(1) (6千字)2000-07-22
- PendingIntent 是個啥?官方文件描述的很到位。我給翻譯翻譯2018-11-08Intent
- 使用google翻譯 api 翻譯中文成其他語言2018-08-06GoAPI
- SnapKit 中文文件翻譯2019-03-04APK
- Laravel-permission 中文翻譯2018-11-09Laravel
- udev-FAQ 中文翻譯2006-08-21dev
- NetworkX教程中文翻譯2024-11-21
- AIX的iostat命令解析(翻譯紅皮書)2016-06-08AIiOS
- 【漢譯英】翻譯當然不是一成不變的啦2016-10-02
- 線上文字翻譯能力新增14個直譯模型,打造以中文為軸心語言的翻譯系統2023-02-28模型
- 掘金翻譯計劃招募志願者啦2016-07-12
- python書的中文翻譯資源2017-03-29Python
- Matlab最新的官方文件中文翻譯2017-01-11Matlab
- 關於HTTP中文翻譯的討論2012-05-22HTTP
- HTTPie 官方文件中文翻譯版2019-02-16HTTP
- 【翻譯】AwesomeAsyncio中文版2018-08-16
- Gin 框架中文文件(翻譯)2018-07-13框架
- BitTorrent DHT 協議中文翻譯2015-02-01協議
- 掘金開源庫翻譯招募譯者啦(活動已結束)2019-03-02
- 這是一篇老文章今天拿來翻譯一下,我的水平很差~請指正!for新手
(4千字)2015-11-15
- 不錯的Oracle文件中文翻譯網站2010-07-15Oracle網站
- 微軟新CEO的郵件這2篇翻譯哪個好?2014-02-07微軟
- 一個詞告訴你什麼是翻譯2013-06-19
- 翻譯:man getopt(1)中文手冊2018-10-08
- ZooKeeper開發手冊中文翻譯2014-11-24
- SQLAlchemy 2.0 中文文件翻譯完成2024-04-19SQL
- 【翻譯】使用這20個好的css技巧提升你的CSS技能2018-03-15CSS
- (翻譯) MongoDB(7) 安裝MongoDB2016-10-19MongoDB
- 翻譯:《PKCS#7 - SignedData》2017-12-12