분류 전체보기 41

LACTF 2024 - Write-Up

오랜만에 글을 올린다. 그 이유는 해킹 공부 이외 공부를 수행하느라, 글을 쓸 여유가 없었던 것이다. 서론 전체 일반부에서 33등을 차지했다. 처음 나가는 외국 CTF이고, 문제 스타일을 알 수 있어서 유용했다. 나갈 생각이 없었지만 친구의 권유로 참가하게 되었다. 리버싱 문제만 풀었는데, 리버싱 문제는 대체로 쉬웠던 것 같다. 하지만 이 문제를 다 풀어도 돌아오는 혜택이 없다는 것을 인지한 터라 열심히 참가를 하지 않아서, 결국 올킬을 못하고 2개의 문제를 남겼다. aplet321 연립방정식을 풀어서 please의 개수, pretty의 개수를 맞춰 조건에 맞게 보내면 된다. 익스 코드 안 짰다. lactf{next_year_i'll_make_aplet456_hqp3c1a7bip5bmnc} the-sec..

Windows Kernel Hooking - II-1

이전 글을 보고 오는 것이 좋다. Preface 전에 글을 비밀번호를 입력하면 입장할 수 있게 설정한다고 선언했지만, 이 부분까지는 그렇게 가릴 게 못 돼서 그냥 공개로 전환하고 발행한다. 이번에 할 것은, 커널 모드와 유저 모드의 상호작용을 구현하는 것이다. 아니 커널 모드만 하면 되지 왜 굳이 고생을 더 하여 유저 모드 애플리케이션을 제작하는 것인가요? 유저 모드 애플리케이션을 만들면 오히려 발각 확률을 높이는 것이 아닌가요? 물론 커널 모드의 개발만 가지고 프로그램을 구현할 수 있지만, 사용자에게 보여지는 인터페이스 혹은 사용자와의 상호작용의 구현은 커널 모드보다 유저 모드에서가 훨씬 수월하다. 따라서 커널 모드를 단독으로 개발하는 것보다 유저 모드를 병행하여 하이브리드 식으로 개발하는 것이 바람직..

Windows Kernel Hooking - II

이전 글을 읽는 것이 좋다. Preface “If you know the enemy and know yourself, you need not fear the result of a hundred battles. If you know yourself but not the enemy, for every victory gained you will also suffer a defeat. If you know neither the enemy nor yourself, you will succumb in every battle.” ― Sun Tzu, The Art of War 이 인용문에 따라서, 사전 조사를 할 필요가 있다. 우선 가장 중요한 점을 발견했다. 대충 치트 프로그램 만들어서 제3자에게 제공하거나 사용하면..

Codeforces: Hello 2024

딱히 잘 한 것 같진 않은데, 무려 101점이나 올라서 승급하였다!! 민트를 복구했다. 2년 만의 복구이다. 사실 안 한 게 맞지만, 안 했음에도 지난 날의 퍼포먼스를 뛰어 넘은 것이 두개골이 확장된 것 같아 기분이 좋다. A - Wallet Exchange 만약 총 남은 개수가 짝수 개라면, 결국에 Bob의 턴에 누구든지 1개의 Wallet이 남는다. 따라서 Bob이 이기는 것은 자명하다. 마찬가지로 홀수 개라면 Alice의 턴에 누구든지 1개의 Wallet이 남는다. 따라서 Alice가 이긴다. 더보기 #include using namespace std; #define int long long void solve() { int A, B; cin >> A >> B; if ((A + B) % 2 == 1..

Dreamhack CTF Season 5 Round #1 Write-Up

B, C, D 풀었다. (#10) 다들 엄청 잘한다. B - Switching Command 할 것은 두 가지다. 첫 번째로, php의 '===' 연산자와 switch case 연산자의 비교가 다른 점을 이용하여 case "admin": 안으로 들어가야 한다. php에서 '==='는 강한 비교, '=='는 약한 비교인데 switch case는 약한 비교이다. json에서는 true/false 타입을 지원하기 때문에 username에 true를 넣는다면 넘어갈 수 있다. {"username":true} 다음으로 Command Injection을 하는데, 검열이 이렇다할 것이 없어서 curl의 -o 옵션을 사용하여 로컬 내에 웹쉘을 다운받고 실행하면 된다. http://host3.dreamhack.games..

Windows Kernel Hooking - I-1

이전 글을 보고 오는 것이 좋다. 이전에 내가 후킹을 시도하여서 프로그램이 시작이 안 되거나, 컴퓨터를 종료할 수 없는 등 후킹 성공의 증후가 보였지만 이것이 진정 후킹을 성공했다고 보기엔 어려워서, 이참에 제대로 된 후킹을 하나 만들자고 결심하였다. 알고리즘을 작성해보자면 1. 전달되는 PID가 특정 PID와 같은지 비교한다. (이는 실제 상황에서 보호하려는 프로세스에 대응된다.) 2. 같다면, Invalid Handle Value를 반환한다. 3. 다르다면, 본래 로직을 수행한다. 여기서 문제가 되는 부분은 3번의 로직이다. 우리는 3번의 과정을 구체화할 필요가 있다. 1. 후킹된 함수를 본래 함수로 바꾼다. 2. 실행하고, 반환값을 받는다. 3. 본래 함수를 다시 후킹한다. 4. 받은 반환값을 반환..

Windows Kernel Hooking - I

오랜만에 글 올린다. 디미고에 들어간답시고 블로그를 2년동안 방치해서 지금 휴면 계정 상태에 상주한 계정을 끌고 나왔다. 디미고에서의 생활은 처음엔 힘들었다.. 기숙사도 적응 안되고, 새로운 친구들과 고등학교라는 새로이 등장한 관문이 나를 시련으로 몰고 갔다. 하지만 꿋꿋이 1년을 버텨내고 결국엔 2학년이 되었다. 만약에 디미고에 합격해서 디미고 태그 신나게 쳐서 들어온 친구들이면 정말 미안하지만 당신은 99.81% 확률로 디미고에 들어간 것을 후회하게 될 것이다... 특히 이 글의 제목을 보고 흥미를 느껴서 들어온 친구들이면 (100 - 0.1^100)% 확률로 후회하게 될 것이다. 본론으로 들어가보자. 디미고 2학년이 되었는데 진짜 아무것도 한 게 없는 것 같아서 방학에 무언가를 하고 있다. 이 모든..

ABC 285

가장 성적이 좋았던 대회입니다. 앞으로 코드포스 혹은 앳코더를 할 때 복습 및 업솔빙 겸 풀이를 여기다 적겠습니다. 성적은 다음과 같습니다. 최종 랭킹과 Performance는 다음과 같습니다. A. Edge Checker 2 그림에서 직관적으로 보이듯이, 노드 N의 자식 l, r는 각각 N * 2, N * 2 + 1 입니다. 더보기 더보기 #include using namespace std; #define int long long int A, B; signed main() { cin >> A >> B; if (B == A * 2 || B == A * 2 + 1) cout S; for (int i = 1; i N; for (int i = 1; i > from >> to; auto fnode = m.fin..

알고리즘 문제를 풀면서 느낀 점

지금까지, 정확히는 4월 초부터 알고리즘 문제를 풀어 왔었습니다. 그때는 실버 문제도 잘 못 풀던 때였습니다. 단기간 성장이란 말이 맞는 걸까요? 골드 4, 3. 그를 넘어 골드 1까지 풀 수 있게 되었고, 드디어 플레티넘이라는 벽을 깨고 말았습니다. 이 글을 마지막 올린 시점에서는 플레 3이 제가 가장 어렵게 푼 문제였습니다. 그로부터 약 한 달 반이라는 시간이 흘렀습니다. 지금은 보다시피 그를 넘어 플레 1을 더 풀려고 노력하고 있습니다. ... 과연 제가 전하고 싶은 말은 이것입니다. 제발, 랭작을 하지 마세요. 랭작이란 자신의 단계보다 낮은 단계의 문제들을 많이 푸는 것을 의미합니다. 랭작을 하게 되면 일단 실력의 상승 속도가 늦어집니다. 그리고, 치팅 유혹이 커지게 되며, 더 크게 보면 알고리즘..

~Nothing~ 2022.06.08