반응형

reversing.kr 문제 풀이 / 1. Easy Crack - 100pt

Easy Crack을 실행해 보겠습니다. 

메시지 박스가 출력되는데, 여기에 "aaaaaaaaaa"을 입력하고 확인을 눌러보겠습니다.

아래와 같이 패스워드가 잘못되었다고 에러 팝업이 출력됩니다. 

우선 실행파일의 구조를 살펴보겠습니다. 

시작 주소는 00401188이고, C/C++ 언어로 만들어진 프로그램이란 걸 확인할 수 있습니다. 

 

이제 이 프로그램을 ollydbg로 리버싱해보겠습니다. 

처음부터 Step Over(F8)로 끝까지 한번 돌려보고 대충 파악한 해봅니다. 

그리고 search for > All referenced text string으로 "Incorrect Password" 문구를 찾습니다. 

이 문구에 대한 주소로 이동해 보겠습니다. 

그 주소에서 맨 위쪽 코드를 보면 확인 버튼을 눌렀을 때 발생하는 코드인 것을 추정할 수 있습니다. 

여기에 breakpoint를 걸고 tracing하면서 살펴보겠습니다. 

004010AA 주소에서 GetDlgItemTextA 함수를 수행해보면,

메시지 박스에서 입력한 텍스트인 "aaaaaaaaaa"를 스택에 넣는 것을 확인할 수 있습니다. 

그리고 입력값의 두번째([ESP+5]) 값과 61(a)를 비교하는 것을 확인할 수 있습니다.  

두번째 값이 a가 아니면 에러 팝업을 발생하는 코드로 분기됩니다. 

두번째 값은 a인 것을 알 수 있습니다.

두번째 값이 61(a) 라면 JNZ 바로 아래 코드를 수행하게 됩니다. 

그리고 전달인자로 2, "5y", ECX 값을 가지고 Easy_Cra.00401150 함수가 호출됩니다. 

여기서 ECX 값은 DWORD PTR SS: [ESP+A] 값으로 입력된 값의 3번째 값부터 마지막값으로 들어갑니다. 

그래서 ECX는 "aaaaaaaa" 의 값을 가집니다. (입력한 값은 "aaaaaaaaaa" (a가 10개)이고, ECX는 a가 8개) 

Easy_Cra.00401150 함수 내부로 들어가 동작을 살펴보겠습니다. 

00401176에 AL과 DS를 비교하게 됩니다. 

"5y"와 입력한 값의 세번째, 네번째 값과 비교하는 것을 알 수 있습니다. 

세번째, 네번째 값을 5y로 입력값을 넣고, 다시 수행해봅니다. 

 

다시 수행해보면 5y와 세번째, 네번째 값인 '5y'와 비교를 하고, EAX를 0으로 만드는 것을 볼 수 있습니다. 

함수를 빠져나오면, EAX가 0이라 JNZ에서 바로 아래 코드를 수행하는 것을 볼 수 있습니다. 

그 다음 코드는 'R3versing' 문구와 비교하는 것을 볼 수있습니다. 

입력값을 'aa5yR3versing'으로하고 다시 수행해보겠습니다. 

그리고 입력값의 첫번째 값과 0x45('E')과 비교를 합니다. 

하여 입력값을 'Ea5yR3versing'로 하여 다시 수행해보겠습니다.

 'Ea5yR3versing'를 입력값으로 하였을 때, 아래 구문이 수행되는 것을 볼 수 있습니다. 

그리고 Congrtulation !! 메시지 박스가 뜨는 것을 볼 수 있습니다. 

 

'Ea5yR3versing' 값을 아래 입력란에 입력하여 인증하면 Easy Crack 문제가 resolved됩니다.

 

Reversing.Kr

This site tests your ability to Cracking & Reverse Code Engineering. Now Challenge a problem for each environment. (Windows, Linux, .Net, Flash, Java, Python, Mobile..) Admin E-Mail: gogil@reversing.kr

reversing.kr

 

반응형
반응형

어셈블리어 / REP , STOS 코드

 

REP 명령어

ECX 레지스터를 카운터로 사용해서 문자열 관련 명령을 ECX의 값만큼 반복하겠다는 명령어입니다. 

단, 한번 수행 할 때마다 ECX는 1씩 감소합니다.

STOS 명령어

EAX의 값을 EDI가 가리키는 주소(EDI의 주소)에 저장한다는 의미입니다. 

 

