定位Dll加载异常的方法

总体说明

动态库加载异常的原因有以下几种:
1.dll不在dll搜索路径
2.dll依赖的其他dll不在dll搜索路径
3.dll与exe不是同一架构,如exe是64位,dll是32位
4.dll或依赖的dll其导出函数对不上

dll依赖的其他dll不在dll搜索路径

注意dll的搜索路径永远是exe所在的当前路径
使用x64dbg去打开dll的话,如果dll的依赖的其他dll找不到了,并不会报错,而是直接调试结束,无法断在入口断点

dll或依赖的dll其导出函数对不上

下面是两个动态库,win32crypt.pyd依赖了pywintypes37.dll
image

点击这里获取素材


我们使用x64dbg打开win32crypt.pyd
image
出现了上面的错误,说win32crypt.pyd的导入函数?PyWinObject_FromOLECHAR@@YAPEAU_object@@PEB_WH@Z,找不到实现
我们将?PyWinObject_FromOLECHAR@@YAPEAU_object@@PEB_WH@Z进行解码为struct _object * __ptr64 __cdecl PyWinObject_FromOLECHAR(wchar_t const * __ptr64,int)

如何解码请查看c++命名粉碎及快速还原


使用ida打开win32crypt.pyd,查看导入函数,搜索PyWinObject_FromOLECHAR
image
发现有问题的函数来自pywintypes37.dll


使用ida打开pywintypes37.dll,查看导出函数,搜索PyWinObject_FromOLECHAR
image
发现其函数名为PyWinObject_FromOLECHAR(wchar_t const * __ptr64,__int64),和win32crypt.pyd的不同之处在于第二个参数为__int64,这样就对不上了,而导致导入失败

posted @ 2023-03-04 16:57  乘舟凉  阅读(140)  评论(0编辑  收藏  举报