전체 글 썸네일형 리스트형 CODEGATE 2019 컨퍼런스 후기 보호되어 있는 글입니다. 더보기 Code Injection Code Injection Code Injection은 크게 2가지의 의미로 해석될 수 있다. 첫 번째는 소프트웨어의 버그(취약점)의 일종으로 애플리케이션의 신뢰할 수 없는 데이터를 입력받아 악의적인 행위를 수행하거나 코드를 실행하는 것을 의미한다. 두 번째로는 역공학(Reverse engineering, Reversing)에서의 Code Injection이다. 해당 글에서는 바로 후자의 관한 코드 인젝션에 대해 살펴보도록 하겠다. Code Injection은 목적 프로세스에 독립적인 실행 코드를 삽입한 후, 이를 실행하는 기법을 의미한다. DLL Injection과 마찬가지로 보통 CreateRemoteProcess( ) API를 이용하여 실행한다. Code Injection vs DLL Injecti.. 더보기 Win32 API 정리 API Hooking쪽을 공부하다가 C++ 코드를 읽는데 Win32 API 부분이 어려워서 공부 겸 정리하려고 글을 씁니다. API? API(Application Programming Interface) 운영체제가 응용프로그램을 위해 제공하는 함수의 집합 운영체제가 정한 규칙에 따라 하드웨어에 엑세스하거나 응용 프로그램끼리의 상호작용 가능 따라서 이를 위해 API를 제공. 변수 명명법 C에선 i,j와 같이 짧은 변수명을 사용했지만, 윈도우즈에선 많은 변수가 사용되므로 이해하기 쉽게 길게 표현한다. 관습적으로 정해진 접두어를 이용하기도 한다. cb(Count of Bytes) : 바이트 수 dw(double word) : 부호없는 long형 정수 h(handle) : 윈도우, 비트맵, 파일 등의 핸들 sz.. 더보기 알고리즘 DP 정리 DP? Dynamic Programming 문제를 해결할 때, 큰 문제를 작은 문제로 분할하여 푸는 방법. 분할 정복 알고리즘과 유사. DP는 계산했던 결과를 저장하여 불필요한 연산 제외. 크게 Top-Down, Button-Up 방법 존재. 메모이제이션 (Memoization) : 계산한 값 저장하는 것 특성 Overlapping Subproblems : 큰 문제 --> 작은 문제 --> ... OPtimal Structure : 작은 문제의 결과값(return) --> 큰 문제의 결과값 --> ... 문제풀이 #include int main(){ int n; int a=0,b=1,result=0; scanf("%d", &n); if(n==1) { printf("1"); return 0; } for(i.. 더보기 DLL Injection DLL? DLL(Dynamic Link Library)는 마이크로소프트 윈도우에서 구현된 동적 링크 라이브러리다. 내부에는 다른 프로그램이 불러서 쓸 수 있는 코드와 데이터, 다양한 함수들을 포함하고 있다. DLL을 사용하면 효율적으로 코드를 모듈화하고 재사용할 수 있으며, 메모리 사용 효율성을 높이고 사용되는 디스크 공간을 줄일 수 있다. 따라서 운영 체제와 프로그램이 더 빠르게 로드 및 실행된다. DLL의 이점은 다음과 같다. 더 적은 리소스 사용 모듈식 아키텍쳐 활용 손쉬운 배포와 설치 DLL Injection? 다른 프로세스에 특정 DLL 파일을 강제로 삽입하는 행위를 의미한다. 이를 통해 다른 프로세스의 주소 공간 내에서 DLL을 강제로 로드시킴으로써 코드를 실행시킬 수 있다. 일반적인 DLL .. 더보기 기초 자료구조 정리(리스트, 그래프, 트리) 리스트(List) 연결 리스트와 같이 순서가 있는 자료구조 C에선 구조체를 이용해 구현 가능 C++에선 #include 를 통해 사용 가능 상황에 따라 배열보다 효율적으로 문제를 풀 수 있음 std::list std::list::iterator #include #include using namespace std; int main(){ list lt; list::iterator iter = lt.begin(); int n, m; scanf("%d %d", &n, &m); for(int i=1;i 더보기 알고리즘 정렬 정리 선택 정렬 (Selection Sort) 주어진 리스트에서 최소값을 맨 앞으로 옮기며 정렬. 내림차순의 경우 최대값을 맨 앞으로 옮김. 시간 복잡도 : //( O(n^2) //) #include #include using namespace std; int main(){ int n,min=0; int i,j; int num[1001]; scanf("%d", &n); for(int i=0;i 더보기 다익스트라 알고리즘 다익스트라 알고리즘? (Dijkstra Algorithm) 가중치 그래프(weighted graph)에서 두 정점(vertex) 사이의 최단 경로를 구하는 알고리즘 A Shortest Path Algorithm 가중치가 양수일 경우에 사용 의사코드 function Dijkstra(Graph, source): create vertex set Q //방문하지 않은 노드들의 집합 Q 선언 for each vertex v in Graph: // 초기화 dist[v] := INFINITY // 소스에서 v까지의 아직 모르는 길이 prev[v] := UNDEFINED // 소스에서 최적 경로의 이전 꼭짓점 add v to Q // 초기에는 모든 노드를 방문하지 않았기 때문에 Q에 add함. dist[source] .. 더보기 이전 1 ··· 5 6 7 8 9 다음