2015. 3. 29. 14:21ㆍSecurity ★ 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이 됩니다.
'Security ★ Development > Reversing' 카테고리의 다른 글
리버스엔지니어링 문제 9 (0) | 2015.03.29 |
---|---|
리버스엔지니어링 문제 8 (0) | 2015.03.29 |
리버스엔지니어링 문제 6 (0) | 2015.03.23 |
리버스엔지니어링 문제 5 (0) | 2015.03.23 |
리버스엔지니어링 문제 4 (0) | 2015.03.23 |