본문 바로가기

전체 글34

이산수학(0) 조합론 이 책에서의 이산수학( Discrete Mathematics )은 연속적이지 않은 수학적 구조를 뜻한다. 조합론1. 부분집합의 개수 세기 (Counting subsets)원소가 $ n $개인 집합의 모든 부분집합의 개수:$$ 2^n $$ 예제: $n = 3$$$ 2^3 = 8 $$→ 공집합부터 모든 원소를 포함하는 집합까지 총 $ 8 $개 존재2. 이항 계수 (Binomial coefficient)와 조합 (Combination)이항 계수:$$ \binom{n}{k}=\frac{n!}{k!(n-k)!} $$→ $ n $개의 원소 중에서 $ k $개를 선택하는 경우의 수 예제:$$ \binom{5}{3}=\frac{5!}{3!(5-3)!}=10 $$ → $ 5 $개의 원소 중에서 $ 3 $개를 선택하는 방.. 2025. 3. 16.
0. 보수 보수란 무엇인가?각 자리의 숫자의 합이 어느 일정한 수가 되게 하는 수.$N$ 에 대한 $R$ 의 보수는 $R - N$ 으로 구할 수 있다. 대표적인 10진수와 2진수로 보수에 대해 더 자세히 알아보자.규칙은 대표적으로 2가지가 존재한다. $R$ 의 보수와 $R - 1$ 의 보수가 존재하며 이 둘은 일반적으로 진수로 구분이 되며 이 두가지로만 연산을 한다.10진수가 있다면 10과 9의 보수가 있으며 2진수는 2와 1의 보수로만 연산을 한다고 보면 된다.$R$ 의 보수는 $R - 1$ 의 보수에 $+ 1$ 을 더한 값이다. 123의 보수 진법 9의 보수 / 1의 보수 10의 보수 / 2의 보수 10진수(Demical)876877 2진수(Binary) 00001000000101 왜 보수를 사용하는가?컴퓨.. 2025. 3. 5.
2부 PE File Format(0) 출처 File:Portable Executable 32 bit Structure in SVG fixed.svg - Wikimedia Commons commons.wikimedia.org   PE FILE FORMATPE파일은 섹션 헤더에 각 섹션에 대한 파일/메모리에서의 크기, 위치, 속성 등이 정의 되어있다헤더의 끝과 각 섹션의 끝에는 NULL padding이라고 불리우는 영역이 존재하는데, 이는 컴퓨터에서 파일, 메모리, 네트워크 패킷 등을 효율적으로 처리하기 위한 기본 단위 개념을 사용하기위해 각 섹션의 시작 위치를 각 파일/메모리의 최소 기본 단위의 배수에 해당하는 위치로 옮기고 빈 공간을 NULL로 채우기 때문이다      VA & RVA VA: 프로세스 가상 메모리의 절대 주소RVA (Rela.. 2025. 1. 2.
1부 Visual Basic 들어가기 앞서...솔직히 말하자면 VB를 배우는게 과연 장기적으로 도움이 되는가? 라는 생각이 들었다하지만 책의 내용이 오래 되었으며 앞으로 남은 내용들이 VB 기반이라고 하였을때 익혀는 둬야 겠다는 생각이 들었다Description위의 프로그램에 대한 크랙을 만들어본다 위의 프로그램은 VB로 만들어졌으며 VB의 구조에 대해서 알아보는 시간을 가진다 Key FeaturesEngineVB 파일은 MSVBVM60.dll ( Microsoft Visual Basic Virtual Machine, a.k.a.The Thunder Runtime Engine ) 이라는 VB 전용 엔진을 사용한다 MsgBox() 함수를 예를 들어보자VB 소스코드에서 MsgBox() 함수를 VB 컴파일러가 MSVBVM60.dll!rt.. 2025. 1. 1.
1부 Stack Frame (스택 프레임) DescriptionESP (스택 포인터)가 아닌 EBP (베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법 ESP는 함수가 실행되는 동안 계속 변경이 된다함수 내부에서 새로운 데이터를 스택에 push하거나 기존 데이터를 pop 하는 작업이 빈번하다그렇기에 위치가 고정되어 있는 EBP를 기준으로 하는 것이 특정 변수나 파라미터에 접근하기 더 쉽다 StackFrame 예제 Ctrl + G 로 401000 함수 위치로 가라고 한다 해당 함수와 그 어셈블리어는 다음과 같다 // StackFrame.cpp#include "stdio.h"long add(long a, long b){ long x = a, y = b; return (x + y);}in.. 2025. 1. 1.
1부 레지스터 (IA-3) Description레지스터란?메모리가 아닌 CPU 내부에 존재하는 저장 공간이다디버깅툴에서 나오는 어셈블리어의 명령어 대부분이 레지스터를 조작하고 그 내용을 검사하기에 알아야 한다 레지스터들은 각자의 역할이 있으며 역할에 따라 이름이 있다 TypesBasic program execution registersGeneral purpose Registers (32bit)범용 레지스터이름처럼 범용적으로 사용되는 레지스터로 자주 사용된다이들의 역할은 다음과 같다Common jobs: Arithmetic operations (ADD, SUB, XOR, OR ...)                        Register manipulation (MUL, DIV, LODS ...)EAX: Accumulator f.. 2025. 1. 1.