W32_实用APi记

API

发送键盘按键

原型:
keybd_event(31,0,0,0)
keybd_event(‘B’,0,KEYEVENTF_KEYUP,0)
参1:可以是虚拟按键的值,也可以是’B’这种字符串;参2:扫描码(不用)
参3:0为按下,2(KEYEVENTF_KEYUP)为弹起 ;参4:相关数据(不用)
[按下]-[弹起] 成对使用

push 0
push 0
push 0
push 31
call keybd_event
push 0
push 2
push 0
push 31
call keybd_event

获取进程基址

转自gwzz1228
HMODULE hModule = GetModuleHandle(NULL);
通过读取PEB模块来获取基址:

LPCVOID getLoadAddress( DWORD dwProcessId )
{
	HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, dwProcessId);
 
	HMODULE hModule = LoadLibrary(TEXT("Ntdll.dll "));
	if (NULL == hModule)
		return NULL;
 
	PROCESS_BASIC_INFORMATION pbi = {0};
	NtQueryInformationProcessPtr NtQueryInformationProcess = (NtQueryInformationProcessPtr)GetProcAddress(hModule, "NtQueryInformationProcess");
	LONG status = NtQueryInformationProcess(hProcess, ProcessBasicInformation, (PVOID)&pbi, sizeof(PROCESS_BASIC_INFORMATION), NULL);
	if (NULL != hModule)
		FreeLibrary(hModule);
 
	if (NULL != hProcess)
		CloseHandle(hProcess);
 
	return pbi.PebBaseAddress->Reserved3[1];
}

该方法在x86和x64下,都适用。可根据进程id获得相应进程基地址。
【扩展1】了解PEB结构。既然可以获得PEB结构,那就意味着可以知道该结构中的所有数据,若能够掌握该数据,可以更加全面的了解进程环境块。
【扩展2】区分进程地址空间的装载地址和进程地址空间的基地址。装载地址的内容就是基地址,基地址的内容就是PE头信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值