분류 전체보기 41

2024.12.06

가끔은 이렇게 내가 뭘 했는지 남겨두는 것도 중요하다. 이전에 이런 류의 글을 올렸을 때는 5월 중이였는데, 이와 비교하여 어떤 부분이 나아졌고, 어떤 부분이 성장이 더딘 지 리마인드 해볼까 한다. AlgorithmsBOJ (solved.ac): Platinum II -> Diamond IVCodeforces: 1552 -> 1364AtCoder: 254 -> 937 BOJ 및 AtCoder는 상향 곡선이지만, Codeforces가 심히 나락을 간 것에 주목할 필요가 있다. 사실 코드포스 시험을 치뤘는데 B에서 막혀서 던졌다. 그 결과로 그린으로 떨어지게 되었다.그에 대한 대안으로 채택한 것은 AtCoder이다. 앳코더가 현실 세계에서 발생하는 고민과 상응하는 관계이고, 엣지 케이스를 처리하는 문제가 비..

~Nothing~ 2024.12.06

Windows Kernel Hooking - Part 3

오랜만에 올리는 Tech blog이다. 많은 기술적 내용은 나의 개인 웹사이트에 올려져 있고, 티스토리의 용도를 V-log 용도로 사용하려고 했다. 하지만 그렇게 하자니 나의 개인 생활 내에서 언급할 부분이 너무 없고 이에 따라 블로그가 허전하다는 느낌이 들어서 기술적 내용을 담은 포스트를 게시하기로 하였다. 신기한 후킹을 몇 개 많이 배웠다. 이를 응용하기로 하자.HypervisorWindows 내 NT 함수를 인라인 후킹하거나, 전역 구조체, 특정 MSR 레지스터 및 커널 스택을 변조하는 것은 Windows 자체에서 Kernel Patch Protector (KPP, a.k.a. PatchGuard, PG)를 동원하여 금지하고 있다. 이 KPP를 우회하는 매커니즘을 만드는 행위는 위법에 준하므로, 안..

CCE Jr 1st

CCE 주니어 1등했다.모의 고사도 2 1 1 떠서 기분 좋은데 공짜 125만원 들어와서 기분이 매우 좋다.웃기게도 내가 푼 문제는 한 문제이다. 3솔브인데 우리 팀, The Duckling, The Gosling 이렇게 세 팀이 풀었다. 원시 다항식이 x^8+x^4+x^3+x^2+1인 GF(2^8) 체 내에서 연립 방정식을 구성해서 풀이하였다. 원시 다항식은 어짜피 바이트가 GF(2^8)이고 따라서 원시 다항식의 최고차항이 8차 이하라고 가정하여 512가지의 경우의 수를 브루트 포싱을 돌려서 얻어냈다. Sage에서 연립방정식은 solve_right로 풀 수 있다.amo님의 도움을 적잖게 받았다. 솔브 코드는 여기 있다. 1번 문제도 쉬웠다. 취약한 n에 대해 인수분해를 시도하면 되는데 문제는 내가 사용..

BOJ Diamond V

