본문 바로가기

Writeups

[bi0sctf 2024] writeups 지금까지 CTF중 가장 양심이 없었다...!!! :blobangrypolice: 난이도 분포가 그나마 뉴비부터 어려운 문제까지 다양하다고 했는데, 정작 푼 걸 보면 쉬운거 두개만 딸깍 한 것 같다. 생소한 architecture여서라고 변명 아닌 변명을 해본다. 두 문제 다 BPF (Berkeley Packet Filter) 형태의 ELF를 분석하는 내용이었다. IDA로 못까는줄 알았더니 나중에 대회 discord를 다시 보니까 관련 플러그인이 있다는 사실을 알게 되었다. BPF? (Berkeley Packet Filter) BPF는 11개의 가상 레지스터를 사용하고, 문서에 따르면, x86-64 JIT 컴파일러에서 하드웨어 레지스터에 1:1로 매핑되어 사용함을 알 수 있었다. %r0 더보기
[dicectf 2024] writeups 주말에 많은 시간을 투자하지 않았다. 문제 다 훑고 스케쥴링 잘했으면 한두문제정도 더 풀 수 있었지 않았을까 하는 아쉬움이 남는다. 다음부터는 Niceness를 적절히 조절하자. pain-plus-plus deayzl님이 다 분석하시고, 쓰시던 코드에 붙어서 숟가락만 얹었다. (사실상 지분 Under 10%) `std::_Rb_tree`를 사용해 Flag를 한 글자씩 비교한다. (한 글자씩만 비교한다는 것) == (어디에 Breakpoint 걸어서 비교연산 따면 브포 가능) 이 대부분의 경우 성립한다. 이 문제의 경우 `std::_Rb_tree::_M_copy()` 내부에서 비교를 진행하면 된다. 입력을 받은 char를 내부에서 RB Tree에 insert하기 위해 진행하는 비교이다. (미리 분석해주신 .. 더보기
[insomnihack 2024] writeups 2024년 들어 처음 뛴 CTF이다. 혼자서 응애맛 리버싱 1개를 슥삭했고, 다른 2개의 문제를 같이 고민하여 총 3문제 풀이에 기여를 했다. 대회 끝나고 1주일동안 아무것도 안하다가 주말에 서울갈 일정이랑 Real World CTF 뛸 생각에 미리 슥 백업해놓는다. unstringify 최신의 opcode와 ymm 레지스터를 사용한다. SIMD의 기술력은 세계제일 밖에 있어서 집컴에 ssh걸고 r2로 그래프를 봤을 때, 뭐가 없어서 바로 풀 수 있었다. Analysis & AES 분석해보면 0x20byte 입력 이후 generate_key의 결과로 setting된 ymm0 register의 값을 key로, 입력한 0x20byte의 input이 Permutate된(vpermq) AES 한 단계를 수행하며.. 더보기
[securinetsCTF 2023] tomojiksi Tomojiksi Rust로 짜인 바이너리 리버싱이다. 포카전때 중요하게 쓰였던 아이디어를 처음 구상했던 문제였으며, 해당 아이디어를 사용해 이 문제를 매우 수월하게 풀 수 있었다. Analyzing flag printing logic Condition for opening ./flag.txt @ sub_9930 + 1814 (B144): string reference to ./flag.txt 해당 sub_9930 + 1814 (B144) 위치에 flag.txt에 접근한다. 이에 도달하기 위해서는: @ sub_9930 + 16B8 (AFE8): jump should taken with 0x55555555efe8: cmp rcx, 0x400 0x55555555efef: je 0x55555555f129 rc.. 더보기
[dreamhack.io] multipoint2 보호되어 있는 글입니다. 더보기