본문 바로가기

Win API) 메모리 값 읽기 WinAPI로 메모리 값 읽기. Pin을 이용하여 ReadFile 인자를 전역변수로 잡아두고 After에서 읽은 결과를 뽑아내고자 한다.포인터 변수에 메모리 주소를 담았는데 *를 하나 더 붙이니 에러가 난다. 이럴 경우 윈도우 API 함수인 ReadProcessMemory() 함수를 쓰면 된다.프로세스 핸들이야 GetCurrentProcess() 함수로 받아오면 되고, 나머지는 선언해서 인자로 주면 된다. PIN_LockClient();WINDOWS::BYTE *tmp_buffer = new WINDOWS::BYTE[tmp_size]; //ReadFile 결과 버퍼 내용을 읽어들임.WINDOWS::HANDLE cprocess = WINDOWS::GetCurrentProcess();TraceFile
메모리 값을 Hex 문자열로 출력하기 PIN API 함수를 이용하여 메모리 값을 Hex문자열로 출력하기. WINDOWS::BYTE 타입의 배열을 선언하고 메모리 값을 읽고 파일로 출력하면 Byte값이 hex 형태로 잘 나오는데, ASCII로 표현 가능한 문자는 ASCII 문자로 출력이 된다...!!ㅜㅜ PIN_API에서 ADDRINT 값을 hex 형태의 문자열로 바꿔주는 함수인 hexstr() 함수를 지원한다.다양한 타입을 받아들이므로 쓰는데 큰 무리가 없다. hexstr(바꿀문자열, width)여기서 width는 자릿수라고 생각하면 된다. width 값을 주지 않을 경우 0x0A는 0xA로 출력이 된다.원하는 자릿수를 명시하여 값을 맞추자. 나는 BYTE별로 출력하고 있으므로 width를 2로 주었다. 원하던 대로 hex 값들이 두자릿수에..
명령어 주소를 이미지이름+나머지로 나타내기 [PinTool] 명령어 주소를 '이미지이름 + 나머지'로 출력하기. Pintool에서 InsertCall로 함수를 삽입할 때 지금 보고 있는 위치가 어디인지 식별하기 위해 인자로 IARG_INS_PTR을 넘겨 현재 명령어의 주소를 받아 파일로 출력하곤 한다. Imagebase는 자주 바뀌므로 IDA를 통해 본다던지 등에서 불편함이 있을 때가 많은데, IDA와 병행해서 보기 편하게 'dll+나머지주소'로 출력한다면 훨씬 수월하게 추적이 가능하다. 자주 사용하는 방식이므로 기록해두고자 한다. 넘겨받은 IARG_INS_PTR로 '현재 명령어 주소'는 가지고 있는 상태라고 가정한다. 현재 명령어가 속한 이미지를 찾기 위해서는 IMG_FindByAddress() 함수를 사용한다.이로써 img object를 얻었..