青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

記錄一些學(xué)習(xí)小事

Work hard

統(tǒng)計

留言簿

閱讀排行榜

評論排行榜

spy++和游戲修改器

這幾天做了兩個東西,spy++ 和游戲修改器。 spy++ 就是模仿 vs的那個工具spy++ 。游戲修改器,就是暴力搜索內(nèi)存,找到我們關(guān)心的數(shù)據(jù),然后進行更改。
總之這些東西做過之后感覺就是都不難,但是在做的時候多少會感覺點吃力。唉,功力不夠啊。繼續(xù)修煉……
閑下來無事,記錄下它們的過程吧。
spy++ 分析(用vs2005做的——)
spy++ 需要拖動一個小圖標(biāo) 然后移動到別的窗口上(本窗口也可以),然后畫出窗口的矩形,得到窗口的一些信息。
拖動的這個小圖標(biāo),是一個picture conctrl控件 ,屬性的type改成icon 也就是加載一個icon圖標(biāo),在屬性imag里把圖標(biāo)選上。
給這個控件添加一個類,在這個類里做這個控件的 小圖標(biāo)拖動操作,即 lbuttondown的時候 把鼠標(biāo)加載成 小圖標(biāo),把picture里的icon換成空心的。
當(dāng)鼠標(biāo)抬起的時候把鼠標(biāo)換回來原先的光標(biāo),然后再把picture里的icon換成有小圖標(biāo)的那個圖標(biāo)。
這里要主次 要把鼠標(biāo)設(shè)成全局有效,要不然的話,鼠標(biāo)位置出了這個picture的范圍就失效了。函數(shù)是 SetCapture()
然后再lbuttonup的時候記得 要釋放。ReleaseCapture();
           就是這幾個圖標(biāo)。吼吼。
把這個小圖標(biāo)托到 窗口上的時候怎么在窗口上畫出矩形呢? 
當(dāng)然是先得到這個矩形了。我要先得到這個窗口的句柄,我們才能得到windowrect 然后才能畫。
所以各 下一步就是WindowFromPoint(Point)傳一個鼠標(biāo)點 然后得到這個點的window的hWnd了 哈,很強大的函數(shù)啊。
得到窗口句柄就好辦了。GetWindowRect得到矩形區(qū)域啊,然后用windowdc 畫,用windowdc的原因就是,我們要在整個桌面上都能畫。
這里畫這個矩形有個技巧,我們要畫出來,但是當(dāng)我們不需要這個矩形的時候我們還要給這個顏色畫回原來的背景色。這里算是整個程序的一個難點,考驗畫圖工夫。
dc設(shè)備中默認(rèn)選入的是一個黑色畫筆,一個白色畫刷,也就是說正常我們畫矩形的話會畫出黑邊白底得矩形,現(xiàn)在我們要透明的底,然后畫的黑邊還要可畫回原先的背景色。有一個函數(shù)通過dc調(diào)用  dc.SetROP2(R2_NOTXORPEN);參數(shù)傳這個同或運算,這個函數(shù)的意思就是,拿你設(shè)備中的畫筆畫刷 去跟背景色運算,同或運算。
比如背景有個顏色是10010100011   你的畫刷顏色是白色 也就是111111111111(比如就這么多位)  白色因為是255,255,255所以都是1  
然后進行同或運算得到的是什么?是10010100011(同或,同則1,不同則0)!也就說 還是背景色,這就做到了畫刷透明。然后畫筆是黑色,0000000000
跟背景色同或運算的到得是01101011100 這個。然后這個就是真正畫到屏幕上顯示出來的顏色。怎么在把這個顏色畫沒呢?大家在用這個黑色的畫筆畫一下,在同或運算看看結(jié)果是什么?10010100011 看看是不是又變回去了?吼吼。等會下面貼代碼畫圖這里的。
這個畫圖就完事了。而且窗口句柄我們也通過windowfrompoint得到了。有了窗口句柄我們能得到很多東西了。
比如說窗口類名GetClassName
窗口標(biāo)題GetWindowText
窗口矩形GetWindowRect
窗口id等信息GetWindowLong
進程id   GetWindowThreadProcessId
進程路徑 OpenProcess()   GetModuleFileNameEx();

