Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- ctf
- web
- 리버스 엔지니어링
- write up
- hackingcamp
- 라이트업
- c언어
- 파이썬
- 라이트 업
- 시탭
- 히공
- PYTHON
- write-up
- 코드엔진
- 변수
- 뭉뭉
- 풀이
- 강의
- 2021
- 라업
- probgame
- vsCode
- reversing.kr
- ShaktiCTF
- reversing
- Basic
- 드림핵
- 리버싱
- 워 게임
- 해킹캠프
Archives
히공
hackingcamp22CTF - dvm-rev 본문
728x90

문제

dvm-rev

sub_14A3이 가장 중요한 함수다.

이러한 함수다.
ida 리모트 디버깅을 쓴다.
인자로는 opcode를 준다.

f9를 누른다.

jmp rax가 굉장히 중요하다.

아무거나 입력해준다.

call하는 부분으로 오게 된다.

안은 이러했다.

memcmp로 가는 것을 볼 수 있다.
unk_7F4ABDDDFF00 = memcmp

끝나고 rsi 주소로 가보면
여기 주소와 비교하는거다.

코드를 패치하여 검사를 통과하도록 만들었다.
총 3번 입력받는다.
opcode : S가 출력되면
입력을 받는다.
opcode : P가 출력되면
memcmp를 호출한다.

RAX값을 보니 8개를 입력받는 것을 알 수 있다. (read 함수 호출 후)

여기를 보면 sub_1100는 write함수로 이동하는 함수라고 알 수 있다.


여기 보이는

이 부분을 memcmp로 가게 하지 말고 write함수로 가게 만든다.

jz를 jnz로 바꿔서 실패가 없도록 만든다.
pwntools를 이용해 브포를 돌리면 된다.

hxd로 바꿔줬다.
(wsl ubuntu 18.04 python 2.7 환경)
from pwn import *
memcmp_ls = [b"\\x9A\\x03\\x8A\\xF0\\x89\\xDC\\x25\\x93", b"\\xB2\\xCA\\x48\\xB2\\x86\\x91\\xE4\\xF9", b"\\x26\\x4F\\x11\\xD8\\x8F\\xA6\\x5F\\x6D"]
result = ''
for i in range(3):
for j in range(8):
for brute_force_c in range(0x7e+1):
p = process(['dvm-rev_1_hx','opcode'])
p.sendline(result+chr(brute_force_c))
for k in range(i+1):
p.recvuntil("[+] opcode : P\\n")
recv_data = p.recv()
p.close()
if recv_data[j]==memcmp_ls[i][j]:
result+=chr(brute_force_c)
break
print(result)

HCAMP{34sYrEvPrObl3m:-)}
'write up > hackingcamp22CTF' 카테고리의 다른 글
| hackingcamp22CTF - Opps Enc! (0) | 2021.03.20 |
|---|---|
| hackingcamp22CTF - Demon Notepad (0) | 2021.03.20 |
| hackingcamp22CTF - Do u know it? (0) | 2021.03.20 |
Comments