一篇SMC補丁方法的教程 (7千字)
用SMC的補丁方法來破解加殼的幻影2003-一篇SMC補丁方法的教程
作者:lzrlzr
郵箱:crack_lzrlzr@163.com
日期:2002年11月24日
軟體:幻影2003
加密方式:機器碼+註冊碼,主執行檔案huanying.exe被加殼ASPack
1.08.03,
未註冊前有功能限制,不能儲存、列印、發email。
難度:中等
所用工具:lodepe,softice,hiew6.83,topo
破解環境:win98第二版
本文僅在研究破解技術,請大家支援軟體作者製作出更優秀的軟體。
請大家多提意見,完善文章內容,造福於所有的crack
1、登錄檔中存放執行次數和註冊碼的地方
REGEDIT4
[HKEY_CURRENT_USER\Software\BraveTech\PhotoBuilder\regno]
"showme"=dword:00000000
"opensample"=dword:00000001
"lastbk"="C:\\PROGRAM
FILES\\幻影2003\\backgrnd\\BCG_094.JPG"
"runtimes"=dword:00000005
"bserino"="F9R9-B3C9-J5D9-P0L0"*******註冊碼以明文存放在這裡
2、軟體破解
軟體的主執行檔案huanying.exe被加殼ASPack 1.08.03,用衝擊波可得到入口地址OEP,脫殼後反
彙編,得到如下程式碼段,修改410B6E處的程式碼為9090或7500,則軟體破解完成(註冊碼的破解比較簡單,
採用的是明碼比較,這裡就不講了)。
OEP: 452564==>0043DF6C
* Referenced by a CALL at Addresses:
(四個呼叫檢測註冊碼的程式碼段的地址,分別對應了四個功能。)
|:00406531 , :0040A218 , :00414BF8
, :00414DE5
|
0167:00410820 6AFF
push FFFFFFFF
.......
.......
0167:00410B6E
750D JNZ
00410B7D ********************
0167:00410B70 C744242C01000000
MOV DWORD PTR [ESP+2C],00000001
0167:00410B78
E9C8010000 JMP 00410D45
0167:00410B7D 33DB
XOR EBX,EBX
0167:00410B7F 53
PUSH EBX
0167:00410B80 8D4C2444 LEA
ECX,[ESP+44]
0167:00410B84 E8178BFFFF
CALL 004096A0
3、此軟體的破解並不難,手工或藉助工具脫殼後修改一個位元組就可完成破解;取消所有功能限制;
但用來作為一個學習SMC補丁方法的例子剛好。(因為我的本意不是講脫殼,所以這一部分略,若有
人需要,可來信討論,不過本人脫殼的水平不敢恭維。)
4、SMC的補丁方法(加殼ASPack 1.08.03 -> Alexey Solodovnikov)
分析:因為軟體加殼,所以0167:00410B6E
750D JNZ 00410B7D
這一句程式碼是在記憶體動態生成的。那麼首先看這一句是由哪一段程式碼生成的。
用 Softice loader啟動huanying.exe檔案,下斷點bpm 410b6e,
ice中斷後,用D 410b6e來看程式碼是不是750D
JNZ 00410B7D,
若不是,按F5繼續,直到程式碼生成為止。
我們來分析最後一次中斷後的地方:
0167:00452333 8B85B5504400 MOV
EAX,[EBP+004450B5]
0167:00452339 6800800000
PUSH 00008000***************
0167:0045233E
6A00 PUSH
00
0167:00452340 50
PUSH EAX
0167:00452341 FF95BD504400
CALL [EBP+004450BD]
0167:00452347
83C608 ADD
ESI,08
0167:0045234A 833E00
CMP DWORD PTR [ESI],00
0167:0045234D 0F8546FFFFFF
JNZ 00452299
0167:00452353
8B9DDF4A4400 MOV EBX,[EBP+00444ADF]
0167:00452359 0BDB
OR EBX,EBX
0167:0045235B 7408
JZ
00452365
0167:0045235D 8B03
MOV EAX,[EBX]
在00452339地址前,程式碼已經生成,所以我決定在此句前修改00410B6E的程式碼。用PE工具得到
程式碼00452339也是動態生成的,所以也要找到生成00452339的程式碼段。
用 Softice loader啟動huanying.exe檔案,下斷點bpm
00452339,
ice中斷後,用D 00452339來看程式碼是不是6800800000 PUSH
00008000 ,
若不是,按F5繼續,直到程式碼生成為止。
我們來分析最後一次中斷後的地方:
0167:004520B7
8B85B5504400 MOV EAX,[EBP+004450B5]
0167:004520BD 6800800000 PUSH
00008000***************
0167:004520C2 6A00
PUSH 00
0167:004520C4
50 PUSH
EAX
0167:004520C5 FF95BD504400 CALL
[EBP+004450BD]
0167:004520CB 8D85374C4400
LEA EAX,[EBP+00444C37]
0167:004520D1
50 PUSH
EAX
0167:004520D2 C3
RET
在4520bd的地方,程式碼已經生成,所以我要在4520bd這一句前給軟體補丁;用PE工具得到這一段
程式碼在huanying.exe檔案中是存在的,不需要再補丁。
現在理一下SMC的補丁方法來破解加殼軟體的思路:
程式執行的過程:
程式執行-->在004520BD生成00452339程式碼段-->在00452339生成00410B6E程式碼段-->00410B6E程式碼段執行
程式補丁的過程:
程式執行-->在004520BD補丁00452339程式碼段-->在00452339補丁00410B6E程式碼段-->補丁後的00410B6E程式碼執行,軟體破解。
從上面可以看出,補丁的程式碼要兩處,第二處補丁第一處程式碼;以此類推,再複雜的加殼,第二處補丁第一處程式碼,
第三處補丁第二處程式碼,第四處補丁第三處程式碼,在經過多次的補丁,最後也會補成功。
具體步聘:
1,用topo 在huanying.exe檔案中尋找空白程式碼段,我得到的是00453250
用hiew6.83修改原始檔,在453250處加程式碼:
0167:00453250 6800800000 PUSH
00008000
0167:00453255 C7056E0B41007500C744MOV
DWORD PTR [00410B6E],44C70075********
0167:0045325F E9DAF0FFFF
JMP 0045233E
這一句就是修改410b6e的程式碼,修改為
0167:00410B6E 7500
JNZ 00410B70***********
2、用hiew6.83修改原始檔,修改004520BD處的程式碼為
0167:004520BD E9120F0000 JMP
00453264
3、用hiew6.83修改原始檔,在453264處加程式碼:
0167:00453264
6800800000 PUSH 00008000
0167:00453269 C70539234500E9120F00MOV DWORD PTR
[00452339],000F12E9***********
0167:00453273 C6053D23450000
MOV BYTE PTR [0045233D],00
0167:0045327A
E943EEFFFF JMP 004520C2
這一句就是修改00452339 的程式碼,修改為00452339 E9120F0000 JMP
00453250
4、執行軟體,成功,補丁完成。試一試,功能限制已沒有,破解完成。
================
附修改結果
0167:004520B7 8B85B5504400 MOV
EAX,[EBP+004450B5]
0167:004520BD E9A2110000
JMP 00453264***********
0167:004520C2
6A00 PUSH
00
0167:004520C4 50
PUSH EAX
0167:004520C5 FF95BD504400
CALL [EBP+004450BD]
0167:004520CB
8D85374C4400 LEA EAX,[EBP+00444C37]
0167:004520D1 50
PUSH EAX
0167:004520D2 C3
RET
================ 附增加的程式碼段
*****************************************************************************
0167:00453250 6800800000 PUSH
00008000
0167:00453255 C7056E0B41007500C744MOV
DWORD PTR [00410B6E],44C70075
0167:0045325F E9DAF0FFFF
JMP 0045233E
0167:00453264
6800800000 PUSH 00008000
0167:00453269 C70539234500E9120F00MOV DWORD PTR
[00452339],000F12E9
0167:00453273 C6053D23450000
MOV BYTE PTR [0045233D],00
0167:0045327A E943EEFFFF
JMP 004520C2
*****************************************************************************
================附動態補丁的結果
0167:00452333 8B85B5504400
MOV EAX,[EBP+004450B5]
0167:00452339
E9120F0000 JMP 00453250***********
0167:0045233E 6A00
PUSH 00
0167:00452340 50
PUSH EAX
0167:00452341
FF95BD504400 CALL [EBP+004450BD]
0167:00452347 83C608
ADD ESI,08
0167:0045234A 833E00
CMP DWORD PTR [ESI],00
================附動態補丁的結果(破解軟體的關鍵地方)
:u 410b6e l 30
0167:00410B6E
7500 JNZ
00410B70***********
0167:00410B70 C744242C01000000 MOV
DWORD PTR [ESP+2C],00000001
0167:00410B78 E9C8010000
JMP 00410D45
0167:00410B7D
33DB XOR
EBX,EBX
0167:00410B7F 53
PUSH EBX
0167:00410B80 8D4C2444
LEA ECX,[ESP+44]
0167:00410B84
E8178BFFFF CALL 004096A0
0167:00410B89 B306
MOV BL,06
0167:00410B8B 8D4C2420
LEA ECX,[ESP+20]
希望能和大家互相交流經驗,也希望能為crack們作一點貢獻。
下一篇準備寫
1,怎樣修改軟體檔案,讓軟體自動輸出註冊號,自己成為自己的序號產生器。
2,怎樣修改軟體檔案,破解多模組加密狗(rokey)的方法。(一個國內非常有名的軟體,採用加密狗加密,
而且是多模組軟體。)
轉載請保證文章內容的完整。
相關文章
- ORACLE打補丁的方法和案例2018-05-15Oracle
- 批處理打補丁的方法2009-05-06
- 有感於朋友們的鼓勵,再送上艾克主頁秀2005
找破點,打SMC補丁(新手教程)2004-12-02
- 放上Ken的一篇smc教程!也可以參考看雪放過Heibow的一篇破aspack2000的文章!
(4千字)2000-08-18
- 【補丁】Oracle補丁的知識及術語2020-08-05Oracle
- Oracle的補丁2011-11-24Oracle
- Unfolder中的補丁和元素使用方法2020-10-05
- 貼個程式的smc破解。 (1千字)2001-09-24
- Oracle資料庫打補丁方法2011-08-15Oracle資料庫
- Photo Watermark破解(SMC) (3千字)2015-11-15
- Oracle補丁集的補丁號Patch ID/Number速查2015-07-15Oracle
- 一篇破解入門 (7千字)2000-09-04
- CentOS /RHEL 系統更新安全補丁的方法2023-03-10CentOS
- Oracle CPU補丁包查詢下載的方法2018-01-29Oracle
- Python的執行時方法補丁技術2015-10-09Python
- oracle 補丁2014-06-05Oracle
- 12. Oracle版本、補丁及升級——12.2. 補丁及補丁集2020-03-18Oracle
- HoudahSpot 破解補丁最新 HoudahSpot 中文 for Mac安裝教程2024-01-15Mac
- [Oracle] CPU/PSU補丁安裝詳細教程2016-12-20Oracle
- 10.2.0.2打某補丁失敗的解決方法2014-01-02
- 檢查oracle補丁是否可以滾動更新的方法2010-07-22Oracle
- Oracle補丁術語介紹 PSU CPU補丁2016-12-20Oracle
- 怎麼樣安裝AIX 補丁或者補丁集2009-08-29AI
- Oracle的OPatch補丁更新2023-01-13Oracle
- win10遊戲全屏補丁怎麼設定_win10遊戲全屏補丁操作方法2020-07-09Win10遊戲
- 如何刪除win10更新補丁?win10系統更新補丁解除安裝方法2021-04-15Win10
- 2015年首個補丁日發8枚補丁,Win7/Win8.1受影響2015-01-14Win7
- PHP補丁[LAMP]2012-09-11PHPLAMP
- 軟體補丁2012-08-03
- win10怎麼解除安裝補丁_解除安裝win10已安裝更新補丁的方法2020-04-01Win10
- Windows7SP1補丁包(Win7補丁彙總) 32位/64位版 更新截至2016年11月2016-11-22WindowsWin7
- 【Rhino 8.12下載與安裝教程 含補丁】2024-11-20
- beyond Compare4不需要補丁的破解方法2018-05-11
- 聊聊兩種給Grid Infrastructure打補丁的方法(上)2015-06-01ASTStruct
- 聊聊兩種給Grid Infrastructure打補丁的方法(下)2015-06-02ASTStruct
- 我寫的一個記憶體補丁,很基本。。高手莫入。。
(5千字)2015-11-15記憶體
- WinRip 2.0保護機制分析及其補丁製作
(9千字)2015-11-15
- 轉載一篇破解教程(LeapFTP) (10千字)2001-03-29FTP