能力值:
( 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 楼
217K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3j5h3&6U0P5h3y4G2k6r3g2Q4x3V1k6y4k6h3#2G2M7Y4W2y4L8$3c8#2L8r3g2Q4x3V1k6@1j5i4u0T1j5h3I4D9i4K6u0r3N6U0m8Q4y4h3j5H3i4K6g2X3x3H3`.`.
这个老外在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的库请到:
dacK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3j5h3&6U0P5h3y4G2k6r3g2Q4x3V1k6y4k6h3#2G2M7Y4W2y4L8$3c8#2L8r3g2Q4x3V1k6@1j5i4u0T1j5h3I4D9i4K6u0r3N6U0m8Q4y4h3j5H3i4K6g2X3x3H3`.`.
下载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 楼
|
|
|