티스토리 뷰

level07의 문제의 힌트를 보면 컴퓨터 C 드라이브의 이름이 CodeEngn일 때 시리얼 생성? 흠.. 유추해 볼 수 있는 것은 C드라이브의 이름을 CodeEngn을 바꿔서 비교하는 루틴으로 가보면 될 것 같습니다.


실행을 해본 결과 아래의 오류를 출력합니다.

Exeinfo PE로 둘러보면 패킹이 안되어 있고, 컴파일된 것을 보니 TASM/MASM 같은 어셈블러로 코드를 짠 것 같네요.


정상적인 메인입니다.


문자열을 입력을 GetDlgItemTextA로 가져옵니다. 이 부분에 BP를 걸어서 입력을 받아 보겠습니다. 일단, CodeEngn으로 입력하고 디버깅 해보겠습니다.


바로 밑의 함수는 GetVolumeInformation() API 함수인데, 그냥 현재 사용하는 드라이브를 가져오는 역할을 합니다. 드라이브 이름을 가져와서 조작하는 것 같습니다.


저는 그냥 C드라이브 이름을 임의로 문제에 써있는대로 CodeEngn으로 바꿔보겠습니다. 


밑의 함수에서 C드라이브의 이름을 불러오고 lstrcatA 함수로 "4562-ABEX"와 문자열을 합칩니다.


밑의 루틴을 보시면 이 루틴은 2번 반복을 합니다. 40225C부터 아까 위에서 합친 문자열이 내장되어 있습니다. 각각의 주소에 '1'을 더해서 저장합니다. 입력값을 조작하는 부분입니다. 


0040225C Hex 부분입니다. 위에서 저장한 값이 들어있습니다.


한 루틴이 돌면 "Code" 값에 1을 더해서 "Dpef"로 만듭니다.


다시 한번 루틴이 돕니다. "Dpef" 값에 1을 더해서 "Eqfg"가 됩니다.


변조가 되어서 저장이된 EqfgEngn4562-ABEX 값에 lstrcatA 함수로 계속 문자열을 붙여줍니다.


지금까지 붙여준 값과 아까 임의로 입력한 시리얼 값(CodeEngn)을 비교합니다. 맞으면 성공이고 아니면 실패겠죠? 밑의 값을 시리얼 값에 넣어 봅시다.


성공, 루틴 부분입니다.


위의 값을 넣어보니 성공을 하네요. 하지만 문제에서 요구하는 답은 이것이 아닌 다른 문자입니다. 한번 고민해보세요. 간단합니다.


'Wargame > codeengn' 카테고리의 다른 글

[codeEngn] Basic RCE level09  (0) 2015.07.28
[codeEngn] Basic RCE level08  (0) 2015.07.28
[codeEngn] Basic RCE level06  (0) 2015.07.28
[codeEngn] Basic RCE level05  (0) 2015.07.28
[codeEngn] Basic RCE level04  (0) 2015.07.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함