关于搜索kernel32的基址

lmxd70 2008-12-10 08:45:04
罗云彬的书上搜索kernel32的基址时,把[esp]放入edi中后,与0ffff0000h与,书上解释说要按64K对齐,而后面又说按页搜索时递减10000h。为什么要按64K对齐,不是应该按一页大小对齐吗?还有按页搜索时不是应该减1000h吗?为什么减10000h。

mov edi,_dwKernelRet
and edi,0ffff0000h .while TRUE
.if word ptr [edi] == IMAGE_DOS_SIGNATURE
mov esi,edi
add esi,[esi+003ch]
.if word ptr [esi] ==IMAGE_NT_SIGNATURE
mov @dwReturn,edi
.break
.endif
.endif
_PageError:
sub edi,010000h . break .if edi < 070000000h
.endw

...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
killbug2004 2008-12-10
  • 打赏
  • 举报
回复
对于加载到程序中的模块,基址都是对齐的,你自己可以用调试器看一下,程序中各个模块包括dll和程序本身,加载进去的基址十六进制末四位都是0,也就是0xxxx0000H,也就是PE头会出现在这些地址附近,所以减去10000加快搜索效率
dalixux 2008-12-10
  • 打赏
  • 举报
回复
最好是减1000h
减10000h是因为 目前的基址是7XX00000
所以减10000可以减少循环次数

个人推荐的还是减1000
dalixux 2008-12-10
  • 打赏
  • 举报
回复
LS太中规中矩了

LZ要的是写壳或者病毒之类的 定位kernel基址 然后根据导出表查找函数地址的技巧

得到kernel基址 大致 有栈回溯, 异常处理, PEB

实现的代码LZ自己搜搜好了
cnzdgs 2008-12-10
  • 打赏
  • 举报
回复
用GetModuleHandle或LoadLibrary得到的返回值就是模块基址。
roadblossom 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 killbug2004 的回复:]
对于加载到程序中的模块,基址都是对齐的,你自己可以用调试器看一下,程序中各个模块包括dll和程序本身,加载进去的基址十六进制末四位都是0,也就是0xxxx0000H,也就是PE头会出现在这些地址附近,所以减去10000加快搜索效率
[/Quote]
很好!

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