본문 바로가기

전체 글

(64)
하드웨어 bp와 소프트웨어 bp의 차이 디버거 프로그램을 쓰다보면 bp(break point)를 자주 거는데하드웨어 bp와 소프트웨어 bp가 있다.하드웨어 bp는 4개까지 밖에 못 건다. 둘의 차이가 뭔지 왜 하드웨어 bp는 제한이 있는지 궁금했다. 일단 소프트웨어 bp는 명령어 0xcc이다.Bp를 걸고싶은 명령어에 소프트웨어 bp를 걸면 디버거는 해당 명령어를 0xcc로 바꾸고 원본 바이트를 저장하여 사용자에게 보여준다.0xcc 명령어가 실행되면 bp 명령어로 디버거에게 제어가 간다. 코드 상으론 LPDEBUG_EVENT pde    g_pfWriteFile = GetProcAddress(GetModuleHandleA("kernel32.dll"), "WriteFile");    memcpy(&g_cpdi, &pde->u.CreateProce..
2024.8.22 리버싱 공부(나뭇잎 책) PE32+NT_HEADER64 구조체 사용  NT_HEADER64 구조체는OPTIONAL_HEADER64 NT_HEADER32 구조체는OPTIONAL_HEADER32 FILE_HEADER구조체의 Machine 값이 변경 됨.(PE32에서는 014C, PE32+에서는 8664) OPTIONAL_HEADER 구조체 변경Magic 넘버 010B -> 020B BaseOfData 제거됨. ImageBase 자료형이 8바이트로 변경됨. 스택&힙 변경 자료형 크기가 8바이트로 변경됨. THUNK_DATA 구조체 크기가 4->8바이트로 변경INT,IAT 값따라가면 4바이트 배열이었는데, 8바이트 배열로 바뀜.(포인터 크기가 8바이트여서) TLS_DIRECTORYVA 값을 가지는 주소들이 8바이트로 변경됨.   Win..
2024.8.19 리버싱 공부(나뭇잎 책) 64비트 CPUx64 - AMD64, Intel64 CPUx86 - 32bit CPU 64bit 운영체제 - 32비트 호환 가능성이 중요했음. 32bit 윈도우는 ILP32 데이터 모델 사용(Integer, Long Pointer 32비트) 64bit 윈도우는 LLP64 데이터 모델 사용 ( long long, pointer가 64비트) 64bit UNIX계열은 LP64 데이터 모델 사용( long, long long, pointer가 64비트) 64비트 프로그램 만들 때 기존의 Win32 API를 거의 그대로 사용함. Win64는 없음 64비트 OS에서 기존 32비트 프로그램이 잘 실행되는게 중요함. WOW64(Windows On Windows 64)가 기존 32bit 프로그램을 64bit OS에서 실..
2024.8.18 리버싱 공부(나뭇잎 책) DLL 후킹 - API 코드 패치가장 널리 사용됨.모든 API(5바이트 이상)에 대해 후킹 가능 dynamic, process memory, code, DLL injection 방법dll injection 될때 후킹할 코드의API 시작 코드 5바이트를 백업해두고 jmp로 패치시킴 프로세스가 실행될때 API를 호출하면 jmp해서 내 코드로 옴 내 코드에서 5바이트를 다시 원상복구 시키고 API call 함 return 되면 내 코드로 오니까   내 코드 실행시키고 ret하면 프로세스 코드로 리턴 됨. 책에서는 스텔스 프로세스를 만드는 것으로 하지만 나는 저번과 마찬가지로 소문자 저장 시 대문자로 바꾸는 걸 구현했다.  main#include "windows.h" #include "stdio.h" #incl..
2024.8.17 리버싱 공부(나뭇잎 책) API 후킹 DLL 인젝션 - IAT후킹 dynamic방식, process memory iat 변경 ,injection loadlibrary로 동적으로 로딩하는 경우는 사용 불가(IAT에 없어서) 책에선 계산기 후킹해서 숫자를 한글로 바꾸지만, 나는 저번 예제와 같이 writefile 후킹해서 소문자를 대문자로 바꾸게 바꿔보겠음. 방법을 먼저 간단하게 설명하면 파일은 2개인데, 하나는 DLL을 injection/ejection하는 파일, 다른 하나는 DLL 파일이다. DLL파일을 간단하게 설명하면 DLL이 붙을때, 후킹할 dll이름, 후킹할 함수의 주소, 후킹함수 주소를 넘겨주고 Import Directory를 찾아서 name으로 후킹할 DLL의 이름을 비교해서 같으면 그 IAT에서 후킹할 함수의 주소를..
2024.8.16 리버싱 공부(나뭇잎 책) API 후킹리버싱의 핵심, 리버싱의 꽃Wind32 API를 후킹하는 기술을 API 후킹이라고 함.API는 하드웨어를 사용하고 싶을때 OS에서 제공하는 방법Win32 API호출을 중간에 가로채서 제어권을 얻어내는 것. 정상적인 흐름 : 프로세스 -> createFile()후킹 흐름 : 프로세스 -> MyCreateFile() -> CreateFile() 방법은 static ,dynamic이 있음static은 파일 수정dynamic은 메모리 수정 Location(공략 위치)IAT - 프로세스의 IAT조작Code - 코드를 수정(시작 코드 JMP 패치, 함수 덮어쓰기, 필요한 부분 변경)EAT -DLL의 EAT조작 방법DebugInjection(Dll injection, Code injection) 디버거를 ..
2024.8.15 리버싱 공부(나뭇잎 책) Code Injection With asm 어셈블리를 이용해 Code Injection을 한다.  #include "windows.h" #include "tlhelp32.h" #include "tchar.h" #include "stdio.h" #define DEF_PROC_NAME (L"conso.exe") #define DEF_DLL_NAME (L"C:\\Users\\a0102\\source\\repos\\Dll1\\x64\\Release\\Dll1.dll") DWORD FindProcessID(LPCTSTR szProcessName) {     DWORD dwPID = 0xFFFFFFFF;     HANDLE hSnapShot = INVALID_HANDLE_VALUE;     PROCESSENTRY3..
stud_PE 다운로드 https://www.cgsoftlabs.ro/zip/Stud_PE.zip  PEViewer가 64비트에서 잘 안돼서 Stud_PE 다운받아서 써봄. 64비트도 잘된다~