일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 포너블
- vcruntime.dll
- windows kernel debugging
- IAT Hooking
- 개발하기
- Network Byte Order
- Windows Kernel Debug
- vcruntime140.dll
- 네트워크 바이트 오더
- Windows
- arudino
- 해킹
- 바이트 오더
- Windows Kernel Driver
- pwnable
- 개발 환경 준비
- HackCTF
- packet capture
- 윈도우 커널
- hacking
- ucrtbase.dll
- Msvcrt.dll
- 윈도우 커널 드라이버
- pcap packet capture
- Windows Kernel
- C언어 패킷캡쳐
- apphelp.dll
- 윈도우 커널 디버깅
- 시스템해킹
- pcap packet
- Today
- Total
목록Reversing (24)
미친해커
해당 포스팅은 이전 포스팅에서 이어집니다. [Reversing] Code Injection Step 1 Code Injection 기법은 사실상 ShellCode Injection 이라고 불러도 될 만큼 동작 방식이 매우 비슷하다. 하지만 우리는 주입할 코드를 ShellCode가 아닌 C언어 함수로 작성해 주입할 것이다. 1. 주입할 함수 작 crazyhacker.tistory.com Why did the error occur? 에러가 발생되는 원인은 다음과 같다. 주입된 어셈블리(코드)를 확인해보면 0x1E54A422AB0를 첫번째 인자로 넘기고 0x1E54A426D8C에서 WinExec의 주소를 rax로 가져와 call 하게 된다. 하지만 해당 2개의 주소는 존재하지(사용되지) 않는 것을 확인할 수 ..
Code Injection 기법은 사실상 ShellCode Injection 이라고 불러도 될 만큼 동작 방식이 매우 비슷하다. 하지만 우리는 주입할 코드를 ShellCode가 아닌 C언어 함수로 작성해 주입할 것이다. 1. 주입할 함수 작성 /* 주입되는 코드는 CreateRemoteThread API를 통해 실행되기 때문에 아래와 같은 형식을 반드시 지켜줘야 한다. (함수명은 관계 없음) */ DWORD WINAPI ThreadProc(LPVOID lpParameter) { // 계산기를 실행 WinExec("calc.exe", SW_SHOW); } 2. 코드 인젝션 함수 작성 BOOL CodeInjection(DWORD PID) { // 타겟 프로세스의 핸들 획득 HANDLE hProcess = O..
코드 인젝션 (Code Injection) 정의 Code Injection이란 실행 가능한 코드를 대상 메모리 영역으로 삽입하여 실행하는 것을 말한다. 코드 인젝션 활용 영역 프로그램의 기능 개선 및 버그 패치 API 후킹 일반 응용 프로그램에 특별한 목적의 코드를 추가 악성코드에서의 활용 코드 인젝션 주요 동작 흐름 Windows API / Kernel Function 프로세스 권한 획득 : OpenProcess() / NtOpenProcess() 메모리 공간 할당 : VirtualAllocEx() / NtAllocateVirtualMemory() 코드 삽입 : WriteProcessMemory() / NtWriteVirtualMemory() 코드 실행 : CreateRemoteThread() / Nt..
IAT Hooking 응용 UserMode에서의 Hooking은 여러 다른 기술들과 함께 응용하여 사용할 수 있다. DLL Injection + IAT Hooking 조합으로 실제 프로그램을 대상으로 Hooking을 진행해 보자 필요한 바이너리 1. DLL Injector // File : Injector.c #include #include #define DesiredAccess (PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION | PROCESS_CREATE_THREAD) LPCSTR GetBaseName(LPCSTR path) { ssize_t length = strlen(path); for (; ..
이번에는 본격적으로 IAT 후킹을 시도할 생각이다. 우리가 저번 포스팅에서 해당 함수의 IAT 주소를 구하는 부분까지 프로그래밍을 했었다. 그렇다면 이제 남은 단계는 딱 한가지이다. 해당 주소에 있는 주소 값을 후킹 함수의 주소로 바꾸면 후킹이 완료된다. 후킹을 하기 전에 후킹(제어권을 가로챌) 함수를 먼저 만들어야한다. 포스팅에서는 MessageBoxA 라는 함수를 대상으로 후킹을 할 것이다. 함수를 정했다면 그 함수의 호출 인자에 대한 구조를 알고 있어야 한다. (반드시 알아야 할 필요는 없다) MessageBoxA의 대한 정보는 MSDN에서 찾을 수 있다. MessageBoxA function (winuser.h) - Win32 apps Displays a modal dialog box that c..
이번 포스팅부터 본격적으로 IAT Hooking에 대해서 알아보도록 하자 [Reversing] IAT Hooking Step 0 IAT(Import Address Table) Hooking 이란 IAT에 적혀있는 API의 주소를 조작하여 후킹하는 기법을 말한다. IAT에는 응용 프로그램이 호출하는 API의 함수명, 함수 주소 등이 기록되어 있다. 해당 응용 프로그 crazyhacker.tistory.com 저번 포스팅에서 간단히 PE 구조와 IAT의 구조에 대해서 배웠었다. 이번엔 IAT에서 등록되어 있는 함수들의 이름과 주소를 불러오는 프로그램을 만들어보도록 한다. Source Code #include #include int main(int argc, char *argv[]) { // 현재 프로그램의 ..