리버스엔지니어링 문제 Advance 12

2015. 7. 12. 23:09Security ★ Development/Reversing

반응형

http://codeengn.com/challenges/advance/12


Problem : Find the Username when the Serial of 11E0-FBB4-490D 

(This problem has multiple answers, so post your answer on the messageboard in a private thread and we will verify it for you.) Note : "Registered Successfully" must pop up for the serial. 


윈7 64비트 환경에서 쭉 하고 있었는데 이번 파일은 ollydbg 2.01로 열리지 않았습니다.

ollydbg is unable to step over the command at... 메시지가 뜨는데 윈7 32비트에서는 정상적으로 열 수 있습니다.


비교하는 것을 봐서 함수명으로 검색, 해당 위치에 bp를 걸어주고 ok버튼을 눌러 작동시킵니다.  

여기서부터 시작합니다.


vbaStrComp 안으로 들어가보면 이런 부분이 나옵니다.

bp가 걸려있는 부분 앞의 EDI와 ESI에는 입력해준 시리얼과 네임으로 만들어진 시리얼이 들어있고 CALL 77880CFC를 통해 비교를 하게 됩니다.


REPE CMPS 명령을 통해 하나씩 비교해주도록 되어있습니다.


문제는 시리얼이 있을 때 네임값을 맞추는 것으로 시리얼이 생성되는 부분을 봐야합니다.  맨 처음에 잡은 bp에서는 이미 시리얼이 만들어져 있으므로 그 전을 봅니다.

vbaStrMove의 위치로 이동해보면 

위 사진에서 bp가 걸린 곳으로 옵니다.  이 부분을 계속 넘기다 보면 EAX의 값이 숫자 -> 시리얼로 바뀌는 것을 확인 할 수 있습니다.  (여러 코드를 돌아 다시 이부분으로 오기까지 많은 명령어를 거칩니다.)

처음에는 네임값을 아스키 10진수로 바꾸어 쭉 이어붙입니다.

abcd를 넣으면 979899100이 되는데 이 값을 다시 바꿉니다.  5번째부터 4자리를 변형한 값을 0-1-2 에서 0의 자리에 넣습니다.

abcd를 대상으로 EAX값의 변화를 보면

979899100

9910

FFDA94A

9910-D94A

...

이렇게 변하는 것을 역으로 취하면 네임값을 알 수 있게 됩니다.