안녕하세요 오늘은 L07번을 풀어보겠습니다.
일단 PEID로 프로그램의 정보를 얻어보도록 하죠.
이번에는 별다른 패킹이 되어있지 않네요? 그럼 간단히 어떤 프로그램인지 보고 바로 뜯어보겠습니다.
그런데 한번 보시면 알겠지만 코드가 의외로 짧습니다. 그런데 이 상태로는 코드를 읽어봐도 큰 소득이 없으실건데 이 프로그램은 시리얼이 정해져 있는 것이 아니라 컴퓨터에 따라 시리얼이 달라지는 형식이기 때문입니다.
그렇다면 F9를 눌러 프로그램을 실행시켜 프로그램을 해석해보겠습니다.
가장먼저 이 함수가 보이실텐데요. GetvolumeInformationA 함수는 현재 파일이 위치하는 드라이브의 정보를 얻는 함수입니다.
또 istrcatA 라는 함수가 보이는데, 이 함수는 앞 문장과 뒷 문장을 이어주는 역활을 합니다. 즉 codeengn 과 4562-ABEX를 연결한다는 것인데 지금 사진에는 eqfgengn4562-ABEX로 되어있죠? 이거는 아래에서 설명하겠습니다.
루프문입니다. DL에 2를 집어넣고 끝날 때마다 DL을 1씩 감소시키는군요 ADD DWORD PTR ~~~ ,1 은 ~~~에 해당하는 문자를 아스키 코드 기준으로 1 올린다는 소리입니다. 즉 A이면 B로, I이면 J로 변환시킨다는 소리인데 이게 앞부분부터 4개를 두번 반복하니 codeengn4565-ABEX가 eqfgengn4562-ABEX로 변하게 됩니다.
이제 이것들만 해석해주면 됩니다. 다시 IstroatA 를 사용해 붙이는군요? 아까와 다른점은 아까는 뒤에다 붙였지만 이번에는 앞으로 붙이네요. 그리고 istrcmpA라는 함수가 새롭게 보이는데 이 함수는 앞문장과 뒷문장을 비교하는 함수입니다.
이렇게 아래에서 분기하는 모습이 보이네요. 사실 시리얼을 찾기 위해서라면 istrcmpA라는 함수만 찾아도 됬었지만 이 문제는 codeengn이 어떤 것으로 변경되느냐를 알아내는 문제입니다. 시리얼이 아닌 CodeEngn이 무엇으로 바뀌냐만 유의하면 문제를 푸는데 지장 없습니다.
오류같은게 보이시면 바로바로 덧글 남겨주세요
덧글은 글쓴이에게 기쁨이 됩니다. ☆
'해킹 > 리버스 엔지니어링' 카테고리의 다른 글
코드엔진 basic RCE L09 풀이 (StolenByte 구하기) (0) | 2012.07.14 |
---|---|
코드엔진 basic RCE L08 풀이 ( OEP 찾기 ) (0) | 2012.06.09 |
코드엔진 basic RCE L06 풀이 (back to user mode) (1) | 2012.06.06 |
코드엔진 basic RCE L05 풀이 (UPX 언패킹) (3) | 2012.05.28 |
코드엔진 basic RCE L04 문제 풀이(안티디버거우회) (0) | 2012.05.26 |