還可以向窗口中發(fā)消息 sendmessage(這個比較好玩,可以拿你的spy++去關(guān)閉別人的窗口。
然后把他設(shè)置到窗口上就可以了。
代碼貼一小段。

void CMyPic::OnTimer(UINT_PTR nIDEvent)
{
    POINT p;
    ::GetCursorPos(
&p);
    hWnd
=::WindowFromPoint(p);
    CRect rect;
    ::GetWindowRect(hWnd,
&rect);
    CWindowDC dc(NULL);
    CPen redpen(PS_SOLID,
3,RGB(255,0,0));
    dc.SelectObject(
&redpen);
    dc.SetROP2(R2_NOTXORPEN);
    dc.Rectangle(rect);
    
//顯示回去 就向沒畫一樣
    Sleep(300);
    dc.Rectangle(rect);
    ReleaseDC(
&dc);
    CStatic::OnTimer(nIDEvent);
}

這個畫圖在timer里畫,能做到 閃動的巨型。(我選的紅色畫筆,你可以把紅色跟背景同或算算,跟黑色是一樣的,在畫一次就能畫回來背景色)
下面的代碼是 寫我的spy++的第一頁的代碼

void CMyspyDlg::UpdataWindowNormal(HANDLE hWnd)
{
 CString str;
 int state=((CButton *)GetDlgItem(IDC_CHECK1))->GetCheck();
 //窗口句柄
 if (state==BST_CHECKED)
 {
  str.Format(_T("%p"),hWnd);
 }
 else
 {
  str.Format(_T("%d"),hWnd);
 }
 m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_HANDLE)->SetWindowText(str);
 //窗口類名
 TCHAR tempTC[50];
 GetClassName((HWND)hWnd,tempTC,49);
 m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_CLASSNAME)->SetWindowText(tempTC);
 //窗口標(biāo)題
 ZeroMemory(tempTC,100);
 ::GetWindowText((HWND)hWnd,tempTC,49);
 if (*tempTC==_T('\0'))
 {
  m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_TITLE)->SetWindowText(_T("無"));
 }
 else
 {
  m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_TITLE)->SetWindowText(tempTC);
 }
 //窗口矩形
 CRect rect;
 ::GetWindowRect((HWND)hWnd,&rect);
 str.Empty();
 if (state==BST_CHECKED)
 {
  str.Format(_T("x=%x,y=%x,width=%x,hight=%x"),rect.left,rect.top,rect.Width(),rect.Height());
 }
 else
 {
  str.Format(_T("x=%d,y=%d,width=%d,hight=%d"),rect.left,rect.top,rect.Width(),rect.Height());
 }
 m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_WINRECT)->SetWindowText(str);
 //窗口id
 str.Empty();
 LONG l=::GetWindowLong((HWND)hWnd,GWL_ID);
 str.Format(_T("%ld"),l);
 m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_WINID)->SetWindowText(str);
 //進程id
 DWORD dword;
 ::GetWindowThreadProcessId((HWND)hWnd,&dword);
 str.Empty();
 if (state==BST_CHECKED)
 { 
  str.Format(_T("%p"),dword);
 }
 else
 {
  str.Format(_T("%d"),dword);
 }
 m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_PROCESSID)->SetWindowText(str);
 //程序路徑
 HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dword);
 TCHAR src[200];
 GetModuleFileNameEx(hProcess,NULL,src,199);
  m_TabCtrl.m_dlg[0].GetDlgItem(IDC_EDIT_PROSRC)->SetWindowText(src);
}

======================================================================
效果圖

======================================================================

好了 下面記錄下游戲修改器
其實我用的方法很笨的,但是比較簡單。改成功了植物大戰(zhàn)僵尸中的太陽值。
=======================================================================
效果圖

