Contents

记一次dll劫持寻找白文件的经验

0x01.dll导出函数混乱

寻找到的dll导出函数 会有例如这种函数名 :?MyFunction@@YGHH@Z :_MyFunction@4

C++编译器在生成DLL时,会对导出的函数进行名字改编,并且不同的编译器使用的改编规则不一样,因此改编后的名字也是不同的

__stdcall会使导出函数名字前面加一个下划线,后面加一个@再加上参数的字节数,比如_MyFunction@4的参数(int iVariant)就是4个字节

__fastcall与 __stdcall类似,不过前面没有下划线,而是一个@,比如@MyFunction@4

__cdecl则是始函数名。

我们查看IAT如果发现dll中的导出函数名字为:?MyFunction@@YGHH@Z 写黑dll时就写这样的代码

0
1
2
3
int _stdcall MyFunction(int a)
{
return 0;
}

如果为:_MyFunction@4 只需加上extern “C” _declspec(dllexport) 就行

0
1
2
3
extern "C" _declspec(dllexport) int _stdcall MyFunction(int a)
{
return 0;
}

//ps:@后面的为参数的字节 具体类型可以用IDA反编译看看参数 http://0xdeadbeef.icu/usr/uploads/2022/09/1252504510.gif

参考连接:https://blog.csdn.net/superzhaifd/article/details/38922121