2007. 2. 17. 02:21

abexcrackme2

크래킹, 크랙미 2007. 2. 17. 02:21


abexcrackme2

형태

실행시켜보면 알 수 있을 테지만, 이름을 넣고 시리얼을 넣은 뒤 체크를 하는 형태로 되어 있다.
디스어셈블러로 살펴보면 비베로 짜여져 있음을 알 수 있다.

접근

비교하는 함수인 MSVBVM60.__vbaVarTstNe 를 찾아본다.
이 때 매개변수로 넘어가는 값을 잘 살펴보면 원하는 키를 얻을 수 있다.
하지만 목표인 키젠을 만들기 위해서는 이 방법만으로는 부족하다.

위로 잘 훑어가다 보면, 이 비교를 수행하는 프로시저의 시작 부분을 찾을 수 있다.
일단, 자세히 보면 이름이 4글자 이상이어야 함은 쉽게 알 수 있다.
테스트를 위해 aaaa를 넣었을 때의 키를 알아보면 C5C5C5C5임을 알 수 있다.
두 번째로 abcd를 넣어보면, C5C6C7C8이 되는 것을 알 수 있다.
간단하게 추측해 보면, a의 아스키코드가 61이고, C5 - 61 = 64인 것으로 미루어보아 이 크랙미는 이름의 아스키코드에 64h를 더하여 시리얼을 구한다 라는 사실을 추론할 수 있다.

간단하게 키젠을 만들 수 있으나, VB는 유니코드를 사용하고 있으며 이는 한글과 같이 안시 코드페이지에서의 표현 방법과 유니코드상에서의 표현 방법이 다른 문자를 사용하게 되면 잘못된 결과를 도출한다는 문제점이 있다.
이를 해결하기 위해 살펴보면, 이 크랙미는 한 글자씩 떼어서 안시 코드 페이지로 바꾼 다음 64h를 더하여 16진수 형태로 시리얼을 출력한다는 것을 찾을 수 있다.
이를 이용하면 쉽게 키젠을 만들 수 있다.

키젠 소스 코드

keygen.c

(이 소스코드는 앞으로 몇번 더 쓰일 것이다)

p0.c


컴파일 명령(VC)


cl keygen.c p0.c /DUNICODE /DMAXNAME=5 /DMAXSERIAL=17 /Fekeygen.exe /link user32.lib gdi32.lib

(UNICODE 사용, MAXNAME 매크로를 5로 설정, MAXSERIAL 매크로를 17로 설정. user32.dll과 gdi32.dll의 API들을 사용한다.)

'크래킹, 크랙미' 카테고리의 다른 글

AD free NateOn  (0) 2010.05.18
COM Object 생성 추적하기, COMTracer  (0) 2009.10.05
DLL injection with CreateRemoteThread()  (0) 2009.08.01
CBsearch Crack  (15) 2009.06.20
abexcrackme2  (0) 2007.02.17