能力值:
( LV7,RANK:140 )
|
-
-
51 楼
这个主要是这么个用途,变量是必须直接转发的,否则中转dll的变量在一个地址,原始dll的变量在一个地址,运行期间肯定会出问题的。所以必须加上一个判断是否变量的函数。但是方法也许不是很好,现在的判断是要么这个地址不存在dll文件偏移,要么所在文件偏移具有执行权限。 然后其他直接转发的还有一些编译器直接生成的函数或变量,比如带有`和'符号的,虚函数表啥的
|
能力值:
( LV12,RANK:980 )
|
-
-
52 楼
yeyeshun
这个主要是这么个用途,变量是必须直接转发的,否则中转dll的变量在一个地址,原始dll的变量在一个地址,运行期间肯定会出问题的。所以必须加上一个判断是否变量的函数。但是方法也许不是很好,现在的判断是要 ...
将这个函数修改了一下,不知这样是否正确,请楼主指教: BOOL WINAPI CAheadLib::IsFunction(const PIMAGE_NT_HEADERS pInh, DWORD dwRva) //判断函数 { INT i; PIMAGE_SECTION_HEADER pIsh;
pIsh = (PIMAGE_SECTION_HEADER)((PBYTE)pInh + sizeof(IMAGE_NT_HEADERS));
if (pInh->OptionalHeader.FileAlignment == pInh->OptionalHeader.SectionAlignment) //判断文件块对齐与节对齐是否相同 {
for (i = 0; i < pInh->FileHeader.NumberOfSections; i++, pIsh++) { if (dwRva >= (pIsh->VirtualAddress)) { if (((pIsh)->VirtualAddress) + pIsh->Misc.VirtualSize > dwRva) { if ((pIsh->Characteristics & IMAGE_SCN_MEM_EXECUTE)) { return dwRva; } else { return 0; } } } } return 0; }else{ for (i = 0; i < pInh->FileHeader.NumberOfSections; i++, pIsh++) { if (dwRva >= (pIsh->VirtualAddress)) { if (((pIsh->VirtualAddress) + (pIsh->SizeOfRawData)) > dwRva) { if ((pIsh->Characteristics & IMAGE_SCN_MEM_EXECUTE)) { return dwRva - pIsh->VirtualAddress + pIsh->PointerToRawData; } else { return 0; } } } } return 0; } }
最后于 2018-3-4 10:49
被csjwaman编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
53 楼
直接转发,
最后于 2018-3-5 08:50
被eapple编辑
,原因:
|
能力值:
( LV12,RANK:980 )
|
-
-
54 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
55 楼
编译没有问题,直接转发, 是错误的,用这个文件调用的dll,你试试看
最后于 2018-3-5 10:15
被eapple编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
56 楼
csjwaman
我编译了一下,貌似没有问题呀
可能是IDE问题,用2017编译没问题,用VC6就不行。。
|
能力值:
( LV7,RANK:140 )
|
-
-
57 楼
csjwaman
yeyeshun
这个主要是这么个用途,变量是必须直接转发的,否则中转dll的变量在一个地址,原始dll的变量在一个地址,运行期间肯定会出问题的。所以必须加上 ...
加了这个判断之后是否对于加壳dll有效?基于什么原理?能不能把函数修改前后,分别对加壳dll生成的文件发来看一下,因为我对这方面的东西也不是特别清楚,如果对照生成结果的话,或许能更容易理解。
|
能力值:
( LV7,RANK:140 )
|
-
-
58 楼
eapple
可能是IDE问题,用2017编译没问题,用VC6就不行。。
涉及到编译器版本我就无能为力了。不过vc6确实太老了,很多东西都不一样的了。似乎std库和MFC库的一些实现上都有很大的改变。
|
能力值:
( LV12,RANK:980 )
|
-
-
59 楼
yeyeshun
涉及到编译器版本我就无能为力了。不过vc6确实太老了,很多东西都不一样的了。似乎std库和MFC库的一些实现上都有很大的改变。
加了壳一般对齐粒度会相同,区段中物理地址和数据长度会被清零,但内存地址和内存数据长度一般不能清零。
最后于 2018-3-5 15:21
被csjwaman编辑
,原因:
|
能力值:
( LV12,RANK:980 )
|
-
-
60 楼
yeyeshun
加了这个判断之后是否对于加壳dll有效?基于什么原理?能不能把函数修改前后,分别对加壳dll生成的文件发来看一下,因为我对这方面的东西也不是特别清楚,如果对照生成结果的话,或许能更容易理解。
我就是用VC6编译的。
|
能力值:
( LV7,RANK:140 )
|
-
-
61 楼
csjwaman
yeyeshun
涉及到编译器版本我就无能为力了。不过vc6确实太老了,很多东西都不一样的了。似乎std库和MFC库的一些实现上都有很大的改变。
加了壳 ...
看到了,效果非常牛逼。那么会不会对其他正常的东西产生影响?比如一些变量什么的
|
能力值:
( LV12,RANK:980 )
|
-
-
62 楼
yeyeshun
看到了,效果非常牛逼。那么会不会对其他正常的东西产生影响?比如一些变量什么的
对函数功能不会产生影响。如果原函数本身不能处理变量,那么这个函数也无法处理。
|
能力值:
( LV12,RANK:980 )
|
-
-
63 楼
完善了一下:
//if (pInh->OptionalHeader.FileAlignment == pInh->OptionalHeader.SectionAlignment) //判断文件块对齐与节对齐是否相同 if (pIsh->PointerToRawData == 0|| (pIsh)->SizeOfRawData == 0) //判断>PointerToRawData 和 SizeOfRawData 是否为0 这样可能兼容更多加了壳的DLL。
|
能力值:
( LV7,RANK:140 )
|
-
-
64 楼
csjwaman
完善了一下:
//if (pInh->OptionalHeader.FileAlignment == pInh->OptionalHeader.SectionAlignment) ...
好的,已经更新代码及exe文件,非常感谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
65 楼
感谢分享
|
能力值:
( LV2,RANK:10 )
|
-
-
66 楼
错误 LNK2001 无法解析的外部符号 _prevFunc 请问编译时出现这个错误是什么问题
|
能力值:
( LV7,RANK:140 )
|
-
-
67 楼
shichun
错误 LNK2001 无法解析的外部符号 _prevFunc 请问编译时出现这个错误是什么问题
是x64的是吗?需要把与cpp一起生成的一个obj文件添加到你的工程里一起编译
|
能力值:
( LV2,RANK:10 )
|
-
-
68 楼
好像问题还挺多,,, 我这个小白就不下载了
|
能力值:
( LV2,RANK:10 )
|
-
-
69 楼
赞一个,支持X64挺不错的
|
能力值:
( LV6,RANK:90 )
|
-
-
70 楼
收藏
|
能力值:
( LV12,RANK:980 )
|
-
-
71 楼
yeyeshun
是x64的是吗?需要把与cpp一起生成的一个obj文件添加到你的工程里一起编译
x64编译时貌似多出一个类,无法正常编译。请楼主再看看!
|
能力值:
( LV7,RANK:140 )
|
-
-
72 楼
csjwaman
x64编译时貌似多出一个类,无法正常编译。请楼主再看看!
不好意思,论坛的登陆机制有问题,显示登陆状态其实没有登陆,我是今天发现应该收到短消息的然而没提示于是点进去看,才发现一直是未登录状态。 这个我用代码暂时无法精确判断出来,手动加入一个空类的定义吧: class QDir { };
|
能力值:
( LV12,RANK:980 )
|
-
-
73 楼
yeyeshun
不好意思,论坛的登陆机制有问题,显示登陆状态其实没有登陆,我是今天发现应该收到短消息的然而没提示于是点进去看,才发现一直是未登录状态。
这个我用代码暂时无法精确判断出来,手动加入一个空类的定义吧:
...
加了空类后,可以编译成功。但生成的DLL输出函数名中有一个与原DLL不一样 。不知什么原因原函数名为:?getLogDirectory@logging@ecg@@YA?AVQDir@@XZ
新生成的DLL函数为:?getLogDirectory@logging@ecg@@YA?AVQDir@12@XZ
最后于 2018-7-15 23:29
被csjwaman编辑
,原因:
|
能力值:
( LV7,RANK:140 )
|
-
-
74 楼
加你Q了,通过一下。 我的生成没这个问题,VS2013的
|
能力值:
( LV2,RANK:10 )
|
-
-
75 楼
好东西,一定要支持
|
|
|