간단하니 이해하기도 쉬우실거에요 ~ ^^

일단 크랙미를 실행하여 크랙미의 동작등을 봐야 하니 크랙미를 실행 합니다.


뭐가 안맞다고 뜨는군요 ㅋㅋ

이제는 프로그램이 무엇으로 짜여져있는지 봐야할 차례입니다.

밑에 사진은 PeScan 한 결과 입니다.



UPX로 패킹이 되어있네요.

수동 언패킹이나 자동 언패킹 툴로 언패킹 합니다.

그러면 밑에 결과처럼 나옵니다.



이제는 언패킹도 되었으니 디버거로 열어 분석을 해봅시다.

디버거로 열고 OEP로 이동한 후, 스트링을 검색해 봅니다
.

문자열들중에 축하 메시지가 있네요.

더블클릭하여 해당 부분으로 이동해 봅니다.

해당부분으로 이동후 메시지나 바로 위에 점프문에 BP를 잡으면 분석이 조금 어려워질수도 있습니다.

그러니 조금 여유를 두고 BP를 잡길 바랍니다.

저는 아래와 같이 잡았습니다.



위와 같이 잡아준후 실행을 하여 BP가 걸리도록 이름과 시리얼을 입력하여 줍니다.

BP가 걸리면 천천히 트레이싱을 하여 줍니다.

주요 부분을 복사해서 주석을 달아보도록 하겠습니다.


00457E06  |> \A3 40B84500 MOV DWORD PTR DS:[45B840],EAX
00457E0B  |.  8D55 E4     LEA EDX,[LOCAL.7]
00457E0E  |.  A1 40B84500 MOV EAX,DWORD PTR DS:[45B840]
00457E13  |.  E8 2CF9FAFF CALL CrackMe#.00407744                                 // 어떠한 계산식의 의해 이름에 맞는 패스워드 생성.
00457E18  |.  8B45 E4     MOV EAX,[LOCAL.7]                                          // 계산된 값을 [LOCAL.7] 에서  EAX로 복사.
00457E1B  |.  50          PUSH EAX                                                            // 스택에 EAX 값을 넣음.
00457E1C  |.  8D55 FC     LEA EDX,[LOCAL.1]
00457E1F  |.  8B83 DC0200>MOV EAX,DWORD PTR DS:[EBX+2DC]
00457E25  |.  E8 B6C0FCFF CALL CrackMe#.00423EE0
00457E2A  |.  8B55 FC     MOV EDX,[LOCAL.1]
00457E2D  |.  58          POP EAX                                   ;  0012FBCC
00457E2E  |.  E8 51BDFAFF CALL CrackMe#.00403B84                                // 사용자가 입력한 값과 프로그램 내에서 생성한 값과 비교
00457E33  |.  75 1A       JNZ SHORT CrackMe#.00457E4F                            // 00457E33에서 비교한 값에 따라 점프.

00457E33 Call 안에 있는 중요 코드를 복사하여 주석을 달아보도록 하겠습니다.

00403B89  |.  89D7        MOV EDI,EDX                                                      // 사용자가 입력한 EDX에 복사
00403B8B  |.  39D0        CMP EAX,EDX                                                    // 사용자가 입력한 값이 들어있는 EDX와 프로그램내에서 생성된 값이 들어있는 EAX를 비교.

저 중요코드를 거친후 Call문을 빠져나와 점프를 하거나 안하게 됩니다.

결국 우리가 원하는 이름을 입력했을때 나오는 계산되어 나오는 패스워드를 알아내어 인증을 해야겠네요.
'
전 MaJ3stY를 입력했을 때 1074란 숫자를 생성합니다.

아래의 사진은 인증샷이랄까요..

 

여기서 이 크랙미는 원래 끝이 난 것이 아닙니다.

키젠을 만들어야 하기 때문이죠 ^^

키젠은 스스로 만들어보시는게 좋을 듯 합니다.

어셈을 C로 구현하기 힘드시다면 해당 시리얼 생성루틴을 복사하여 그대로 컴파일 하셔도 됩니다 ^^;;

파일은 패킹된 원본 파일입니다.

언패킹부터 차근차근해보세요 ㅎ



 


 

'[+] Information > [-] RCE' 카테고리의 다른 글

