首页
社区
课程
招聘
请教如何对一个dll中的函数在 dll入口点执行完毕前进行hook
2024-2-16 16:20 1936

请教如何对一个dll中的函数在 dll入口点执行完毕前进行hook

2024-2-16 16:20
1936

有个待搞定的程序调用一个受保护的dll文件,这个dll文件的入口点里面有一些动态解密代码以及自校验等。


请教如何创建一个hook,使hook在dll载入以后,入口点执行完毕前开始起作用。  hook里面的工作代码需要hModule。


所以正常的如果调用loadlibrary或者hook loadlibrary,等获得这个hmodule的时候,入口点已经执行完毕了,这个时候再去hook已经没意义了。


需要一个入口点代码尚未执行,但是hmodule已经出来的时候。感觉类似于x64dbg里面的  用户dll载入  这个断点。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 205
活跃值: (2599)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2024-2-16 18:19
2
0
To answer the original question, what you can do is to hook LdrpCallInitRoutine in . This function is used by DLL loading/unloading code to actually call the DLL entry point () and also the TLS callbacks. The first argument is the address to be called:ntdll.dllDllMain

BOOLEAN NTAPI LdrpCallInitRoutine(PDLL_INIT_ROUTINE EntryPoint, PVOID BaseAddress, ULONG Reason, PVOID Context);
雪    币: 117
活跃值: (1509)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
coolspace 2024-2-16 21:12
3
0
yeyeshun To answer the original question, what you can do is to hook LdrpCallInitRoutine in . This function i ...
LdrpCallInitRoutine是个未导出函数,不同win版本里面这个函数的所在位置都不固定,没啥好的获取函数地址的方法啊
雪    币: 13
活跃值: (3256)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
麻木的时间 2024-2-17 01:14
4
0
第一点  注入你的dll   第二点 模块加载回调中  把目标模块的入口点hook到你的模块去
雪    币: 205
活跃值: (2599)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
yeyeshun 2 2024-2-17 15:41
5
0
或者注入你的dll,在dllmain中进行stack walk,找到LdrpCallInitRoutine再进行hook。要确保你的dll比目标dll先加载
雪    币: 920
活跃值: (1560)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wuxiwudi 2024-2-18 13:26
6
0
劫持掉这个dll,然后内存加载他
雪    币: 117
活跃值: (1509)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
coolspace 2024-2-21 17:42
7
0
后来用了个高版本windows才支持的api  LdrRegisterDllNotification解决了。能够在dll load后及时挂上。
游客
登录 | 注册 方可回帖
返回