最近也在学着修改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这个函数了。到此,文件的这处也就免杀了。一点小手记,分享给大家,见笑了。
C++源代码免杀之函数的动态调用
精选 转载上一篇:c++ 对注册表启动项写入
下一篇:漂亮的select
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)
本系列深入分析编译器对于C++虚函数的底层实现,最后分析C++在多态的情况下的性能是否有受影响,多态究竟有多大的性能损失。
虚函数 虚函数表 C++对象模型 C++成员函数 C++性能分析 -
C加载器免杀尝试(免杀)
干货|免杀-C加载器免杀尝试哆啦安全|知识星球上线啦(优惠券活动即将到期)!!!微信公众号
网络安全 微信公众号 加载器 -
[ShellCode] 动态解密 ShellCode,免杀
背景 今天在复习《加密与解密》时,在软件保护这一章中有一个代码与数据结合
#include 代码段 i++ -
c/c++/MFC 调用 js 函数代码
1 首先 .h 文件中定义: 2 3 CComPtr<IHTMLWindow2> m_sphtmlWnd; 4 CComPtr<IHTMLDocument2> m_spHtmlDoc; 5 6 7 8 //方法1 可以取得返回值。。。。。 9 10 //调用方法示例:stringArray为传入参数列表,getSum为js函
mysql javascript null delete function parameters -
免杀
测试
职场 测试 休闲 -
人脸检测的C/C++源代码
...
#endif #ifdef #define git #include