ShowString - 프로그램 스트링 보여주는 프로그램  (14) 2009.08.27
재밌는 리버싱 문제~  (120) 2009.07.03
cffo-4 크랙미 풀이.  (10) 2009.04.14
simples 시즌2 리버싱 문제 level1 풀이.  (4) 2009.04.14
abex3 Crackme 풀이.  (0) 2009.04.14
  1. Favicon of https://ezclub.tistory.com BlogIcon 고고 2009.04.14 22:02 신고

    제가 요즘 리버싱이 뭔지 공부해보려고 합니다..
    ㅎㅎㅎ
    여기 자주오다보니 관심이 가더라구요.. ^^
    행복한 밤 되세요 반짝~

  2. 고회장 2009.04.14 22:41

    ㅎㅎ 한개씩 풀어가면서 따라해야겠네요..ㅡㅡ안그래도 요즘 날씨도 더워서 맨날 잠만 퍼질러 자니..
    ^^;; 20분가량 해매니. 성공 문구는 나오네요..

  3. Favicon of https://tistory.hackerc.com BlogIcon 해커 C 2009.08.05 00:40 신고

    내겐 너무 어려운 당신.....ㅠ

    한참 공부 해야 겠어요 ~~~~ .. 어느세월에 .. ㅜㅜ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.08.05 03:18 신고

      저도 공부한지 얼마 안되서 허접이랍니다.. ㅋ

  4. 에휴, 2010.01.05 22:02

    이렇게 하는게 맞는지 모르겠지만

    에러? 뜨는 부분을 모드 JMP 문 으로 햇더니

    아무 시리얼이나 입력해도 콩그레이츄 ? 뜨늗네

    이렇게 해도 되는건가요.

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2010.03.27 16:55 신고

      문제의도와는 조금 다르게 푸셨지만 그것도 하나의 푸는 방법입니다 ㅎㅎ

  5. 리버스엔지니어를꿈꾸는자 2011.04.12 20:56

    움....굳이 시리얼을 찾지 않고 아무것도 쓰지않고도 성공문구가 나오게하는게 더편할것같군요
    jmp와 nop만쓸줄안다면말이죠 ㅇㅅㅇ 좋은키젠 보고갑니다 ^^
    자주들를테니 키젠좋은거있으면 올려주세염 ㅎㅎ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2011.04.13 20:15 신고

      제가 의도한 풀이방법은 아니지만~... ㅎㅎ

      의도한 풀이 방법대로 풀어보시는게 더 공부가 되지 않을까요? ㅎ

simples 시즌2 리버싱 문제 level1 풀이입니다.

하지만 level1 클리어의 조건은 이 프로그램을 리버싱 하는것이 아닌 accdb파일의 패스워드를 크랙하여 분석하는 것입니다.

accdb파일의 패스워드를 크랙하는 것은 풀이하지 않을 것이니 참고 하시기 바랍니다.

순수하게 프로그램만 풀이하도록 하겠습니다.

일단 리버싱을 하기전에 필수로 프로그램이 어떻게 동작하는지 봐야겠죠.

실행해보면 아래와 같습니다.



이번에는 프로그램을 PeScan해 보면 아래와 같이 나옵니다.


UPX로 패킹되어있네요.

UPX는 널리 알려진 패킹이므로 구글링하시면 언패킹 툴을 쉽게 구하실수 있습니다.

물론 수동 언패킹도 가능하구요.


전 수동 언패킹으로 패킹을 하였습니다.


위와 같이 나옵니다.

이젠 분석을 해봐야겠죠

디버거로 해당 파일을 오픈하여 줍니다.


OEP로 이동한 후 아래와 같이 Strings를 검색하여 줍니다.


인증에 실패하였을 때 나오는 문구가 검색이 됬네요.

저 문구를 더블클릭하여 해당 부분으로 가봅시다.



이동된 부분에서 조금만 위로 스크롤을 올리면 위와 같이 $표시가 되어있는 곳이 보입니다.

저번 풀이에서도 말을 했듯이 저 부분은 어떠한 함수의 시작부분을 뜻하는데요.

저 부분에 BP를 걸고 분석을 해보도록 하죠.


인증 버튼을 누르면 BP를 걸었던 주소에서 프로그램이 일시정지 하게 되는데 천천히 트레이싱을 해봅시다.

트레이싱을 하게 되면 아래와 같은 부분에서 이상한 문자열들을 발견하실수 있으실 겁니다.



잘 안보이실것 같아 밑에 복사했습니다.

