C++原始碼免殺之函式的動態呼叫
最近也在學著修改Gh0st遠控的原始碼,源程式碼免殺起來還是方便、簡單、有效和簡單點。針對於輸入輸出表盯的比較緊的防毒軟體,最有效的還是進行函式動態呼叫。也就是說找到函式的原定義,包括值型別和引數等等,再在呼叫該函式的地方重新定義這個函式,其實也只是改下函式名而已,下面舉個例子:
CreateRemoteThread 作用是建立遠執行緒,假設防毒軟體現在就殺在這個函式上,我們就這樣處理,首先在程式碼中右鍵點選CreateRemoteThread函式-->轉到定義,找到函式的原型:
函式原型如下:
WINBASEAPI
__out
HANDLE
WINAPI
CreateRemoteThread(
__in HANDLE hProcess,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in_opt LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out_opt LPDWORD lpThreadId
);
改後的函式模型如下:
typedef HANDLE (WINAPI *CreateRemoteThreadxx)
(
__in HANDLE hProcess,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in_opt LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out_opt LPDWORD lpThreadId
);
CreateRemoteThreadxx yyCreateRemoteThread= (CreateRemoteThreadxx)GetProcAddress(LoadLibrary("kernel32.dll"),"CreateRemoteThread");
補充:有些函式原型最後面分別帶得有A和W的,如果你的編譯環境是ANSI環境就選擇帶A的那部分,如果你的環境是Unicode環境,那就選擇帶W的那部分。例如:GetUserName的原型有兩種定義:GetUserNameA和GetUserNameW,視實際情況選擇相應的函式原型進行修改就好。
修改後呼叫的函式名就由CreateRemoteThread變為了yyCreateRemoteThread,紅色部分為自定義部分,隨便你改稱什麼,但是要注意前後一致。藍色的部分再可以用字串連線法進行分離後連線,這樣處理之後,防毒軟體就找不到CreateRemoteThread這個函式了。到此,檔案的這處也就免殺了。一點小手記,分享給大家,見笑了。
後記:看了很多教程,都是說怎麼改,沒說為什麼要這麼改,也沒說還可以怎麼改,更沒說改的限度是什麼。一看教程裡先在函式後面加個L,再在定義後的新的函式前面加個p,接著很多看了教程的人都改成那兩個,做教程的人還在教程裡嚇唬人說“別的都不要動,這兩個地方改成這樣就可以了”,有時候有些事情並不難,並不可怕,難和可怕大多來自於別人的聳人聽聞和對未知事物的懼怕。最後希望大家都能夠放開手腳,幹番大事業!搞了個垃圾站賺點外塊,希望大家能支援下。
相關文章
- java呼叫c++動態庫之jni呼叫JavaC++
- 在PowerBuilder中動態呼叫函式UI函式
- VB動態呼叫外部函式的方法 (轉)函式
- C++(STL原始碼):37---仿函式(函式物件)原始碼剖析C++原始碼函式物件
- 動態呼叫python類和函式Python函式
- C++中函式呼叫的用法C++函式
- JNI呼叫c動態連結庫函式程式碼實踐函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- C++靜態函式C++函式
- java動態呼叫c++庫JavaC++
- C++如何解析函式呼叫C++函式
- 讀 zepto 原始碼之工具函式原始碼函式
- [C++]顯示呼叫建構函式和解構函式C++函式
- C++箴言:避免解構函式呼叫虛擬函式C++箴言函式
- 【C++】【原始碼解讀】std::is_same函式原始碼解讀C++原始碼函式
- C++程式中不同函式呼叫方式的彙編碼比較C++函式
- 建構函式之間的呼叫函式
- VS(visual studio) C++ 封裝dll,以及其隱式呼叫與顯式呼叫(靜態動態)C++封裝
- 父類與子類之間靜態函式的呼叫以及函式引數的傳遞函式
- C++入門教程(11):呼叫函式C++函式
- ClickHouse原始碼筆記3:函式呼叫的向量化實現原始碼筆記函式
- C++:建構函式的分類和呼叫C++函式
- C++呼叫C#的動態庫dllC++C#
- Dubbo原始碼之動態編譯原始碼編譯
- C++之memset函式C++函式
- Promise 原始碼:then 鏈式呼叫Promise原始碼
- 面試驅動技術之 - isa && 元類 && 函式呼叫面試函式
- 面試驅動技術之 – isa && 元類 && 函式呼叫面試函式
- C++函式呼叫棧從何而來C++函式
- perl根據函式名動態呼叫函式
- 免殺!第三課 免殺前奏+特徵碼定位…特徵
- 應用呼叫驅動的ioctl函式函式
- 利用動態建立自動化介面實現VB的函式指標呼叫 (轉)函式指標
- redux原始碼分析之四:compose函式Redux原始碼函式
- C++之函式過載C++函式
- C++ 逆向之 move 函式C++函式
- C++八股之函式過載與重寫-靜態多型與動態多型C++函式多型
- C++原始碼遊戲程式設計---WinMain()函式集(轉)C++原始碼遊戲程式設計AI函式