查找kernel32.dll 基地址 特征函数

本文介绍了如何从用户层高地址开始,通过扫描每个64k边界上的PE模块,查找kernel32.dll。通过识别PE头、导出表,以及匹配特定函数如LoadLibraryA来确定dll。这种方法依赖于特征函数名,适用于简单搜索。
摘要由CSDN通过智能技术生成

从用户层高地址往下找

高地址:7ffe0000h (用户层可读的最高地址,之后的地址拒绝访问)

一直扫描到最后一块64k起始页面为止, 因此结束地址9999h

每个pe模块都会加载在64k边界的地址上,  因此每次减64k(10000h)

代码中增加了自己修复的重定位信息, 和异常处理;

***** 不要运行在调试环境中 , 否则异常首先被送到debug中

流程:

1.每次在64k的边界上查看是否是一个pe 

2.如果是,则找到导出表,如果有导出表,根据名字LoadLibraryA / GetProcAddress 来匹配,

  如果有此函数则确定为kernel32.dll

* 这种方式比较傻瓜式 , 只根据一个特征函数名(LoadLibraryA)来搜索

你也可以改成其他在kernel32.dll 中的函数

.386
.model flat, stdcall
option casemap:none

include		windows.inc
include		gdi32.inc
includelib	gdi32.lib
include		user32.inc
includelib	user32.lib
include		kernel32.inc
includelib	kernel32.lib
include msvcrt.inc
includelib msvcrt.lib

.data
buffer db 256 dup(0)
kernerl32_module dd 0

.const
ADDR_BEGIN equ 7ffe0000h
ADDR_END EQU 9999h
szGetProcAddress db 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值