Knowledge/Reversing
-
Dll Injection 실습 (Windows10 x64bit, c++)Knowledge/Reversing 2021. 4. 10. 17:45
개념 설명 한줄 요약 실습 DLL Injection에 사용된 API 사용된 코드 DLL 파일 참고 개념 설명 📌 리버싱 핵심원리 p312 실제 개발 프로젝트에도 많이 사용되는 API 후킹을 할 때 DLL 인젝션 기법이 많이 사용됩니다. 후킹 함수를 dll 형태로 만든 후 후킹을 원하는 프로세스에 간단히 인젝션하는 것만으로 API 후킹이 완성됩니다. 이 역시 삽입된 DLL은 해당 프로세스의 메모리에 대한 접근 권한을 가지고 있다는 특성을 잘 활용한 것입니다. 실행한 프로그램에 해당 프로그램이 정상적으로 불러오는 dll이 아닌 악의적 dll을 불러오게 함으로써 키로거 같은 악의적인 공격이 가능해진다. 좀 더 자세히 설명하면 notepad 같은 프로그램을 실행 했을 때 정상적으로 사용을 위해 불러오는 dll이..
-
PE 구조 (8) - 계산기의 PE 구조 / Import Directory (INT와 IAT 찾기)Knowledge/Reversing 2020. 3. 29. 03:10
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory 오늘 확인할 calc.exe의 ENTRY_IMPORT 이다. 이것은 어떤 것으로 구성되어 있을까? 우선 IMAGE_IMPORT_DESCRIPTOR 구조체를 보면 된다. IMAGE_IMPRT_DESCRIPTOR typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null import descriptor DWORD OriginalFirstThunk; // INT (Import Name Table)' RVA } DUMMYUNIONNAME; DWORD TimeDateStamp; // 0 if ..
-
IsDebuggerPresent(feat. codeengn basic 4)과 TEB & PEB의 관계Knowledge/Reversing 2020. 1. 28. 03:49
목차 1. 머리말 2. 일반적인 Codeengn Basic 4번 풀이방법 3. IsDebuggerPresent API 4. BeingDebugged 값을 이용한 풀이 방법 5. 맺음말 1. 머리말 오늘은 흔히들 한번쯤 풀어봤을 법한 Codeengn Basic 4번 문제를 주제로 글을 써보려고 한다. code engn 에서는 그저 디버깅을 탐지하는 API의 이름만 맞추면 풀리지만 거기에 더 나가서 우회까지 해보는 사람들도 있을 것이다. 아마 이런식으로 다들 풀어보지 않았을까? 2. 일반적인 Codeengn Basic 4번 풀이방법 4번 문제이다. 이녀석은 그냥 실행하면 "정상" 이라는 문구를 출력한다. 하지만 디버거로 잡고 F9로 실행시키면 디버깅 당함이라고 뜬다. 참 신기한 녀석이다 디버거를 어찌 알아차..
-
PE 구조 (8) - 계산기의 PE 구조 / IMAGE OPTIONAL HEADER - IMAGE DATA DIRECTORY 분석Knowledge/Reversing 2019. 9. 29. 17:21
오늘의 글은 IMAGE DATA DIRECTORY 분석 글이다. 복습차원에서 IMAGE DATA DIRECTORY의 배열의 정의된 의미를 확인해보자. #define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory #define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory #define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory #defi..
-
PE 구조 (7) RVA to RAW 변환 방법Knowledge/Reversing 2019. 9. 28. 16:08
안녕하세요. 오늘은 계산기는 잠시 갔다 버리고 RVA를 RAW로 변환하는 방법에 대해서 알아보려 합니다. 하지만 예제로 계산기가 튀어 나올듯한 불길한 예감... 지난 섹션 헤더 글을 보신 분이라면 RVA가 어떤 녀석인지 대충 아실 것입니다. RAW는 파일 오프셋 값을 말한다. 다음에 작성할 data directory의 주소 맵핑을 하기 위해서는 RVA to RAW를 알아야한다. 역시 예를 들기 위해서 계산기를 사용해야 할 것 같다. """ 대망에 DataDirectory부분이다. 4바이트 변수 2개를 갖고 있는 구조체 배열로 하나당 8bytes씩 보면 된다. 첫번째는 가상주소 값이고 두번째는 사이즈를 표시한다. [0]에는 값이 없으므로 넘어가고 [1]인 Import값을 확인해 보자. 80 2B 01이 주..
-
PE 구조 (6) - 계산기의 PE 구조 / SECTION HeaderKnowledge/Reversing 2019. 9. 26. 13:07
오늘은 계산기의 SECTION HEADER 구조에 대해서 공부할 차례이다. 이번 챕터를 지나고 나면 저번글에서 언급하지 못했던 Image data directory를 볼 것이다. 우선 섹션 해더의 구조를 살펴보자. #define IMAGE_SIZEOF_SHORT_NAME 8 typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; union { DWORD PhysicalAddress; DWORD VirtualSize; } Misc; DWORD VirtualAddress; DWORD SizeOfRawData; DWORD PointerToRawData; DWORD PointerToRelocations; DWORD PointerToL..