리버스엔지니어링 문제 7

2015. 3. 29. 14:21Security ★ Development/Reversing

반응형

http://codeengn.com/challenges/basic/07


C드라이브의 이름이 CodeEngn일 경우 시리얼이 생성될 때 CodeEngn이 어떤 것으로 변한다는데 무슨 말이냐면 프로그램 내부에서 C드라이브의 이름을 사용합니다.  이 이름을 문자열로 가져와서 사용하는데 다른 문자열로 변형시키게 됩니다.  이 때 변형된 값이 무엇인지를 맞추는 문제입니다.


처음 디스어셈블 하자마자 나오는 코드는 아니고 해당 위치까지 진행한 상태입니다.  키값을 임의로 넣고 버튼을 누른 후 드라이브 이름을 가져오는 GetVolumeInformationA함수까지 진행된 상태입니다.

제가 넣은 값은 aaaa이고 가져온 드라이브 이름은 Application입니다.  여기서 저 드라이브는 C드라이브가 아닌데 프로그램이 실행된 드라이브의 루트 드라이브 이름을 가져옵니다.  실제 프로그램은 E드라이브에서 실행했고 Application은 S드라이브였습니다.  E드라이브는 S드라이브를 나눠서 생긴 것이었구요.

밑 부분에는 역시 분기문을 통해 메시지를 출력해주고 있습니다.  lstrcmpiA에서 반환된 값에 따라 분기가 이루어집니다.


4개의 ADD부분이 묶은 부분을 빠져나온 이후의 상태입니다.

Appl 부분이 Crrn으로 바뀌었습니다.  DL을 이용한 루프문을 통해 각 값에 1씩 총 2를 더해주었습니다.  이후 이 값을 비교하고 메시지를 출력하겠죠.


해당 값을 넣으면 성공메시지를 출력합니다.  문제에서 요구하는건 드라이브 명이 CodeEngn일 때 변경되는 값입니다.  답은 EqfgEngn이 됩니다.