woonadz :)

[DreamHack] Batch Checker II 문제 풀이_reversing_nabi 본문

IT/DreamHack

[DreamHack] Batch Checker II 문제 풀이_reversing_nabi

C_scorch 2024. 3. 15. 16:21
반응형

 

사실 문제 자체는 procmon, malware defense 등의 동적 분석 도구나 동적 디버깅을 통해 쉽게 해결할 수 있지만 코드의 로직을 좀 더 자세히 알아보기 위해 코드 정적 분석을 기반으로 풀이를 작성하였습니다.

 

Cabinet 파일 바탕으로 만들어진 실행파일인 것을 확인할 수 있습니다. 이를 통해 기존 실행 로직에 또 다른 파일이나 폴더가 숨겨져 있을 것이라 추측할 수 있습니다.

 

sub_140004754 함수

sub_140004754 함수가 주로 프로그램의 메인 로직을 담당합니다.

sub_140004754 함수에서 호출하는 sub_14000526C 함수는 tmp 폴더 내에 폴더를 생성하는 함수입니다.

코드 동적 분석을 통해 생성되는 폴더의 이름과 경로를 확인하였습니다.

 

sub_140004754 함수

sub_140004754 함수에서 호출하는 StartAddress 함수는 캐비넷 구조에서 prob.bat 파일을 찾는 역할을 합니다.

 

StartAddress 함수

실제로 해당 부분에서 파일을 동적 디버깅하다보면 ‘MSCF’라는 캐비넷 파일의 매직 넘버를 찾아 prob.bat이 저장되어있는 주소 위치를 찾아가는 부분을 확인할 수 있습니다.

FDICopy는 캐비넷 파일 구조에서 사용하는 API였는데 캐비넷에서 파일을 추출하여 생성하는 함수였습니다. 이렇게 추출한 파일을 앞서 생성한 tmp 폴더에 생성합니다.

https://learn.microsoft.com/ko-kr/windows/win32/api/fdi/nf-fdi-fdicopy

 

FDICopy 함수(fdi.h) - Win32 apps

FDICopy 함수는 캐비닛에서 파일을 추출합니다.

learn.microsoft.com

 

sub_140004754 함수

sub_140004754 함수에서 호출하는 sub_1400072F0 함수는 prob.bat 파일을 실행시키는 역할을 합니다.

 

sub_1400072F0 함수
sub_1400072F0 함수

sub_1400072F0 함수는 크게 3가지 과정을 통해 prob.bat을 실행시키는 함수를 호출하게 됩니다.

실질적으로 prob.bat 파일을 실행시키는 함수인 sub_1400070E0의 로직을 살펴보겠습니다.

 

sub_1400070E0

CreateProcessA라는 함수를 이용해 prob.bat 함수를 실행시키는 것을 확인할 수 있습니다.

lpCommandLine 에 들어간 값을 코드 동적 분석을 통해 살펴보겠습니다.

 

cmd /c "prob.bat” 명령을 통해 실행시키는 것을 확인할 수 있습니다. "/c" 옵션은 cmd.exe를 실행하고 명령을 실행한 후에 창을 닫는 역할을 합니다.

 

이제 prob.bat 파일을 분석해보겠습니다.

 

prob.bat

echo 기능을 비활성화하고 암호화된 값으로 변수를 선언하는 것을 확인할 수 있습니다.

 

prob.bat

cls 명령어를 통해 변수를 사용하여 출력된 문자열 중 일부를 지우는 것을 확인할 수 있습니다.

암호화된 문자열을 복호화하는 방법도 있지만 cls 뒤에 @ 를 “echo” 명령으로 바꾸고 비활성화된 echo off 명령을 삭제하고 실행시켜 문자열을 출력해보겠습니다.

 

이렇게 값을 비교하는 구분을 출력할 수 있고 플래그 값을 찾았습니다.

반응형