首页
社区
课程
招聘
[旧帖] [讨论]关于读取内存的API 0.00雪花
发表于: 2011-9-20 18:45 1670

[旧帖] [讨论]关于读取内存的API 0.00雪花

2011-9-20 18:45
1670
有个crackme需要和内存的值进行比较,我应该用那些API函数读取内存的值呢?以前看过其他的程序用FindWindow找句柄,然后GetWindowThreadProcessId得到进程ID,然后用OpenProcess打开,最后ReadProcessMemory,但是我用的参数如下
                        hWndCM2=FindWindow(NULL,TEXT("CrackMe v2.0"));
                        GetWindowThreadProcessId(hWndCM2,lpdwProcessID);
                        hProcess=OpenProcess(READ_CONTROL,FALSE,lpdwProcessID);
                        ReadProcessMemory(hProcess,0x004021A3,szBuffer1,20,NULL);
一执行就是内存错误,求大侠讲解一下...,在crack me里面,需要进行比较的是以0x004021A3为基址的一串字节

[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有几个问题
1.权限
OpenProcess 打开进程的时候要军权啊,可以说是生杀大权
OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, 0, nPid) ;
简单点就PROCESS_ALL_ACCESS这样就具备了、查询、读和写的所有权限

2.还有个权限操作进程和服务之类的时候用的,不知道你主程序弄什么的。。干脆也添加进去吧
void UpgradeProcessPrivilege()   
{   
        HANDLE hToken;   
        TOKEN_PRIVILEGES tkp;   
        OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);   
        LookupPrivilegeValue (NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);   
        tkp.PrivilegeCount = 1;   // 设置一个权限   
        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;   
        AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);   
        CloseHandle(hToken);   
}  

3.要操作的进程地址、不知道你的 0x004021A3 是从哪里来的
准确的应该是用GetSystemInfo函数返回的SYSTEM_INFO结构中的
  lpMinimumApplicationAddress  最小寻址空间
这里判断 0x004021A3 是不是在这中间
  lpMaximumApplicationAddress 最大寻址空间
2011-9-20 19:51
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
想帮忙 但是硬是没有看明白啊
2011-9-20 23:53
0
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
谢谢2楼大侠帮忙,我还有好多不懂,先查查资料再来找下出错的地方,主要是文件格式和进程不太懂。用查看内存的工具可以看到打开的进程在那2个地址有值,但是在代码里面用了读内存的函数之后2个szBuffer都是空的
2011-9-21 09:09
0
游客
登录 | 注册 方可回帖
返回