우선 이번 포스팅은 정신없을거라는 것을 미리 예고한다.... 왜냐면 DLL Injection을 공부하는 과정에서 이것저것 순서없이 공부했고, 아직 더 공부하고싶은 DLL Injection 기법들이 많이 남아있기 때문이다. DLL Injection 이란 ? DLL Injection이란 실행중인 Proecss 혹은 실행하고자 하는 Program에 기본적으로 Load되는 DLL을 제외한 내가 원하는 DLL을 추가(강제)로 삽입하는 기법을 말한다. DLL이 삽입되었다는 말은 내가 DLL을 만들 때 작성한 코드가 해당 Process에서 동작할 수 있다는 의미이고 프로그래머가 의도하지 않은 동작 혹은 추가적인 기능을 수행시킬 수 있다는 뜻이다. DLL이 Injection되어 해당 Process에 Load되는 순간 ..
코드 인젝션이란 ? 상대 Process에 독립 코드를 삽입한 후 실행시키는 기법. 이때 삽입은 CreateRemoteThread API를 이용한다. 최근에는 해당 API가 제대로 동작하지 않는다고 알고 있는데 코드인젝션은 Windows 10 에서도 잘 동작한다...? 뭐지ㅠㅠ 뭘 인젝션해야할까 ? 코드 인젝션시 대상으로 하는 Process의 Memory에 인젝션해야 하는 것들은 아래와 같다. 1. 사용할 API의 주소. ( LoadLibraryA, GetProcAddress ) - 구조체에 FARPROC 자료형으로 선언하며 선택이 아니라 필수이다 !! 2. 사용할 Library 명. ( Ex. user32.dll ) 3. 사용할 API 명. ( Ex. MessageBoxA ) 4. 사용할 데이터. ( E..
저번 포스팅에서는 Detours Library을 이용해서 실행되지 않은 Process에 대해서 DLL을 주입하여 Windows API Hooking하는 실습을 진행했다. 그러나, 실제 이렇게 실행되지 않은 Process에 대해서 DLL을 주입하는 경우는 생각보다 많지 않을 것 같다. 그래서 이번 포스팅에서는 실행중인 Process에 DLL을 Injection해 Hooking을 진행할 수 있는 방법에 대해 소개해보고자 한다. [ DLL Injection ] DLL Injection 기법에는 여러가지 기법이 있겠지만 내가 사용한 방법은 CreateRemoteThread API를 이용한 방법이다. 친구 게임보안 면접질문에서 동작방식이 나왔다고 한다..? (TMI) Injection을 진행하는 코드는 아래와 같..
Detours는 Microsoft사에서 공개한 매우 강력한 Windows API 후킹 라이브러리이다. 기존에는 $9,999 이상의 비용을 내고 사용해야 하던 라이브러리였지만, 현재는 라이센스가 MIT License로 변경되면서 완전 무료 오픈소스로 변경되었습니다. 2002년부터 Microsoft에서 공식적으로 사용해오던 매우 신뢰할 수 있는 라이브러리 입니다. [ 설치방법 ] DownLoad : https://github.com/microsoft/detours Github를 통해 다운로드를 받은 후 "Command Prompt"를 입력해 Visual Studio 터미널창으로 진입한다. 이와 같은 항목이 없을 경우에는 Visual Studio를 설치한 후에 진행하면 된다. 해당 프로젝트를 다운로드 받은 경..
해당 포스트는 기본적으로 Register 등의 지식이 있다고 가정하여 작성되었다. 순서없이 리버싱에 도움이되는 간단한 Assembly 문법에 대해서만 나열했다. # Thumb Mode x86 아키텍쳐와 다르게 ARM 아키텍쳐에만 존재하는 Thumb 모드 !! Thumb Mode는 ARM Mode의 반쪽짜리 Version이라고 볼 수 있다. 원래 ARM은 32bit RISC machine이고, 32bit로 동작하는게 가장 최상의 Performance를 제공할 수 있다. Machine마다 word size가 다르다. word size는 CPU가 한번에 처리할 수 있는 크기를 말한다. 근데 어째서 32bit ARM에 16bit Thumb Mode가 포함된걸까...? 개발 당시 16bit data line을 가..
우선 프로그램을 실행시키면 "I'm the starting nag Remove me" 라는 Nag창이 뜨고, 일정시간이 흐르면 메인화면처럼 보이는 창이 뜨게된다. 이 때 Register 버튼을 눌러도 아무런 반응이 없는 것을 확인할 수 있다. 그리고 Exit 버튼을 누르면 "I'm the closing nag remove me ~~~" 라는 Nag창이 뜬다. Register버튼을 누르면 인증이된 프로그램의 경우 Closing Nag창 없이 종료된다 뭐 그런문구를 확인할 수 있다. 그러나 우리는 인증과정없이 해당 Nag들을 제거해본다. 여기서 Tip !!! 맨날 내가 BreakPoint를 일일히 걸어가며 이 창이 어느 포인트에서 등장했는데 확인하던 과정을 "일시정지" 라는 간단한 기능을 통해 단번에 해결할..