123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #include "stdafx.h"
- #include "Assist.h"
- BYTE byEAX[8] = {0};
- BYTE byEBX[8] = {0};
- BYTE byECX[8] = {0};
- BYTE byEDX[8] = {0};
- BYTE byEBP[8] = {0};
- BYTE byESP[8] = {0};
- BYTE byESI[8] = {0};
- BYTE byEDI[8] = {0};
- DWORD dwEAX = 0;
- DWORD dwEBX = 0;
- DWORD dwECX = 0;
- DWORD dwEDX = 0;
- DWORD dwEBP = 0;
- DWORD dwESP = 0;
- DWORD dwESI = 0;
- DWORD dwEDI = 0;
- BYTE byNewCall[5] = {0};
- BYTE byOldCall[5] = {0};
- void __declspec(naked) Call_MySaveAsOutputData()
- {
-
- __asm {
-
- mov dwEAX, EAX;
- mov dwEBX, EBX;
- mov dwECX, ECX;
- mov dwEDX, EDX;
- mov dwEBP, EBP;
- mov dwESP, ESP;
- mov dwESI, ESI;
- mov dwEDI, EDI;
-
- mov eax,0x004AB3FC
- mov dl,1
- call dword ptr[eax]
-
- mov EAX, dwEAX;
- mov EBX, dwEBX;
- mov ECX, dwECX;
- mov EDX, dwEDX;
- mov EBP, dwEBP;
- mov ESP, dwESP;
- mov ESI, dwESI;
- mov EDI, dwEDI;
-
- ret
- }
- }
- DWORD dwGoNextAddr = 0x00417B2A;
- void __declspec(naked) MyGo()
- {
-
- __asm{
-
- mov dwEAX, EAX;
- mov dwEBX, EBX;
- mov dwECX, ECX;
- mov dwEDX, EDX;
- mov dwEBP, EBP;
- mov dwESP, ESP;
- mov dwESI, ESI;
- mov dwEDI, EDI;
- }
- MessageBox(NULL, _T("MyGo Function"), _T("MyGo"), MB_OK);
- __asm{
-
- mov EAX, dwEAX;
- mov EBX, dwEBX;
- mov ECX, dwECX;
- mov EDX, dwEDX;
- mov EBP, dwEBP;
- mov ESP, dwESP;
- mov ESI, dwESI;
- mov EDI, dwEDI;
-
- jmp dwGoNextAddr;
- }
- }
- void Call_MyGo()
- {
- BYTE szMyCall[5] = {0};
- szMyCall[0] = 0xE9;
- *(LPDWORD)(&szMyCall[1]) = (DWORD)MyGo - 0x00417B25 - 5;
- HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
-
- if ( !ReadProcessMemory(GetCurrentProcess(), (LPVOID)0x00417B25, byOldCall, 5, NULL) )
- {
- MessageBox(NULL, _T("读取内存失败"), _T("提示"),MB_OK);
- return;
- }
-
- if ( !WriteProcessMemory(hProc, (LPVOID)0x00417B25, szMyCall, 5, NULL) )
- {
- MessageBox(NULL, _T("写入内存失败"), _T("提示"),MB_OK);
- return;
- }
- MessageBox(NULL, _T("替换成功"), _T("提示"), MB_OK);
- }
|