오늘 (2024년 6월 10일) 백준 다이아 5를 찍었다! 2022년 4월에 플레티넘 5로 승급하고 2년 2개월만에 승급에 성공하였다!!  정말 기쁘다!. 뇌가 확장된 것 같고 알고리즘 고수가 된 것 같아 기쁘다. HOW??? 두 가지 요인으로 승급에 성공했다고 할 수 있다. 첫 번째로 CLASS 8을 밀었고, 말 그대로 뇌의 확장이 있었다는 것도 한 몫 했다. 특히 고등학교 2학년이 되면서 플레 5까지밖에 풀지 못했던 것이 갑자기 플레 1 이하의 문제가 스르륵 다 풀려서 CLASS 8를 미는데 도움이 되었던 것 같다. 그리고 여러 어려운 알고리즘들 (HLD, FFT, Z, 블록껍질)을 배우면서 알 수 있었던 것 같다! CLASS 8은 18 자력 2 도움 (사실 도움이 아니라 개념을 배우고 응용하는 것에..

Dreamhack Invitationals 후기

어제 (2024년 5월 27일) Dreamhack Invitational에서 대회를 치루었고, 생각했던 것보다 낮은 순위를 기록했다..  19위에 랭크되었고, 대회 15문제 중 1문제밖에 풀지 못했다. 리버싱만 다 풀자는 마인드로 참여했는데 그게 잘 안 되었다.. ㅠㅠ 무엇이 문제였는가? 우선 1번 문제는 큰 문제는 아니였다. 1번 문제를 순삭하고 좋은 시작을 알렸다. solve.py# Use 'IDA Decompiled results' to parse the instructions# use sweeping to parse stringsdef parse1(s: str): instructions = s.split('\n') m = [] elasped = 0 for inst in ins..

2024.05.21

많은 시간이 지났다! 사실 그렇게 물리적으로 긴 시간은 아니지만 근 2개월간 한 게 좀 많아서 길게 느껴지는 것 같다. 때로는 지금까지 이룬 것들을 회상하면서 앞으로 어떻게 나아갈지 정하는 것이 중요한 것 같아서 여기에 글을 남긴다. Algorithms알고리즘 문제를 최근 들어 많이 풀었다. 아마도 해킹에 대해서 열정이 떨어지니 자연스럽게 PS쪽으로 눈이 가게 된 것 같다.알고리즘은 이 글을 기점으로 뭘 더 하지도 않았고 뭘 더 하고 싶지 않았는데, 디미고 1학년 신입생들이 다이아들이 우루루 들어와서 긴장감을 조성하길래 백준과 코드포스를 좀 하게 되었다. 결과는 Platinum V -> Platinum II 로 티어가 상승했고,Codeforces 1400 -> 1552 로 레이팅이 상승했다.   이제 블..

~Nothing~ 2024.05.21

드림핵 리버싱 랭킹 1등 소감 + 느낀 점

서론 드림핵 리버싱 워게임 랭킹 1등을 찍었다. 우선 자랑스럽다. 처음 리버싱 시작할 때는 랭킹 10위조차 정말 큰 벽으로 느껴졌는데, 조금조금씩 풀다 보니까 리더보드에 접근할 수 있게 되었고, 약 1년동안 집권하시던 G0RiyA 님을 제치고 2023년 3월 26일, 1위를 탈환하였다. 정말 긴 여정이였던 것 같다. 해킹을 제대로 시작한 건 10개월 전, 알고리즘 문제를 풀다가 다이아에서 벽을 느껴 '이거라도 해 보자'라며 시작한 해킹이였는데, 막상 하다 보니까 재밌어졌다. 이게 서론인가? 할 수 있겠지만 이제 시작할 얘기는 이것과는 사뭇 다른, 그리 밝은 이야기는 아니다. 본론 우선 처음 1등을 찍었을 때 가장 먼저 든 감정은 후련함, 자랑스러움 등이 있었지만 곧 이내 그런 감정보다는 허무감이 왔다. ..

~Nothing~ 2024.03.29

osu!gaming CTF 2024 Reversing Write-Up

66등 하였다. 서론 원래 osu! 라는 게임을 즐겨하는 사람으로서 이 CTF는 굉장히 흥미로웠다. CTF 문제에 osu라는 새로운 항목이 추가되면서 CTF의 Fresh함을 챙겼다고 볼 수 있다. osu!와 CTF 모두 좋아하는 사람으로서 이 콤비네이션은 열심히 안 할 수 없다. 그 결과로 리버싱을 올킬했다. 이 글에서는 리버싱 문제에 관련해 Write-Up을 작성할 예정이다 SAT-before-osu 언제부터 이딴 게 리버싱이였는지 모르겠다. 주어진 dist.txt 안의 식을 풀면 된다. z3를 이용하거나 Sage를 이용하여 간단히 해결할 수 있다. wysi-baby Wysi 밈을 토대로 만든 웹사이트가 주어진다. 소스를 살펴보면 다음과 같은 Javascript 코드가 보인다. combos에 들어가는 ..