MySQL Manager 2.8.0.1脫殼破解手記破解分析
【破文標題】 MySQL Manager 2.8.0.1脫殼破解手記破解分析
【破文作者】springkang[DFCG]
【作者主頁】www.chinadfcg.com
【作者郵箱】springkang2003@yahoo.com.cn
【所屬組織】DFCG
【軟體名稱】 MySQL Manager 2.8.0.1
【下載地址】http://www.ems-hitech.com/mymanager/
【破解工具】OllyDBG1.10,loadpe,impr,brain and hands
【保護方式】ASProtect 1.2 / 1.2c-> Alexey Solodovnikov
【軟體限制】30天試用
【破解難度】中等
【破解時間】始破於二○○四年七月二十九日,脫文作於二○○四年十一月二日
----------------------------------------------------
軟體介紹:
強大的mysql管理工具,允許使用者透過圖形介面建立或編輯資料庫物件,並提供透過sql語句管理使用者和許可權,透過圖形介面建立sql語句,自動生成html格式的資料庫文件,匯入/匯出資料,檢視/編輯blob欄位等功能
----------------------------------------------------
破解聲名:學習和研究殼的脫法!幫助脫殼小菜鳥成功走上脫殼大菜鳥之路系列之一
----------------------------------------------------
【破解分析】
今年7月在DFCG官方論壇0day區裡看到這款軟體,不知出於何目的就稀裡糊塗的把它下了。查殼是ASProtect 1.2 / 1.2c-> Alexey Solodovnikov,很老的版本了!當時也覺得很奇怪,aspr的殼1.23版的脫文到處都是,已經被人研究得很透徹了,1.3甚至2.0的殼都已經出來了,一個剛出的新軟體為何還要用老版殼來保護?現在fly 和loveboom都脫到2.0的了,想必我沒有必要再講脫這個老版本的殼了吧!可是當初大菜鳥我在脫它的時候,遇到了一點麻煩,什麼麻煩,先賣個關子,。。。呵呵(暈,誰扔的雞蛋,%¥^&*@@,要扔就扔點硬幣噻:-) )。兩個月前,e5v 兄弟曾經向我問過如何破解它,其實我哪裡會什麼演算法破解,只不過這個軟體過分依賴殼的保護,才讓大菜鳥我得了個便宜。時隔這麼久,要不是當初e5v的幾次問起,的確不好意思作此脫文!
好吧,費話說了一大通,切入正題吧!
老規矩,忽略除記憶體異常外的所有異常,載入,
00401000 > 68 01A0C600 PUSH MyManage.00C6A001 //停在這裡
00401005 C3 RETN
00401006 AA STOS BYTE PTR ES:[EDI]
00401007 803446 FA XOR BYTE PTR DS:[ESI+EAX*2],0FA
0040100B C9 LEAVE
F9執行,按shift+F9在第十六次時來到第一次硬碟指紋出現的地方:
01280260 3100 XOR DWORD PTR DS:[EAX],EAX //第十六次時來到這裡,我們看看堆疊,然後ALT+M, 下記憶體訪問斷點
01280262 EB 01 JMP SHORT 01280265
01280264 68 648F0500 PUSH 58F64
01280269 0000 ADD BYTE PTR DS:[EAX],AL
0128026B 00EB ADD BL,CH
0012D748 01270000
0012D74C 01250000
0012D750 01280038
0012D754 00000000
0012D758 01351E0C ASCII "0hUeFQCQUXY=" //第十六次時就會看到它,你的機器可能不是這些字元,差不多是類似的,呵呵
0012D75C 00000000
0012D760 00000000
記憶體映象,專案 23
地址=00401000 //就在這裡下記憶體斷點了
大小=0062F000 (6483968.)
Owner=MyManage 00400000
區段=
包含=code
型別=Imag 01001002
訪問=R
初始訪問=RWE
下斷後按shift+F9,中斷,先別取消記憶體斷點;
00A2E37C 55 PUSH EBP //停在這裡,F9。
00A2E37D 8BEC MOV EBP,ESP
00A2E37F 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00A2E382 A3 C89AA300 MOV DWORD PTR DS:[A39AC8],EAX //要注意A39AC8,後面的麻煩就是他引起的,此時eax=0127C784。現在暫時不理它
00A2E387 5D POP EBP
00A2E388 C2 0400 RETN 4
F9若干次後,來到
00A2E290 55 PUSH EBP //來到這裡
00A2E291 8BEC MOV EBP,ESP
00A2E293 A1 549DA300 MOV EAX,DWORD PTR DS:[A39D54]
00A2E298 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
00A2E29B 8910 MOV DWORD PTR DS:[EAX],EDX
00A2E29D A1 C8AFA300 MOV EAX,DWORD PTR DS:[A3AFC8]
00A2E2A2 8B55 0C MOV EDX,DWORD PTR SS:[EBP+C]
00A2E2A5 8910 MOV DWORD PTR DS:[EAX],EDX
00A2E2A7 5D POP EBP
00A2E2A8 C2 0800 RETN 8 //以上幾行用F9小心跟,仔細觀察每行的數值和堆疊,這幾行程式碼主要是處理使用的次數和日期的。
00A2E280 55 PUSH EBP //然後再來到這
00A2E281 8BEC MOV EBP,ESP
00A2E283 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00A2E286 A3 C49AA300 MOV DWORD PTR DS:[A39AC4],EAX //這裡就要注意了,A39AC4裡存放的就是註冊名。我們在命令列裡輸入:dd 00a39ac4。看看記憶體的值,如下:
00A2E28B 5D POP EBP
00A2E28C C2 0400 RETN 4
此時記憶體的值:
00A39AB8 0000001E
00A39ABC 0000001E //以上兩行是次數和日期的值,把它們修改一下
00A39AC0 00000000
00A39AC4 00A2E18C MyManage.00A2E18C //這裡放的是註冊名,找個空白的地方,改成你的註冊名,我找的是00a3b738,把它的值改成springkang[DFCG]
00A39AC8 0127C784 //這裡先不管,回頭再收拾它。
經修改後的記憶體值如下:
00A39AB8 FFFFFFFF
00A39ABC FFFFFFFF //實踐中好像此不改也行,呵呵。但改了總比不改好!
00A39AC0 00000000
00A39AC4 00A3B738 ASCII "springkang[DFCG]" //不過這裡小心,如果在到達最後一次異常時或入口點,可能會變成了其他的值,再把它改回來就是了。另一種方法就是在入口點處,準備dump前來修改,這樣也可靠些!
00A39AC8 0127C784
取消記憶體斷點,shift+F9來到最後一次異常處了:
0135F054 FE01 INC BYTE PTR DS:[ECX] //來到這裡
0135F056 ^ EB E8 JMP SHORT 0135F040
0135F058 98 CWDE
0135F059 BB 00000000 MOV EBX,0
0135F05E 64:8F03 POP DWORD PTR FS:[EBX]
0135F061 5B POP EBX
ALt+M再次下記憶體斷點,中斷後,就停在入口處了,
00A2F6CC 55 PUSH EBP //沒有被偷的程式碼,太好了!
00A2F6CD 8BEC MOV EBP,ESP
00A2F6CF 83C4 F4 ADD ESP,-0C
00A2F6D2 B8 B4E3A200 MOV EAX,MyManage.00A2E3B4
00A2F6D7 E8 A8A49DFF CALL MyManage.00409B84
00A2F6DC A1 84A2A300 MOV EAX,DWORD PTR DS:[A3A284]
loadpe dump後,再用impr追蹤層次一和外掛修復,全部有效。
執行出錯,^%¥¥%^&@!
好吧,載入出脫殼修復後的程式看看,是什麼原因:
發現當執行到下面程式碼時出錯:
00A2F730 FF15 C89AA300 CALL DWORD PTR DS:[A39AC8] //跟進去看看
0127C784 0007 ADD BYTE PTR DS:[EDI],AL //跟進後是這樣的
0127C786 0000 ADD BYTE PTR DS:[EAX],AL
0127C788 0000 ADD BYTE PTR DS:[EAX],AL
0127C78A 0000 ADD BYTE PTR DS:[EAX],AL
0127C78C 0007 ADD BYTE PTR DS:[EDI],AL
0127C78E 0000 ADD BYTE PTR DS:[EAX],AL
0127C790 0013 ADD BYTE PTR DS:[EBX],DL
我們還是載入原程式看看:
0127C784 833D A8352801 0>CMP DWORD PTR DS:[12835A8],0 //原來是引用了殼中程式碼,執行不錯才怪,要想辦法搞定!
0127C78B 74 06 JE SHORT 0127C793 //這行沒跳轉,估計是沒什麼用
0127C78D FF15 A8352801 CALL DWORD PTR DS:[12835A8] ; MyManage.00A2E2AC //這行有用 ,但也呼叫了殼中程式碼,
0127C793 C3 RETN //這個也有用
先小結一下:
看來要修復呼叫的殼中程式碼才好辦,怎麼做?其實OD已經為我們做到了,看
0127C78D FF15 A8352801 CALL DWORD PTR DS:[12835A8] ; MyManage.00A2E2AC ,它引用殼中程式碼,但最終引用的是00A2E2AC的資料,呵呵,這下好辦了。
我們在找個空地輸入如下程式碼就行了:
call 00A2E2AC
retn
我是在00A2FFBD這行輸入的,輸入後如下,然後右鍵->複製到可執行檔案儲存:
00A2FFBD E8 EAE2FFFF CALL dumped_.00A2E2AC
00A2FFC2 C3 RETN
dd 00a2ffbd看看記憶體區吧:
00A2FFBD FFE2EAE8
00A2FFC1 0000C3FF //這兩行資料用得上
現在,程式碼是修復好了,問題是怎樣讓出錯行00A2F730 FF15 C89AA300 CALL DWORD PTR DS:[A39AC8] 呼叫00A2FFBD的程式碼呢?
我在第一次脫它的時候用的方法記不起來了,:-(。
還好我今晚又想到了一個方法:
還記得我在上面說的:“0A2E382 A3 C89AA300 MOV DWORD PTR DS:[A39AC8],EAX //要注意A39AC8,後面的麻煩就是他引起的,此時eax=0127C784。現在暫時不理它”,以及“00A39AC8 0127C784 //這裡先不管,回頭再收拾它” 這兩句話嗎?
對了,我們就是要在dump前,把00A39AC8裡的數值改成00A2FFBD,然後再把00A2FFBD 裡的值改成 FFE2EAE8
00A2FFC1裡的值改成 0000C3FF
此時dump後,用impr修復後,就執行正常了!哈哈,一切OK!
----------------------------------------------------
【總結】
幾個月沒脫殼了,手都生了!
此文獻給 e5v 兄弟!同時感謝他為NSSG論壇提供了空間!
也以此文紀念我學習脫殼一週年吧!
----------------------------------------------------
【版權資訊】
版權公有,人權私有。如需轉載,註明作者!
相關文章
- 以殼解殼--SourceRescuer脫殼手記破解分析2004-11-16
- EasyBoot5.03脫殼+暴破2004-11-17boot
- C32Asm外殼脫殼分析筆記2015-11-15ASM筆記
- HTMLock 1.9.3破解手記---演算法分析2003-06-27HTML演算法
- IEPopupKiller 1.2破解手記--演算法分析2015-11-15演算法
- Bannershop 4.5破解手記2015-11-15
- QuickCD 1.0.320破解手記--演算法分析2015-11-15UI演算法
- 先分析,再脫殼(一)2003-09-04
- GreenBrowser 1.0.312破解手記--演算法分析2015-11-15演算法
- Golden 5.7 Build 391破解手記--演算法分析2015-11-15GoUI演算法
- “天音怒放”手動脫殼及破解2015-11-15
- 菜鳥脫 UltraFXP 0.9941 殼( SVKP )+ 破解2015-11-15
- Irfanview破解手記 (668字)2001-02-02View
- 幻影v1.5b3脫殼分析筆記2000-09-15筆記
- 拱豬大戰 1.8破解手記--演算法分析2015-11-15演算法
- Setup2Go 1.97破解手記--演算法分析2015-11-15Go演算法
- jdpack的脫殼及破解 (5千字)2002-06-25
- EmbedPE
1.13 詳細分析和脫殼2005-01-03
- 幻影v1.5b3脫殼分析筆記之二2000-09-15筆記
- hanami1005破解手記2003-08-19
- 《Erlang
4.08》另類破解手記2002-06-24
- 殼的工作原理脫殼2013-04-10
- 【 標題:SmartWhoIs 3.0 (build 21) 破解手記
】2000-11-30UI
- GetSmart破解手記 (1011字)2001-02-02
- 壹次脫殼法――Armadillo 雙程式標準殼 快速脫殼2015-11-15
- pcmedik V5.4.8.2003破解手記--演算法分析2003-05-10演算法
- 極速傳真[SpeedFax] 2.4 破解手記--程式逆向分析演算法2015-11-15演算法
- VBExplorer.exe脫殼教程
附脫殼指令碼2015-11-15指令碼
- 不脫殼破解極光多能鬧鐘
(16千字)2003-04-14
- 魔術情書
6.55 破解過程+不脫殼打破解補丁【原創】2004-12-07
- 脫殼----對用Petite2.2加殼的程式進行手動脫殼的一點分析
(5千字)2000-07-27
- 先分析,再脫殼(二) (13千字)2003-09-04
- Krypton
0.5加殼程式脫殼及輸入表修復記2004-10-06
- Advanced MP3WMA Recorder 3.7.3破解手記--完美演算法分析2015-11-15演算法
- 法律文書、合同樣本庫
5.10破解手記--演算法分析2015-11-15演算法
- Turbo Note+ 破解手記 (4千字)2001-05-13
- Trojan Remover 4.3.0破解手記 (8千字)2001-08-31REM
- 漢字通破解手記 (19千字)2000-09-06