作为开篇,就先塞个自己写的东西,XP扫雷小外挂,没什么技术含量
2010-06-05 18:20
204 查看
// TODO: 在此添加控件通知处理程序代码
//获得扫雷窗口的句柄/////////////
wchar_t wc_WinMine_WindowName[5] = L"扫雷";
HWND h_WinMine_WindowHandle = ::FindWindow(0,wc_WinMine_WindowName);
if(!h_WinMine_WindowHandle)
{
MessageBox(L"找不到扫雷游戏",L"错误",0);
return 0;
}
//////////////////////////////////
//获得扫雷进程ID//////////////////
DWORD dw_WinMine_WindowProcId;
LPDWORD lpdw_WinMine_WindowThreadId = &dw_WinMine_WindowProcId;
GetWindowThreadProcessId(h_WinMine_WindowHandle,lpdw_WinMine_WindowThreadId);
/////////////////////////////////////////////
//获得访问进程权限///////////////////////////
TOKEN_PRIVILEGES tkp;
HANDLE hToken=NULL;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);//修改进程权限
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof tkp,NULL,NULL);//通知系统修改进程权限
}
CloseHandle(hToken);
//////////////////////////////////////////////
//获得扫雷进程的句柄////////
HANDLE h_WinMine_ProcHandle = OpenProcess(PROCESS_ALL_ACCESS,0,dw_WinMine_WindowProcId);
DWORD LastError = GetLastError();
//获得扫雷的高度与宽度
size_t BufferSize = 8;
byte WinMine_HWBuff[8];
ReadProcessMemory(h_WinMine_ProcHandle ,(LPCVOID)0x010056A8,WinMine_HWBuff,BufferSize,0);
size_t WinMine_Hight = WinMine_HWBuff[0];//高度
size_t WinMine_Width = WinMine_HWBuff[4];//宽度
//根据雷盘大小调整窗品大小
::SetWindowPos(::FindWindow(0,L"MyWine by Airlike 2010.4.4"),HWND_TOP,0,0,WinMine_Width*20,WinMine_Hight*18+70,SWP_NOMOVE);
m_WinMine_Window.SetWindowPos(&CWnd::wndTop,10,10,WinMine_Width*17,WinMine_Hight*15,0);
m_Button.SetWindowPos(&CWnd::wndTop,WinMine_Width,WinMine_Hight*15+25,0,0,SWP_NOSIZE);
//读取雷盘数据
BufferSize = 1024;
byte WinMine_MemoryBuffer[1025];
ReadProcessMemory(h_WinMine_ProcHandle ,(LPCVOID)0x01005360,WinMine_MemoryBuffer,BufferSize,0);
//遍历开始
for(UINT i = 0; i<BufferSize;i++)
{
//根据内存结构,一行起始为0x10,数量为棋盘宽度,结束为0x10,中间的为雷的数据
if((WinMine_MemoryBuffer[i]==0x10)&&(WinMine_MemoryBuffer[i+WinMine_Width]!=0x10)&&(WinMine_MemoryBuffer[i+WinMine_Width+1]==0x10)&&((i/16)%2==0))
{
for(UINT j = 1;j<WinMine_Width+1;j++)
{
//分析雷数据
switch(WinMine_MemoryBuffer[i+j])
{
case 0x0f:
{
m_WinMine_MemoryBuffer += L"未";
break;
}
case 0x40:
{
m_WinMine_MemoryBuffer += L"空";
break;
}
case 0x41:
{
m_WinMine_MemoryBuffer += L"1";
break;
}
case 0x42:
{
m_WinMine_MemoryBuffer += L"2";
break;
}
case 0x43:
{
m_WinMine_MemoryBuffer += L"3";
break;
}
case 0x44:
{
m_WinMine_MemoryBuffer += L"4";
break;
}
case 0x45:
{
m_WinMine_MemoryBuffer += L"5";
break;
}
case 0x46:
{
m_WinMine_MemoryBuffer += L"6";
break;
}
case 0x47:
{
m_WinMine_MemoryBuffer += L"7";
break;
}
case 0x48:
{
m_WinMine_MemoryBuffer += L"8";
break;
}
case 0x8f:
{
m_WinMine_MemoryBuffer += L"雷";
break;
}
default:
{
m_WinMine_MemoryBuffer += L" ";
break;
}
}
m_WinMine_MemoryBuffer += " ";
}
m_WinMine_MemoryBuffer += "/r/n";
}
}
//将数据更新出来
UpdateData(false);
//重置数据
m_WinMine_MemoryBuffer = "";
return 0;
}
//获得扫雷窗口的句柄/////////////
wchar_t wc_WinMine_WindowName[5] = L"扫雷";
HWND h_WinMine_WindowHandle = ::FindWindow(0,wc_WinMine_WindowName);
if(!h_WinMine_WindowHandle)
{
MessageBox(L"找不到扫雷游戏",L"错误",0);
return 0;
}
//////////////////////////////////
//获得扫雷进程ID//////////////////
DWORD dw_WinMine_WindowProcId;
LPDWORD lpdw_WinMine_WindowThreadId = &dw_WinMine_WindowProcId;
GetWindowThreadProcessId(h_WinMine_WindowHandle,lpdw_WinMine_WindowThreadId);
/////////////////////////////////////////////
//获得访问进程权限///////////////////////////
TOKEN_PRIVILEGES tkp;
HANDLE hToken=NULL;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);//修改进程权限
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof tkp,NULL,NULL);//通知系统修改进程权限
}
CloseHandle(hToken);
//////////////////////////////////////////////
//获得扫雷进程的句柄////////
HANDLE h_WinMine_ProcHandle = OpenProcess(PROCESS_ALL_ACCESS,0,dw_WinMine_WindowProcId);
DWORD LastError = GetLastError();
//获得扫雷的高度与宽度
size_t BufferSize = 8;
byte WinMine_HWBuff[8];
ReadProcessMemory(h_WinMine_ProcHandle ,(LPCVOID)0x010056A8,WinMine_HWBuff,BufferSize,0);
size_t WinMine_Hight = WinMine_HWBuff[0];//高度
size_t WinMine_Width = WinMine_HWBuff[4];//宽度
//根据雷盘大小调整窗品大小
::SetWindowPos(::FindWindow(0,L"MyWine by Airlike 2010.4.4"),HWND_TOP,0,0,WinMine_Width*20,WinMine_Hight*18+70,SWP_NOMOVE);
m_WinMine_Window.SetWindowPos(&CWnd::wndTop,10,10,WinMine_Width*17,WinMine_Hight*15,0);
m_Button.SetWindowPos(&CWnd::wndTop,WinMine_Width,WinMine_Hight*15+25,0,0,SWP_NOSIZE);
//读取雷盘数据
BufferSize = 1024;
byte WinMine_MemoryBuffer[1025];
ReadProcessMemory(h_WinMine_ProcHandle ,(LPCVOID)0x01005360,WinMine_MemoryBuffer,BufferSize,0);
//遍历开始
for(UINT i = 0; i<BufferSize;i++)
{
//根据内存结构,一行起始为0x10,数量为棋盘宽度,结束为0x10,中间的为雷的数据
if((WinMine_MemoryBuffer[i]==0x10)&&(WinMine_MemoryBuffer[i+WinMine_Width]!=0x10)&&(WinMine_MemoryBuffer[i+WinMine_Width+1]==0x10)&&((i/16)%2==0))
{
for(UINT j = 1;j<WinMine_Width+1;j++)
{
//分析雷数据
switch(WinMine_MemoryBuffer[i+j])
{
case 0x0f:
{
m_WinMine_MemoryBuffer += L"未";
break;
}
case 0x40:
{
m_WinMine_MemoryBuffer += L"空";
break;
}
case 0x41:
{
m_WinMine_MemoryBuffer += L"1";
break;
}
case 0x42:
{
m_WinMine_MemoryBuffer += L"2";
break;
}
case 0x43:
{
m_WinMine_MemoryBuffer += L"3";
break;
}
case 0x44:
{
m_WinMine_MemoryBuffer += L"4";
break;
}
case 0x45:
{
m_WinMine_MemoryBuffer += L"5";
break;
}
case 0x46:
{
m_WinMine_MemoryBuffer += L"6";
break;
}
case 0x47:
{
m_WinMine_MemoryBuffer += L"7";
break;
}
case 0x48:
{
m_WinMine_MemoryBuffer += L"8";
break;
}
case 0x8f:
{
m_WinMine_MemoryBuffer += L"雷";
break;
}
default:
{
m_WinMine_MemoryBuffer += L" ";
break;
}
}
m_WinMine_MemoryBuffer += " ";
}
m_WinMine_MemoryBuffer += "/r/n";
}
}
//将数据更新出来
UpdateData(false);
//重置数据
m_WinMine_MemoryBuffer = "";
return 0;
}
相关文章推荐
- 只学一点点:我的技术学习策略(虽然不赞同,但可以参考一下,针对不常用的技术可以这样,同时可以:寻找遁去的一,不用管别人怎么想;有学习的时间,不如自己写、自己实践,否则学完了都不知道是什么东西)
- 自己看的(没什么技术含量)
- 作为一个技术人员提高薪水除了不断跳槽之外,有什么好的建议?
- 不要神话创业,什么东西都可以自己做,损失就是不拿工资。如果吃不上饭了,那还是不要创业。服务器很便宜
- 这么多的技术,作为一个freshman,什么研究?
- 【探索需求对话3】沟通,了解什么是自己、是客户真正想要的东西
- 作为一个技术人,我到底要什么?
- 作为一个技术人,我到底要什么?
- 每天都要明白自己要追求的是什么东西
- 做事的人总是要挨骂的,挨骂是一件好事。如果一个人不挨骂,肯定因为他没有做事。一个职业经理人,是否因为挨了几次骂就破罐破摔,随波逐流?一个职业经理人,你的责任是把自己的工作做好,作为市场总监,我的责任是告诉公司,明年我的品牌规划、产品规划、宣传形式是什么,这是责任。
- 作为软件技术人员建立自己的git账户并保存资料的重要性
- 把深度学习作为自己的硕士课题,有什么可以做的?
- 现在工作和技术一般,想下班后充充电多学点东西。然而事实却相反,怎么让自己的学习更加有毅力?
- 办公自动化中最有技术含量最难的模块是什么?
- 一个没什么技术含量但很奇葩的PD,MYSQL问题
- IaaS没有什么技术含量
- 学东西要先看这个东西能给你提供什么功能,作东西要明白自己要实现什么功能!一定要耐下性子!
- 作为码农自己女票比自己强是什么感觉
- 如何知道自己的VPS主机(云主机)用什么虚拟技术实现的?
- 作为一个技术人员提高薪水除了不断跳槽之外,有什么好的建议?