Knowledge
-
[자료구조] 큐(Queue)에 대해서 알아보자Knowledge/Algorithm 2020. 5. 22. 03:56
주요 특징 1. FIFO(First-in, First-out) 더운 여름날 아마X빈에서 버블티를 사서 먹는 상상을 해보자. 빨대로 빨려 들어오는 타피오카 펄을 먹으며 우리는 큐를 생각해 낼 수 있다. 그것은 바로 선입선출의 과정을 진행하는 큐이다. 선입선출이란 우리가 빨대로 먹는 펄처럼 먼저 빨대에 들어온 녀석이 먼저 내 입에 들어온다는 법칙이다. 이 법칙은 판매업을 하는 가게에서 철칙으로 사용될 정도로 널리 사용되고 있으며 장점은 명확하다. 바로 제품의 신선도. 즉, 경우에 따라서 순환이 이루어 지지 못하는 스택과는 다르게 큐는 선착순으로 이루어진 공평한 순환을 겪게 된다. 또 다른 예시를 보면 은행을 예로 들 수 있다. 은행은 들어온 순서대로 번호표를 뽑고 기다리다가 번호 순서대로 작업을 처리하게 된..
-
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..