2

[下载] AheadLib修改 支持x64支持类/命名空间

yeyeshun 2018-1-31 17:26 3661
本主题帖已收到 2 次赞赏,累计¥20.00
最新回复 (73)
yeyeshun 2018-2-28 10:26
51
这个主要是这么个用途,变量是必须直接转发的,否则中转dll的变量在一个地址,原始dll的变量在一个地址,运行期间肯定会出问题的。所以必须加上一个判断是否变量的函数。但是方法也许不是很好,现在的判断是要么这个地址不存在dll文件偏移,要么所在文件偏移具有执行权限。
然后其他直接转发的还有一些编译器直接生成的函数或变量,比如带有`和'符号的,虚函数表啥的
csjwaman 2018-3-4 09:17
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编辑 ,原因:
eapple 2018-3-5 08:38
53
直接转发,
最后于 2018-3-5 08:50 被eapple编辑 ,原因:
上传的附件:
csjwaman 2018-3-5 10:04
54
我编译了一下,貌似没有问题呀
上传的附件:
eapple 2018-3-5 10:15
55
编译没有问题,直接转发, 是错误的,用这个文件调用的dll,你试试看
最后于 2018-3-5 10:15 被eapple编辑 ,原因:
上传的附件:
eapple 2018-3-5 10:26
56
csjwaman 我编译了一下,貌似没有问题呀
可能是IDE问题,用2017编译没问题,用VC6就不行。。
yeyeshun 2018-3-5 11:22
57
csjwaman yeyeshun 这个主要是这么个用途,变量是必须直接转发的,否则中转dll的变量在一个地址,原始dll的变量在一个地址,运行期间肯定会出问题的。所以必须加上 ...
加了这个判断之后是否对于加壳dll有效?基于什么原理?能不能把函数修改前后,分别对加壳dll生成的文件发来看一下,因为我对这方面的东西也不是特别清楚,如果对照生成结果的话,或许能更容易理解。
yeyeshun 2018-3-5 11:25
58
eapple 可能是IDE问题,用2017编译没问题,用VC6就不行。。
涉及到编译器版本我就无能为力了。不过vc6确实太老了,很多东西都不一样的了。似乎std库和MFC库的一些实现上都有很大的改变。
csjwaman 2018-3-5 15:16
59
yeyeshun 涉及到编译器版本我就无能为力了。不过vc6确实太老了,很多东西都不一样的了。似乎std库和MFC库的一些实现上都有很大的改变。
加了壳一般对齐粒度会相同,区段中物理地址和数据长度会被清零,但内存地址和内存数据长度一般不能清零。
最后于 2018-3-5 15:21 被csjwaman编辑 ,原因:
上传的附件:
csjwaman 2018-3-5 15:23
60
yeyeshun 加了这个判断之后是否对于加壳dll有效?基于什么原理?能不能把函数修改前后,分别对加壳dll生成的文件发来看一下,因为我对这方面的东西也不是特别清楚,如果对照生成结果的话,或许能更容易理解。
我就是用VC6编译的。
yeyeshun 2018-3-5 18:02
61
csjwaman yeyeshun 涉及到编译器版本我就无能为力了。不过vc6确实太老了,很多东西都不一样的了。似乎std库和MFC库的一些实现上都有很大的改变。 加了壳 ...
看到了,效果非常牛逼。那么会不会对其他正常的东西产生影响?比如一些变量什么的
csjwaman 2018-3-5 18:39
62
yeyeshun 看到了,效果非常牛逼。那么会不会对其他正常的东西产生影响?比如一些变量什么的
对函数功能不会产生影响。如果原函数本身不能处理变量,那么这个函数也无法处理。
csjwaman 2018-3-6 09:53
63
完善了一下:

       //if  (pInh->OptionalHeader.FileAlignment  ==  pInh->OptionalHeader.SectionAlignment)      //判断文件块对齐与节对齐是否相同
       if  (pIsh->PointerToRawData  ==  0||  (pIsh)->SizeOfRawData  ==  0)      //判断>PointerToRawData  和  SizeOfRawData  是否为0
这样可能兼容更多加了壳的DLL。
yeyeshun 2018-3-6 10:40
64
csjwaman 完善了一下: //if (pInh->OptionalHeader.FileAlignment == pInh->OptionalHeader.SectionAlignment) ...
好的,已经更新代码及exe文件,非常感谢!
shichun 2018-3-7 10:39
65
感谢分享
shichun 2018-3-7 11:22
66
错误        LNK2001        无法解析的外部符号  _prevFunc        请问编译时出现这个错误是什么问题
yeyeshun 2018-3-7 11:45
67
shichun 错误 LNK2001 无法解析的外部符号 _prevFunc 请问编译时出现这个错误是什么问题
是x64的是吗?需要把与cpp一起生成的一个obj文件添加到你的工程里一起编译
taizhong 2018-3-9 22:29
68
好像问题还挺多,,,
我这个小白就不下载了

实都 2018-3-12 15:17
69
赞一个,支持X64挺不错的
yber 2018-6-12 06:20
70
收藏
csjwaman 2018-6-13 21:29
71
yeyeshun 是x64的是吗?需要把与cpp一起生成的一个obj文件添加到你的工程里一起编译
x64编译时貌似多出一个类,无法正常编译。请楼主再看看!
上传的附件:
yeyeshun 2018-6-29 16:38
72
csjwaman x64编译时貌似多出一个类,无法正常编译。请楼主再看看!
不好意思,论坛的登陆机制有问题,显示登陆状态其实没有登陆,我是今天发现应该收到短消息的然而没提示于是点进去看,才发现一直是未登录状态。
这个我用代码暂时无法精确判断出来,手动加入一个空类的定义吧:
class QDir
{

};
csjwaman 2018-7-15 22:28
73
yeyeshun 不好意思,论坛的登陆机制有问题,显示登陆状态其实没有登陆,我是今天发现应该收到短消息的然而没提示于是点进去看,才发现一直是未登录状态。 这个我用代码暂时无法精确判断出来,手动加入一个空类的定义吧: ...
加了空类后,可以编译成功。但生成的DLL输出函数名中有一个与原DLL不一样。不知什么原因
原函数名为:?getLogDirectory@logging@ecg@@YA?AVQDir@@XZ
新生成的DLL函数为:?getLogDirectory@logging@ecg@@YA?AVQDir@12@XZ
最后于 2018-7-15 23:29 被csjwaman编辑 ,原因:
yeyeshun 2018-7-16 10:32
74
加你Q了,通过一下。
我的生成没这个问题,VS2013的
返回