00481BBE  |.  8B45 FC     MOV EAX,[LOCAL.1] // 이상한 문자열이 들어있는 첫번째 부분.
00481BC1  |.  BA 341C4800 MOV EDX,Level1.00481C34                   ;  ASCII "5653c6b1f51852a6351ec69c8452abc6" // 프로그램 내에 지정되어있는 이상한 문자열 부분

그리고 00481BC1 주소 밑에 어떠한 콜문이 있고 그 콜문밑에는 JNZ 점프문이 존재합니다.

그 점프문이 점프하는 구간 사이를 보니 우리가 원하는 인증성공 메시지가 보이네요.

기본적으로 저 문구를 뛰어넘을테니 점프 여부를 결정해주는 건 JNZ 위에 있는 Call 문일것입니다.

그 Call 내부로 들어가 어떠한 코드들이 작동되는지 확인해봅시다.


00404D03  |.  39D0        CMP EAX,EDX                               ;  Level1.00481C34

이 구문의 값들을 보니 프로그램내에 지정되어있던 이상한 문자열과 또 어떠한 문자열을 비교합니다.

정해진 어떠한 문자열과 비교하는것을 보니 저 문자열이 이 프로그램의 패스워드인것 같습니다.

하지만 저 문자열 자체가 패스워드는 아닙니다.

저 문자열은 md5라는 인코딩방식에 의해 생성된 문자열입니다.

그러니 md5 디코딩을 통하여 원래 문자로 바꿔주면 우리는 패스워드를 얻어 낼수 있습니다.

제 블로그 링크에 있는 인코딩 디코딩 사이트들을 통하여 디코딩을 하면 solo라는 문자를 얻을 수 있습니다.

이제 저것이 패스워드가 맞는지 확인을 해야겠네요.


 

인증이 됬군요 ^^ 이로써 해당 프로그램 리버싱이 끝이 났습니다.

결론을 간단히 정리하면 이 프로그램의 패스워드 인증방식은 패스워드 내에 정해진 md5문자열과 사용자가 입력한 문자열을 md5로 복호화하여 비교한후 인증 여부를 결정하는 것입니다.


이것으로 심플스 리버싱문제1을 클리어한것은 아닙니다.

그 뒤로는 스스로 풀어보시는것이 좋을 듯 싶어 여기까지만 풀이합니다 ^^

언팩한 파일 올립니다~


 

'[+] Information > [-] RCE' 카테고리의 다른 글

재밌는 리버싱 문제~  (120) 2009.07.03
cffo-4 크랙미 풀이.  (10) 2009.04.14
simples 시즌2 리버싱 문제 level1 풀이.  (4) 2009.04.14
abex3 Crackme 풀이.  (0) 2009.04.14
심심해서 해본 닷지 리버싱  (9) 2009.04.11
  1. 1 2009.05.19 20:08

    이건 JNZ SHORT 00481BE4
    부분에서 JE SHORT 00481BE4
    로 바꿔주면 금방풀리지않나염 ㅎㅎ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.07.03 14:48 신고

      그렇긴 하죠 ㅎㅎ

      근데 근본적인 문제는 그게 아니라서요 ㅎㅎ

      패스워드를 찾아내서 그 패스워드를 가지고 또 다른 문제로 접근을 해야해서 ㅋㅋ

  2. ㅇㅅㅇ 2010.03.17 16:13

    md5방식으로 인코딩되있다는사실을 어떻게알져?

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2010.03.27 17:01 신고

      인코딩 문장을 많이보다보면 대부분 감이 와요 ㅋ

간단하기에(?) 한번 써봐요 ㅋㅋㅋㅋㅋ

이번 크랙미의 목표는 키파일을 찾는 것입니다.

우리는 프로그램을 분석하여 그 키파일이 무엇인지 알아내고 그에 맞게 키파일을 만들어주면 되는 것입니다.

일단은 디버거로 프로그램을 열어보죠 ㅎㅎ

 

00401025    68 B9204000   PUSH abexcrac.004020B9                    ; ASCII "abex.l2c"    // 프로그램이 찾고자 하는 키파일의 이름을 PUSH 해주고 있네요

