ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • crackme2-abexcm2
    공부/리버싱 2013. 7. 19. 00:25

    크랙미 2번 풀이입니다


    아주 흔한 크랙하는 형식의 문제입니다

    보통 이런 크랙문제들은 name을 어떤 루프에 돌려서 시리얼을 만든다고 합니다.

    그런 방식으로 구현해서 풀수도 있겠지만 초보인 저는 좀더 쉬운 방법으로 가보겠습니다.


    먼저 프로그램이 시작하는 ep를 찾아줍니다.

    ep위에는 함수들이 선언되어있습니다.

    먼저 프로그램은 name,serial칸을 모두 채운후 check를 눌러 맞으면 "key is right"가 나오지만

    serial이 틀릴경우 "wron serial"과 같은 메세지를 뱉습니다.

    R 이라고 멋드러지게 써져있는 아이콘을 눌르면 프로그램 내의 텍스트들이 쭉~ 뽑혀나옵니다.

    위 사진처럼 말이지요. visual basic의 특성상 객체를 누를떄 이벤트가 발생하기때문에 메세지 박스 근처에

    시리얼과 입력값을 비교하는 부분이 있을거라 생각해서 성공하는 부분의 코드 부터 보았습니다.


    예상대로 바로 위에 비교하는 코드가 있더군요.

    BP00403321 LEA EDX,DWORD PTR SS:[EBP-44]  함수에서 선언된 객체의 스택 주소입니다

    BP00403329 CALL DWORD PTR DS  조건문의 시작

    0040332F TEST AX,AX  논리비교 구문(AND연산과 같음)

    00403332 JE abexcrac.00403408 조건분기구문

    0040338A MOV DWORD PTR SS:[EBP-D4],abexcrac...... 성공문장

    브레이크 포인트를 건 부분은 중요하다 생각되어서 걸어놓았습니다.

    여기는 실패구문입니다 아까 위에와 비슷한 형태를 띄고있어서 조건문 시작부분에다가만 걸었는데

    지금사진을 보니깐 잘못건게 보이네요... 원래는 0040341B에다 걸었지만 이부분은 별로 중요하지 않으니깐 PASS하겠습니다.

    ps.이부분에 브포 걸지마세요.. 여기서부터 시작해서 한참 삽질했었습니다.

    그냥 순차적이 짱이라는걸 알게되네요

    그래서 저는 총 3부분에다가 브레이크포인트를 두었습니다.

    프로그램을 실행하다보면 00403321에서 멈추게 됩니다.

    그리고 이때 선언한 내용을 보기위해서 디버그 레지스터 창을보면 EDX(파일입출력)부분의 주소가 바뀌어 있는걸 확인할 수 있습니다

    주소를 오른쪽 마우스로 클릭하여 Follow in Stack 을 선택하면 스택내에 값을 볼 수있습니다.

    사진을 살짝 잘못찍었네요 원래는 정상적인 시리얼과 제가 입력한 시리얼이 나오게 되면서

    대략 유추 할수있죠(아.. 이게 시리얼이구나)

    013F378 주소값이 정상적인 시리얼입니다

    입력하면 Congratulations!

    다음번에는 암호화 루틴을 직접 만들어 봐야겠어요

    '공부 > 리버싱' 카테고리의 다른 글

    upx 언패킹 성공  (0) 2013.09.12
    펌 리버싱을 위한 어셈정리  (0) 2013.08.13
    crackme3-abexcm3  (0) 2013.08.06
    crackme2-abexcm2  (0) 2013.07.19
    carack_me 문제모음  (2) 2013.07.18
    crackme1-abexcm1  (0) 2013.07.17

    댓글 0

Designed by Tistory.