코드 인젝션이란 ? 상대 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를 일일히 걸어가며 이 창이 어느 포인트에서 등장했는데 확인하던 과정을 "일시정지" 라는 간단한 기능을 통해 단번에 해결할..
유명한 패커중에 UPX, UPackPE 등등이 존재하는데 이번 포스팅에서는 굉장히 특이한 변형을 통해 PE 파일을 보호하는 UPackPE를 분석하고 이해하여서 PE구조에 대해 좀 더 심도깊은 이해를 해보자. UPackPE에 적용된 기법들을 차례로 설명한다. - 헤더 겹쳐쓰기. 헤더의 불필요한 부분을 낭비하지 않고 그 부분에 또 다른 헤더에 대한 데이터를 교묘하게 겹쳐쓰는 방법을 이용했다. (DOS Header와 PE Header) - DOS Header에서 PE헤더의 Offset을 나타내는 e_lfanew 항목의 값을 0x10으로 바꿔 헤더를 겹쳤다. 이렇게 할 경우 DOS Header의 사용하지 않는 부분에 PE Header의 데이터를 작성할 수 있다. - SizeOfOptionalHeader의 값은 ..