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 Patcher, NateOff (1) | 2010/05/19 |
|---|---|
| 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 |
abexcrackme2.exe
