吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 541|回复: 3
收起左侧

[学习记录] 跨进程获取程序的基地址另一写法VC6实现

[复制链接]
liwj 发表于 2023-10-22 12:24
[Asm] 纯文本查看 复制代码
// 5566.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<windows.h>
#include <psapi.h>//居然修改成功了 加了一堆的宏定义
#include <cassert>
#include <cstdio>
#include <iostream>
#include <TlHelp32.h>
#include <vector>
using namespace std;
HANDLE FindProcessByName(const char* name)
{
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(PROCESSENTRY32);
    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        return NULL;
    }
    if (Process32First(hProcessSnap, &pe32))
    {
        do
        {
            if (strcmp(pe32.szExeFile, name) == 0)
            {
                CloseHandle(hProcessSnap);
                return OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
            }
        } while (Process32Next(hProcessSnap, &pe32));
    }
    CloseHandle(hProcessSnap);
    return NULL;
}
/**
 * [url=home.php?mod=space&uid=190858]@brief[/url] 枚举指定进程所有内存块
 * [url=home.php?mod=space&uid=952169]@Param[/url] hProcess [in] 要枚举的进程,至少需拥有PROCESS_QUERY_INFORMATION权限
 * @param memories [out] 返回枚举到的内存块数组
 * [url=home.php?mod=space&uid=155549]@Return[/url] 成功返回true,失败返回false.
 */
int main(int argc, char* argv[])
{
	HANDLE hProcess = FindProcessByName("trashcleaner.exe");
	if (hProcess == NULL)
	{
		printf("FindProcessByName failed\n");
		return -1;
	}
	// 获取每一个模块加载基址
	DWORD pro_base = NULL;
	DWORD prodll_base = NULL;
	HMODULE hModule[100] = { 0 };
	DWORD dwRet = 0;
	int num = 0;
	int bRet = EnumProcessModulesEx(hProcess, (HMODULE *)(hModule), sizeof(hModule), &dwRet, NULL);
	if (bRet == 0){
		printf("EnumProcessModules");
	}
	
	// 总模块个数
	num = dwRet / sizeof(HMODULE);int ii;
	printf("总模块个数: %d\n", num);
	// 打印每一个模块加载基址
	char lpBaseName[100];
	for (int i = 0; i < num; i++){
		GetModuleBaseNameA(hProcess, hModule[i], lpBaseName, sizeof(lpBaseName));
		printf("%-2d %-25s基址: 0x%p\n", i, lpBaseName, hModule[i]);
		char str2[100] = "edobjectmodule.dll";
		if (strcmp(lpBaseName, str2) == 0)//留着后面解决吧  输入了 ==  号 就运行正常了
		{
			printf("//////////////////////%-2d %-25s基址: 0x%p\n///////////////////", i, lpBaseName, hModule[i]);
			ii = i;
		}
	}
	
	pro_base = (DWORD)hModule[0]; prodll_base = (DWORD)hModule[49];
	printf("程序基址: 0x%p\n", pro_base); printf("基址: 0x%p\n", prodll_base);

	printf("Hello World!\n");
	return 0;
}


C:\Program Files (x86)\Microsoft Visual Studio\VC98\Include  放入附件新的Psapi.h
C:\Program Files (x86)\Microsoft Visual Studio\VC98\Lib     放入附件新的Kernel32.lib

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
gusong125 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
TADYCB + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ruan1893 发表于 2023-10-22 14:17
有什么好的封装工具  很多人调试不好
 楼主| liwj 发表于 2023-10-22 18:07
ruan1893 发表于 2023-10-22 14:17
有什么好的封装工具  很多人调试不好

不知道 也只会依葫芦画瓢
walykyy 发表于 2023-10-23 10:53
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-5 06:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表