能力值:
( LV2,RANK:150 )
|
-
-
2 楼
用序数,DLL的每一个导出都有序数的,1 2 3 4……这样排
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢提示,但是做DLL劫持的函数转发是没办法用序号的吧?因为调用者可能是根据类名来调用的,能解决这个问题吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我该如何在自己写的DLL中导出同名的函数,其实一开始主要就是这个问题,因为用名称或序号GetProcAddress都是可以成功的
?CleanUp@CPleione@pleione@@QAE_NXZ
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
完全用汇编来写你的转发DLL就行了。
|
能力值:
( LV2,RANK:150 )
|
-
-
6 楼
名字也好,序数也好,关键是你自己首先要定位导出函数,然后Hook它没商量!
我经常用IDA找到函数的16进制地址,然后用C#去Hook这个函数
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
你说的hook函数是怎么做法?你是直接修改内存的吧。
我是可以在内存中修改这些函数的内容或参数,但我想要的是一个完整的DLL替换原来的DLL,而不是直接做内存补丁,所以要做一个DLL工程。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
你做过吗?C函数名是标准的,能编译通过,而C++导出函数名有?@等字符,是无法编译过的,还原成类名就会变成未定义的错误。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
自己建个空类就行了
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
函数的类没有定义,你随便定义一个不就行了,如下:
struct pleione
{
struct CPleione
{
bool __declspec(dllexport) CleanUp(void);
};
};
然后写函数实现:
bool pleione::CPleione::CleanUp(void)
{
GetAddress("?CleanUp@CPleione@pleione@@QAE_NXZ");
__asm JMP EAX;
}
|
能力值:
( LV3,RANK:20 )
|
-
-
11 楼
你这样JMP EAX恐怕出去就回不来了
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
意思到了就行吧? 写个代理函数就行了
|
能力值:
( LV3,RANK:20 )
|
-
-
13 楼
没有你想的那么麻烦的 在PE文件里 本身就有一种模式叫做转发 也就是当你调用一个A.DLL里的一个函数的时候系统会自动转发,其调用B.DLL里面对应的函数
我只知道数据结构是什么样的 能自己实现
编译器应该有相应的声明 你加上声明就ok 这个我没用过 你自己查
|
能力值:
( LV4,RANK:50 )
|
-
-
14 楼
完全不懂DLL劫持吧?
Jmp出去不需要回来,原版真正的函数又不是没retn。
看雪加密解密第三版有ws2_32.dll劫持示例,用的就是这种方法。
|
能力值:
( LV3,RANK:30 )
|
-
-
15 楼
你完全不懂!
|
能力值:
( LV3,RANK:20 )
|
-
-
16 楼
郁闷了哥哥的《甲壳2》 也不必这里来发火嘛
既然哥哥说的是“恐怕”,那一定是有机会出错的
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
jmp之前注意保存ecx就行,因为用vc编译的class,this指针就在ecx里
|
|
|