실행시켜보면 다음과 같은 창을 볼 수 있다.
이름과 시리얼값을 임의로 넣어 실행해봐도 프로그램에 변화가 없다.
Serch for > All intermodular calls 로 들어가서 cmp 라는 이름의 함수를 찾아보자.
vbaVarCmpEq 부분의 함수를 찾아 break point 를 걸어본 뒤 이름과 시리얼값을 입력을 하면
내가 입력한 시리얼값과 입력한 이름에따른 시리얼값이 있음을 알 수 있다.
넣어보면 저 유니코드값이 만들어지는 시리얼값임을 알 수 있다
이재 시리얼이 만들어지는 과정을 찾아보자
특별히 눈에띄는 이름은 없기때문에 각각 함수들을 call한 이후의 결과를 보아 어떤함수가 시리얼을 만드는 함수인지 확인해보자.
먼저 이 함수의 결과로 내가 입력한 이름이 0012F4DC 에 들어간다.
그리고 이 함수에서 시리얼값을 만들어 0012F4F0 에 저장된다.
이제 이 함수를 step into 해서 들어가보자
조금 스크롤을 내려보면 다음과 같은 함수가 있는대
내가입력한 이름을 다른 문자열로 바꿔서
0012F4F0 에 저장하는 기능을 한다.
이때 tjEs 라는 문자열을 기준으로 바뀌게 된다.
이 함수에서 방금 바꿔준 문자열을 다시 시리얼 값으로 바꾸어준다.
먼저 아까 들어있던 0012F4F0의 길이를 측정한다.
그리고 그 길이만큼 반복하며
하나씩 문자열을 시리얼값으로 바꿔간다.
모든 반복이 끝나면 0012F4F0에는 내가 입력한 이름에 대한 시리얼값이 있게 되는것이다.
브레이크포인트가 걸려있는 지점에서 0012F4F0 지점에 문자열이 하나씩 시리얼값으로 바뀌기 시작한다.
한가지 특이한점은 문자열은 두개의 시리얼코드로 바뀌고 숫자는 하나의 시리얼코드로 바뀐다.
ex) k > 5E 0 > 5 로 바뀌게 된다.
댓글