能力值:
( LV2,RANK:10 )
|
-
-
26 楼
好复杂的dll加载..l.
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
mark一下 ,!
|
能力值:
( LV4,RANK:50 )
|
-
-
28 楼
不错的分享,顺便提些问题
1. 关于计算PE文件在内存中的大小
int CMemLoadDLL::CalcTotalImageSize()
这个函数计算大小过于复杂,应该可以直接使用 pNTHeader->OptionalHeader.SizeOfImage
2. 将PE从文件复制到内存
void CMemLoadDLL::CopyDLLDatas(void* pDest, void* pSrc)
int HeaderSize = pNTHeader->OptionalHeader.SizeOfHeaders;
int SectionSize = pNTHeader->FileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER);
int MoveSize = HeaderSize + SectionSize;
//复制头和段信息
memmove(pDest, pSrc, MoveSize);
其实 pNTHeader->OptionalHeader.SizeOfHeaders 大小已经包含section header的大小,不知道为什么要重复计算。
3. 重定位信息的处理
if( (DWORD)(pLocData[i] & 0xF000) == 0x00003000) //这是一个需要修正的地址
只需要处理类型是3的relocation?
4. 输出节的处理
BOOL CMemLoadDLL::FillRavAddress(void *pImageBase)
DLL的加载是件很复杂的事,这个代码里没有看到如何处理 “绑定输入”?还有“ForwarderChain ”?的情况。
5. 输出的情况和上面类似,也有forwarder的情况。
FARPROC CMemLoadDll::MemGetProcAddress(LPCSTR lpProcName)
|
能力值:
( LV4,RANK:50 )
|
-
-
29 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
mark 一下加密dll内存加载。感谢楼主
|
能力值:
( LV3,RANK:30 )
|
-
-
31 楼
很详细,但强度的确不行的
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
矛和盾永远存在。世上并没有绝对的安全,包括此例。
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
mark 学习
|
能力值:
( LV8,RANK:130 )
|
-
-
34 楼
顶,m学习学习学习
|
能力值:
( LV4,RANK:40 )
|
-
-
35 楼
好文章,好文章,怎么能不顶呢,什么想法都有,
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
https://github.com/fancycode/MemoryModule/tarball/v0_0_3
这个老外在2004年就开始了....,2012年最新的v0.03版本支持x64位的DLL
|
能力值:
( LV4,RANK:50 )
|
-
-
37 楼
最后一个问题,又有一个疑问,
5. 输出的情况和上面类似,也有forwarder的情况。
FARPROC CMemLoadDll::MemGetProcAddress(LPCSTR lpProcName)
能够直接使用GetProcAddress(),传入module的加载地址来获得指定函数嘛?
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
|
能力值:
( LV9,RANK:250 )
|
-
-
39 楼
MemoryModule是目前我一直在用的,比较稳定和可靠,尚未发现不兼容的问题,推荐大家使用此库。
|
能力值:
( LV2,RANK:10 )
|
-
-
40 楼
mark一下 学习内存加载dll
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
写的很不错,很清晰,最好将源码以附件的方式提供,这样排版更清楚一些。
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
写的很精彩,学学
|
能力值:
( LV9,RANK:250 )
|
-
-
43 楼
此贴为其他网站转自我的原创文章,请留意签名和邮箱,此文章在几年前已经在程序员杂志由本人发表,先贴出来大家一起分享思路,另外比较完善的内存加载DLL的库请到:
https://github.com/fancycode/MemoryModule/tarball/v0_0_3
下载MemoryModule.c,兼容性最好。
|
能力值:
( LV3,RANK:20 )
|
-
-
44 楼
为什么注入游戏的程序再执行上面的内存加载的时候会出错,其实也不是出错,就是createthread无法创建线程,创建线程之后线程函数不运行,请问这是怎么会事儿呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
有必要吗.导入表动态一下,virtualalloc,固定基止,就是一段内存而已,多麻烦这样.
|
能力值:
( LV4,RANK:50 )
|
-
-
46 楼
给个实例,看的明白一些。。谢谢了。。
|
能力值:
( LV2,RANK:10 )
|
-
-
47 楼
好深奥。
|
能力值:
( LV4,RANK:50 )
|
-
-
48 楼
mark一个,估计很快会用到
|
能力值:
( LV2,RANK:10 )
|
-
-
49 楼
mark一下,留为备用
|
能力值:
( LV2,RANK:15 )
|
-
-
50 楼
|
|
|