动态获取Kernel32的函数地址

本文探讨了如何在程序运行时动态获取Kernel32.dll中的函数地址,这是实现某些底层操作和壳码编写的关键技术。通过示例shellcode展示了其基本原理,但要注意,实际使用时需要进一步优化和增强其安全性。
摘要由CSDN通过智能技术生成
VOID ShowDll()
{
	//Kernel32.dll基址
	DWORD dwBase;

	//Dos指针
	PIMAGE_DOS_HEADER pDos = NULL;

	//Nt指针
	PIMAGE_NT_HEADERS pNt = NULL;

	//导出表指针
	PIMAGE_EXPORT_DIRECTORY pExport = NULL;

	//EAT
	PDWORD pAddrFuns = NULL;

	//ENT
	PDWORD pAddrNames = NULL;

	//序号
	PWORD pAddrOrdinals = NULL;

	//函数地址
	DWORD dwFunAddr = NULL;

	//函数名字
	PCHAR pszFuncName = NULL;

	//遍历索引
	INT nIndex = 0;

	//获取kernel32.dll的基址
	_asm
	{

		push eax
		mov eax, dword ptr fs : [0x30]
		mov eax, [eax + 0x0c]
		mov eax, [eax + 0x1c]
		mov eax, [eax]
		mov eax, [eax]
		mov eax, [eax + 0x08]
		mov dwBase, eax
		pop eax
	}

	//获取Dos头指针
	pDos = (PIMAGE_DOS_HEADER)dwBase;

	//获取Nt头指针
	pNt = (PIMAGE_NT_HEADERS)(dwBase + pDos->e_lfanew);

	//获取导出表
	pExport = (PIMAGE_EXPORT_DIRECTORY)(pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress + dwBase);

	//获取EAT
	pAddrFuns = (PDWORD)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值