0040102A    E8 5E000000   CALL <JMP.&KERNEL32.CreateFileA>
0040102F    A3 CA204000   MOV DWORD PTR DS:[4020CA],EAX
00401034    83F8 FF       CMP EAX,-1
00401037    74 3C         JE SHORT abexcrac.00401075
00401039    6A 00         PUSH 0
0040103B    FF35 CA204000 PUSH DWORD PTR DS:[4020CA]
00401041    E8 4D000000   CALL <JMP.&KERNEL32.GetFileSize> // GetFileSize함수를 Call
00401046    83F8 12       CMP EAX,12   // Call한 GetFileSize의 값과 원하는 키파일의 사이즈를 비교한다.(12는 16진수)
00401049    75 15         JNZ SHORT abexcrac.00401060   //  위에서 비교한 값이 참이면 점프를 하지 않고 거짓이면 점프를 하게 됩니다.


키파일을 못찾으니 찾았다는 메시지를 점프하여 그 밑에 있는 에러구문으로 프로그램의 흐름이 이동하는군요.

그럼 이제 원하는 키파일을 만들어 주자구요 ^^!!

일단은 알아두셔야 할것이 12는 10진수로 바꾸면 18입니다.

즉, 제목이 abex.l2c 이고 사이즈는 18바이트이면 되는 것입니다.


저는 아래와 같이 만들었습니다.


키파일을 위와같이 만들어주고 문제가 있는 폴더나 경로에 두고 프로그램을 실행하면 아래와 같이 나옵니다.



제대로 키파일을 찾았다는 메시지가 나오네요.

점프문으로 수정할수도 있는 프로그램이었지만 분석도 그리 어렵지 않기때문에 프로그램의 목적대로 푸는게 이번 크랙미의 참된 풀이라 생각이 됩니다.

분석능력도 길러지고 말이죠.. ^^

다음에 또 크랙미 풀이들고 올께요 ㅋ

밑에 파일은 이번 크랙미 파일입니다.



 

'[+] Information > [-] RCE' 카테고리의 다른 글

cffo-4 크랙미 풀이.  (10) 2009.04.14
simples 시즌2 리버싱 문제 level1 풀이.  (4) 2009.04.14
abex3 Crackme 풀이.  (0) 2009.04.14
심심해서 해본 닷지 리버싱  (9) 2009.04.11
심심해서 Crackme 풀이 하나 써봐요 ^^  (6) 2009.04.06
다들 닷지 아시리라 믿습니다.

곰플레이어에 껴서 배포되는 총알피하기 게임인데요.

심심해서 수정해봤어요~

양심껏 이정도로만..

순위 인증은 하지 않았습니다.

다른분들은 열심히 총알을 피하셔서 순위 인증을 하시는데 제가 이런식으로 순위를 강탈해버리면 다른분들이 허탈해 하시니까요..

무튼 오랜만에 재미좀 봤어요 ㅋㅋㅋ

p.s 디버거 감지기능이 있는것 같지만 Attach에 무너지는군요.
공부와 포스팅 목적으로 글을 쓴 것이기 때문에 문제가 된다면 바로 삭제하겠습니다.




  1. 님짱 2009.04.11 18:38

    님 좀 짱인듯

  2. BeST 2009.04.14 03:11

    저두 예전에 해 봤었는데 노란공 50개~ 근데 이젠 어떻게 했었는지 기억도 잘 안나네요~ㅋ
    크랙미 대용으로 여기저기서 건드는 만만한 동네북 닷지&핀볼...ㅎㅎ

  3. 은쏘이 2009.04.18 21:41

    우아 대단하세요^^

  4. 프로텍터 2009.05.09 17:27

    안녕하세요 리버싱 개 허접인데 닷지는 프로텍터 걸려있어서 리버싱 안되는데 어떻게 하냐요..?

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.05.09 22:58 신고

      흐음?? 프로텍터라면 n프로텍터를 말씀하시는건가요??

      그런건 없던데.. 전 참고로 어태치 해서 풀엇어요.

  5. 어태치 2009.06.21 13:25

    저기 질문이 하나 있는데요 어태치로 닷지의 그 저장하는 부분을 찾긴 했는데 CPU창에서 우클릭 한 후 'copy to..'-> 'all mod..'로 저장하는데 저장이 안되네요. 어태치 한 다음 저장하는 방법좀 가르켜 주시면 감사.. 어태치로 하는건 이번이 처음이라... 귀찮이시다면 사이트라도 가르켜 주세요..ㅠ

정말 시험기간만큼은 아무것도 안하고 공부만 하려했으나 결국 노트북을 잡고야 말았네요 ㅡㅡ;;

잡은김에 크랙미 풀이 하나 합니다 ㅎㅎ

키 생성까지 하려했으나 귀찮고 설명하기도 힘들고 하여 그건 뺐어요~

간단한 메시지 우회 풀이입니다 ㅋ


