본문 바로가기

해킹/리버스 엔지니어링

코드엔진 basic RCE L07 풀이

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요 오늘은 L07번을 풀어보겠습니다.




BABB04F7.exe



일단 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이 무엇으로 바뀌냐만 유의하면 문제를 푸는데 지장 없습니다.


오류같은게 보이시면 바로바로 덧글 남겨주세요


덧글은 글쓴이에게 기쁨이 됩니다. ☆