有感於朋友們的鼓勵,再送上艾克主頁秀2005 找破點,打SMC補丁(新手教程)
【軟體名稱】:艾克主頁秀2005 找破點,打SMC補丁(新手教程)
【大 小】:624 KB (638,976 位元組)
【下載地址】:自己去找
【軟體限制】:功能限制
【軟體簡介】:艾克主頁(*)2005是一款功能強大的網頁製作輔助工具,它可以輕鬆的給您的網頁增加眩目的特效,並且可以直接透過網頁模板製作基本的網頁檔案!同時還具有網頁加密/壓縮等功能。
【作 者】:chenjiwl chenjiwl@sina.com
【破解平臺】:Windows xp
【目 標】:找到爆破點,再打SMC補丁
【難度係數】:★☆☆☆☆(容易)
【相關工具】:Ollydbg 1.10 Fly修改版,DeDe,aspackdie,Peid
【作者宣告】: 主要是想給自己的主頁做些特效,所以對它下了手,很容易的,可以做新手的教程。SMC部分系自己亂搞,請多指導!
【詳細過程】
偶的作法一向是以穩健著稱,一般不出手,出手必出精!
廢話少說,開工!
安裝程式先!
開啟安裝目錄,這裡偶給大家推薦一個軟體(Total Commader),一個很強的檔案管理軟體。
一眼看去,不少檔案!恩,還有幾個DLL檔案,先用Peid查一查吧!
眨眼的功夫已經出來了! 全部都是用ASPack 2.1 加的殼!
用aspackdie脫了再說!又眨了一下眼,已經搞定。
再用Peid查脫出來的程式,是Delphi編的程式,可以用上DeDe了。
---------------------------------------------------------------------------------
熱身已經完成。
請看我的標準動作:
第一步:試一試
開啟軟體,介面很漂亮(一定用了SuiPack的控制元件),下面的狀態條顯示未註冊!:=(,
隨便試幾個功能。在開啟網頁模板時彈出了提示框,上面說了:不給錢,不讓用。
再轉到註冊視窗,隨便輸入電郵地址,使用者名稱和註冊碼,再點確定。沒反映?作者
有一定的反偵察能力!!!
大大的狡猾,死了死了的有!
---------------------------------------------------------------------------------
第二步:挖一挖
該用DeDe了,用DeDe將脫殼後的程式載入分析,一分鐘就OK了,轉到"Forms",
只有五個視窗,其中有兩個是讀資料庫的視窗,是Delphi自帶的,不用管。
還有三個:Ta_frm_load,Ta_frm_main,Tgetcol
一個是封面視窗,一個是主視窗,另一個是顏色拾取視窗。
重點在Ta_frm_main,請轉到"Procedures"頁面,在左邊框中選擇frm_main,右邊框中
的過程定義十分清晰(作者的程式設計風格不錯,偶程式設計序重來沒寫過一個正式的名稱!)。
作者真是體貼我們啊!!! 秒秒鐘,我就找到了註冊框中“確定”按鈕的過程:
btn_reg_okClick 00574948(這就是入口地址,在olldbg中有用)
雙擊這一項,轉到相應的程式碼,請定位到下面的位置:
---------------------------------------------------------------------------------
* Reference to object Treginfo
|
005749E0 8B0D00DA4F00 mov ecx, [$004FDA00]
* Reference to: System.@CopyRecord;
|
005749E6 E8850CE9FF call 00405670
005749EB 803D3C03580000 cmp byte ptr [$0058033C], $00 //這裡就是比較點
005749F2 746F jz 00574A63 //如果註冊碼不正確就跳走!!!!!!
005749F4 6A02 push $02
005749F6 66A1A84A5700 mov ax, word ptr [$00574AA8]
005749FC 50 push eax
005749FD 6A00 push $00
005749FF 8D45C4 lea eax, [ebp-$3C]
00574A02 8B0D20035800 mov ecx, [$00580320]
* Possible String Reference to: ' 軟體已經成功註冊給:'
|
00574A08 BAB44A5700 mov edx, $00574AB4 //正確就到這裡讀恭喜的資訊了
---------------------------------------------------------------------------------
OK!很簡單,看來只要將上面這個關鍵跳處理一下就可註冊成功了!
在這裡我要停一下,讓大家分析一下了!下面這一段程式碼給我們什麼啟示?
005749EB 803D3C03580000 cmp byte ptr [$0058033C], $00 //這裡就是比較點
005749F2 746F jz 00574A63 //如果註冊碼不正確就跳走!!!!!!
想出來了嗎?
我來分析一下吧,很簡單,即然在這裡有一個比較[0058033C]中的值的指令,
就一定會有一個指令向[0058033C]中寫一個值,不然它比較個屁啊!
明白了嗎!明白了就繼續!
---------------------------------------------------------------------------------
第三步:動一動
用Olldbg將脫殼後的程式載入! 記得上面的分析嗎!
0058033C這個地址是我們的關鍵。
點選左下方的記憶體框,按Ctrl+G,填入0058033C, 轉到這個地址,選擇第一個數值,再
點右鍵,選擇“斷點”--“硬體訪問”--“byte”。(任何指令訪問這個地址都會中斷下來)
按F9執行程式
很快會停在00402B4F:
-------------------------------------------------------------------------------
00402B3F |> \8D74>lea esi, dword ptr ds:[ecx+esi-4] >>源地址
00402B43 |. 8D7C>lea edi, dword ptr ds:[ecx+edi-4] >>目的地址
00402B47 |. C1F9>sar ecx, 2 >>複製的個數
00402B4A |. 78 1>js short unpacked.00402B5D
00402B4C |. FD std
00402B4D |. F3:A>rep movs dword ptr es:[edi], dword ptr ds:[esi] >>這裡就是在給[0058033C]複製資料
00402B4F |. 89C1 mov ecx, eax >>>>>>>>>>>>>>>>>>硬體中斷在這裡
00402B51 |. 83E1>and ecx, 3
00402B54 |. 83C6>add esi, 3
00402B57 |. 83C7>add edi, 3
00402B5A |. F3:A>rep movs byte ptr es:[edi], byte ptr ds:[esi]
00402B5C |. FC cld
00402B5D |> 5F pop edi ; unpacked.004FDA4E
00402B5E |. 5E pop esi ; unpacked.004FDA4E
00402B5F \. C3 retn
-------------------------------------------------------------------------------
上面的rep指令就是給[0058033C]這個地方做標記的。但這條指令還只是一個殺手,要找到
下指令的人。請右下角的堆疊窗:
-------------------------------------------------------------------------------
0012FAF0 004FDA4E unpacked.004FDA4E
0012FAF4 0012FB4C
0012FAF8 00405785 返回到 unpacked.00405785 來自 <unpacked.@Move> >>>>>>>>>>>就是這個東西了!
-------------------------------------------------------------------------------
在堆疊窗中第三行上點右鍵,選擇“反彙編中跟隨”,CPU程式碼窗中就轉到相應的地址!
-------------------------------------------------------------------------------
00405779 . /7E 0>jle short unpacked.00405785 >>>>>>>>>>>如果這裡跳走了,就不會複製資料!很重要,SMC中會用
0040577B . |8D14>lea edx, dword ptr ds:[eax+ebx]
0040577E . |01F0 add eax, esi
00405780 . |E8 9>call <unpacked.@Move> >>>>>>>>>>>這個是呼叫殺手的程式碼
00405785 > \5D pop ebp ; unpacked.004FDA4E
00405786 . 5F pop edi ; unpacked.004FDA4E
00405787 . 5E pop esi ; unpacked.004FDA4E
00405788 . 5B pop ebx ; unpacked.004FDA4E
00405789 . C3 retn
-------------------------------------------------------------------------------
再按F9執行,又會被斷下來,又是一個類似的程式碼:
-------------------------------------------------------------------------------
005692BE 803D>cmp byte ptr ds:[58033C], 0 >>>>比較標誌點
005692C5 |. 74 2>je short unpacked.005692EE >>>>跳走
-------------------------------------------------------------------------------
到這裡,我想不用再跟了!直接將所有cmp byte ptr ds:[58033C], 0改成
cmp byte ptr ds:[58033C], 1就可以了。
試一試再說。
在CPU程式碼窗中點選右鍵“搜尋”---“全部命令”
填入: cmp byte ptr ds:[58033C], 0
找出了九處程式碼,全部改了,不要問我如何改!!!!!
再將程式碼另存,也不要問我如何存!!!!!!!!!!!!!!!
試一試!一切OK了,已經註冊了!網頁模板也可以用了!
到現在好像已經完成了吧!如果只是自己用,是已經可以了!可是好東東,一定要給大家分享!
還得做一個補丁!!
如果直接提供脫殼後的程式,好像太大了。只能用SMC補丁了。繼續吧!!!
---------------------------------------------------------------------------------
第四步:改一改
SMC是做什麼?說白了,我們要在未脫殼的程式上下手,在程式解壓完成之後,沒跳到OEP之前,
對程式打好所有的補丁。
整個流程是這樣的:
1、找到一個適當的切入點
2、找一個空白的位置,以填入補丁程式碼
3、直接給[58033C]這個標誌點填入1
4、同時要禁止向[58033C]填資料(就是要將jle short unpacked.00405785改成jmp short unpacked.00405785)
當這四項任務完成以後,程式的補丁就打好了!
讓我們開始:
1、找到一個適當的切入點
Aspack的殼很好脫,切入點也很好找,一個簡單的辦法,按ctrl+f,輸入popad,
轉到這裡:
-------------------------------------------------------------------------------------------
005E44F3 . 61 popad //轉到這裡
005E44F4 . 75 0>jnz short webshow5.005E44FE //這裡就是一個很好的切入點*********************
005E44F6 . B8 0>mov eax, 1
005E44FB . C2 0>retn 0C
005E44FE > 68 0>push 0 //SMC處理後,回到這裡
005E4503 . C3 retn //轉到OEP處
-------------------------------------------------------------------------------------------
2、找一個空白的位置,填入補丁程式碼
不能隨便找一個空白位置的,一個很容易的辦法,在程式碼視窗點右鍵:
“複製到可執行檔案”--“選擇部分”,在彈出的視窗中,轉到最後的部分,有一堆空白的位置,
選擇一個位置吧,我選擇了0009BFC1(檔案偏移地址),先記下來!在這個位置點右鍵,選擇“在反
彙編中檢視映象”就轉到CPU視窗中對應的位置{{記好這個地址(邏輯地址)}}了,
3、直接給[58033C]這個標誌點填入1
按空格鍵,進行彙編,改成:
005E65C1 C605 3>mov byte ptr ds:[58033C], 1 >>>這裡給標誌點置1
4、同時要禁止向[58033C]填資料(就是要將jle short unpacked.00405785改成jmp short unpacked.00405785)
再按空格鍵,繼續彙編,改成:
005E65C8 C605 7>mov byte ptr ds:[405779], 0EB >>>>>將jle改成jmp (機器碼7E改為EB)
處理完之後返回按空格鍵,繼續彙編,改成:
005E65CF ^ E9 2AD>jmp webshow5.005E44FE >>>SMC完成返回
切入點的跳轉還沒有做,再回到005E44F4:
按空格鍵,進行彙編,改成:
005E44F4 /E9 C82>jmp webshow5.005E65C1 >>>>跳到SMC程式碼的入口
OK!OK!到這裡,整個補丁流程就完了,很容易吧!儲存吧。
注意了!建議每次修改一塊程式碼後就儲存到一個檔案中,再開啟這個檔案,繼續修改,不然會丟資料的。
原因自己看!!!!!!
OK了,請將全部修改過的程式改個名,再用KeyMaker做個補丁吧,送給大家做紀念!
這裡我把我的補丁給大家,大家可以比較一下,修改後的程式與原程式的區別,就可以知道工作流程了。
---------------------------------------------------------------------------------
後記:
1、在找到關鍵點後,要分析它的來龍去脈,逆向思考。
2、SMC補丁是一項很麻煩的工程,要考慮很多方面,比如,節區是否可寫等等
3、冷靜,冷靜,再冷靜!!!!
注:有一個webshow.pin檔案中儲存了註冊資訊,你有功夫可以研究一下如何算註冊碼!
寫完時已經 22:30 睡了! 886
chenjiwl
相關文章
- 一篇SMC補丁方法的教程
(7千字)2015-11-15
- 【UP_ORACLE】如何給Oracle DG打補丁(三)主庫安裝補丁步驟2021-11-01Oracle
- 伺服器打補丁需要注意的幾點2022-02-23伺服器
- oracle打補丁回顧2021-12-02Oracle
- Oracle EBS中打補丁2009-06-16Oracle
- 關於12c安裝後打補丁2016-10-28
- weblogic的版本及打補丁2018-06-27Web
- ORACLE打補丁的方法和案例2018-05-15Oracle
- 批處理打補丁的方法2009-05-06
- Linux檔案打補丁2019-03-30Linux
- SAP打補丁(Tcode:SPAM)2014-11-13
- 使用OPatch給Oracle打補丁2015-09-15Oracle
- 在windows上打Oracle的CPU補丁2011-10-23WindowsOracle
- ORACLE11G DG打補丁2016-04-21Oracle
- opatch 工具打補丁使用說明2008-12-04
- Oracle資料庫打補丁方法2011-08-15Oracle資料庫
- oracle 小補丁能全部打嗎?2007-12-24Oracle
- 打Oracle最新CPU patch與打臨時補丁的區別2016-12-20Oracle
- 微軟:我們絕不鼓勵勒索軟體受害者付款2019-12-17微軟
- 到底打還是不打補丁:安裝第三方補丁(轉)2007-08-17
- 謝謝《瞭望智庫》的鼓勵2019-12-04
- windows 打補丁後網路異常2013-11-17Windows
- Windows 10打個補丁 Office歇菜了2015-12-23Windows
- 【opatch】Oracle打補丁工具opatch簡介2010-04-25Oracle
- 給Oracle資料庫打補丁(轉)2009-04-28Oracle資料庫
- Git 打補丁– patch 和 diff 的使用(詳細)2019-03-04Git
- Git 打補丁-- patch 和 diff 的使用(詳細)2018-07-25Git
- 在windows 打補丁遇到CODE=41的錯誤2012-07-31Windows
- 檢視系統已經打過的補丁2009-08-04
- 資料庫的升級和打補丁的研究2007-09-02資料庫
- 【黑蘋果教程】筆記本對DSDT/SSDT打補丁實現背光控制2017-02-03蘋果筆記
- Oracle RAC 19.3打19.5.1 RU補丁2020-03-10Oracle
- Oracle Goldengate 12c打pus補丁2020-08-31OracleGo
- 怎樣為linux核心打補丁(轉)2007-08-15Linux
- 10.2.0.2打某補丁失敗的解決方法2014-01-02
- 【UP_ORACLE】如何給Oracle DG打補丁(二)備庫安裝補丁步驟2021-10-28Oracle
- 程式設計師們,你們再這樣下去會沒朋友的2018-03-18程式設計師
- 微軟sql SERVER 2005一個cache的BUG引起的問題(SP補丁包小於等於2)2011-07-29微軟SQLServer