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 | 31 |
Tags
- 라업
- 해킹캠프
- 라이트업
- 히공
- reversing.kr
- PYTHON
- 라이트 업
- web
- 시탭
- 2021
- probgame
- 드림핵
- 워 게임
- ctf
- reversing
- 변수
- 리버스 엔지니어링
- vsCode
- write up
- 파이썬
- c언어
- ShaktiCTF
- 코드엔진
- 뭉뭉
- 강의
- 풀이
- hackingcamp
- write-up
- 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 - revtine (0) | 2021.03.20 |
hackingcamp22CTF - Demon Notepad (0) | 2021.03.20 |
hackingcamp22CTF - Do u know it? (0) | 2021.03.20 |
Comments