본문 바로가기

reversing18

[seccon 2021] Reversing - flag 이번 seccon은 연합팀 'KOREAN'으로 나가게 되어 최종 4위를 하였습니다. 하지만 명예 한국인 한 분도 계셨다는ㅋㅋ. 사실 조금 늦게 참여하였는데 운이 좋게 리버싱 한 문제를 풀 수 있었습니다. 다음은 리버싱 문제였던 'flag' 풀이입니다. 문제 클릭시 웹 사이트로 리다이렉트되며 알맞는 플레그를 웹에서 체크하는 문제였습니다. 리버싱 태그로 나왔기 때문에 살펴보면 wasm 웹 어셈블리어 바이너리가 존재하는걸 볼 수 있습니다. 즉, 해당 문제에서 플래그 문자열을 입력하고 체크 버튼을 클릭시 내부적으로 웹 어셈블리어 바이너리에서 검증을 하게 되는겁니다. 웹 어셈블리어를 분석할 때는 유명한 팁이 존재합니다. 바로 wasm 바이너리를 디컴파일 후 다시 elf로 빌드해서 보는 것입니다. 사실 디컴파일 소.. 2021. 12. 17.
z3 모든 경우의 수 from z3 import * # find hidden menu route with z3 solver. input = [BitVec("input[%d]" % i, 32) for i in range(4)] s = Solver() for i in range(4): s.add(input[i] >= 0, input[i] 2018. 9. 30.
syscall socket x86, x86-x64 가끔 문제들을 보면 file descriptor를 싹 닫는 경우가 있다. 이런 경우 socket을 통해 새로운 file descriptor를 생성해주면 된다. sys_mprotect를 사용해 실행 권한을 할당 해 reverse shellcode를 실행 시키는게 대표적이며, sys_socket, sys_connect를 사용한 srop로 직접 리버스 커넥트를 맺을 수 있다. Reverse Connect를 맺게 되면 dup2 처리를 해 stdin / stdout을 제공해준다. x86-x64 기준 sys_socket : rax - 0x29 rdx - 0x0 rsi - 0x1 rdi - 0x2 sys_connect : rax - 0x2a rdx - 0x10 rsi - ptr (ip/port) rdi - fd (s.. 2018. 9. 30.
ARM 32bit IDAPython - ARM 32bit Add XrefARM 32bit Binary를 분석하다 보면 가끔 역참조 기능이 없는 문자열이 존재한다. 이럴 때 어느 곳에서 문자열이 사용되는지 찾아 역참조를 추가해주는 소스다.from idaapi import * from idc import * from idautils import * from struct import * # ARM xref adder p32 = lambda x : pack(" FOUND : 0x%x" % (addr) To = u32(find_str_offset) From = addr AddCodeXref(From, To, XREF_USER) start_addr = addr + 4 elif addr == 0xFFFFFFFF: print " -> .. 2018. 9. 29.