일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- cmd
- RIP
- CISCO
- Firewall
- Python
- 라우터
- 스위치
- docker
- 크롤러
- AI
- Reversing
- 온프레미스
- abex'crackme
- 머신러닝 프로세스
- 자바
- Mac
- 인공지능
- vector
- STP
- 암호학
- dreamhack
- 네트워크
- vlan
- Repository
- bastion host
- Screening Router
- Java
- 리버싱
- AWS
- 머신러닝
- Today
- Total
Haekt‘s log
[리버싱] abex' crackme #3 문제풀이 (x32 dbg) 본문
- 명령어 설명
Cmp eax, esi 이 명령어는 eax와 esi 의 값을 구분하여 같으면 ZF 플래그를 1로 만드는 명령이다.
점프 명령어인 Jne는 not equal 의 의미로 같지 않을 경우 점프.
- 단축키 설명
F2 : 브레이크 포인트 설정/ 해제
F7 : 한줄실행 (함수 안까지 따라들어가 실행)
F8 : 한줄실행 (함수 건너뛰어 실행)
F9 : 전체 실행
- 사용 툴
- x32dbg
- Writeup!
Crack 4 파일은 실행을 시키면 아래와 같은 창이 뜬다.
키파일을 찾는 프로그램으로 보인다.
키파일이 존재하지 않으므로 Error 창이 뜨게된다
바로 디버거를 이용하여 열어보자.
바로 F9버튼을 눌러 엔트리 포인트를 찾아 키파일을 확인하는 창을 띄우는 부분을 찾아준다.
메인 코드는 이렇다. 파일을 찾아 비교하는 부분을 찾아보자
Crack 1 과 마찬가지로 cmp로 eax 값과 FFFFFFFF 값을 비교하여 Error창을 띄우는 부분으로
이동을 하는 것을 알 수 있다.
Error 문이 두개인 것으로 보아, 이 비교문은 파일이 있는지 확인하는 부분으로 보인다.
그럼 파일이 있을 경우에 창을 띄우는 비교문도 살펴보자.
Cmp eax, 12 로 비교하여 Error를 띄우는 것을 알 수 있다.
모든 비교문의 피연산자를 동일하게 해서 통과를 시킬 수 있지만, 한번 맞는 키파일을 만들어 통과시켜보자.
파일이 있는지 확인하는 함수를 따라들어가 확인해 보자.
F7을 눌러 함수 내부로 들어간다..
함수 내부를 들어가보니 ebp+8 의 부분을 edx 에 저장하는 부분을 확인해 볼 수 있다.
Ebp+8 의 부분을 확인해 보니 abex.l2c이며, edx에 저장하는 것을 알 수 있었다.
메모파일을 만들고 이름과 확장자를 Ebex.l2 로 바꾼 후 실행해보자.
위와 같이 abex.l2c 파일을 만들고 실행 시킬경우 위와 같이 뜨게 된다.
키 파일의 값이 다르다는 창이 뜬다.
이제 키파일의 내용을 확인하는 부분을 확인해보자.
파일생성 후 뜨는 창의 부분이다. 마찬가지로 cmp 명령어로 값을 비교하여 jne를 하게 되는 부분이다.
Jne는 not equal 의 의미로 같지 않을 경우 점프하는 명령어 이므로
eax 가 12 와 다를 경우 점프를 하는 의미인 것을 알 수 있다.
여기서 12 의 값은 16진수로, 10진수로 표현하면 18 이므로 18과 eax 값이 같을 경우 점프를 하게 된다.
그럼 eax 의 값은 무엇인지 알아야 이 문제를 해결할 수 있다. 이 비교문 바로 전에 getfilesize함수를 호출하는데,
eax는 함수의 반환값을 저장하는 레지스터이므로, 이 getfilesize 의 반환값을 가지고 있을 것으로 보인다.
이름이 getfilesize로 파일의 크기를 가져오는 함수로 보이기에,
한번 키파일안에 값을 넣어 eax의 값이 변하는지 확인해 보자.
문자 한자리를 넣어 저장 했으므로, eax 에는 1이 들어가야 한다. 확인해 보자.
cmp 비교 부분까지 실행한 결과, eax 의 값이 1로 된 것을 확인할 수 있었다.
그럼 cmp eax, 12 는 18크기의 파일인지 확인하는 코드인 것이 확인 되었다.
18 자리를 입력해 보자.
1을 18번 입력하고 실행하였다.
그 결과, 정상적인 창이 뜨는 것을 확인할 수 있었다.
'Reversing' 카테고리의 다른 글
[리버싱] reversing with lena-tutorial 3 (1) | 2022.09.25 |
---|---|
X32,64 dbg 파일 패치방법 (0) | 2022.09.25 |
[ASM] TEST EAX, EAX 왜 쓰는걸까? (0) | 2022.09.20 |
[리버싱] abex' crackme #1 문제풀이 (x32 dbg) (1) | 2022.09.20 |
[리버싱] reversing with lena-tutorial 1 (1) | 2022.09.20 |