程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 源碼免殺筆記

源碼免殺筆記

編輯:C++入門知識

最近沒什麼心情寫博客,似乎停止不前了,唉,越來越懶了,不知道怎麼回事,整理以前的筆記,這個免殺的,不知道內容過時了沒。

各個殺毒軟件查殺特點不一樣,大致總結以下,API函數,字符串,代碼段,資源段。免殺方法大致有如下幾種手段,動態函數調用,延遲加載DLL,合並區段,字符串隱藏,刪版權換版權,花指令,反調試等等細節,以上幾種方法基本上過掉大部分殺軟,當然有能力也可以自己改變程序的代碼實現原來的功能。

1.動態函數調用

有兩個函數是不能調用的,GetProcAddress,LoadLibrary。

殺毒軟件如果查殺到API函數上,可以用動態函數調用解決。

typedef int (WINAPI *MessageBoxAT)

(

HWND hWnd,

LPCSTR lpText,

LPCSTR lpCaption,

UINT uType

);

MessageBoxAT pMessageBoxA= (MessageBoxAT)GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA");

2.字符串隱藏

利用數組來隱藏,字符串處理相對比較簡單,隱藏的辦法有很多,舉出一種吧。

char name[]={'a','b','c','\0'};

name替換掉原來的字符串.

3.延遲加載DLL

源代碼上加上,或者寫成頭文件加上也可以.

#pragma comment(linker, "/OPT:NOWIN98")

#pragma comment(lib, "DELAYIMP.LIB")

#pragma comment(linker, "/DELAYLOAD:WININET.dll")

#pragma comment(linker, "/DELAYLOAD:WS2_32.dll")

#pragma comment(linker, "/DELAYLOAD:PSAPI.DLL")

#pragma comment(linker, "/DELAYLOAD:GDI32.dll")

#pragma comment(linker, "/DELAYLOAD:ADVAPI32.dll")

#pragma comment(linker, "/DELAYLOAD:SHELL32.dll")

#pragma comment(linker, "/DELAYLOAD:WINMM.dll")

#pragma comment(linker, "/DELAYLOAD:USER32.dll")

#pragma comment(linker, "/DELAYLOAD:WTSAPI32.dll")

#pragma comment(linker, "/DELAYLOAD:AVICAP32.dll")

#pragma comment(linker, "/DELAYLOAD:SHLWAPI.dll")

#pragma comment(linker, "/DELAYLOAD:MSVFW32.dll")

#pragma comment(linker, "/DELAY:nobind")

#pragma comment(linker, "/DELAY:unload")

4.合並區段

把其他區段合並到一個區段裡,以前這個方法還管用,可以試試,但最好不要加。

#pragma comment(linker, "/MERGE:.rdata=.data")//把rdata區段合並到data區段裡

#pragma comment(linker, "/MERGE:.text=.data")//把text區段合並到data區段裡

#pragma comment(linker, "/MERGE:.reloc=.data")//把reloc區段合並到data區段裡

4 .刪版權資源

有時對版權也查殺,可以換版權或者刪除。

5.花指令

如果殺在代碼段上可以加NOP來打亂程序的位置,一般不要加太多,有時也會查殺NOP。

__asm nop;

__asm nop;

__asm nop;

5.反調試

HKEY ck;

char strreg[] = {'S','O','F','T','W','A','R','E','\\','O','D','B','C','\0'};

if(ERROR_SUCCESS!=RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)strreg,0,KEY_ALL_ACCESS,&ck))

{

return 0;

}

6.代碼換位
定位到特征碼後,看代碼中的程序是否可以代碼換位。


注意的細節:
定位360BD引擎的時候,找到入口點,填充入口點以上的代碼,查殺,如果免殺,就說明在這一區段.

map文件定位:
用OD找代碼的時候,有時上下沒有參考,可以用map文件來幫助,在VC6.0中設置map文件,然後拿出來,用OD裡面的一個插件loadmap,載入map,重新運行,就可以了.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved