전체 글16 [튜토리얼] 64비트 환경에서의 가상주소가 물리주소로 변환되는 원리와 구현 (커널 코드 제공) - x64 virtual address translation 왜 가상주소 -> 물리주소 변환을 알아야 할까요?우리가 사용하는 윈도우 운영체제의 각 프로세스는 '가상 주소 공간(Virtual Address Space)' 이라는 독립적인 메모리 영역을 가집니다. 따라서 C언어의 malloc 함수로 할당받은 주소나 디버거(디컴파일러들)에서 보이는 주소는 실제 RAM(메모리)에 존재하는 물리적인 주소가 아닙니다. 이러한 가상 메모리 시스템은 현대 운영체제의 보안과 안전성을 유지하는 핵심 요소입니다. 실무적인 예로, 게임 보안 솔루션인 안티치트(Easy Anti Cheat)는 러스트(Rust)와 같은 게임에서 이 가상주소 → 물리주소 변환 매커니즘을 직접 제어하거나 감시함으로써, 외부 프로세스가 게임 메모리에 무단으로 접근하는것을 원천적으로 차단하곤 합니다. 앞으로 작성될.. 2025. 12. 27. [4편] ReClass 사용해보기 포스팅에 앞서, AssaultCube와 관련된 모든 포스팅은 버전 1.2.0.2로 작성됩니다. Reclass 리클래스는 치트엔진에서도 메모리 구조를 수정하거나 분석하는데 사용됩니다. 치트엔진이 아니라 리클래스를 따로 사용하는 이유는 치트엔진에서 메모리를 분석할 때보다 보기쉽게 분석을 할 수 있고, C/C++로 클래스화시킬 수 있어서 사용합니다 자세한 사항은 아래 깃허브 내에서 확인하실 수 있습니다. https://github.com/ReClassNET/ReClass.NET GitHub - ReClassNET/ReClass.NET: More than a ReClass port to the .NET platform. More than a ReClass port to the .NET platform. Cont.. 2024. 2. 5. 연결리스트 - Linked list(C++ 코드구현, 소스코드, 개념) 연결리스트 (Linked list) 연결리스트는 데이터를 저장하는 자료구조로, 각각의 데이터 요소가 포인터를 통해 다음 요소와 연결되어 있는 방식으로 동작하는 비선형 자료구조입니다. 작동 원리 연결리스트는 노드(node)라고 불리는 개별적인 데이터 요소들이 링크(link)를 통해 연결되어 동작합니다. 각 노드는 데이터와 다음 노드를 가리키는 포인터로 구성되어있습니다. 첫 번째 노드를 가리키는 특별한 포인터인 헤드(head)포인터도 존재합니다. 더 자세하게고 쉽게 사진으로 설명하겠습니다. 사진에서, 데이터필드와 링크필드를 담고있는 한 객체가 노드입니다. 각 노드는 이전에 설명했듯이, 데이터를 담고있는 데이터필드와 다음 노드를 가리키는 포인터인 링크필드로 구성되어있습니다. 연결리스트는 다음 노드를 가리키는 .. 2023. 7. 8. 어셈블리어 (Assembly language) 개념, 기초 어셈블리어(Assembly language) 어셈블리어(Assembly language)는 기계어와 1:1로 대응되는 저급 프로그래밍 언어입니다. 보통 어셈블리어는 어셈블리라고도 하고, 일반적으로는 ASM이나 asm이라는 단어로 약칭되기도 합니다. 어셈블리어는 기계어나 프로그래밍 언어와 마찬가지로 컴퓨터에서 직접 실행될 수 있는 형태의 코드를 작성할 수도 있습니다. 어셈블리어는 일반적으로 기계어와 마찬가지로 16진수(hexdecimal)로 표현되고, 기본적으로 세 부분으로 구성됩니다. 1. 라벨 (Label) 라벨은 코드 내에서 특정 위치를 참조하기 위한 이름입니다. 아래 코드와같이 콜론(:)으로 끝나는 식별자로 표현됩니다. loop_start: 2. 명령어 (Instruction) 컴퓨터에서 실행할 작.. 2023. 4. 7. 스택 - Stack (C++ 코드구현, 소스코드, 개념) 스택 (STACK) 스택은 데이터 구조로, LIFO(Last In, First Out) 원칙에 따라 동작되는 선형 자료구조입니다. 한마디로 가장 최근에 추가된 항목이 가장 먼저 제거되는 방식으로 작동하는 것을 의미합니다. 작동 원리 스택은 PUSH와 POP이라는 연산을 통해 동작되는 자료구조입니다. 앞서말한 LIFO라는 원칙에 따라 동작되어, PUSH 연산은 테트리스와 같이 한곳에 계속 쌓이는 형태입니다. 마찬가지로, POP 연산은 가장 최근에 추가된 데이터를 제거하는 역할을 합니다. 아래사진에서 작동방식을 확실하게 이해할 수 있습니다. 이후 스택을 C++언어로 구현한 코드와 함께 설명하도록 하겠습니다. WIKIPEDIA Stack (abstract data type) - Wikipedia #includ.. 2023. 4. 3. 커널 드라이버 구조체 (Kernel Dirver Structures) 커널 모드 드라이버를 프로그래밍할 때 많이 사용되는 데이터 구조체의 설명 IRP (I/O Request Packet) IRP는 운영체제에서 Input/Output 요청을 하기위해 사용되는 데이터 구조체입니다. 커널 드라이버에서는 IRP를 사용하여 컴퓨터인 하드웨어와 상호작용을 하고, 컴퓨터와 통신하게 됩니다. 또한 윈도우 운영체제에서의 유저모드 프로그램들과의 통신을 처리할 수 있습니다. 커널 드라이버에서의 IRP는 디바이스 객체와 함께 사용되는 파일객체, 메모리 버퍼 및 기타의 것들이 포함되어있습니다. I/O요청의 상태를 추적하고 요청이 완료되면 해당 요청의 결과를 보고하는 구조체입니다. 참고 IRP (wdm.h) - Windows drivers | Microsoft Learn DEVICE_OBJECT .. 2023. 4. 3. [3편] 실제 게임에서 치트엔진 사용하기 (Local Entity Address) 포스팅에 앞서, AssaultCube와 관련된 모든 포스팅은 버전 1.2.0.2로 작성됩니다. 게임해킹에서의 가장 기본이라고 말할 수 있는 Local Entity, Pointer, offset 주소를 찾는 방법에 대한 포스팅입니다 치트엔진으로 게임해킹을 진행하기 위해서 오픈소스 게임인 Assaultcube 를 켜주도록 하겠습니다 정상적으로 게임을 켰으면 아래와 같은 화면이 나타납니다 치트엔진도 켜준 후 아래 사진처럼 게임을 Attach해주도록 하겠습니다 Open 클릭! 먼저 게임의 Local Entity 주소를 찾기 전에 잠깐 설명을 해드리겠습니다 Local Entity 주소는 Player의 객체를 가리키는 주소입니다 이 주소를 찾게되면 오프셋을 더욱 쉽게 찾을 수 있기때문에 Local Entity 주소.. 2023. 1. 4. [7편] 치트엔진 튜토리얼 - Step 7 (Code Injection) 치트엔진 튜토리얼 실행 우선 치트엔진 튜토리얼을 하기 위해서, 치트엔진과 튜토리얼 프로그램을 켜보도록 하겠습니다. 치트엔진을 킨 상태에서 Help-> Cheat Engine Tutorial (64-Bit) 클릭 치트엔진 튜토리얼 - STEP 6 우선, 아래와 같은 사진의 프로그램이 실행되었다면 Process Attach를 해보도록 하겠습니다. 치트엔진 튜토리얼 화면 여러가지 프로세스 중에서 아래 사진과 같이 Tutorial-x86_64 를 Open 해 줍니다. Process List 화면 STEP 7 설명 Health의 값은 버튼을 누르면 1씩 감소합니다. 1씩 감소하게 되는 이 버튼의 기능을 Code Injection 이라는 치트엔진 기능을 사용하여 어셈블리 코드를 삽입해서 버튼을 클릭하였을 때 2씩 .. 2023. 1. 1. [6편] 치트엔진 튜토리얼 - Step 6 (포인터와 오프셋) 치트엔진 튜토리얼 실행우선 치트엔진 튜토리얼을 하기 위해서, 치트엔진과 튜토리얼 프로그램을 켜보도록 하겠습니다. 치트엔진 튜토리얼 - STEP 6우선, 아래와 같은 사진의 프로그램이 실행되었다면 Process Attach를 해보도록 하겠습니다. 여러가지 프로세스 중에서 아래 사진과 같이 Tutorial-x86_64 를 Open 해 줍니다.STEP 6 설명Step6는 아래 사진에서 볼 수 있듯이 이라고 써져있는 값이 있습니다 .이 값은 Change value 버튼을 눌렀을 때 임의의 숫자로 변경됩니다.그리고 Change pointer버튼을 눌렀을 때 위에 출력되는 값이 가지고있는 주소가 변경이 됩니다.하지만 포인터와 오프셋을 찾고 둘을 연동시켜주면 아무리 위에있는 주소가 변경이 되도 그 변경된 주소를 가리.. 2022. 12. 6. [5편] 치트엔진 튜토리얼 - Step 5 (어셈블리어 맛보기) 치트엔진 튜토리얼 실행 우선 치트엔진 튜토리얼을 하기 위해서, 치트엔진과 튜토리얼 프로그램을 켜보도록 하겠습니다. 치트엔진 튜토리얼 - STEP 5 우선, 아래와 같은 사진의 프로그램이 실행되었다면 Process Attach를 해보도록 하겠습니다. 여러가지 프로세스 중에서 아래 사진과 같이 Tutorial-x86_64 를 Open 해 줍니다. STEP 5 설명 Step5는 아래 사진에서 볼 수 있듯이 이라고 써져있는 값이 있습니다 . 이 값은 Change value 버튼을 눌렀을 때 임의의 숫자로 변경됩니다. Step 5의 미션은 버튼을 눌렀을 때, 숫자가 변경이 안되게 어셈 코드를 수정하는 것 입니다. (어셈 = 어셈블리어) 스텝5는 어셈블리어 코드를 수정하는 과정을 거칩니다. 이 어셈블리어를 간단하게.. 2022. 12. 5. 이전 1 2 다음 반응형