-
-
[求助]获取win7下“动态加载”的kernel32
-
发表于:
2010-12-6 09:42
4535
-
[求助]获取win7下“动态加载”的kernel32
听说过Win7下获取Kernel32.dll地址时需要考虑动态加载,本人初学可能理解的不对,请大家指教啊~这几天终于熟悉了windbg,但是用vmware下的32位win7调式的结果和想象的“动态加载”不一样,不知道有何玄机
参考 xfish 的帖子http://bbs.pediy.com/showthread.php?t=85910已经列举了常用查找Kernel32的办法,就拿我认为最常见的第三种方法来说,
mov eax, [fs:30h] ;Get Peb
mov eax, [eax+0ch] ;Get _PEB_LDR_DATA
mov eax, [eax+1ch];Get InInitializationOrderModuleList.Flink, 此时eax指向的是ntdll模块的InInitializationOrderModuleList线性地址。所以我们获得它的下一个则是kernel32.dll
mov eax, [eax]
mov eax, [eax]; XP下不需要,win7需要
mov eax, [eax+8] ; 8 = sizeof.LIST_ENTRY
加上红色一行的话win7下就可以正常获取,在win7下InInitializationOrderModuleList的加载顺序是ntdll->kernelbase->kernel32(就我调试数次的结果)
当然,我也用遍历InLoadOrderModuleList 的方式来取得kernel32,而且kernel32也是固定顺序位置,不知道这个所谓的“动态加载”是什么,还是我的环境没法看出来,或则概率有限?请大家指点啊~
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)