컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될 때 CodeEngn은 '어떤것'으로 변경되는가
라고 물어온다.
시리얼이 생성될 때 어떠한 과정을 거쳐 기존의 문자열이 다른 것으로 변경된다는 말이지 않을까?
프로그램 실행화면
IDA로 열어보자
GetVolumeInformationA 함수를 호출한다.
지정된 루트 디렉터리와 연결된 파일 시스템 및 볼륨 관련 정보를 검색합니다 라고 msdn에서 설명하고 있다.
lpVolumeNameBuffer 가 보이는데
지정된 볼륨의 이름을 받는 버퍼에 대한 포인터입니다. 버퍼 크기는 nVolumeNameSize 매개 변수로 지정됩니다.
라고 msdn에서 알려준다.
C드라이브의 이름이 CodeEngn 일 경우라고 했으니 저 인자가 저장된 곳에 드라이브 이름이 있겠구나라고 생각한다.
push offset VolumeNameBuffer ; lpString1 부분을 보면 VolumeNameBuffer에 저장되어 있겠다.
그 밑으로 진행을 해보면 시리얼을 만드는 과정이 보인다.
치트엔진으로 살펴보자
lstrcatA 를 함수의 원형을 살펴보자
char* strcat(char* dest, const char* origin); 으로
origin에 있는 문자열을 dest뒤에 연결시켜 붙여주는 함수다.
07.exe + 225c 부분은 IDA 에서 봤던 VolumeNameBuffer 일 것이며 저 곳에 이름이 저장되어 있겠다
그냥 실행시켜보면 저 곳에
6784-ABEX가 들어간다. 만들어진 시리얼키의 일부분일 것이다.
CodeEngn으로 변경하고 strcmp로 비교구문까지 실행해보면 문자열이 계속해 바뀐다.
CodeEngn 은 EgfgEngn으로 바뀌었다.
그렇다면 이어붙여 주면
L2C-5781EqfgEngn6784-ABEX가 된다.
하지만 이는 프로그램의 시리얼키는 아니다. CodeEngn이 어떤것으로 변하는지 물었고
07.exe + 225c 에서 8바이트 만큼 차지하는 CodeEngn은 EqfgEngn으로 바뀌었다고 볼 수 있고,
시리얼키의 답은 CodeEngn으로 바꾸지않고 실행시켜보면
07.exe + 2000 에 최종 시리얼키가 저장이 되며
L2C-57816784-ABEX 라고 볼 수 있겠다.
성공메시지를 볼 수 있다.
'Reverse Engineering > [CodeEngn] Basic RCE' 카테고리의 다른 글
[Reversing] CodeEngn - Basic RCE L09 (0) | 2024.07.02 |
---|---|
[Reversing] CodeEngn - Basic RCE L08 (0) | 2024.07.02 |
[Reversing] CodeEngn - Basic RCE L06 (0) | 2024.07.02 |
[Reversing] CodeEngn - Basic RCE L05 (0) | 2024.07.02 |
[Reversing] CodeEngn - Basic RCE L04 (0) | 2024.07.02 |