記憶體修改器實現原始碼

2021-06-01 18:21:17 字數 2912 閱讀 5924

#include "stdafx.h"  

#include #include#include #includeusing namespace std;

dword g_arlist[1024];

int g_nlistcnt;

handle g_hprocess;

bool writememory(dword dwaddr, dword dwvalue);

void showlist(void);

bool compareapage(dword dwbaseaddr, dword dwvalue);

bool findnext(dword dwvalue);

bool findfirst(dword dwvalue);

bool findfirst(dword dwvalue)

dword dwbase;

osversioninfo vi = ;

::getversionex(&vi);

if (ver_platform_win32_windows == vi.dwplatformid)

else

for (; dwbase < 2 * dwonegb; dwbase += dwonepage)

return true;

} bool compareapage(dword dwbaseaddr, dword dwvalue)

dword* pdw = null;

int i = 0;

for (i = 0;i < (int)4 * 1024 -3; i++)

g_arlist[g_nlistcnt++] = dwbaseaddr + i;

} }

return true;

} void showlist(void)

} bool findnext(dword dwvalue)

} }

return bret;

} bool writememory(dword dwaddr, dword dwvalue)

bool getdebugpriv()

if ( ! lookupprivilegevalue( null, se_debug_name, &sedebugnamevalue ) )

tkp.privilegecount = 1;

tkp.privileges[0].luid = sedebugnamevalue;

tkp.privileges[0].attributes = se_privilege_enabled;

if (!adjusttokenprivileges( htoken, false, &tkp, sizeof tkp, null, null ) )

return true;

}int main(int argc, char* argv)

// set the size of the structure before using it.

pe32.dwsize = sizeof( processentry32 );

// retrieve information about the first process,

// and exit if unsuccessful

if( !process32first( hprocesssnap, &pe32 ) )

char proname = "memtest.exe";

// now walk the snapshot of processes, and

// display information about each process in turn

while( process32next( hprocesssnap, &pe32 ) )

if(strcmp(proname,pe32.szexefile) != 0)

else

//else

////printf( "\n process id = 0x%08x", pe32.th32processid );

//printf( "\n thread count = %d", pe32.cntthreads );

//printf( "\n parent process id = 0x%08x", pe32.th32parentprocessid );

//printf( "\n priority base = %d", pe32.pcpriclassbase );

//if( dwpriorityclass )

// printf( "\n priority class = %d", dwpriorityclass );

list the modules and threads associated with this process

} //terminateprocess(hprocess, 0);

g_hprocess = hprocess;

dword dwv = ivalue;

findfirst(dwv);

dword dwaddr = g_arlist[0];

dword dwvalue = 1000;

for (int i = 1; i < g_nlistcnt; i++)

closehandle(hprocess);

closehandle( hprocesssnap );

getchar();

return 1;

} 程式流程,首先是提高操作許可權,然後遍歷所有的程序找到要操作的程序,然後在該程序中搜尋要修改的變數的值,得到包含該值的所有記憶體位址,

根據需要修改相應記憶體的值即可

Win32 實現記憶體修改器

在遊戲執行中啟動修改器,輸入遊戲當前想要修改的金幣 礦石 木材 的數值 找到程式執行時的程序id,windows為每個程序都分配4gb的虛擬位址空間,我們只需要在虛擬位址空間去遍歷儲存數值與遊戲中數值相同的位址,去修改它即可,但需要注意僅搜尋一次得到的儲存此數值的位址極可能不唯一,故在得到多個位址時...

C 製作記憶體修改器

先看效果圖 其實 搞這個東西 主要是因為 不久前看到乙個c 寫的外掛程式 頓時就來了興趣 當時看了之後 覺得不爽的就是 那個位址是寫死在程式裡面的是固定的 而且是用其他東西掃出來的位址 頓時就覺得不爽了 要這個位址也是自己寫的程式掃出來的那才有成就感 於是呼這東西就這樣誕生了 在做之前 我感覺這東西...

MongoDB 修改器push(Java實現)

由於表結構設計中需要對內嵌文件進行新增,如下 name joli age 24 course 05 利用set修改器時,可以修改內嵌文件形式,實現如下 basicdbobject use1 new basicdbobject use1.put 時間 time use1.put id new obje...