C++免杀
假設(shè)我們的特征碼定位在MessageBoxA函數(shù)的地址(只是舉個(gè)例子,一般這個(gè)函數(shù)不會(huì)被殺,其他函數(shù)也類似方法)那么我們到源碼里面發(fā)現(xiàn),我們在PrintMsg函數(shù)中調(diào)用了這個(gè)API函數(shù),那么我們就要對他進(jìn)行處理。對于輸入表被查殺我們一般的處理方法是修改函數(shù)的調(diào)用方式,比如采用dll動(dòng)態(tài)調(diào)用,通過上圖,我們知道我們是以非unicode方式編譯的MessageBox,他對應(yīng)的非Unicode的函數(shù)為MessageBoxA,同時(shí)我們也得到這個(gè)MessageBoxA函數(shù)在UER32.dll文件中。那么我們修改MessageBox的調(diào)用方式為dll的動(dòng)態(tài)調(diào)用,其代碼修改成:
typedef int (WINAPI *MessageBoxAT)
(
??HWND hWnd,
??LPCSTR lpText,
??LPCSTR lpCaption,
??UINT uType
);
void PrintMsg()
{
??char StrMsg[]="FgneL!olleH";
??MessageBoxAT pMessageBoxA= (MessageBoxAT)GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA");
??pMessageBoxA(NULL,strrev(StrMsg),NULL,MB_OK);
}
這樣以后我們就修改了輸入表中調(diào)用API函數(shù)的名稱了。其他API函數(shù)也可以類似的修改調(diào)用方式。?
typedef int (WINAPI *MessageBoxAT)
(
??HWND hWnd,
??LPCSTR lpText,
??LPCSTR lpCaption,
??UINT uType
);
void PrintMsg()
{
??char StrMsg[]="FgneL!olleH";
??MessageBoxAT pMessageBoxA= (MessageBoxAT)GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA");
??pMessageBoxA(NULL,strrev(StrMsg),NULL,MB_OK);
}
這樣以后我們就修改了輸入表中調(diào)用API函數(shù)的名稱了。其他API函數(shù)也可以類似的修改調(diào)用方式。?
轉(zhuǎn)載于:https://www.cnblogs.com/94cool/archive/2012/10/31/2747403.html
總結(jié)
- 上一篇: Delphi中取得和设置硬盘上文件的创建
- 下一篇: win电脑开机密码怎么改 Win电脑开机