Write-up/Wargame

Abex Crack me #2.1

Dalseung 2020. 5. 1. 19:54

 

기본적으로 한 프로그램이 주어진다

간단히 프로그램의 작동이 어떤지 알아보기 위해서 Name과 Serial을 채워 넣었다

check버튼을 누르자 마자 

Serial이 틀렸다고 나온다

하지만 그 어떤 값을 넣어도 다 틀리다고 나오니까 여기서 시간낭비는 하지 말자

 

오늘도 x64dbg로 이 프로그램을 다 파헤쳐보겠다.

오늘은 거의 모든 인터페이스를 다 볼 거다

F9를 누르면 함수의 시작주소가 401238로 나온다

 

우선 아까 우리가 봤던 Error창에 뜨던 문자열중 하나인 Wrong을 찾아보자

어셈블리코드 창에서 마우스 오른쪽 >> 다음을 찾기 >> 모든 모듈 >> 문자열 참조를 누르면

이런 창이 뜨는데 검색창에 wrong을 쓰면 된다

 더블클릭을 하면 그 주소 어셈블리 코드로 바로 간다

 

이번에도 빨간 박스 안에 je분기문이 있다

그렇다면 정상실행을 했을때 나오는 문자열은 어디에 있을까?

그 코드의 흐름을 파악해야 원하는 대로 동작을 할 수 있기 때문에 위 아래로 좀 더 찾아봤다

 

그리고 찾았다

같아 보일 수 있지만 다른 부분이다

 

여기서 edx와 eax에 각각 ebp-44와 ebp-34의 주소를 넣은 후  TEST문이 나오는데

TEST문도 CMP와 같이 비교를 하는 것이라 생각하면 되겠다 그러나 비교대상이 없어서 자기자신과 AND연산을 해서 자신이 무슨 값인지 알아낸다

최상위 비트 값이 0이 나오면 ZF(Zero Flag) 값이 1로 세트된다

 

F9를 눌러 실행을 하다가

값을 넣으면 

이렇게 주석문에 내가 넣은 값이 들어간다

빨간 박스에서 edx와 eax에 각각 값이 들어가있고 그 값은 바로 주소이다

그 주소를 스택에서 보면 

이렇게 뜬다 이걸 그대로 덤프에서 보도록 하자

현재 EAX와 EDX에는 명령어 lea영향으로 레지스터에는 주소가 들어가있는 상황 (EAX와 EDX의 용량은 32bit)`

이 부분의 값이 서로 다르다( 참고로 한칸에 1byte(두개 숫자)이고 한 바이트씩마다 주소에 +1이 된다 )

서로 다른 값을 스택에서 보면 값이 나온다

이 C8C595D8을 넣으면? 

잘 나온다

clear~

 

<번외>

F7로 한줄씩 실행하면 어셈블리어 옆에 주석이 실시간으로 생긴다

저게 답이긴하다

 

 

'Write-up > Wargame' 카테고리의 다른 글

[Dreamhack wargame] Quiz: x86 Assembly 1 풀이  (2) 2022.09.25
Abex's Crackme #4  (1) 2021.04.27
Abex Crackme #3  (1) 2020.09.19
Abex Crack me #2.2  (0) 2020.05.01
Abex Crack me #1  (0) 2020.04.30