Basic RCE L07

hoon·2023년 5월 26일
0

CodeEngn

목록 보기
7/21

문제

컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가

실행화면


실패 메시지

IDA 분석


sub_401056

GetVolumeInformationA를 통해 가져온 VolumeNameBuffer 뒤에 string2(4562-ABEX)를 붙이고 VolumeNameBuffer 0~3 번째 문자열에 +2를 한다. 그 후 앞에는 L2C-5781를 붙여 최종적으로 L2C-5781+(X+2)(X+2)(X+2)(X+2)XXXX+4562-ABEX 형태의 문자열이 만들어진다.

sub_40112D

종료 루틴이다.

x86dbg

자세히 알아보기 위해서는 x86dbg를 통해 동적으로 확인하면 된다. 0x401099에 breakpoint를 걸고 [F7]로 따라들어가보자

따라들어가면 kernelbase.GetVolumeInformationA를 볼 수 있다.

그 안을 계속 따라가면 [ebp-10]에 L"\??\C:\"라는 문자열을 확인할 수 있다.
그 안까지 자세히 분석하진 않았지만 이후 동작을 지켜보다가 C:\[name]\에서 [name]만 가져오기 위한 일종의 정규표현식 같은 문자열로 받아들였다.
C드라이브의 이름이 없으면 VolumeNameBuffer에 아무런 문자열이 들어있지 않았고 이름이 있으면 해당 이름을 그대로 가져오는 것을 확인할 수 있다.
CodeEngn으로 이름을 바꿔주면 CodeEngn을 그대로 가져온다.

이 후에는 IDA에서 분석한 것과 같은 동작을 한다.
Code 부분의 각 문자에 +2한 Eqfg로 문자가 변하고 최종 serial은 다음과 같다.
"L2C-5781EqfgEngn4562-ABEX"

처음 분석할 때에는 C드라이브의 이름이 없어서 4562-ABEX의 앞의 4글자 4562가 +2씩 되어
6784로 출력이 되었다.

0개의 댓글