=======================================================================
這個游戲修改 就是讀內(nèi)存,值進行比較,然后找到一些跟你輸入的值相同的地址,記錄在鏈表中,然后讓這個值變化,在對鏈表進行搜索
如果鏈表中的地址中的值也變化了,正確的地址就在這鏈表里,繼續(xù)變化值,之后最后地址確定下來為止,地址確定下來之后就可以修改了。
其中用到得函數(shù) 先是 快照,(我在前面做任務(wù)管理器中寫到過) 得到進程id 進程名等。
然后用openprocess打開方式用要可讀,可寫,或者獲得所有權(quán)PROCESS_ALL_ACCESS。得到進程的句柄。
然后通過進程的句柄讀進程中的數(shù)據(jù)ReadProcessMemory因為虛擬內(nèi)存共有4gb  后2gb是系統(tǒng)用,還有前多少K(不同系統(tǒng)不一樣)也系統(tǒng)用。所以我們只搜索前兩gb ,但是前面那些系統(tǒng)的我們就忽略了,畢竟是小數(shù),不在乎多讀那點了。
ReadProcessMemory這個函數(shù)第一個參數(shù)是進程handle,第二個參數(shù) 是基址(即從那個位置開始讀,是一個地址),第三個參數(shù)是讀出的buff 第四個是讀的大小。 由于內(nèi)存頁是4kb 我們?yōu)榱俗x的速度快 所以我們每次就讀4kb。 讀出這4kb 放入buff中 然后 拿我們要找的數(shù)值比如是100,(我們假定我們的數(shù)是2字節(jié)),在4kb中1字節(jié)1字節(jié)的向后走,兩字節(jié)兩字節(jié)的比較 如果等于100則加入鏈表
DWORD dOneGB=1024*1024*1024;//1gb的地址
 DWORD dBase=0;//基址是0
 DWORD dOnePage=4*1024;//一個內(nèi)存頁4kb
 BYTE buffer[4*1024];//裝一個內(nèi)存也
 WORD value;
 CString str;
 int pos=0;
 POSITION listpos;
//得到我們窗口上輸入的值 value
 GetDlgItem(IDC_EDIT_INPUT)->GetWindowText(str);
 value=_wtoi(str);
 for (dBase;dBase<dOneGB*2;dBase+=dOnePage)//遍歷2gb每次 加一頁  4kb
 {
  if(ReadProcessMemory(hProcess,(LPCVOID)dBase,buffer,4*1024,NULL))//讀一個頁,因為這個讀取是不一定成功的所以加if(有的內(nèi)存系統(tǒng)不讓你讀)
  { 
//進行比較 如果相同加入鏈表CList m_Data;
   for(DWORD b=0;b<dOnePage-1;b++)
   {
    WORD tempword=*((WORD *)(buffer+b));
    if (tempword==value)
    {
     if (pos==0)//如果是頭結(jié)點就 加在頭上,之后就加在后邊
     {
      listpos = m_Data.AddHead(dBase+b);
      pos++;
     }
     else
     {
      listpos = m_Data.InsertAfter(listpos,dBase+b);
     }
    }
   }
  }
 }

這樣這個第一次搜索就完成了。搜出了一堆 等于100的值 的地址,放入了鏈表
下次就是   改變100為150,然后再鏈表中搜索等于150的。
int dataCount=m_Data.GetCount();
 pp=m_Data.GetHeadPosition();
  for (int i=0;i<dataCount;i++)
  {
   DWORD tempvalue=m_Data.GetNext(pp);
//根據(jù)基址讀出兩個字節(jié)的數(shù),然后跟value比較
   ReadProcessMemory(hProcess,(LPCVOID)tempvalue,&buff,2,NULL);
   if(buff==value)
   {
   if (head)
   {
    li.AddHead(tempvalue);
    head=FALSE;
   }
   else
   {
    li.AddTail(tempvalue);
   }
   }
  }
哈哈,然后最后就搜到了那個值得地址,,然后根據(jù)這個地址改變 其中的值就行了

WriteProcessMemory(hProcess,(LPVOID)address,&newValue,2,NULL);
思路倒是很簡單,寫的時候總會出錯誤,或是內(nèi)存錯誤或是中斷的,要耐心調(diào)調(diào)。
為了植物大戰(zhàn)講師的無限陽光,吼吼。go


 

posted on 2011-08-09 15:06 陳曉 閱讀(4077) 評論(8)  編輯 收藏 引用

評論

# re: spy++和游戲修改器 2011-08-10 10:05 zuhd

改變100為150,然后再鏈表中搜索等于150的。

