說說免殺

免殺與被殺一直是不滅的話題,隨便說說我的免殺方法

網上和飯客的其他帖子已經說了很多了,我就不多說什麼廢話了。

在此說一點,我個人傾向於無損免殺,像那種直接NOP、00填充或者加一減一的大部分都是有損免殺,也許當時管用,換一個操作系統可能就不行了。

1.最常用的就是通用條轉法了,不多說。

2.其次就是交換上下句,也不多說。

3.仔細琢磨特徵碼的附近語句,看看有什麼是多餘的,NOP掉,然後移動特徵指令幾個字節。

4.加花,配合跳轉法,跳走之後來幾個花指令再跳回來,對於高啓發是有一定效果的。

5.特徵是字符的可以修改大小寫,或者移動到其他位置,然後修改調用原來字符的指令爲新的字符的地址。還是殺的花就異或加密,異或加密的代碼最後貼出。

6.最後就是自己發揮了,玩過編程的人做這些都很容易,一看就懂,數據的傳遞、堆棧、函數的調用等等隨便修改,保持功能不變就可以了。

7.有一個免殺的誤區大家要注意,在EXE中JMP=PUSH + RETN這樣是對的,但是在DLL中就不可以了,否則還要重定位幹什麼,在DLL中變相的JMP就是【自定位】然後跳到【相對偏移】的xxx地址就可以了

代碼段的免殺就是這些,至少是我常用的。下面來說說其他的數據免殺。

輸入表免殺:

1.移動名稱字符,修改指針。

2.與相鄰的函數調換指針,然後在C32中調換名稱字符。

3.動態填充函數地址,需要彙編基礎了,代碼我會在最後貼出來,處理之後用LOADPE刪除該函數在輸入表裏的指針信息就可以了。

輸出表:

1.移動函數名稱字符並修改指針。

2.移動下輸出函數的入口代碼,別忘了加幾個小花,然後異或加密輸出表函數的名稱字符,代碼我會在最後貼出來。

附加數據:【配置信息】

還是異或加密,可以在文件入口解密,也可以用OD跟蹤,在使用配置信息之前解密,這樣最好。

其他的還沒想起來,不知不覺都天亮了,呵呵,總之免殺中是指令代碼的就跳轉,加花,變異。是數據的就加密,要注意輸入表字符是不能加密的。

下面就說說針對殺軟的免殺:

卡巴:免殺到最後病毒名開頭是HEUR的就應該是高啓發了,加個簽名就應該過了,不過的話帶着簽名繼續定位。
卡巴主動:不要帶SYS驅動,儘量不要自刪除,不要注入進程等危險操作,應該就可以過了。

瑞星:特徵或特徵附近最多的就是TEST了,改AND就可以,字符修改大小寫,注意不是所有字符都可以改大小寫的。
瑞星內存:沒啥說的,MYCCL內存定位,大部分是字符。
瑞星主動:廢物一個,還是基於特徵碼的,用OD定位,是字符。

金山:主要殺鴿子的配置信息,在PE頭的128字節處寫90即可。遇到追殺的就是你添加新的區段的問題了,還有就是花指令不夠強。

NOD32:說2種方法,加殼改殼,破壞輸入表指針。

就說這幾個,江民除了主動沒啥特點,過江民的主動改一下釋放路徑即可,就不多說了,其他的殺軟也沒啥好說的,用我上面說的方法就可以。下面貼出來2個上面提到的代碼。

1.異或加密代碼
D01    pushad          寄存器入棧,在LordPE設置爲新入口點
D02    call D03        調用下一行代碼的VA,在OD中也可採用二進制編輯,輸入E8 00000000
D03    pop ebx         出棧,ebx的值就是這一行代碼的VA,也就是D03
D04    sub ebx,A1      A1是這樣計算的,加密點起始的VA減去上面的D03,ebx的值就是加密點起始的VA
D05    xor ecx,ecx     清空ecx爲下面循環解密xor的字節做準備
D06    mov ax,5D62     傳5D62給ax做初始密匙用,可以修改的
D07    xor word ptr ds:[ebx+ecx*2],ax   對ebx+ecx*2處進行雙字節解密
D08    inc ecx         ecx加1,加密了多少次
D10    cmp ecx,A2      此處的A2就是加密的代碼的總長度除二,計算公式是:(最終VA-起始VA+1)/2 (十六進制)
D11    jl short D07    沒有解密完就跳,繼續解密
D12    popad           寄存器出棧,如果還要加密下一段,此處從D04開始繼續。
D13    jmp到原入口點
加密的二進制代碼如下:
60 E8 00 00 00 00 5B 81 EB 00 20 00 00 33 C9 66 B8 7D 4A 66 31 04 4B 41 81 F9 11 11 00 00 7C F3 61

2.隱藏輸入表代碼
004B702F    60              PUSHAD
004B7030    E8 00000000     CALL 08.004B7035
004B7035    5B              POP EBX //程序自定位
004B7036    8BEB            MOV EBP,EBX
004B7038    81C3 9F110000   ADD EBX,119F
004B703E    8BF3            MOV ESI,EBX //計算出LoadLibraryA的地址放到ESI中
004B7040    8BDD            MOV EBX,EBP
004B7042    81C3 1F100000   ADD EBX,101F
004B7048    8BFB            MOV EDI,EBX //計算出GetProAddress的地址放到EDI中
004B704A    8BDD            MOV EBX,EBP
004B704C    81C3 232B0000   ADD EBX,2B23
004B7052    53              PUSH EBX
004B7053    FF16            CALL ESI //調用LoadLibraryA
004B7055    50              PUSH EAX //保存DLL句柄,多個相同庫裏的函數就不必再調用LoadLibraryA了
004B7056    8BDD            MOV EBX,EBP
004B7058    81C3 09330000   ADD EBX,3309
004B705E    53              PUSH EBX
004B705F    50              PUSH EAX
004B7060    FF17            CALL EDI //調用GetProAddress
004B7062    A3 04864B00     MOV DWORD PTR DS:[4B8604],EAX //填充函數地址
004B7067    58              POP EAX //取出DLL句柄到EAX
004B7068    61              POPAD

來自:http://hi.baidu.com/daiqingfeng1/blog/item/57c8be58ca44da202934f03c.html

發佈了3 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章