能力值:
( LV2,RANK:10 )
|
-
-
2 楼
hProcess 这个你传递什么值 是否正确
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
......
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
扫雷的进程句柄
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
HANDLE Getpid();
void ReadDataFromProcess(HANDLE hProcess);
main(){
HANDLE hProcess;
hProcess=Getpid();
ReadDataFromProcess(hProcess);
system("pause");
}
HANDLE Getpid(){
DWORD pid;
HWND hwnd=FindWindow(NULL,"扫雷"); //获取扫雷窗口句柄
GetWindowThreadProcessId(hwnd,&pid); //获取扫雷进程ID
HANDLE handleid=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); //获取扫雷进程句柄
if(handleid) printf("got it!\n");
return handleid;
}
void ReadDataFromProcess(HANDLE hProcess){
char addr[1];
if(ReadProcessMemory(hProcess,(LPCVOID)0x1005340,&addr,sizeof(addr),0)) printf("读取成功\n");
else printf("读取失败\n");
}
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
用getlasterro找出错的原因~
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
代码本身有问题吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
if(ReadProcessMemory(hProcess,(LPCVOID)0x1005340,&addr,sizeof(addr),0)) printf("读取成功\n");
刚查看了下
BOOL ReadProcessMemory(
HANDLE hProcess,
PVOID pvAddressRemote,
PVOID pvBufferLocal,
DWORD dwSize,
PDWORD pdwNumBytesRead)
楼主注意观察第5个参数。
你用 0 意思是让系统把读取的数据个数(这里是1)赋值到 内存地址为0的地方
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
定义一个局部变量
nbWritten DD 0
后面调用
if(ReadProcessMemory(hProcess,(LPCVOID)0x1005340,&addr,sizeof(addr),&nbWritten )) printf("读取成功\n");
你尝试下。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
还是不可以...
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
那就不清楚了。
另:
char addr[5];
int i;
i= sizeof(addr[5]);
结果i=1 所以楼主sizeof(addr)这个最好改正下。 我第一次见这样用,以前都是sizeof(byte/word/dword/Uint64)
if(ReadProcessMemory(hProcess,(LPCVOID)0x1005340,&addr,sizeof(addr),&nbWritten )) printf("读取成功\n");...
红色标记没用。你确定每次加载都加载到0x1005340? 对这个不太懂。说错勿怪。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
[QUOTE=怀特迈恩;721952]那就不清楚了。
另:
char addr[5];
int i;
i= sizeof(addr[5]);
结果i=1 所以楼主sizeof(addr)这个最好改正下。 我第一次见这样用,以前都是sizeof(byte/word/dword/Uint64)
if(Read...[/QUOTE]
晚上我再试试看 谢谢您 我是菜鸟 还请您多指教
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
“扫雷”的标题在OllyDbg中看到的是 6B 62 F7 91,貌似是乱码.........
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
先DUBUG提权
HANDLE hToken;
BOOL fOk=FALSE;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount=1;
if(!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid))
printf("Can't lookup privilege value.\n");
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
if(!AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL))
printf("Can't adjust privilege value.\n");
fOk=(GetLastError()==ERROR_SUCCESS);
CloseHandle(hToken);
}
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
因为OpenProcess 要先提权
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
13楼很详细,学习了
|
能力值:
( LV2,RANK:140 )
|
-
-
16 楼
这个例子貌似并不需要提权
本来想拷贝楼主的代码编译调试,无奈楼主你的代码实在看不懂
下面是我的,测试成功
代码一复制到论坛就乱了,附件里面有源文件
XP sp2&VC++6.0
|
能力值:
( LV7,RANK:100 )
|
-
-
17 楼
LZ你的代码,没有问题呀。我可以直接读取成功!!!
|
能力值:
( LV7,RANK:100 )
|
-
-
18 楼
LZ你的代码,没有问题呀。我可以直接读取成功!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
另: char addr[5]; int i; i= sizeof(addr[5]); 结果i=1
addr[5]是一个字节,i不就是1吗,我是要获得整个长度啊
先DUBUG提权
提权以后还是读不出来
这是我的提权代码
HANDLE Getpid(){
DWORD pid;
HWND hwnd=FindWindow(NULL,"扫雷"); //获取扫雷窗口句柄
HANDLE hToken; //访问令牌指针
TOKEN_PRIVILEGES Privileges;
LUID luid;
Privileges.PrivilegeCount=1;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken); //返回访问令牌指针
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&luid); //获取LUID值
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
if(AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL)); //修改访问令牌
GetWindowThreadProcessId(hwnd,&pid); //获取扫雷进程ID
HANDLE handleid=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); //获取扫雷进程句柄
if(handleid) printf("got it!\n");
CloseHandle(hToken);
return handleid;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
介似怎么回事 我的是win7
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
[QUOTE=CamelLu;722062]这个例子貌似并不需要提权
本来想拷贝楼主的代码编译调试,无奈楼主你的代码实在看不懂
下面是我的,测试成功
代码一复制到论坛就乱了,附件里面有源文件
XP sp2&VC++6.0[/QUOTE]
您的程序在我这也是读不出来
http://bbs.pediy.com/attachment.php?attachmentid=35499&stc=1&d=1259939716
|
能力值:
( LV2,RANK:140 )
|
-
-
22 楼
win7还没玩过
你会调试吗?调试一下不就知道为什么出错了,我晕
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
我用getlasterror看看吧 win7里不至于把扫雷还重写吧
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
引用: 另: char addr[5]; int i; i= sizeof(addr[5]); 结果i=1 addr[5]是一个字节,i不就是1吗,我是要获得整个长度啊
LZ,不知道你什么意思。难道我错了,请买本C++程序设计看下 数组定义 那一章。
我的意思就是你直接 i=5; 没必要 i= sizeof(addr[5]);
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
我用getlasterror查看了下 错误代码是299 代表"仅完成部分的 ReadProcessMemoty 或 WriteProcessMemory 请求"
这个该怎么解决?
|
|
|