메모리 코드패치 소스

2013. 7. 2. 14:57




메모리 코드패치 소스입니다.

점검하다 보니 한 곳에서 흔히 쓰이는 자바스크립트가 아니라 로드된 DLL 에서 우클릭을 막는 곳이 있었습니다.

처음에 리버싱을 통해 직접 해당 jmp 루틴을 수정했는데...오오 무결성 체크를 한 뒤 원본으로 복구해 버리더군요.

그래서 메모리 패치용 코드를 간단하게 만들었습니다. 별것 없고 리버싱해서 찾은 분기문 루틴을 nop 처리 하는

코드입니다. 이런 경우를 대비해서 주요 함수나 루틴에 메모리 체크섬 계산 루틴등을 추가하면 좋을 듯 하네요. :)


# code_patch.cpp

#include <stdio.h>

#include <windows.h>

#include <tlhelp32.h>


int main(int argc, char* argv[])

{

if(argc != 2){

printf("Usage : %s <pid>\n",argv[0]);

system("pause");

return 0;

}


DWORD pid = atoi(argv[1]);

HANDLE hProcess;

HANDLE hSanp = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);

    hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pid);

    

MODULEENTRY32 mme;

BOOL b = Module32First(hSanp, &mme);

    int lvl;

    

    BYTE newdata[]={0x90, 0x90}; 

    DWORD newdatasize = sizeof(newdata);  

while(b)

{

if(lstrcmp(mme.szModule,"******Module.dll")==0) {

            printf("[+]Found Target DLL: [0x%8x] %s\n", mme.modBaseAddr, mme.szModule);

            WriteProcessMemory(hProcess, (LPVOID)(mme.modBaseAddr+0x77d0), &newdata, newdatasize, NULL);

            ReadProcessMemory(hProcess, (LPVOID)(mme.modBaseAddr+0x77d0), &lvl, 2, 0);

            printf("[+]Success! : eb74 -> %04x\n",lvl);

        }

b = Module32Next(hSanp, &mme);

}

    system("pause");

CloseHandle(hSanp);

}




+ Recent posts