본문 바로가기

(임계영역) CriticalSection API 함수 정리 (임계영역) CriticalSection API 함수 정리 뮤텍스와 비슷한 개념이지만, 임계영역은 '같은' 프로세스 내부의 스레드를 동기화 한다. (속도 더 빠름) 당연히 공유자원 사용에서 발생하는 문제를 유발하지 않으려면 한번에 하나의 스레드만 진입 해야한다.관련 API 함수를 알아보자. 출처 : https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-tryentercriticalsection [ 임계 영역 사용 흐름 ] 1) 임계영역 초기화InitializeCriticalSectionInitializeCriticalSectionAndSpinCount 2) 임계영역 소유권 획득/반환 --- 상호 배타적 접근을 만족하며 프로세스..
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를 얻었..
EXIF Format Exif format 이란?: Exchangable Image File의 약자로 기본적으로 JPEG file format과 동일하다.★ "사진의 정보" & "썸네일 사진"을 담는다. 예를 들면 쉽게 이해가 된다.[카메라 정보]제조 업체 : Apple카메라 모델 : iPhone 6s [이미지 정보]사진 크기 : 2192 * 2921너비 : 2192픽셀높이 : 2921픽셀수평 해상도 : 72 DPI수직 해상도 : 72 DPI등의 정보들이 담겨있는데, 이 정보들이 바로 JPEG포맷에 삽입된 Exif format이다. JPEG라면 파일의 시작은 항상 SOI(Start of Image) Marker인 "FF D8"이다. 다음으로 APP0(JFIF)과 APP1(Exif) marker, 이후..
JPEG 헤더 구조 JPEG header structure JPEG, JPG는 손실 압축된 파일이다. 불필요한 픽셀들을 제거하는 방식으로 좋은 화질을 유지하며 큰 압축 효과를 얻지만 원본과는 어느정도 차이가 발생한다. 아래 설명에서 JFIF( JPEG File Interchange Format)는 JPEG 인코딩을 준수하는 파일을 JIF(JPEG Interchange Format)로 변환하기 위한 format이다. JFIF는 JFIF Marker들과 JFIF Marker Segment들로 구성된다.(Segment없이 Marker만 독립적으로 있기도 함.) 우선 파일의 전체적인 틀은 다음과 같다. JFIF file structure Segment Code Description SOI FF D8 Start Of Image를 의..
Adaptive Huffman coding Adaptive Huffman Coding ( Dynamic Huffman Coindg )http://ben-tanen.com/adaptive-huffman/
LZ77 알고리즘 LZ77 알고리즘 (LZ77 Encoding): LZ77알고리즘은 사전 방식 ( Dictionary methods )을 채택한다. 즉, 반복적으로 나오는 문자열을 압축한다. zip, gzip, pkzip 등에서 사용되는 압축 알고리즘이다.다른 알고리즘과 결합되어 deflate 방식 등으로 사용된다. Pseudo-Code 는 다음과 같다.1 begin2 fill view from input3 while (view not empty) do4 begin5 find longest prefix p of view starting in coded part6 i = position of p in window7 j = length of p8 x = first char after p in view9 output( i , ..