




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
近日對Armadillo殼很感興趣,緣于它的多種組合的變化,但仔細(xì)看來,其保護(hù)的解決方法又有相對固定。方法無外乎那么幾種脫殼方法(當(dāng)然排除有key和cc),本人在本論壇已對標(biāo)準(zhǔn)殼的脫殼方法發(fā)貼,但后來有所更新,干脆總結(jié)在一塊吧,以方便大家。大家可以復(fù)制下來,放在手邊,脫殼時按步驟來。我還是一小鳥,同大家一樣在逐漸成長中,有不對的地方和不成熟的地方,望大家批評指正,共同進(jìn)步。一、 基本知識:該殼有如下保護(hù):(1) Debug-Blocker(阻止調(diào)試器)一解決方法就是忽略所有異常,隱藏好OD,如果加載時,老出錯,就多換幾個OD試試。(2) CopyMem-II(雙進(jìn)程保護(hù))---解決方法是:用手動或者腳本使雙變單。(3) EnableImportTableElimination(IAT保護(hù))-解決方法是用工具ArmaDetach再次載入加殼程序,記下子進(jìn)程ID,用另一OD載入,利用斷點GetModuleHandleA,找到MagicJump,修改MagicJump,得到正確的IAT。(4) EnableStrategicCodeSplicing(遠(yuǎn)地址跳),解決方法就是用Arminline工具。(5) EnableNanomitesProcessing(簡稱CC),就是把一些retn代碼變成CC(INT型),解決方法:用Arminline工具或Enjoy工具。(6) EnableMemory-PatchingProtections(內(nèi)存保護(hù))二、 脫此類殼常用的斷點:1、 WaitForDebugEvent(用于尋找非標(biāo)準(zhǔn)OEP和做補(bǔ)丁用)2、 WriteProcessMemory(用于尋找非標(biāo)準(zhǔn)OEP)3、 DebugActiveProcess(找子程)4、 OpenMutexA(雙進(jìn)程轉(zhuǎn)單進(jìn)程)5、 GetSystemTime(補(bǔ)丁KEY)6、 VirtualProtect(用于5.x)7、 CreateFileMappingA(用于5.x)8、 GetModuleHandleA/LoadLibraryA(用于找MagicJump)9、 CreateThread(尋找OEP)三、 種類及脫殼方法說明:對于此殼一般要隱藏OD。如果按以下方法下斷OD斷不下來,出錯,就多換幾個OD試試,在我脫殼中,就有個情況,下斷點后,老斷不下來,多換了幾個OD就成功了。(一)單線程標(biāo)準(zhǔn)方式具體方法:2次斷點法加修改MagicJump。1、找MagicJump方法有二:方法一、下斷點BpGetModuleHandleA/heGetModuleHandleA/bpGetModuleHandleA+5/heGetModuleHandleA+5,按shift+f9運行,當(dāng)經(jīng)過一個call緩沖有點大時,一般是在堆棧窗口出現(xiàn)ASCII"kernel32.dll"和ASCII〃VirtualFree"后,再運行一次,出現(xiàn)"kernel32.dll",就是返回時機(jī),取消斷點,按alt+f9執(zhí)行到返回。方法二、也可以下bpLoadLibraryA斷點,當(dāng)在堆棧窗口出現(xiàn)MSVBVM60.Dll函數(shù)時,返回時機(jī),在kernel32.LoadLibraryA下面有一個跳轉(zhuǎn),一般情況下,這個跳轉(zhuǎn)比較大的話,就改為jmp,而跳轉(zhuǎn)比較小的話,就改nop)。[注:下此斷點的目的是找到MagicJump,修改MagicJump目的是避開的IAT的加密。]2、找OEP下斷點bpGetCurrentThreadId/bpCreateThread,shift+f9運行,中斷后,取消斷點,Alt+F9返回,單步執(zhí)行,看到一個calledi之類的。F7進(jìn)入,即到oep。OD不要關(guān)!打開import--選擇進(jìn)程--OEP輸入va--自動搜索IAT--獲取輸入表一顯示無效函數(shù)--CUT?。ǘ╇p線程的標(biāo)準(zhǔn)殼總體步驟:1、 要雙變單;2、 處理IAT,修改MagicJump;3、 尋找OEP;4、 修復(fù)1、雙變單,方法有三。方法一:PATCH代碼法下斷bpOpenMutexA,斷下后,ctrl+g到00401000,將空數(shù)據(jù)改為如下代碼:0040100060pushad004010019Cpushfd0040100268A0FD1200pushxxxx(注:此處的xxxx為斷下后mutexname前的數(shù)值。)0040100733C0xoreax,eax0040100950pusheax0040100A50pusheax0040100BE8E694A677callKERNEL32.CreateMutexA004010109Dpopfd0040101161popad00401012E98F9FA777jmpKERNEL32.OpenMutexA點右鍵選擇重建eip,f9運行,斷下后,取消斷點,ctrl+g到00401000,恢復(fù)修改。方法二,下斷點:bpOpenMutexA,SHIFT+F9,斷下后,ALT+F9返回,返回后,將返回代碼下面的第一個跳轉(zhuǎn)改為相反跳轉(zhuǎn),再次SHIFT+F9,斷下后,ALT+F9返回,再次將返回代碼下面的第一個跳轉(zhuǎn)改為相反跳轉(zhuǎn)。然后再一次SHIFT+F9,取消斷點,至此,同樣,雙進(jìn)程轉(zhuǎn)單進(jìn)程完畢!方法三、除了用雙變單的腳本外,還可以用一個工具ARMADETACH,將帶殼的程序拖入,記下子進(jìn)程的ID。2、處理IAT,修改MagicJump。用OD附加該子進(jìn)程,加載后,ALT+F9返回,修改前兩個字節(jié)為加殼程序載入時的前兩個字節(jié)。下斷點bpGetModuleHandleA,Shift+F9運行,一般是在堆棧窗口出現(xiàn)ASCII"kernel32.dll"和ASCII〃VirtualFree"后,再運行一次,出現(xiàn)"kernel32.dll",就是返回時機(jī),中斷后alt+f9返回,在KERNEL32.LoadLibraryA下面找到MagicJump!修改為jmp。再下斷點bpGetCurrentThreadId/bpCreateThread(或往下拉找到兩個salc,在其上面的jmp上下斷,Shift+F9,斷下!如果文件有校驗,則要撤消MagicJump處的修改!打開內(nèi)存鏡像,在00401000段下斷。運行,中斷后,刪除斷點,alt+f9返回),F(xiàn)8單步走,到第一個CALLECX之類的東西時,F(xiàn)7進(jìn)入。到oep。注:(對于有些OD有一個字符串溢出漏洞,盡量用一些修正些錯誤的OD,有些程序需要處理Anti,方法如下:下斷點heOutputDebugStringA斷下后,選中%s%之類的字符,在數(shù)據(jù)窗口跟隨,點右鍵一>二進(jìn)制一>使用00填充,中斷2次!都如上修改,刪除此斷點?。?、修復(fù)。(三)CopyMem-ll+Debug-Blocke保護(hù)方式1、 先找OEP,兩個斷點。(1)斷點bpWaitForDebugEvent,運行,中斷后看堆棧,在一行有“pDebugEvent”字樣的那一行右鍵點擊“數(shù)據(jù)窗口跟隨”,取消斷點。(2)bpWriteProcessMemory,運行,中斷后,在數(shù)據(jù)窗口(要地址顯示)發(fā)現(xiàn)oep。2、 patch代碼,解碼。方法:重新載入,bpWaitForDebugEvent,運行,中斷,取消斷點,alt+f9返回,CTRL+F搜索命令:oreax,0FFFFFFF8,找到后,先往上看,可以看到兩個CMP,一個是“cmpdwordptrss:[XXXX],0"在這里下硬件執(zhí)行斷點,Shift+F9運行,中斷后取消斷點。這時看信息窗口:SS[XXXXX]=00000000,如果這個值不為0的話,需要將其清0,如果為0就不用了。第二個CMP,cmpecx,dwordptrds:[XXXX],下面開始解碼。在這里要記下幾個地址:(1)cmpdwordptrss:[XXXX],0前的地址和[]內(nèi)的值。(2)第二個CMP中:]中的值。接著oreax,0FFFFFFF8處往下,可以找到一處為andeax,0FF的代碼,從這里開始Patch,代碼如下:incdwordptrds:[]//第一個CMP內(nèi)的值movdwordptrds:[XXXX+4],1//XXXX為第二個CMP[]內(nèi)的值jmpXXXX//第一個CMP前的地址修改好后,去掉所有斷點,向下找到第一個CMP下面的跳轉(zhuǎn)所跳到的地址,來到這個地址,下硬件執(zhí)行斷點,Shift+F9運行,此時代碼解壓完畢,可以脫殼。3、 脫殼。運行LordPE,將子進(jìn)程dump出來,這里的子進(jìn)程就是LordPE第2個進(jìn)程(有2個同名進(jìn)程)°Dump后用LordPE修改入口點為在第一步中查到的OEP。4、 修復(fù)輸入表、IAT的尋找脫殼后不要急著去修復(fù)輸入表,得先把RVA數(shù)據(jù)獲取,用OD載入Dump出來的程序,右鍵搜索二進(jìn)制字符串,輸入FF25,找到一個函數(shù),在數(shù)據(jù)窗口跟隨,在數(shù)據(jù)窗口向上找到全是0的地方,記下地址,再向下找到全是0的地方,記下地址。5、加載子程序。(1)找子程序pid的方法有二:方法一:用OD載入原程序(脫殼前的程序),下斷點:bpDebugActiveProcess,中斷后看堆棧,記下Processid后面的值(這個值不是每次都相同的)。OD不要關(guān)。第二種方法就是用工具ArmaDetach,將加殼程序拖入。記下子程序的pid和前兩個字節(jié)。(2)另開一個OD,附加Processid后面的值進(jìn)程或用工具ArmaDetach所記下的進(jìn)程id,附加后,ALT+F9返回程序,將前兩個字節(jié)改為原程序載入時的前兩個字節(jié)。6、下面的做法就和標(biāo)準(zhǔn)殼的一樣了,在附加的OD中:雙變單:方法有二。其一:patch法。其二修改跳轉(zhuǎn)法。方法一:下斷點BPOpenMutexA(雙變單),F(xiàn)9運行,斷下后,ctrl+g到00401000,將空數(shù)據(jù)改為如下代碼:0040100060pushad004010019Cpushfd00401002數(shù)值。)68A0FD1200pushxxxx(注:此處的xxxx為斷下后name前的0040100733C0xoreax,eax0040100950pusheax0040100A50pusheax0040100BE8E694A677callKERNEL32.CreateMutexA004010109Dpopfd0040101161popad00401012-E98F9FA777jmpKERNEL32.OpenMutexA點右鍵選擇重建eip,f9運行,斷下后,取消斷點,ctrl+g到00401000,恢復(fù)修改。方法二:下斷點BPOpenMutexA,SHIFT+F9運行,斷下后,ALT+F9返回,返回后,將返回代碼下面的第一個跳轉(zhuǎn)改為相反跳轉(zhuǎn),再次SHIFT+F9,斷下后,ALT+F9返回,再次將返回代碼下面的第一個跳轉(zhuǎn)改為相反跳轉(zhuǎn)。然后再一次SHIFT+F9,取消斷點,至此,同樣,雙進(jìn)程轉(zhuǎn)單進(jìn)程完畢!此法相對簡單,另外適用于00401000空數(shù)據(jù)不能修改的程序。(2)修改MagicJump。下斷BPGetModuleHandleA+5,運行,一般是在堆棧窗口出現(xiàn)ASCII"kernel32.dll"和ASCII"VirtualFree后,再運行一次,就是返回時機(jī),中斷后alt+f9返回,在KERNEL32.LoadLibraryA下面找到MagicJump!修改為jmp。清除所有斷點,再直接按F9運行,出現(xiàn)暫停。這時大功告成。(3)用Imprec1.6f選擇進(jìn)程附加的那個進(jìn)程,填入OEP地址,填第4步所記下的RAV,SIZE=1000,不要按自動搜索IAT,直接按獲取輸入表,再按顯示無效地址,剪掉修復(fù)抓取文件就OK了。(四)全保護(hù)脫殼脫殼方法1、 雙變單可以用以下方法,也可以用腳本,目的是雙變單。記下程序加載時的前兩個字節(jié)。運行腳本后,記下OEP的前兩個字節(jié),OEP地址和子進(jìn)程ID。2、 用OD附加子進(jìn)程,加載后,ALT+F9返回,修改前兩個字節(jié)為腳本記載的OEP的前兩個字節(jié)。3、 處理IATL輸入表方法:(1) 用工具ARMADETACH,將帶殼的程序拖入,記下子進(jìn)程的ID。(2) 另開一OD,附加該子進(jìn)程,加載后,ALT+F9返回,修改前兩個字節(jié)為加殼程序載入時的前兩個字節(jié)。(3) 修改MagicJump,CTRL+G,輸入GetModuleHandleA,在其下面的第一個跳轉(zhuǎn)下硬件執(zhí)行斷點,Shift+F9運行,一般是在堆棧窗口出現(xiàn)ASCII"kernel32.dll"和ASCII"VirtualFree后,再運行一次,就是返回時機(jī),中斷后alt+f9返回,在KERNEL32.LoadLibraryA下面找到MagicJump!修改
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車行業(yè)合同樣本:會員服務(wù)協(xié)議
- 移動基站租賃合同書范本
- 城市老舊小區(qū)消防系統(tǒng)改造項目合同
- 幼兒園臨時教師聘任合同
- 新版民間房產(chǎn)抵押權(quán)轉(zhuǎn)讓合同
- 腎性水腫課件
- 智能化煤礦培訓(xùn)課件下載
- 舊貨零售互聯(lián)網(wǎng)+創(chuàng)新實踐考核試卷
- 搪瓷器的創(chuàng)造思維與創(chuàng)意設(shè)計考核試卷
- 建筑施工現(xiàn)場安全監(jiān)測與預(yù)警考核試卷
- 部編版初中語文七至九年級語文教材各冊人文主題與語文要素匯總一覽表合集單元目標(biāo)能力點
- 增額終身壽險銷售邏輯
- 新蘇教版六年級下冊《科學(xué)》全一冊全部課件(共16課)
- 幼兒園食品安全教育培訓(xùn)ppt課件模板
- 《離騷》PPT課堂大賽一等獎
- 潔凈廠房監(jiān)理實施細(xì)則
- 初三九年級下冊部編人教版歷史考試必背資料(2020最新版)
- 觀賞樹木的園林特性課件
- 哈工大研究生課程-高等結(jié)構(gòu)動力學(xué)-第四章課件
- 當(dāng)代教育心理學(xué)(范圍)課件
- 2023年湖南工業(yè)職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試筆試題庫及答案解析
評論
0/150
提交評論