전체 글 (76) 썸네일형 리스트형 stud_PE 다운로드 https://www.cgsoftlabs.ro/zip/Stud_PE.zip PEViewer가 64비트에서 잘 안돼서 Stud_PE 다운받아서 써봄. 64비트도 잘된다~ 2024.8.14 리버싱 공부(나뭇잎 책) DLL ejection 다른 프로세스의 DLL을 Free하도록 만드는 것 CreateRemoteThread를 이용해 FreeLibrary API를 호출하게 하고 그 인자로 Free할 DLL의 주소를 넘겨주면된다. // EjectDll.exe #include "windows.h" #include "tlhelp32.h" #include "tchar.h" #define DEF_PROC_NAME (L"notepad.exe") #define DEF_DLL_NAME (L"Dll1.dll") DWORD FindProcessID(LPCTSTR szProcessName) { DWORD dwPID = 0xFFFFFFFF; HANDLE hSnapShot = INVALID_HANDLE_VALUE; PRO.. 유니코드, ANSI 설명 이 글을 쓰게 된 이유는 LoadLibraryW와 LoadLibraryA의 차이점을 찾아보다 알게되어서 LoadLibraryW는 입력을 유니코드 인코딩으로 받고 LoadLibraryA는 입력을 ANSI 인코딩으로 받는다 유니코드는 UTF-8: 가변 길이 인코딩 방식으로, 문자에 따라 1바이트에서 4바이트까지 사용한다. 영어와 같은 라틴 문자에 대해서는 1바이트를 사용하고, 복잡한 문자에 대해서는 더 많은 바이트를 사용한다. UTF-16: 문자에 따라 2바이트 또는 4바이트를 사용한다. 유니코드 문자의 대다수는 2바이트로 표현된다. UTF-32: 모든 문자를 4바이트로 고정 길이로 인코딩한다. 이 방식은 간단하지만 메모리 사용량이 크다. ANSI는 1바이트 인코딩: 기본 ASCII 문자는 7비트로 .. 2024.8.13 리버싱 공부(나뭇잎 책) DLL Injection 훅(Hook)갈고리, 낚시바늘, 원하는 것을 낚아 챌때 사용하는 도구정보를 엿보거나 가로채는 경우 Message Hook OS - App - User 사이에 오고가는 정보를 엿보고 조작할 수 있음.Windows 는 event driven으로 동작하는데Event가 발생하면 OS message queue에 추가된다.OS는 OS message queue에서 message를 꺼내서 어느 프로세스에서 발생했는지 보고 해당 프로세스의 Application Message Queue에 추가한다.프로세스는 본인의 Application Message Queue를 모니터링 하다가 추가된 message가 있으면 해당 event handler를 호출해서 처리한다. message Hook이 설치되어 있다.. PE패치 dll 로딩 의문점 PE 패치 시에 IDT를 섹션의 빈 부분으로 옮겨서 늘렸는데 계산 방법이 virtual size와 size of raw data의 차이에서 virtual size에 매핑되지 않는 부분에 IDT를 옮겼다. 내가 이해한 바로는 file의 섹션에서 virtual size만큼만 읽어서 메모리에 올릴것이라고 생각했다. 이 점이 궁금해서 디버거와 PE viewer, HXD를 이용해서 실험해봤다. virtual size가 188E 이고 Size of Raw Data가 1A00인 파일을 가지고 매핑되지 않은 부분은 0으로 채워져 있었는데 Hxd로 0이 아닌 다른 값들로 채워보았다. x64dbg로 디버깅 해보니 내가 채운 값들이 들어 있고 section alignment가 1000이었는데 size of raw data보.. 2024.8.12 리버싱 공부(나뭇잎 책) UPack-PE 패커 PEViewer로는 PE볼 수 없음 UPack으로 패킹하면 PE포멧을 신기하게 바꿔서. Stud_PE로 볼 수 있는데 UPack이 주는 지식 1.PE 헤더 관련 1.1 헤더 겹쳐쓰기Dos header(MZ헤더)와 NT header을 겹쳐씀. 헤더 공간 절약 및 복잡성 증가MZ 헤더의 핵심 멤버는magic number - MZe_lfanew - File address of new exe header(NT header 시작 위치)보통의 경우 e_lfanew = mz크기(40)+Dos stub 크기UPack에서는 10으로 MZ헤더와 NT 헤더가 겹쳐서 써짐1.2 File header.SizeOfOptionalHeader 값 변경File header.SizeOfOptionalHeader .. gdb 명령어 disas main r -run c - continue b function - function에 break pointb *address - address에 break point disas function_name - 함수 디스어셈블해줌 ni -step over si -step in info f - 스텍 프레임 내용bt - 전체 스텍 프레임 info argsinfo registers - 레지스터출력info reg레지스터 보고 rip 값 보고 현재 위치 보고 disas나 x/10i로 코드 보기 x/16x address - address부터 16개 메모리 보기x/16i address - address부터 16개 명령어로 보기x/16g address - 64bit로 보기 x/24g 0x403e080.. 섹션 스택 힙 PE파일이 메모리에 올라오면 PE헤더 및 섹션이 올라오고 EP(entry Point)에서 push, pop 등으로 스택을 관리하고 malloc같은 걸로 힙을 사용한다. 이전 1 ··· 3 4 5 6 7 8 9 10 다음