新手WriteProcessMemory问题,帮帮忙。

jjh690719832 2012-08-04 06:51:39
int count=0x05abff;
void Function()
{

_asm
{
mov edx ,0x005ff9f0
push count
为什么count得不到0x05abff,它到底压了什么进栈中?
push 0x092e3f0
push 0x1036
call edx
add esp,0x0c
}
}
void CMyDlg::OnBUTTON1bebug()
{
DWORD tid;
HWND g_h;
DWORD pid;
HANDLE g_ha;
LPVOID vid;
g_h=::FindWindow(NULL,"####");
GetWindowThreadProcessId(g_h,&pid);
g_ha=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
vid=VirtualAllocEx(g_ha,NULL,0X2000,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
if(vid)
{
if(::WriteProcessMemory(g_ha,vid,Function,0x2000,NULL))
{
CreateRemoteThread(g_ha,NULL,0,(LPTHREAD_START_ROUTINE)vid,0,0,&tid);
}
}

}
...全文
160 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-08-16
  • 打赏
  • 举报
回复
bool AdjustPrivileges() {
HANDLE hToken;
TOKEN_PRIVILEGES tp;
TOKEN_PRIVILEGES oldtp;
DWORD dwSize=sizeof(TOKEN_PRIVILEGES);
LUID luid;

if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) return true;
else return false;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
CloseHandle(hToken);
return false;
}
ZeroMemory(&tp, sizeof(tp));
tp.PrivilegeCount=1;
tp.Privileges[0].Luid=luid;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
/* Adjust Token Privileges */
if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize)) {
CloseHandle(hToken);
return false;
}
// close handles
CloseHandle(hToken);
return true;
}
BOOL HackWriteProcessMemory(HANDLE hProc, void * pDest, void * pSource, DWORD nSize, DWORD * pWritten) {
MEMORY_BASIC_INFORMATION mbi;

if (!WriteProcessMemory(hProc,pDest,pSource,nSize,pWritten)) {
VirtualQueryEx(hProc,pDest, & mbi, sizeof(mbi));
#ifdef _DEBUG
printf("Info:addr=%08x,size=%08x,allocprot=%08x,currprot=%08x\n",mbi.BaseAddress,mbi.RegionSize,mbi.AllocationProtect,mbi.Protect);
#endif
if (VirtualProtectEx(hProc,mbi.BaseAddress, mbi.RegionSize, PAGE_READWRITE, & mbi.Protect)) {
if (!WriteProcessMemory(hProc,pDest,pSource,nSize,pWritten)) {
#ifdef _DEBUG
printf("Error:VirtualProtectEx succ,but WriteProcessMemory GetLastError=%d\n",GetLastError());
#endif
return FALSE;
} else {
return TRUE;
}
} else {
#ifdef _DEBUG
printf("Error:VirtualProtectEx GetLastError=%d\n",GetLastError());
#endif
return FALSE;
}
}
return TRUE;
}
yan592766535 2012-08-16
  • 打赏
  • 举报
回复
你是做外挂吧
jjh690719832 2012-08-06
  • 打赏
  • 举报
回复
问题解决了,谢谢各位。
Gloveing 2012-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
int count=0x05abff;
这个是在本地进程定义的,
你WriteProcessMemory是写入到一个远程进程空间.
远程时间空间并没有定义int count变量.
[/Quote]
++
你可以现在其他进程VirtualAllocEx,再把这个变量写进其他进程的地址空间。。
星星眼 2012-08-05
  • 打赏
  • 举报
回复
给个建议,先用VirtualAllocEx分配一段数据空间,然后写入你需要的数据,在CreateRemoteThread中作为环境参数传递进去。另外ThreadProc中是有个参数的~~~
星星眼 2012-08-05
  • 打赏
  • 举报
回复
如果不用dll,远程线程中不要产生直接寻址的指令。
zwfgdlc 2012-08-04
  • 打赏
  • 举报
回复
int count=0x05abff;
这个是在本地进程定义的,
你WriteProcessMemory是写入到一个远程进程空间.
远程时间空间并没有定义int count变量.

傻X 2012-08-04
  • 打赏
  • 举报
回复
汇编啊,估计要等高人了

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