ntdll.dll의 NtQueryInformationProcess를 활용한 안티디버깅 방법과 우회 방법에 대해 알아본다. 참고로 NtQueryInformationProcess는 zwQueryInformationProcess의 wrapper 함수로 동일하다고 생각하면 된다. NtQueryInformationProcess 안티디버깅 방식은 2번째 인자인 PrecessInfomrationClass에 어떤 값을 주느냐에 따라 총 3가지 방법으로 나뉘게 된다. (0x7/0x1E/0x1F) __kernel_entry NTSTATUS NtQueryInformationProcess( IN HANDLE ProcessHandle, IN PROCESSINFOCLASS ProcessInformationClass, OUT PV..
아주아주 옛날 취약점이지만, 실제 크래쉬 덤프에서의 기초적인 bof를 이해하고 익스플로잇 코드를 짜보는 시뮬레이션을 하기에는 이만한 취약점도 없는 것 같다. 요즘 소프트웨어는 패치 이력도 오래됐고 기본적인 보안코딩은 어느정도 갖추고 있기 때문에 이런류의 간단한 bof는 거의...... 없는 것 같다. '.asx' Local Stack Overflow 취약점 정보 곰플레이어의 오래된 취약점이고 asx파일로 인해 bof가 일어난다는 사실만 알면 사실 분석하기 엄청 어려운 취약점은 아니지만, 최대한 해당 사실을 모른다고 가정하고 크래쉬 파일만 가지고 분석을 해보았다. 크래쉬 파일은 해당 버전의 곰플레이어를 BFF 퍼저로 돌려서 얻었다. - 취약 프로그램: Gom Player - 버전: 2.0.12.3375 -..
간단한 IDA 사용법이라고 할지... 개인적으로 분석할 때 알고있으면 유용하다고 생각하는 팁들을 정리해보려 한다. (+ 아직 몇가지 밖에 없는데 생각날 때마다 계속 추가될 예정이다) 함수 관련 함수 설정 (Create Function) 가끔 함수 시작지점이 맞는데 함수 지정이 안되어 있어서 함수로 인식이 안되는 경우가 있다. 이럴 경우 프롤로그 시작부분에 커서를 놓고 마우스 우클릭을 하면 'Create function'이 있는데 이걸 클릭해주면 된다. 이전 분기 찾기 아래와 같이 분기가 상당히 복잡한데 예를들어 원하는 블록의 이전 블록을 찾고싶다면 복잡한 화살표를 일일이 눈으로 따라서 찾아가지 않고도 화살표를 두번 클릭하면 자동으로 이전 블록이 찾아진다. 코드 관련 옵코드 보기 옵코드를 같이 보고 싶다면..
바이너리 디핑 플러그인으로 bindiff, diaphora가 유명하다. 아마 diaphora보다는 bindiff를 많이 들어봤을 것 같다. 바이너리 디핑은 보통 바이너리의 패치 전후를 비교하거나 추가 취약점 발견을 위해서 많이 사용한다. bindiff 설치 및 사용에 있어서 삽질시간이 상당히 길었기 때문에 설치, IDa Plugin 설정, 사용방법 및 기타 에러 해결과정을 작성한다.참고로 IDA 플러그인으로 사용하는 것은 에러 발생없이 전부 잘됐는데 플러그인으로가 아닌 bindiff 프로그램을 사용하는 것에서 문제가 좀 있었다. 진행 환경은 윈도우10 x64에 파이썬 3.8, 자바 1.8.0_241이고 바이너리는 총 2개를 사용해봤는데 처음엔 바로 될줄 알고 실제 분석 예정이던 netcam arm파일을 ..
C언어로 개발하는 PE Viewer(PE 뷰어) 세번째 포스팅에서는 지난 포스팅의 NT 헤더에 이어서 섹션 헤더(IMAGE_SECTION_HEADER) 구조체 배열을 파싱해볼 것이다. 섹션 헤더는 정해진 갯수대로 있는 것이 아니라 PE 파일마다 다르기 때문에 분석 후 파싱하는 코드를 짤 때 주의해야 한다. Section Header (IMAGE_SECTION_HEADER) 섹션 헤더의 IMAGE_SECTION_HEADER 구조체는 하나가 아니라 구조체 배열이다. IMAGE_SECTION_HEADER 정의 IMAGE_NT_HEADER 구조체에 이어서 IMAGE_SECTION_HEADER 구조체의 배열이 온다. PE 파일은 code, data, resource 등을 각각의 섹션으로 나누어 저장하는데 이에 관..
C언어로 개발하는 PE Viewer(PE 뷰어) 두번째 포스팅에서는 NT 헤더(IMAGE_NT_HEADERS) 구조체를 파싱해볼 것이다. 찾는 부분이 아니라면 PE Viewer 관련 다른 포스팅을 확인해보길 바란다. 이번 포스팅은 상당히 길다. 나누기가 애매해서 그냥 한꺼번에 올렸다. NT Header (IMAGE_NT_HEADER) IMAGE_NT_HEADER 구조체의 시작 위치는 IMAGE_DOS_HEADER 구조체의 e_lfanew 변수를 참조해 구할 수 있다. 시작 위치: IMAGE_DOS_HEADER.e_lfanew 크기: 248바이트(0xF8) IMAGE_NT_HEADERS 정의 IMAGE_NT_HEADER 구조체는 아래 사진에서 구분지어있는 순서대로 ‘Signature’, ‘FileHeade..
C언어로 개발하는 PE Viewer(PE 뷰어) 첫번째 포스팅에서는 DOS 헤더의 IMAGE_DOS_HEADER 구조체를 분석하고 파싱해볼 것이다. 한꺼번에 작성하려니, 포스팅 길이가 너무 길어져서 부득이하게 분할하게 되었다. IMAGE_NT_HEADERS 구조체를 포함한 다른 헤더나 섹션 관련은 이 다음 포스팅들을 확인해주기 바란다. 시작하기에 앞서 PE Viewer(PE 뷰어) 개발의 본격적인 시작인 IMAGE_DOS_HEADER 파싱에 앞서 간단히 부수적? 요소들을 설명하고 시작하려 한다. PE 파일 체크 및 x32/x64 체크 제일 먼저, PE 파일인지에 대한 확인과 x32와 x64 체크를 수행하는데 이는 IMAGE_FILE_HEADER의 Machine을 이용해 '0x14c -> 32bit, 0x..