Abex Crack Me 

리버싱을 공부해본 적이 있는 사람들이라면 한번은 꼭 봤을 듯한 크랙미 시리즈이다.
출처는 어디인지 모르지만 아마도 Abex라는 사람이 올린걸 유추할 수 있다.

Abex Crack Me 1

먼저 분석을 위해 이 프로그램이 어떻게 돌아가는 지를 확인해볼 필요가 있다.



나의 하드디스크를 CD-Rom으로 인식하게 만들어보란다.

하지만 당연히 내 하드디스크는 CD-Rom이 아니므로 저런 메세지는 당연하지만 ...



어셈 코드가 졸라 짧으므로 분석이 매우 쉽다.

GetDriveTypeA 함수는 지정한 disk가 어떤 형태의 저장소인지 판단을 하는 함수이다.

kernel32에 있는 함수이며, 함수가 실행되면 특정 정수 값을 리턴하는데 해당 값에 따라 디스크의 유형을 판단할 수 있다.


 상수

 값

 설명

 DRIVE_UNKNOWN

 0

 알 수 없음

 DRIVE_NO_ROOT_DIR

 1

 최상위 경로가 없음

 DRIVE_REMOVABLE

 2

 이동형 저장장치

 DRIVE_FIXED

 3

 고정형 저장장치

 DRIVE_REMOTE

 4

 네트워크 드라이브

 DRIVE_CDROM

 5

 DVD/CD-ROM 유형

 DRIVE_RAMDISK

 6

 램 디스크


그렇습니다.

아마 그렇다면 저 함수가 실행되고 eax 레지스터에는 3이 들어가있겠네요!



그리고 실제로 3이 들어간 것을 볼 수 있습니다.


하지만 저희는 CD-ROM으로 인식하게 해야되기 때문에 저 eax 값엔 원래는 6이 리턴이 되어야됩니다.


하지만 그 값들은 여기서 요상한 연산을 하고 eax랑 esi랑 비교를 하여 같을 경우에 CD-ROM으로 인식했다고 조져따 라고 메세지를 띄웁니다.

고로 저는 다 필요없이 비교 부분에 서로 같은 것을 비교하게 조져버렸습니다.



ㅅㄱ



Abex Crack Me 2



먼저 이 문제는 흔하디 흔한 키젠 문제인 것 같습니다.

분명히 이름을 통해 시리얼키가 생성이 되고 그 생성된 키와 체크하는 것이라고 예상을 할 수 있겠습니다.


디버깅 ㄱㄱ



이 부분에서 eax에 리턴 값이 들어가고 그 ax 끼리 test 연산을 하고 시리얼이 틀렷는지 맞는지 확인을 하므로

vbaVarTstEq가 서로 비교하는 함수라는 것을 알 수 있습니다.


그렇게 내부로 들어가보면.



실제로 비교하는 것을 알 수 있었습니다.



차곡차곡 쌓인 것을 볼 수 있습니다.



00000008

0018F40C

00298784  UNICODE "CCD9C6C9"

0018F3C4


00000008

0018F40C

0029886C  UNICODE "123456789"

0018F3C4



CCD9C6C9과 제가 입력한 값을 비교합니다.



ㅅㄱ링딩동


그리고 시리얼 생성하는 부분을 분석을 하고 키젠을 만들어봤다.


def keygen(name):

key = ''

for i in range(4):

key += chr(ord(name[i])+0x64).encode("hex")

return key.upper()


Abex Crack Me 3




실행을 해보면 이러하다.

아마도 그렇다면 예상 시나리오는.

키 파일이라는 걸 생성해서 그 키 파일에서 내용을 읽고 체크하는 문제일까 하고 생각을 해보았다.


뭐 이런 생각은 디버깅을 하고 난 뒤면 꼼짝 못해~!



뭐 코드도 짧으니 금방 분석이 가능하시겠다.

메세지 박스를 띄우고 abex.l2c를 읽기모드로 연다.

하지만 당연히 eax에는 이 파일이 없기때문에 FFFFFFFF을 리턴하고 저 eax 비교에서 분기되서 파일을 찾을 수 업써!! 라고 메세지를 띄우게 된다.

고로 프로그램이 있는 경로에 저 파일을 생성해주자.



ㅇㅋ


그렇다면 파일을 찾았기 때문에.

아마 파일 찾는 분기에서는 걸리지 않을 것이다.


그 다음은 파일의 사이즈를 리턴하여 그 사이즈가 12가 아닐 경우에는 틀린 키 파일이라면서 찡찡거리게 된다.

고로 사이즈를 0x12(18)로 맞추고 실행을 해주면 풀릴 것 이다.



Abex Crack Me 4



그렇다.

이 문제는 버튼이 비활성화가 되있다...


고로 디버깅 ㄱ



현재 날짜들을 구해와서 mul, add연산을 통해 시리얼이 완성된다.



이렇게 eax에 시리얼이 들어있는 것을 볼 수 있다.


이게 시리얼인지 확인하는 방법은 vbacmp 함수를 확인하면 된다.



입력한 값과 시리얼을 비교하는 것을 볼 수 있다.


그리고 같을 경우 가입이 활성화된다.


Abex Crack Me 5



L2C-57816784-ABEX가 시리얼이다. 

끝.


'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[Pwnable.kr] cmd2 - 9 pt  (0) 2016.10.05
Mr.Robot Season2 Easter Egg  (0) 2016.07.21
[Pwnable.kr] dragon - 75 pt  (0) 2016.06.25
[Codegate2016] Write ups  (372) 2016.03.18
[Pwnable.kr] cmd1 - 1 pt  (0) 2015.10.07

+ Recent posts