Lena Revesing - tutorial 17
Lena Reversing tutorial 17
이번 단계는 기본적인 keygen 에 대해 알아보는 단계이다.
프로그램을 실행해준다.
About 버튼을 누르면 다음과 같이 나온다.
아무 값이나 넣고 Check 버튼을 누르면 다음과 같이 나온다.
올바른 key 값을 찾아주도록 한다.
Ollydbg로 열어준다.
사용자의 입력값을 받고 있기 때문에 GetDlgItemTextA, GetWindowTextA 의 함수가 쓰일것으로 예상된다.
이 함수에 breakpoint를 걸고 확인해준다.
여기서 commandbar 플러그인을 사용해 주도록 한다.
하단 Commandbar에 다음과 같이 입력하고 breakpoint를 걸어준다.
breakpoint를 확인해보면 다음과 같이 걸린 것을 확인할 수 있다.
F9를 눌러 실행해서 입력값을 넣고 Check를 누르면 break가 걸린다.
프로그램의 주소값이 아닌 user32.dll 모듈의 코드로 넘어와 있다. 꽤나 이전 단계에서 했던 user code로 돌아가는 방법을 사용한다.
Debug -> Execute till user code 또는 Alt + F9를 눌러서 User code가 나올때까지 진행한다.
돌아온 부분이다. 이전에 한 번 입력값을 가져오고 이후에 한번 더 입력값을 받아온다.
입력하는 부분이 두개이기 때문에 각각 입력값을 가져오는 것으로 보인다.
그 뒤의 내용을 살펴보면 각각의 입력값을 보고 값이 없으면 입력해달라는 messagebox를 띄우고 있고 입력값이 있다면 지나간다.
그 이후에는 입력값의 길이를 구하는 함수도 보인다.
그 뒤에는 분기를 통해 계속해서 반복되면서 연산을 하는 코드가 보인다.
이를 통해 시리얼 값을 생성해내는 것으로 보인다.
그 아래는 비교문을 통해 올바른 결과 창과 틀린 결과창을 분기해주고 있다.
올바른 결과창과 틀린 결과창을 출력하는 함수이다.
여기서 우리가 크랙을 할 방향은 비교한것이 같다면 올바르게 출력하도록 하고
만약 다르다면 올바른 시리얼값을 messagebox에 띄우도록 바꾸는 것이다.
인라인 패치를 통해 흐름을 바꾸고 입력값을 바꿔 주도록 한다.
조금만 내리면 00401383 부터 잉여공간이 있다 이 부분을 사용하도록 한다.
비교 후 진행되는 분기는 이 00401383으로 바꾸어준다.
잉여 공간에 만들어주는 코드는 다음과 같이 작성한다.
만들어진 시리얼 값이 ESI에 있기 때문에 이를 비어있는 메모리 439000에 저장해준다.
그 후 실패했을 때 출력되는 messagebox가 있는 곳으로 간다.
그대로 출력되면 실패했다는 메세지가 뜨기 때문에 이 메세지를 아까 저장한 시리얼값, 439000의 값을 넣어준다.
이제 copy to executable을 통해 프로그램을 저장해주고 실행해준다.
해보면 알겠지만 시리얼값을 주긴 하지만 그 값을 입력하기가 쉽지 않다.
그나마 입력할 수 있는 값을 찾아서 해보면 다음과 같다.
a 값에 맞지 않는 시리얼 1을 넣었더니 올바른 시리얼값 fo를 보여준다.
올바른 fo값을 넣어주면 올바른 결과창이 출력된다.
끝.