這樣啊,牛!  回復(fù)  更多評論   

# re: spy++和游戲修改器[未登錄] 2011-08-10 12:09 heroboy

先用VirtualQueryEx得到內(nèi)存的屬性。有些內(nèi)存區(qū)域可能是代碼或者文件的映射,不需要查詢。  回復(fù)  更多評論   

# re: spy++和游戲修改器[未登錄] 2011-08-10 12:50 陳曉

對!這位兄臺說的很對,呵呵,當(dāng)時就為了練讀取函數(shù)了,沒有弄這些細(xì)節(jié),如果把你這個條件方里的話會快一些的。@heroboy
  回復(fù)  更多評論   

# re: spy++和游戲修改器[未登錄] 2011-08-10 12:51 陳曉

恩呢,如果用150搜了之后還是還有好些地址的話,那么就繼續(xù)改變這個值,在搜,我搜植物大戰(zhàn)講師里的陽光值的話,一般3次就能找到正確的那個。@zuhd
  回復(fù)  更多評論   

# re: spy++和游戲修改器 2011-08-10 14:02 coolypf

可以做個金山游俠2012版!  回復(fù)  更多評論   

# re: spy++和游戲修改器[未登錄] 2011-08-10 14:57 陳曉

@coolypf
額樓上的哥們說笑啦,哈哈,小弟水平不行啊,哈哈。我寫的這點東西都是很簡單的,難得也不會啊- -我是現(xiàn)學(xué)現(xiàn)賣。。。  回復(fù)  更多評論   

# re: spy++和游戲修改器 2011-08-10 17:23 他她女鞋

看起來還挺不錯的東東。  回復(fù)  更多評論   

# re: spy++和游戲修改器[未登錄] 2011-08-12 21:41 陳曉

