Security - Real World/Reversing 4

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자에게 제공하거나 사용하면..

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학년이 되었는데 진짜 아무것도 한 게 없는 것 같아서 방학에 무언가를 하고 있다. 이 모든..