CodeEngn Basic RCE L04 문제 확인 해당 프로그램에 걸려있는 안티디버깅 함수 이름을 찾아내는 문제이다. CodeEngn Basic RCE L04 분석 IDA로 확인해보니, IsDbuggerPresent 함수가 임포트되어 있다. 호출하는 곳을 살펴보니 그냥 main에서 호출되고 있다. IsDebuggerPresent 함수 호출 후에 'test eax eax'로 eax 반환값이 0인지 확인하고 있다. 0이라면 오른쪽 분기를 타게 된다. IsDebuggerPresent 함수 호출 부분으로 가서 직접 반환값을 확인해보자. 호출 후 EAX를 확인하니 1이다. 위에서 0인 경우를 확인하고 있었으니 디버깅 중인 경우에는 반환값이 1이고 아닌 경우에는 0인 모양이다. 당연하게도 그냥 실행시켜보면 디버깅..
CodeEngn Basic RCE L03 문제 확인 비주얼베이직에서 스트링 비교 함수를 묻고있다. 구글링으로도 알 수 있지만, 공부하는 입장이므로 분석을 수행해보자. 처음엔 다음과 같이 dll이 없다고 떠서 이것부터 문제인 줄 알았다. 그래서 IDA에서 string 관련 함수를 확인했는데 vba 관련 여러 함수 중에서 vbaStrCmp라는 함수가 눈에 띈다. 어쨋든 dll은 설치해주면 되는 문제였다. dll을 설치하고 나면 아래와 같이 정상적인 UI를 확인할 수 있다. Regcode를 입력받고 있기 때문에 Registrieren을 클릭하면 입력해준 코드가 유효한 코드인지 확인하는 작업을 거칠 것이다. CodeEngn Basic RCE L03 분석 확인해준 함수가 실제로 실행이 되는지 확인하기 위해 imp..
CodeEngn Basic RCE L02 문제 확인 패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겨 패스워드를 찾아내야 하는 문제이다. 실행파일이 손상되었기 때문에 다음과 같이 실행이 되지 않는다. CodeEngn Basic RCE L02 분석 IDA로 확인해보려 했는데, 패킹되어있는 파일이라 어셈 코드를 정확히 볼 수 없다. 실행이 되도록 만드는게 문제의 목적인 것 같지만 그냥 HxD로 들어있는 문자열을 확인해보자. 분기문 후 경고창에 나올것 같은 문자열과 함께 패스워드스러워 보이는 문자열이 존재한다.
2016년에 작성했던 풀이를 현재 블로그에 옮깁니다(하루에 2~3개씩 옮길 예정). CodeEngn Basic RCE L01 문제 확인 HDD를 CD-Rom으로 인식시키기 위한 GetDriveTypeA의 리턴값을 묻고 있다. 드라이브 타입을 얻어오는 GetDriveTypeA 함수 호출 부분 위주로 분석해보면 될 것 같다. CodeEngn Basic RCE L01 문제 풀이 실행파일을 실행시켜보니 'Make me think your HD is a CD-Rom'이라는 경고창이 뜬다. 사실 이 문제는, GetDriveTypeA API의 반환값만 살펴봐도 풀리는 문제이다. CD-ROM으로 인식되야 하기 때문에 반환값은 '5'여야 한다. 하지만, 공부하는 입장이므로 좀더 살펴보자. 아래 분기를 보면, GetDri..
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..