2015. 8. 14. 11:42ㆍSecurity ★ Development/Reversing
http://codeengn.com/challenges/advance/14
Problem : Find the Name when the Serial of NH6-0-0091008D0052
이번에도 시리얼이 있을 때 Name을 찾는 문제입니다.
ollydbg로 문자열을 찾아보려했으나 찾기가 어려워 Process Explorer를 써보니 메모리에서 확인할 수 있었습니다.
ollydbg에서 해당 프로그램 메인모듈을 맞춰놓고 string 검색을 해보면 찾을 수 있습니다.
그럼 해당 부분에 bp를 걸고 디버깅을 해봅니다.
name과 serial을 초기상태로 아무렇게나 놓고 check를 누르면 여러 점프문중에 윗부분에서 Invalid부분으로 뜁니다.
name을 aaa, serial을 문제에서 제시한대로 해놓으니 다 통과하고 "Registered~" 부분 바로 위에서 점프를 합니다.
0047F443에서 이런 부분으로 들어오는데 EAX와 EDX에 두 문자열이 있습니다. name을 바꿔서 넣어보면 EAX에 들어있는 것이 serial로 인한 비교값이란 것을 알 수 있습니다. 당연하게도 아래 CMP에선 두 문자열의 값들을 비교해주고 있습니다. 0047F438의 함수로 갑니다. 여기선 입력해준 name을 EAX에 가지고 들어갑니다.
함수 내부에서 이곳을 보면 위의 CMP와 아래의 JNZ사이에서 돌면서 입력해준 name값을 14byte로 맞춰줍니다. 문자가 14글자가 되도록말이죠.
그 아래 이부분이 name으로 키를 생성하는 부분입니다. mov와 movzx 쌍이 있는데 EDI, EAX에 각각 name과 여기서 처음 보는 "NH KeyGenMe6"이라는 문자열의 각 값을 하나씩 넣습니다.
그리고 두 값을 더해주면 00AF라는 값이 생성됩니다.(61+4E)
저는 name으로 abcd를 넣었기 때문에 다음 값은 62+48인 00AA가 됩니다.
계산이 끝나면 이런 긴 문자열이 생성됩니다.
비교할 때는 앞의 3쌍만 가져오게 되죠.
이제 "NH "의 값으로 91, 8D, 52를 만들게 되는 문자 3개를 찾으면 됩니다.
'Security ★ Development > Reversing' 카테고리의 다른 글
리버스엔지니어링 문제 Advance 16 (0) | 2015.08.24 |
---|---|
리버스엔지니어링 문제 Advance 15 (0) | 2015.08.16 |
리버스엔지니어링 문제 Advance 13 (2) | 2015.08.09 |
리버스엔지니어링 문제 Advance 12 (0) | 2015.07.12 |
리버스엔지니어링 문제 Advance 11 (0) | 2015.05.15 |