인공지능 개발일지

[리버싱] abex' crackme 1번 Writeup 본문

보안/리버싱

[리버싱] abex' crackme 1번 Writeup

Prcnsi 2021. 10. 12. 09:44
728x90

들어가기 앞서서 4문제를 풀면서 어셈블리어가 이런거구나 느꼈고 문제 구조가 아래와 같이 일반화할 수 있었다.

※ abex crackme 한정

 

Step 1. ollybdg에 들어가서 한 줄씩 혹은 문자열을 검색해서 실행시킨다.

Step2. 위 과정을 통해 특이점이 있는 라인을 찾는다.

Step 3. 그 라인들끼리의 관계성을 찾는다.

Step 4. 거기서 Fix 할 부분 찾고 고치기

 

(보통 Step1에서 프로그램을 실행시킬 때 나왔던 문자열 뜨게 해야 할 문자열을 찾는다)

 

그리고 이건 개인적인 생각인데 1~4번까지 갈 때 1,2,3,4번 순으로 어려운 게 아니라 4,3,2,1 순으로 1번이 가장 어려웠다.

뇌피셜으로는 정말 문제 난이도가 그러하거나 툴에 익숙해져서 그렇게 느껴지는 건지는 모르겠지만 그냥 그렇다고요.

 


먼저 abex crack me 1번을 실행해준다. 그러면 아래와 같은 창이 뜬다.

HD(하드디스크)CD-Rom(디스크)으로 인식하도록 하라는 말이 적혀있다.

 

 

확인을 누르면 CD-ROM Drive가 아니라는 창이 뜬다.

 

 

그럼 CD-ROM이 Drive로 인식할 수 있게 하면 풀리는 문제인가 보다.

이제 x 32 dbg / ollybdg에서 위 파일을 열어준다.

그리고 F8을 눌러 한 줄씩 실행시키면 아래 세 줄에서 걸린다.

위에 뜬 창이 1,2(메시지 박스)이고 3번을 뜨게 해야 하는 문제 같다.

 

 

 

그리고 아래와 같은 순서로 코드가 이루어져 있다.

  1. 다음으로 눈에 띄는 것은 00401026라인과 0040103D(이하 4)의 관계이다.

  2. je 명령어로 0040103D주소로 이동하는 걸 볼 수 있다 그런데 코드를 실행시켜 보면 00~3D로 점프하지 않는다.

    왜냐 하면 아래와 같이 je명령어는 두 인자가 같아야 점프하기 때문이다.

 

  • JE: a==b일시 해당 주소로 점프
  • JMP: a!=일시 해당 주소로 점프

   그래서 jejmp로 바꿔주면 달라도 이동하게 된다.

   결론: je를 jmp로 바꿔주기

 

  3. je jmp로 바꿔주면 HDCDROM이 달라도 ~3D주소로 이동한다. 그리고 MessageBox함수에                               push 뒤의 0,~5E,~64,0가 차례로 인자로 전달된다.

  4. 그러면 결과적으로 OK~,Yeah~ 메시지 박스가 뜬다.

  5. 마지막으로 이제 F9를 눌러 실행시켜 주면 된다.

 

728x90