日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

      首頁(yè)編程開發(fā)其它知識(shí) → MFC編程修改內(nèi)存數(shù)據(jù)程序

      MFC編程修改內(nèi)存數(shù)據(jù)程序

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2013/3/21 22:01:37字體大。A-A+

      作者:西西點(diǎn)擊:0次評(píng)論:0次標(biāo)簽: 修改內(nèi)存

      • 類型:修改器(游戲工具)大小:365KB語(yǔ)言:中文 評(píng)分:6.1
      • 標(biāo)簽:
      立即下載

      這是我的界面圖:

      程序代碼:

      MemoRepairDlg.h:

      // MemoRepairDlg.h : 頭文件

      //
      
      #pragma once
      #include "afxwin.h"
      
      
      // CMemoRepairDlg 對(duì)話框
      class CMemoRepairDlg : public CDialogEx
      {
      // 構(gòu)造
      public:
          CMemoRepairDlg(CWnd* pParent = NULL);    // 標(biāo)準(zhǔn)構(gòu)造函數(shù)
          ~CMemoRepairDlg();            //析構(gòu)函數(shù),釋放進(jìn)程句柄
      
      // 對(duì)話框數(shù)據(jù)
          enum { IDD = IDD_MEMOREPAIR_DIALOG };
      
          protected:
          virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
      
      // 實(shí)現(xiàn)
      protected:
          HICON m_hIcon;
      
          // 生成的消息映射函數(shù)
          virtual BOOL OnInitDialog();
          afx_msg void OnPaint();
          afx_msg HCURSOR OnQueryDragIcon();
          DECLARE_MESSAGE_MAP()
      public:
          afx_msg void OnBnClickedButton1();
          afx_msg void OnBnClickedButton2();
      
      
      public:
          DWORD addrList[1024];    //地址列表
          int addrCount;            //有效地址個(gè)數(shù)
          HANDLE hProcess;        //目標(biāo)進(jìn)程句柄
          BOOL conFirst;            //第一次查找
      public:
          BOOL FirstFind(DWORD valueChange);
          BOOL NextFind(DWORD valueChange);
          BOOL WriteMemory(DWORD valueAddr, DWORD valueChange);
          BOOL ComparePage(DWORD baseAddr, DWORD valueChange);
          void ShowList();
          afx_msg void OnBnClickedStartprocess();
          CEdit editBox1;
          CEdit editBox2;
          CEdit editBox3;
          int editValue;
          int editValue3;
          CString editStr;
      };

      MemoRepairDlg.cpp:

      // MemoRepairDlg.cpp : 實(shí)現(xiàn)文件

      //
      
      #include "stdafx.h"
      #include "MemoRepair.h"
      #include "MemoRepairDlg.h"
      #include "afxdialogex.h"
      
      #ifdef _DEBUG
      #define new DEBUG_NEW
      #endif
      
      
      // CMemoRepairDlg 對(duì)話框
      
      CMemoRepairDlg::CMemoRepairDlg(CWnd* pParent /*=NULL*/)
          : CDialogEx(CMemoRepairDlg::IDD, pParent)
          , editValue(0)
          , editValue3(0)
          , editStr(_T(""))
      {
          m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
          addrCount = 0;
          conFirst = TRUE;
      }
      
      void CMemoRepairDlg::DoDataExchange(CDataExchange* pDX)
      {
          CDialogEx::DoDataExchange(pDX);
          DDX_Control(pDX, IDC_EDIT1, editBox1);
          DDX_Control(pDX, IDC_EDIT2, editBox2);
          DDX_Control(pDX, IDC_EDIT3, editBox3);
          DDX_Text(pDX, IDC_EDIT2, editValue);
          DDX_Text(pDX, IDC_EDIT3, editValue3);
          DDX_Text(pDX, IDC_EDIT1, editStr);
      }
      
      BEGIN_MESSAGE_MAP(CMemoRepairDlg, CDialogEx)
          ON_WM_PAINT()
          ON_WM_QUERYDRAGICON()
          ON_BN_CLICKED(IDC_BUTTON1, &CMemoRepairDlg::OnBnClickedButton1)
          ON_BN_CLICKED(IDC_BUTTON2, &CMemoRepairDlg::OnBnClickedButton2)
          ON_BN_CLICKED(IDC_StartProcess, &CMemoRepairDlg::OnBnClickedStartprocess)
      END_MESSAGE_MAP()
      
      // CMemoRepairDlg 消息處理程序
      
      BOOL CMemoRepairDlg::OnInitDialog()
      {
          CDialogEx::OnInitDialog();
      
          // 設(shè)置此對(duì)話框的圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對(duì)話框時(shí),框架將自動(dòng)
          //  執(zhí)行此操作
          SetIcon(m_hIcon, TRUE);            // 設(shè)置大圖標(biāo)
          SetIcon(m_hIcon, FALSE);        // 設(shè)置小圖標(biāo)
      
          // TODO: 在此添加額外的初始化代碼
      
          return TRUE;  // 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUE
      }
      
      // 如果向?qū)υ捒蛱砑幼钚』粹o,則需要下面的代碼
      //  來(lái)繪制該圖標(biāo)。對(duì)于使用文檔/視圖模型的 MFC 應(yīng)用程序,
      //  這將由框架自動(dòng)完成。
      
      void CMemoRepairDlg::OnPaint()
      {
          if (IsIconic())
          {
              CPaintDC dc(this); // 用于繪制的設(shè)備上下文
      
              SendMessage(WM_IconERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
      
              // 使圖標(biāo)在工作區(qū)矩形中居中
              int cxIcon = GetSystemMetrics(SM_CXICON);
              int cyIcon = GetSystemMetrics(SM_CYICON);
              CRect rect;
              GetClientRect(&rect);
              int x = (rect.Width() - cxIcon + 1) / 2;
              int y = (rect.Height() - cyIcon + 1) / 2;
      
              // 繪制圖標(biāo)
              dc.DrawIcon(x, y, m_hIcon);
          }
          else
          {
              CDialogEx::OnPaint();
          }
      }
      
      //當(dāng)用戶拖動(dòng)最小化窗口時(shí)系統(tǒng)調(diào)用此函數(shù)取得光標(biāo)
      //顯示。
      HCURSOR CMemoRepairDlg::OnQueryDragIcon()
      {
          return static_cast<HCURSOR>(m_hIcon);
      }
      
      void CMemoRepairDlg::OnBnClickedButton1()
      {
          // TODO: 在此添加控件通知處理程序代碼
          int value;        //查找的值
          UpdateData(TRUE);
          value = editValue;
          if (conFirst == TRUE)
          {
              FirstFind(value);        //進(jìn)行第一次查找
              ShowList();                    //打印出結(jié)果
              conFirst = FALSE;
          }
          else
          {
              NextFind(value);        //進(jìn)行下一次查找
              ShowList();                //打印出結(jié)果
          }
          if (addrCount == 1)
          {
              MessageBox("OK, You Can Change Now!");
          }
          else
              MessageBox("NO, You Can't Change!");
      }
      
      void CMemoRepairDlg::OnBnClickedButton2()
      {
          // TODO: 在此添加控件通知處理程序代碼
          if (addrCount > 1 || addrCount == 0)
          {
              MessageBox("Please Search Again!");
          }
          else
          {
              int valueWillChange;   //要修改的值
              UpdateData(TRUE);
              valueWillChange = editValue3;
              WriteMemory(addrList[0], valueWillChange);
          }
      }
      
      
      void CMemoRepairDlg::OnBnClickedStartprocess()
      {
          // TODO: 在此添加控件通知處理程序代碼
      
          char szFileName[] = "Testor.exe";
          STARTUPINFO starUpInfo = {sizeof(starUpInfo)};
          PROCESS_INFORMATION process_information;
          //啟動(dòng)測(cè)試程序進(jìn)程
          ::CreateProcess(NULL, szFileName, NULL, NULL, FALSE,CREATE_NEW_CONSOLE,
              NULL, NULL, &starUpInfo, &process_information);
          //關(guān)閉線程句柄
          ::CloseHandle(process_information.hThread);
          hProcess = process_information.hProcess;
      
      }
      CMemoRepairDlg::~CMemoRepairDlg()
      {
          ::CloseHandle(hProcess);
      }
      
      BOOL CMemoRepairDlg::ComparePage(DWORD baseAddr, DWORD valueChange)
      {
          BYTE pageByte[4096];
          if (!::ReadProcessMemory(hProcess,(LPVOID)baseAddr, pageByte,4096,NULL))
          {
              return FALSE;        //此頁(yè)不可讀
          }
          //在這頁(yè)中查找
          DWORD* pageDword;
          for(int i=0; i<(int)4*1024; i++)
          {
              pageDword = (DWORD*)&pageByte[i];
              if (pageDword[0] == valueChange)
              {
                  if (addrCount >= 1024)
                  {
                      return FALSE;
                  }
                      //添加到全局變量中
                  addrList[addrCount] = baseAddr + i;
                  addrCount++;
              }
          }
      }
      BOOL CMemoRepairDlg::FirstFind(DWORD valueChange)
      {
          const DWORD dwOneGB = 1024*1024*1024;
          const DWORD dwOnePage = 4096;
          if (hProcess == NULL)
          {
              return FALSE;
          }
          //操作系統(tǒng)類型
          DWORD systemBase;
          OSVERSIONINFO vinfo ={sizeof(vinfo)};
          ::GetVersionEx(&vinfo);
          if (vinfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
          {
              systemBase = 4*1024*1024;
          }
          else
          {
              systemBase = 640*1024;
          }
          //在開始地址到2GB的地址空間查找
          for (; systemBase < 2*dwOneGB; systemBase += dwOnePage)
          {
              ComparePage(systemBase, valueChange);
          }
          return TRUE;
      }
      
      BOOL CMemoRepairDlg::NextFind(DWORD valueChange)
      {
          //保存地址個(gè)數(shù),初始化addrCount的值
          int mOrgCnt = addrCount;
          addrCount = 0;
          BOOL bRet = FALSE;
          DWORD dwReadValue;
          for (int i=0; i<mOrgCnt; i++)
          {
              if (::ReadProcessMemory(hProcess,(LPVOID)addrList[i],&dwReadValue,sizeof(DWORD),NULL))
              {
                  if (dwReadValue == valueChange)
                  {
                      addrList[addrCount] = addrList[i];
                      addrCount++;
                      bRet = TRUE;
                  }
              }
          }
          return bRet;
      }
      
      void CMemoRepairDlg::ShowList()
      {
          editStr ="";
          CString str="";
          UpdateData(FALSE);
          editStr.Format("%d個(gè)相同的地址.",addrCount);
          for(int i=0; i<addrCount; i++)
          {
              str.Format("%s %d '\n';",editStr, addrList[i]);
              editStr = str;
          }
          UpdateData(FALSE);
      
      }
      
      BOOL CMemoRepairDlg::WriteMemory(DWORD valueAddr, DWORD valueChange)
      {
          return ::WriteProcessMemory(hProcess, (LPVOID)valueAddr, &valueChange, sizeof(DWORD), NULL);
      }

      再就是新建一個(gè)程序,作為啟動(dòng)的進(jìn)程程序:Testor

      這個(gè)程序的Testor.exe文件將影響到上面啟動(dòng)進(jìn)程的路徑。 Testor.cpp:

      #include <iostream>

      using namespace std;
      
      int ChangeNum = 0;        //全局變量
      
      int main()
      {
          int insideNum = 200;        //局部變量
          ChangeNum = 1600;
      
          while (true)
          {
              printf(" insideNum = %d, addr = %X; ChangeNum = %d, addr = %X \n",
                  ++insideNum, &insideNum, ++ChangeNum, &ChangeNum);
              getchar();
          }
          return 0;
      }

       運(yùn)行過(guò)程圖:

      至于實(shí)現(xiàn)原理:我感覺最奇妙的是那兩次搜索。兩次搜索就像坐標(biāo)一樣,能找到具體的地址。

        生死狙擊輔助
        (300)生死狙擊輔助
        生死狙擊輔助是專門針對(duì)于生死狙擊的一系列的工具的修改器和輔助大全,生死狙擊輔助這里有生死狙擊輔助大全生死狙擊修改器大全生死狙擊輔助器下載死狙擊輔助刷金幣生死狙擊爆頭輔助生死狙擊愛尚輔助生死狙擊刷水晶軟件生死狙擊刷槍輔助等一系列的.生生死狙擊輔助修改器,生死狙擊刷槍軟件免費(fèi)版也是不錯(cuò)的,生死狙擊是首款無(wú)插件真第一人稱射擊網(wǎng)頁(yè)游戲網(wǎng)頁(yè)游戲,是輔助多少有點(diǎn)毒,無(wú)毒不輔助,這里生死狙擊輔助大全等你來(lái)下載。...更多>>

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)
        推薦文章

        沒有數(shù)據(jù)