@他她女鞋
謝謝支持…  回復(fù)  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一级艳片视频免费观看| 久久视频这里只有精品| 久久黄色级2电影| 亚洲一区尤物| 午夜国产不卡在线观看视频| 99re6这里只有精品视频在线观看| 亚洲成色999久久网站| 久久久久久久久一区二区| 久久久久久久波多野高潮日日| 免费短视频成人日韩| 亚洲精品国产欧美| 亚洲字幕一区二区| 美女精品视频一区| 欧美日韩一视频区二区| 国产精品青草综合久久久久99| 国产一在线精品一区在线观看| 亚洲国产一区二区三区高清 | 亚洲一区精彩视频| 久久中文字幕导航| 国产精品成人一区二区艾草| 在线观看一区欧美| 午夜精品婷婷| 亚洲国产精品黑人久久久| 亚洲一区二区视频| 你懂的网址国产 欧美| 国产精品亚洲片夜色在线| 亚洲激情偷拍| 欧美一级欧美一级在线播放| 亚洲成色www久久网站| 亚洲一区二区三区在线播放| 久久综合精品一区| 国产一本一道久久香蕉| 中文av一区二区| 免费一级欧美片在线观看| 亚洲一二三区精品| 欧美高清视频免费观看| 一区二区日韩精品| 久久午夜视频| 国产亚洲制服色| 亚洲欧美国产精品va在线观看| 欧美成人一区二区三区| 欧美在线视频全部完| 国产精品高潮呻吟久久| 一卡二卡3卡四卡高清精品视频| 欧美成人午夜影院| 久久九九有精品国产23| 国产亚洲一区在线| 久久精品国产亚洲5555| 午夜欧美理论片| 国产精品一卡二| 午夜精品婷婷| 亚洲女人天堂av| 国产精品中文字幕欧美| 亚洲欧美国产精品va在线观看| 一区二区不卡在线视频 午夜欧美不卡'| 免费观看一级特黄欧美大片| 亚洲福利在线看| 美女爽到呻吟久久久久| 欧美a一区二区| 欧美va天堂va视频va在线| 老色鬼久久亚洲一区二区| 香蕉久久夜色精品国产| 欧美三级视频在线播放| 亚洲性xxxx| 日韩视频免费看| 久久久精品国产一区二区三区| 国产精品性做久久久久久| 亚洲尤物在线| 亚洲免费黄色| 国产精品久久久久久妇女6080 | 欧美电影在线免费观看网站| 国产婷婷精品| 欧美高潮视频| 欧美激情欧美狂野欧美精品 | 亚洲乱码精品一二三四区日韩在线 | 亚洲视频一区| 国产精品v日韩精品v欧美精品网站| 国内精品视频在线观看| 免费亚洲网站| 麻豆国产精品va在线观看不卡| 亚洲乱亚洲高清| 欧美高清视频在线观看| 欧美激情一区二区三区成人| 在线综合亚洲欧美在线视频| 亚洲精品免费网站| 欧美日韩一区二区三区四区在线观看| 亚洲一区欧美一区| 久久久噜噜噜久久| 一区二区三区波多野结衣在线观看| 亚洲尤物视频网| 亚洲国产成人高清精品| 亚洲午夜91| 最新热久久免费视频| 亚洲综合清纯丝袜自拍| 亚洲国产成人av在线| 亚洲系列中文字幕| 亚洲福利专区| 欧美一区二区在线免费播放| 一区二区三区精品| 久久久在线视频| 性伦欧美刺激片在线观看| 亚洲国产一二三| 亚洲精品视频在线| 美腿丝袜亚洲色图| 欧美日韩成人| 欧美自拍偷拍| 欧美日韩视频第一区| 久久久久久夜| 国产精品分类| 亚洲欧洲精品一区| 精品1区2区3区4区| 亚洲欧美国产高清| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 久久五月天婷婷| 亚洲欧美日韩综合| 欧美极品在线观看| 欧美aa国产视频| 亚洲黄色成人久久久| 亚洲一区二区三区涩| 亚洲精品一区二区三区四区高清| 欧美在线免费看| 亚洲欧美在线网| 欧美日韩视频免费播放| 欧美jizzhd精品欧美巨大免费| 国产视频精品网| 午夜一区不卡| 亚洲欧美国产另类| 欧美午夜视频在线观看| 亚洲精品在线三区| av成人动漫| 欧美日韩国产美女| 日韩午夜免费| 亚洲综合欧美日韩| 国产精品美女久久久| 一区二区三区高清视频在线观看| 一区二区欧美精品| 国产精品第三页| 亚洲女同在线| 欧美在线999| 激情久久久久久久| 久久岛国电影| 欧美国产一区视频在线观看| 亚洲韩国一区二区三区| 麻豆精品国产91久久久久久| 欧美激情一区二区三区蜜桃视频| 亚洲国产一区二区三区青草影视 | 免费视频一区二区三区在线观看| 伊人夜夜躁av伊人久久| 牛夜精品久久久久久久99黑人 | 久久久最新网址| 在线日韩av片| 欧美日韩视频在线一区二区| 亚洲永久免费| 免费成人你懂的| 在线综合视频| 国产视频自拍一区| 欧美www在线| 亚洲一区二区三区免费在线观看| 久久久久九九视频| 亚洲乱码国产乱码精品精98午夜| 欧美网站在线| 久久爱www.| 欧美专区在线观看一区| 亚洲天堂黄色| 久久精品30| 亚洲国产1区| 欧美日韩在线精品| 亚洲一区尤物| 欧美激情偷拍| 性欧美大战久久久久久久久| 狠狠色综合色综合网络| 欧美激情第1页| 亚洲自拍高清| 亚洲国产视频直播| 欧美一区二区三区在线视频| 国内揄拍国内精品久久| 欧美激情一区二区三级高清视频| 日韩西西人体444www| 久热这里只精品99re8久| 在线亚洲成人| 亚洲大片免费看| 国产嫩草一区二区三区在线观看| 欧美成人免费全部| 欧美在线视频观看免费网站| 91久久精品一区| 久久人91精品久久久久久不卡| 亚洲精品少妇30p| 亚洲特级毛片| 国产伊人精品| 欧美日韩亚洲91| 久久久亚洲国产美女国产盗摄| 亚洲乱码国产乱码精品精| 美女999久久久精品视频| 亚洲嫩草精品久久| 日韩视频精品| 亚洲第一在线综合在线| 国产一区二区看久久| 国产精品高潮粉嫩av| 欧美激情第9页| 玖玖玖免费嫩草在线影院一区|