'[REVERSING]/▶CrackMe'에 해당되는 글 3건

  1. 2012.06.18 reversing.kr replace
  2. 2012.05.31 CrackMe #2 Back to user 모드를 이용한 Music Player (11)
  3. 2012.05.21 CracMe #1 Easy_KeygenMe
2012.06.18 14:29

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2012.05.31 17:45 [REVERSING]/▶CrackMe

CrackMe #2

안녕하세요.

두번째 포스팅이네요..

제가 reversing.kr 3번문제도 건너 뛰었는데요. Easy Unpack은 실행압축된 파일(packing)을 upx나 peid로 unpacking 하는 문제라 분석하는 내용이 없으므로 포스팅에

서 제외 했습니다.

그럼 music player 분석을 ollydbg의 back to user 기능을 이용해서 하겠습니다.

music player를 실행시키면 1:00분 미리듣기 기능만 가능하도록 만들어서 가요 보통 4분이상 짜리 노래를 1분밖에 들을수 없는 문제가 있네요.

보통 상용 음악에 있는 비슷한 기능이네요

 

[그림.1]

 프로그램을 ollydbg로 실행시키고 F9를 누릅니다 그럼 그림1과 같이 우측 하단에 Running이라고 바뀌게 됩니다.

이것은 pause 상태에서 F9를 누르면 프로그램이 정상 실행이 됩니다.

실행이 되면 파일열기로 음악을 선택합니다..

[그림.2]

프로그램 실행 화면입니다.

말씀드린바와 같이 1분만 들을수 있도록 설정되었습니다.

Start 버튼을 눌러서 노래가 종료될때까지 듣습니다.

[그림.3]

1분 미리듣기만 가능합니다 라는 message box 창이 발생되는대요.

여기서 back to user 모드를 사용하겠습니다.

[그림.4]

olly에서 F12를 누르면 우측 하단에 paused 라는 빨간색글씨로 변경이됩니다.

말그대로 running -> paused 되는것입니다.

[그림.5]

paused 상태에서 Ctrl + F9를 누르면 우측하단에 Back to user 라는 모드로 변환이됩니다.

이부분에서 스레드가 동작되면 바로 풀려버리더라구요 그래서 스레드가 돌아가는 부분에서 back to user 기능을 사용할 수 없는대요.. 왜그런건지 저도 너무궁금하네요.

아시는분은 댓글로 설명좀 부탁드려도 될까요..?^^;;

그래서 스레드가 동작되지않는 message box와 같은 창을 띄어놓고 실행합니다.

 

[그림.6]

back to user 모드에서 메세지박스의 확인을 누르면 해당기능 부분이 종료된 다음 코드에서 정지가됩니다.

그림 6에서는 4045DE가 되겠네요.

[그림.7]

 4045DE주소에서 위로 올라가보면 여러 분기문도있고 더올라가면 프로시저의 처음부분을 만나게 됩니다.

[그림.8]

코드를 분석하다 보면 404563에 OE6A0(HEX CODE)를 확인할 수 있는대요 코드를 변환하면 값이 6000이됩니다. 즉 60초가 되겠네요.

40456B에서 OE6A0(HEX CODE) 60초 보다 작으면 노래를 들려주고 60초와 같으면 에러창으로 분기하도록 구현되어 있는것을 확인할 수 있습니다.

여기서 코드를 조작하였습니다. NOP처리하여 패스해도되고 아니면 JMP문을써서 건너뛰어도 되지만 전 4분으로 변경했습니다.

 

이번 크랙한것은 뮤직플레이어를 조작하는 거라 흥미로웠는대요..

코드 한줄한줄에 주석을 안달아 놓고 back to user 기능을 이용해서 단순히 특정부분만 조작해버리니까 뭔가 조금 아쉬움이 남네요.


 

'[REVERSING] > ▶CrackMe' 카테고리의 다른 글

CrackMe #2 Back to user 모드를 이용한 Music Player  (11) 2012.05.31
CracMe #1 Easy_KeygenMe  (0) 2012.05.21
posted by 미스터리 DKL
2012.05.21 23:39 [REVERSING]/▶CrackMe

CracMe #1

 

[그림.1]

처음 Ollydbg에 올리면 그림1 과 같습니다. 이 부분에서 중요한부분은 401030,40103D,401042 주소에 있는 부분입니다.

 

[그림.2]

처음 사용자로부터 input name을 받기전에  [ESP+10],[ESP+11],[ESP+12] 주소로 10,20,30 순으로 BYTE단위로 값을 저장 하고있습니다.

이부분이 핵심이 되겠습니다. 자세한건 뒤에 설명하도록 하겠습니다. 

[그림.3]

Scanf 함수에 입력한 abcdefg 총7문자에 \0 널문자 포함 8바이트가 입력이 됩니다.

401070에 NOT ECX는 401062에서 에서 OR ECX,FFFFFFFF 했던것을 다시 비트를 반전시킵니다. 반전시키면 ECX에 8이 저장이되고 \0널문자를 제외해야하기때문에

401072에서 ECX레지스터의값을 -1 합니다.

 

[그림.4]

여기서 그림2에서 10,20,30 순서대로 저장했던 부분을 설명하겠습니다.

401077,40107A 주소에보면 3번 반복되게 되어있습니다. 이부분은 사용자가 입력한 문자에 순서대로 10,20,30 을 3번 반복해서 사용하도록 되어있습니다.

즉 그림4의 2번에서 40107E주소를 보면 ECX레지스터에 순서대로 입력한 첫번째 키 10을 복사합니다.

그리고 바로아래 401083에 사용자가 입력한 첫문자가 EDX 레지스터에 복사됩니다. (저는 INPUT NAME에 입력값으로 abcdefg 를 입력하였습니다.)

401088 주소를 보면 ECX레지스터와 EDX 레지스터가 XOR연산을 진행하게 되어있습니다.

즉 이키젠은 사용자가 입력한 길이를 체크하여 10,20,30을 XOR연산 하고 순서대로 연산결과를 그대로 붙여 키를 만들고있습니다.

바로아래 40109A에 보면 변환된 숫자를 연속적으로 연결하여 하나의 키를 생성하고있습니다.

그림4의 4번은 사용자가 입력한 길이만큼 반복이 되게끔 되어있습니다.

간단히 정리하면 예로 abcdefg 를 입력하면 a xor 10 =71, b xor 20 = 42, c xor 30 = 53, d xor 10 = 74 .... 순으로 연산이 이뤄집니다.

abcdefg에대한 키값은 71425374455677 되겠습니다.

 


'[REVERSING] > ▶CrackMe' 카테고리의 다른 글

CrackMe #2 Back to user 모드를 이용한 Music Player  (11) 2012.05.31
CracMe #1 Easy_KeygenMe  (0) 2012.05.21
posted by 미스터리 DKL