오늘 제가 풀이할 크랙미는 아래 사진과 같은 크랙미입니다.

파일도 첨부해둘께요~



이름과 시리얼을 구하여 넣어야 풀어지는 크랙미인데요.

아무거나 입력하면 아래와 같이 메시지가 나타납니다.


간단하게 한곳을 수정하여 축하메시지만 뜨게 해보겠습니다.



해당 파일을 올리디버그로 열고 사진처럼 Text String을 검색해 주면 아래와 같이 나타납니다.

검색하면 아래와 같이 나오는데 위에서 봤던 No luck 메시지를 찾아 더블클릭하여 줍니다.


더블클릭을 하면 그 메시지가 푸쉬되는곳이나 콜이되는 부분으로 이동하게 되는데요.

그 위를 천천히 살펴보시면 $ 표시가 된 Push 문이 보입니다.

그 부분은 어디선가 점프를 해와서 시작하는 부분을 뜻하는데요.

어디서 점프해왔는지 추적해볼까요??

아래와 같이 goto 기능을 쓰면 어디서 점프해왔는지 추적이 가능합니다.



추적을 하였으면 어떠한 콜문에 커서가 가 있을 것입니다.

콜문 주위를 보면.... 그 위에 점프문이 있네요.



점프문을 보면 점프를 하지 않는군요 ㅡㅡ;;

우리가 지금 도착한 콜문은 No luck을 띄워주는 콜문입니다.

그 위에서 프로그램 흐름상 점프를 하지 않는 다는것은... 그대로 우리가 도착한 콜문에 의해 메시지가 출력된다는 소리인데요.

수상하니 저 점프문에 브레이크 포인트를 걸고 증상을 살펴봅시다.



확인 버튼을 누르는 순간 저 점프문에서 브레이크 포인트 때문에 딱 걸리는군요.

옆에 점프선을 잘 보시면 활성화 되어있지 않습니다.

즉 실행되면서 No luck메시지가 들어있는 콜문을 호출하겠네요.

그러니 우리는 저 JE 점프문을 JMP로 강제 수정해주면 됩니다.



오옷 성공했네요 ^^

해당 크랙미를 푸는 첫번째 방법은 이렇게 푸는 것입니다.

두번째는 이름과 시리얼 루틴을 분석하는건데...

이거 하고 귀찮아졌네요 ㅡㅡ;;

다음기회에 하고싶을때 다시한번 쓰겠습니다.. ㅎㅎㅎ

이 풀이는 기본적인 리버싱 지식과 올리디버그 사용법을 알고계신분들을 기준으로 작성된 것입니다.

'[+] Information > [-] RCE' 카테고리의 다른 글

abex3 Crackme 풀이.  (0) 2009.04.14
심심해서 해본 닷지 리버싱  (9) 2009.04.11
심심해서 Crackme 풀이 하나 써봐요 ^^  (6) 2009.04.06
MaJ3stY의 쉬운 keygenMe~  (2) 2009.04.06
리버싱 전 셋팅 간단한 팁.  (0) 2009.04.01
  1. Favicon of https://ezclub.tistory.com BlogIcon 고고 2009.04.10 13:10 신고

    오... 이거 재미있을것 같아요..
    리버싱이 무엇인지 찾아보고
    올리디버그 요것도 좀 찾아봐야겠어요..
    우선 그랙미...를 다운받아놓고 해야겠죠 ^^
    즐거움을 선물해 주셔서 감사합니다 ^^

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.04.10 15:17 신고

      하핫 즐거움이라뇽 ㅋ

      즐 리버싱 하세요 ㅋ

  2. 고회장 2009.04.14 00:38

    실행파일 블로그에 퍼가도 될까여??? 리버싱 공부를 해볼려고 합니다^^

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.04.14 00:48 신고

      당연히 되죠~~

      배포 프로그램인걸요 ㅋㅋㅋ

  3. 고회장 2009.04.14 01:42

    아하 그런가요?? 아 이거 입력값 혹시 풀으셨나요??

    시리얼부에서 패턴을 모르겠네요.ㅎㅎ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2009.04.14 16:06 신고

      시리얼부 루틴을 콜하는 부분이 있고 그 콜문을 분석하시면 되요~

      전 분석은 예전에 했는데 풀이를 쓰기 귀찮은것뿐..

      시리얼 분석 풀이는 이것저것 설명할게 많아서 말이져 ㅠㅠ

+ Recent posts