-
-
[原创]内存加载Dll(支持32位,支持win32 dll,mfc dll,其他语言生成的dll,不支持加密压缩)
-
发表于:
2018-8-1 12:23
9412
-
[原创]内存加载Dll(支持32位,支持win32 dll,mfc dll,其他语言生成的dll,不支持加密压缩)
几年前写过一份内存加载PE文件的项目,支持exe和dll,但不支持mfc dll
去年整理了一下重新写了代码,省略了一些功能,只用来加载dll
编译环境:
支持:
- 标准Win32 Dll
- MFC Dll
- 易语言Dll
- 其他Dll(这个没怎么测试)
不支持:
File: include/ldr.h
/* __ldr_header__ */
#ifndef __LDR_H__
#define __LDR_H__
#ifdef _DEBUG
#pragma comment(lib, "image.d.lib")
#else
#pragma comment(lib, "image.lib")
#endif
#ifdef _WIN32
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <Windows.h>
#include <WinNT.h>
#else
#error Current platform is not supported
#endif
typedef PVOID (__stdcall *malloc_t) (ULONG);
typedef VOID (__stdcall *free_t) (PVOID);
PVOID LdrLoadImage (PVOID Buffer, DWORD Size, malloc_t m = NULL, free_t f = NULL);
PVOID LdrGetProcAddress (PVOID Addr, LPCSTR Name);
VOID LdrFreeImage (PVOID Addr);
#endif
Dll处理接口
PVOID LdrLoadImage (PVOID Buffer, DWORD Size, malloc_t m = NULL, free_t f = NULL);
PVOID LdrGetProcAddress (PVOID Addr, LPCSTR Name);
VOID LdrFreeImage (PVOID Addr);
之前发过一个帖子,用的易语言封装了编译的lib测试的内存加载Dll
项目源码
顺便说一下,对MFC Dll的支持主要是处理了GetModuleHandle相关的API,做了一层中间层
File: image/traps/GetModuleHandleW.asm
.386
.Model flat, StdCall
Option CaseMap: none
Include trap.inc
.Const
.Data?
.Data
.Code
GetModuleHandleWTrap Proc Uses Ebx Ecx Edx Esi Edi, lpModuleName: Ptr WCHAR
; Mov Esi, 0x********
Mov_Esi_Information
; Pointer to ImageInformation
Assume Esi: Ptr ImageInformation
.If lpModuleName == 0
Push 0
Call [Esi].traps[SizeOf ImageTrap * TRAP_ID_GET_MODULE_HANDLE_W].procedure
.Else
Lea Ebx, [Esi].ModuleNameW
Push Ebx
Push lpModuleName
Call [Esi].apis.lstrcmpiW
Cmp Eax, 0
Je __COPY
Lea Ebx, [Esi].ModuleBaseNameW
Push Ebx
Push lpModuleName
Call [Esi].apis.lstrcmpiW
Cmp Eax, 0
Jne __CALL
__COPY:
Mov Eax, [Esi].imagebase
Jmp @F
__CALL:
Push lpModuleName
Call [Esi].traps[SizeOf ImageTrap * TRAP_ID_GET_MODULE_HANDLE_W].procedure
@@:
.EndIf
Return Eax
GetModuleHandleWTrap EndP
End
肯定有人觉得为什么不支持x64,主要还是自己平时没那么时间弄,要上班,之前一直想迭代一下支持压缩加密啥的,也一直搁着,哎~
[课程]Linux pwn 探索篇!
最后于 2019-1-16 16:12
被KamiBoy编辑
,原因: 源代码地址变更