菜鳥脫 UltraFXP 0.9941 殼( SVKP )+ 破解
這個軟體是在很久以前看fly大俠脫文時,fly大俠提到過的,當時我下載後一直沒動它,最近才拿出來研究,花了不少時間。這個軟體最近版本用了ACProtect加殼,如果要找SVKP殼的就找老一點的版本。雖然不是最新版,但還是要對作者說sorry。
UltraFXP 0.9941 脫殼( SVKP )+破解
【軟體簡介】:一國產ftp,fxp軟體。
【下載】: 用google或百度找。
【作者宣告】:初學Crack,冒犯及失誤之處請諸位大俠指正!
【除錯環境】:WinXP、Ollydbg1.10b、PEiD、LordPE、ImportREC
用PEiD檢視殼為:SVKP 1.3x -> Pavol Cerven
1.找oep
隱藏ollydbg,忽略kernel32記憶體異常,其它的不忽略.下bp GetProcAddress+11,(注意:不能在函式第一
句下斷,很多殼都會檢測到的),f9執行,異常處shift+f9透過,直到中斷在GetProcAddress+11,然後到
memory map視窗在ultrafxp程式碼段下記憶體訪問斷點,f9執行,到下面程式碼:
0056EEAB NOP
0056EEAC NOP
0056EEAD NOP
0056EEAE CALL UltraFxp.004079B8 //中斷在這,偽oep
0056EEB3 MOV EBX, DWORD PTR DS:[58802C] ; UltraFxp.0058B318
0056EEB9 MOV EAX, DWORD PTR DS:[588940]
0056EEBE MOV EAX, DWORD PTR DS:[EAX]
0056EEC0 CALL UltraFxp.0043C18C
0056EEC5 MOV EAX, DWORD PTR DS:[588864]
0056EECA MOV EDX, UltraFxp.0056F5E4 ; ASCII "Unregistered version!"
0056EECF CALL UltraFxp.00403E2C
0056EED4 PUSHAD
0056EED5 PUSH EAX
0056EED6 PUSH ECX
0056EED7 PUSH EDX
0056EED8 PUSH EBX
0056EED9 PUSH EBP
0056EEDA PUSH ESI
0056EEDB PUSH EDI
0056EEDC MOV EDX, 8E9AF9D6
0056EEE1 XOR EDX, 3159F8D7
0056EEE7 PUSH EDX
.............
0056EF3A XOR ECX, 3113B900
0056EF40 XOR EDX, DFB7D6BE
0056EF46 PUSH ECX
0056EF47 PUSH EDX
0056EF48 MOV ECX, ESP
0056EF4A XOR EDX, 56EFD6BE
0056EF50 ADD EDX, ECX
0056EF52 PUSH EDX
0056EF53 XOR ECX, 11B8A811
0056EF59 XOR EDX, 22222222
0056EF5F RETN
0056EEAE是偽oep,根據eax=56eab0,esp=12fea8以及經驗補上stolen bytes,共14位元組:
0056EEA0 55 PUSH EBP
0056EEA1 8BEC MOV EBP, ESP
0056EEA3 81C4 E8FEFFFF ADD ESP, -118
0056EEA9 B8 B0EA5600 MOV EAX, 0056EAB0
用lordpe糾正大小後把它dump出來,並把oep改為0056EEA0。
2.修復IAT
經過查詢,找到加密後的IAT,從58C1B8到58ca40共88c個。可以用ImportREC的跟蹤層次來修復,有25
個是錯誤。下面我們來看看怎麼修改程式,能得到錯誤少一點的IAT。重新載入程式。在58C1B8處下個
記憶體寫入斷點,執行,異常處shift+f9透過,中斷幾次後到下面程式碼:
07346D00 MOV DWORD PTR DS:[EDI], EAX //中斷在這,eax=075775DC(加密後的函式地址)
07346D02 JL SHORT 07346D07
07346D04 JMP SHORT 07346D09
07346D06 JMP EF96687F
07346D0B ADD DWORD PTR DS:[EAX], EAX
07346D0D ADD BYTE PTR DS:[EAX], AL
中斷後,看看堆疊窗,esp=12ff74,在esp+1c=12ff90處正是正確的函式地址(不要問為什麼,我也不知
道,是一高人的妙招),因此我們看能不能在07346D00之前把正確的函式地址放入eax,在程式碼窗往上
看:
07346CF6 5F POP EDI
07346CF7 EB 02 JMP SHORT 07346CFB
07346CF9 CD 20 INT 20
07346CFB 58 POP EAX
07346CFC EB 02 JMP SHORT 07346D00
07346CFE 0F NOP //花指令,nop掉看看
07346CFF E8 NOP //花指令,nop掉看看
07346D00 8907 MOV DWORD PTR DS:[EDI], EAX
我們可以改成這樣:
073C6CF6 5F POP EDI
073C6CF7 58 POP EAX
073C6CF8 8B4424 1C MOV EAX, DWORD PTR SS:[ESP+1C]
073C6CFC EB 02 JMP SHORT 073C6D00
在0056EEA E處下個斷,f9執行到0056EEAE。ok,執行ImportREC,填入oep=0016EEA0,RVA=18C1B8,
size=88c,按get imports得到基本完整的IAT,但還有12個有問題:
0 0 018C20C ? 0000 075E33FC
0 0 018C21C ? 0000 075E2A23
0 0 018C22C ? 0000 075E2085
0 0018C2E0 ? 0000 075E33FC
0 0018C3C8 ? 0000 075EB008
0 0018C3CC ? 0000 075EAC83
0 0018C3F0 ? 0000 075E33FC
0 0018C424 ? 0000 075E3077
0 0018CA2C ? 0000 075E85D2
0 0018CA30 ? 0000 075E8098
0 0018CA34 ? 0000 075E6FC4
0 0018CA38 ? 0000 075E6E2C
不管用什麼外掛都修復不了,沒辦法只好手工了。儲存好IAT,過載軟體,一個一個慢慢跟。
004079BB CALL UltraFxp.004078B8 (JMP DWORD PTR DS:[58C2E0])
過了這個call,eax=400000,這應該是GetModuleHandleA。其他的我不詳細寫了,我得出的前面8個為:
1 0018C20C kernel32.dll 016F GetModuleHandleA
1 0018C21C kernel32.dll 0103 GetCommandLineA
1 0018C22C kernel32.dll 00B0 ExitProcess
1 0018C2E0 kernel32.dll 016F GetModuleHandleA
1 0018C3C8 kernel32.dll 01D5 GetVersionExA
1 0018C3CC kernel32.dll 01D4 GetVersion
1 0018C3F0 kernel32.dll 016F GetModuleHandleA
1 0018C424 kernel32.dll 0135 GetCurrentProcess
其中0018C22C處的我跟到了VirtualFree,但後來執行退出時總有問題,改成ExitProcess就好了,不知
有沒有道理。
0018CA2C~0018CA38四個,一開始怎麼也跟不到系統函式中,一生氣乾脆把相應的呼叫nop掉了,嘿,
就行了。後來再靜下心來跟了一下,第一個函式是檢測有沒有偵錯程式,呼叫了IsDebuggerPresent函式
,可以用IsDebuggerPresent代替。第三個是用來複制註冊資訊的,其他兩個好像沒什麼用。因此相應
的呼叫改為:
004EE33F CALL 004E4EDC //nop掉
004EE352 CALL 004E4ECC //nop掉
004EE361 PUSH EAX //eax裡是註冊資訊地址,呼叫返回eax=1,表示已註冊,0是未註冊
004EE362 CALL 004E4EC4 //因此這兩句改成:mov eax,1
004EE392 CALL 004E4ED4 //nop掉
004EE397 RETN
好,IAT修改好了,修復dump.exe。執行dump_.exe,出錯。真麻煩啊,看看吧:
0012FE24 LODS BYTE PTR DS:[ESI]
0012FE25 XOR AL, DL
0012FE27 STOS BYTE PTR ES:[EDI]
0012FE28 LOOPD SHORT 0012FE24
0012FE2A POP ECX
0012FE2B POP ESI
0012FE2C CALL DWORD PTR DS:[4EEAA4] //出錯!解碼函式,指向殼內
0012FE32 ADD ESP, 54
0012FE38 POPAD
0012FE39 PUSH 1010101
0012FE3E RETN
程式在堆疊中執行,開始我以為搞錯了,怎麼跑到堆疊中去了?後來發現這些程式碼都是動態生成的,是
類似前面0056EED4~0056EF5F的程式碼生成的,然後由這段程式碼再解碼正常的程式段。0012FE2C 處是解
碼函式,指向殼內,脫殼後當然會出錯了。這樣的地方有100多處。看來只好自己程式設計模擬殼來解碼了
。還好解碼函式很簡單。還有一處類似的解碼函式,CALL DWORD PTR DS:[4F18D5]。在程式末端加入以
下程式碼:
0056FFA0 TEST AL, AL
0056FFA2 JE SHORT 0056FFC0
0056FFA4 MOV EDI, ESI
0056FFA6 MOV EBX, 52E4B8F8
0056FFAB LODS BYTE PTR DS:[ESI]
0056FFAC XOR EBX, ECX
0056FFAE XOR AL, BL
0056FFB0 ROL AL, CL
0056FFB2 XOR AL, BH
0056FFB4 STOS BYTE PTR ES:[EDI]
0056FFB5 LOOPD SHORT 0056FFAB
0056FFB7 RETN
0056FFB8 NOP
0056FFBF NOP
0056FFC0 MOV EDI, ESI
0056FFC2 MOV EBX, 52E4B8F8
0056FFC7 LODS BYTE PTR DS:[ESI]
0056FFC8 XOR EBX, ECX
0056FFCA XOR AL, BH
0056FFCC ROR AL, CL
0056FFCE XOR AL, BL
0056FFD0 STOS BYTE PTR ES:[EDI]
0056FFD1 LOOPD SHORT 0056FFC7
0056FFD3 RETN
再把[4EEAA4]內容改為0056FFC0,[4F18D5]改為0056FFA0,儲存。執行,OK。
註冊資訊放在4ee3e0處,你愛怎麼改就怎麼改。
終於寫完了,好累。有些地方說起來簡單,但都是經過若干遍試出來的,希望對感興趣的人有點幫助。
錯誤之處,還請各位大俠指正。
pyzpyz
2004.2.25
相關文章
- 菜鳥求助!!!2019-12-03
- Linux“菜鳥”到“菜鳥的一些建議2020-10-15Linux
- 菜鳥市場2020-10-02
- upx手動脫殼2020-10-26
- hashmap == 菜鳥驛站?2018-08-24HashMap
- 菜鳥看前端(Git)2020-11-21前端Git
- java菜鳥入門2020-10-16Java
- iOS逆向學習之五(加殼?脫殼?)2019-10-10iOS
- Linux菜鳥到老鳥的那些建議2020-10-15Linux
- 十、iOS逆向之《越獄砸殼/ipa脫殼》2021-03-18iOS
- ESlint-菜鳥入門2018-11-16EsLint
- 菜鳥初嘗快速冪2018-12-05
- 跟著菜鳥學python2020-11-13Python
- 菜鳥也裝Linux(轉)2022-03-23Linux
- React菜鳥入門之setState2019-03-01React
- 菜鳥理解的區塊鏈2019-01-16區塊鏈
- 【菜鳥教程筆記】Python字串2018-07-17筆記Python字串
- 菜鳥成長系列-策略模式2018-05-05模式
- 菜鳥的架構師之路2018-06-27架構
- 菜鳥的Hadoop快速入門2019-08-09Hadoop
- python基礎教程|菜鳥教程2020-11-03Python
- Spark菜鳥之路(2):IntelLij初探2021-09-09SparkIntelliJ
- 遊戲菜鳥張一鳴2020-12-07遊戲
- Od跟進之脫殼(待完善)2018-10-20
- 教你如何寫UPX脫殼指令碼2019-05-11指令碼
- 一次簡單的脫殼2024-08-30
- python菜鳥開發日記-基於pyhon及django進行公司打卡系統的破解2018-04-11PythonDjango
- 菜鳥學Python之雜湊表2019-04-09Python
- c#入門教程(菜鳥級)2018-12-06C#
- 菜鳥成長系列-模板方法模式2018-04-30模式
- 菜鳥也想學習JSON解析2020-09-30JSON
- 菜鳥教程python 學習進度2020-10-13Python
- Python從菜鳥到高手:分片(Slicing)2021-09-09Python
- Java集合從菜鳥到大神演變2018-05-02Java
- 菜鳥SEO,如何虎口奪食佔排名?2018-05-29
- Android菜鳥學習js筆記一2018-06-27AndroidJS筆記
- C++語言菜鳥快速入門2024-05-01C++
- 鳥哥的Linux私房菜--CPU種類2019-10-14Linux
- 菜鳥的資訊保安學習之路2020-08-15