본문 바로가기

리버싱

(11)
Reversing 훅(Hook) : 예로 군사적으로 아주 중요한곳이 3중으로 경비초소를 설치하였다면 스파이가 몰래경비초소를 하나 추가하였다면 이곳을 통과하는 사람들은 아무 의심없이 동일한 검문 절차를 밟을 것 그러므로 많은 정보를 얻을수 있다 라고 할수있습니다. 이런 행위를 훅을 건다(설치한다 라고 합니다)(Hoocking) Window 운영체제는 GUI를 제공하고 Event Driven 방식으로 작동합니다. 즉 이벤트 발생시 OS가 응용프로그램에 미리 정의된 메시지를 통보하면 그것을 분석하여 작업을 진행합니다. 즉 OS에서 Application 으로 가는 메시지를 가로채는 것입니다. 1) 사용자 키입력 -> OS Message queue 추가 2) 어느 응용프로그램 이벤트인지 파악해서 Application message..
Reversing 코드 패치와 인라인 패치의 차이점 대상 횟수 방법 코드패치 파일 1번 Direct(원하는 위치에 직접패치) 인라인 패치 파일&메모리 파일1번 메모리 매실행 indirect(코드케이브 설치후 메로리에서 영역 복호화 후) Characteristics에 IMAGE_SCN_MEM_WRITE(쓰기 속성)이 추가되어 있다는 것은 프로그램 내에서 복호화 작업을 수행하기 위해서는 반드시 섹션 헤더에 쓰기 속성을 추가해서 해당 메모리에 대한 쓰기 권한을 얻어야 하기 때문이다. 권한없으면 오류 발생하고 보통 일반적 PE 파일 코드 섹션은 쓰기 속성이 없는데 , 패커, Crypter 류의 파일들은 코드 섹션에 쓰기 속성이 존재합니다.
Reversing 실행 파일에서 .reloc 섹션 제거하기 exe 형식 pe 파일 에서 Base Relocation Table 항목은 실행에 큰 영향을 끼치지 않아서 제거 해도 문제 없이 실행된다. 하지만 dll, sys 파일을 Base Relocation Table 이 필수적이다. .reloc 섹션을 정확히 제거하려면 네 단계의 작업을 해야 한다. 1 .reloc 섹션 헤더 정리 2 .reloc 섹션 제거 3 IMAGE_FILE_HEADER 수정 4 IMAGE_OPTIONAL_HEADER 수정
Reversing PUSHAD 명령어 : 현재 레지스터들을 스택에 저장한다.(EAX ~ EDI) POPAD 명령어 : 레지스터를 원래대로 복구하는 명령어 스택에 하드웨어 브레이크 포인트 설치(실행 압축파일 OEP로 빠르게 가는법) 알아보기 POPAD 명령어 이후에 BP설치하기 하드웨어 BP는 CPU에서 지원하는 BP로 BP까지 실행후 멈춤 kernel32. dll, user32.dll 등 주요 시스템 DLL은 OS버전별로 고유 ImageBase를 부여 하였습니다. 그래서 재배치가 필요하지 않지만 , 다른 시스템 DLL들은 고유ImageBase가 있음에도 재배치가 일어난다. Base Relocation Table : PE 재배치 를 한번 읽어 보았는데 어렵다... PE 재배치 작업의 기본 동작 원리 1. 프로그램에서 하드코..
Reversing 패커는 실행파일을 압축해주는 툴인데 결과파일이 .zip .rar이 아닌 실행파일 자체이다. 비손실, 손실 압축(Mp3) 등이 있다. 프로텍터도 있는데 이는 코드를 리버스 코드 엔지니어링으로부터 보호해주는 역활을 하며 이렇게하면 문자열등을 볼수없게 된다. 또한 메모리에 올라갔을때도 코드들을 보호받게된다. UPX 패커를 사용해 보았는데 크기가 주었다 zip보다 압축률이 적은데 실행파일 이기 때문에 PE헤더 가 있어야하고 압축해제 코드가 있어야 하기 때문이다. 압축PE와 원본 PE의 PE헤더는 같다 하지만 차이는 압축PE의 Section1은 size가 0으로 바뀐다. Section 2의 size가 커지는데 이유는 section1의 데이터와 압축해제 코드를 가지고 있기때문이다. 실행되면 압축해제해 Section..
Reversing PE 파일은 어떤 라이브러리를 임포트하고 있는지 IMAGE_IMPORT_DESCRIPTOR 구조체에 명시하고 있다. import : 라이브러리에게 서비스(함수를 제공받는 일) Export : 라이브러리 입장에서 다른 PE 파일에게 서비스(함수)를 제공하는 일 IMAGE_IMPORT_DESCRIPTOR 주요 멤버(RVA) : OriginalFirstThunk : INT(Import Name Table)의 주소(RVA) Name : 라이브러리 이름 문자열의 주소(RVA) FirstThunk : IAT(import address table)의 주소(RVA) *table은 배열을 의미 NT header - IMAGE_OPTIOANL_HEADER32.DataDirectory[1].VirtualAddress = I..
Reversing 섹션의 속성에는 file/memory에서의 시작 위치, 크기, 엑세스 권한 등이 있다. code : 실행, 읽기 권한 data : 비실행 ,읽기, 쓰기 권한 resource : 비실행, 읽기 권한 IMAGE_SECTION_HEADER : 섹션 헤더는 각 섹션별 IMAGE_SECTION_HEADER 구조체의 배열로 되어 있습니다. 주요멤버 (나머지는 사용되지 않음) : VirtualSize // 메모리에서 섹션이 차지하는 크기 VirtualAddress // 메모리에서 섹션의 시작 주소(RVA) SizeOfRawData // 파일에서 섹션이 차지하는 크기 PointerToRawData // 파일에서 섹션의 시작 위치 Characteristics // 섹션의 속성(bit or) name // 아스키가 아니어..
Reversing ollydbg에서 점프할 주소에 빨간 줄 그어져 있는 것은 옵션 - cpu 탭 - Show jump path’, ‘Show grayed path jf jump is not taken’ , ‘Show jumps to selected command' 항목 체크 *PE(pe32) 파일은 window os에서 사용하는 실행파일 형식 32bit 형태를 의미, 64bit는 pe+ , pe32+ pe header(dos header ~ section header)에는 실행되기 위해 필요한 모든 정보가 담겨있다 어떻게 메모리에 적재되고 어디서부터 실행되어야 하고 어떤 dll이 로드되어야 하고 stack/heap의 크기 수많은 정보가 pe header에 구조체 형식으로 저장되어 있다. pe는 파일로 저장되어있을 때와 메..