REP STOS 명령어

ECX 레지스터에 있는 카운트 값만튼 STOS를 수행하는 의미입니다. 

 

 

예제

EAX에 저장된 값을 EDI가 가리키는 곳에 ECX 만큼 반복하여 복사합니다. 

 

반응형
반응형

simples crack me #6 문제 풀이

실행파일을 파악해보면, console 프로그램이고 MinGW 컴파일을 이용하였습니다.  

crackme 6 실행파일을 실행해보면 아래와 같이 콘솔 프로그램이 실행됩니다. 

password를 입력하는 부분에 아무거나 쓰고 엔터를 누르면 wrong!을 출력하게 됩니다.

이 문제는 Password를 구하는 문제로 보입니다. 

우선 search for > All referenced text strings에서 wrong! 문구를 찾아 해당 주소로 이동합니다.

Wrong! 코드에서 위쪽으로 올라가다보면 00401555 주소에서 7F97E56C 값과 [LOCAL.1] 주소의 값을 비교하여 JNZ로 분기하게 됩니다. 

[LOCAL.1]은 아래 주소의 값과 같습니다. 

[LOCAL.1] =>DWORD PTR SS:[EBP-4]

EBP-4인 0022FF74 주소의 값을 보면 입력한 값인 12341234(0x00BC4FF2)가 있는 것을 알 수 있습니다. 

이것으로 EBP-4 주소에는 콘솔창에서 입력한 값이 저장됨을 알 수 있습니다. 

하여, 7F97E56C 값을 password에 입력하면 되는 것을 알 수 있습니다. 

이 값은 16진수라 10진수 값인 2140661100을 입력해 보도록 하겠습니다.

2140661100를 입력하니 Correct, good job!을 출력하는 것을 볼 수 있습니다.

반응형

'WarGame > crack me' 카테고리의 다른 글

abex crack me #5 문제 풀이  (0) 2020.08.26
abex crack me #4 문제 풀이  (0) 2020.08.25
abex crack me #3 문제 풀이  (0) 2020.08.25
abex crack me #2 문제 풀이  (0) 2020.08.25
abex crack me #1 문제 풀이  (0) 2020.08.17
반응형

abex crack me #5 문제 풀이

crackme5.exe
0.01MB

 

 

우선 실행파일의 구조를 파악해보면, 시작 주소는 00401000이고, Delphi 언어로 생성된 프로그램인 것을 확인할 수 있다.

이 실행파일을 실행시켜 보면 serial을 입력하라는 메시지 박스가 출력됩니다.

이 상태에서 Check 버튼을 누르면 Error 팝업이 출력됩니다. 

이제 crackme 실행파일을 ollydbg로 리버싱해보도록 하겠습니다.

아래 구문을 하나씩 따라가 보니, DialogBoxParamA 함수에 의해 메시지 박스가 출력되고, check 버튼을 누르고, Error 팝업에서 확인 버튼을 눌렀을 때, ExitProcess 함수를 호출하는 것을 볼 수 있었습니다. 

 

이번 문제에서는 모든 intermodular call과 referenced text string을 찾아 보았지만 도움이 될만한 부분은 없었습니다. 

 

 

한참 고심하던참에 스크롤을 내려보니 아래와 같은 코드들이 보였습니다. 

004010FC 주소에서 EAX와 0을 비교하여 그 다음 코드에서 분기되는 것을 확인하였습니다. 

그래서 004010F7 주소에서 lstrcmpiA 함수가 비교하는 구문으로 추정되어, 해당 주소에 breakpoint를 걸어놓고, 

다시 실행해보았습니다.

breakpoint까지 오니 lstrcmpiA의 전달인자에 String1과 String2가 들어가는데, 

String1에 시리얼 번호가 있었습니다. 

 

위에 시리얼 번호를 아래 메시지 박스의 입력란에 입력하고, check 버튼을 누르니, 아래와 같이 Well Done! 팝업이 출력되는 것을 확인할 수 있었습니다.

반응형

'WarGame > crack me' 카테고리의 다른 글

simples crack me #6 문제 풀이  (0) 2020.08.26
abex crack me #4 문제 풀이  (0) 2020.08.25
abex crack me #3 문제 풀이  (0) 2020.08.25
abex crack me #2 문제 풀이  (0) 2020.08.25
abex crack me #1 문제 풀이  (0) 2020.08.17

+ Recent posts