源码免杀笔记

来源:互联网 发布:这个驸马有淘宝(重生) 编辑:程序博客网 时间:2024/04/30 15:27

各个杀毒软件查杀特点不一样,大致总结以下,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,重新运行,就可以了.