게임 메모리 해킹: 치트 엔진(Cheat Engine) 튜토리얼 5단계 해결하기 (Game Memory Hacking Tutorial by Using Cheat Engine #6) # 튜토리얼 5 - 이번 문제는 특정한 메모리 주소에 접근하는 어떠한 기계어를 발견하는 방법을 알고 있으면 쉽게 해결할 수 있음 - 문제 내용 > 버튼을 누를 때 마다 값이 바뀌는데, 값이 바뀌도록하는 기계어 자체를 무효화해서 버튼을 눌러도 값이 변경되지 않도록 해야 함 > 어떤부분이 실질적으로 이 주소에 접근하는 기계어인지 찾아내서 그것을 대체(아무것도하지않는 코드)해야 함 - 100이란 값을 scan해서 어떠한 기능이 이 변수에 접근하여 기능을 하는지 알아내야함 - 정수형 값을 발견하면 4byte라고 이해하면 편함 → 4b..
게임 메모리 해킹: 치트 엔진(Cheat Engine) 튜토리얼 4단계 해결하기 (Game Memory Hacking Tutorial by Using Cheat Engine #5) # 튜토리얼 4 - 문제 요약 > float type Health와 double type Ammo의 값을 5000으로 만들어야 함 - 이번에 찾아야 하는 데이터는 실수 형태 - 게임을 만들 때에는 C# 또는 C++을 많이 사용하는데, 이러한 C언어 계열의 프로그램에서는 두 가지 실수형이 가장 많이 사용됨 - 작은 크기의 실수형을 나타낼 때 사용하는 float형, 큰 크기의 실수를 나타낼 때 사용하는 double형이 있음 - value type이 float이고 값이 100인 변수를 찾기 위해 fist scan을 진행 - Hit ..
게임 메모리 해킹: 치트 엔진(Cheat Engine) 튜토리얼 3단계 해결하기 (Game Memory Hacking Tutorial by Using Cheat Engine #4) # 튜토리얼 3 - 문제 요약 > 0부터 500 사이의 숨겨진 변수가 있음 > Hit me 버튼을 누를 때 마다 변수의 값이 감소함 > 이 변수를 찾아 값을 5000으로 만들어야 함 - 변수의 값을 모를 땐 scan type을 unknown initial value로 설정한 후 first scan 버튼을 누르면 됨 - Hit me 버튼을 누르니 1만큼 감소함 - 변수의 값을 모르고, 얼만큼 감소했는지를 알 때는 scan type을 Decreased value by ...로 설정 - next scan 변수를 누르면 1만큼 감소한..
게임 메모리 해킹: 치트 엔진(Cheat Engine) 튜토리얼 2단계 해결기 (Game Memory Hacking Tutorial by Using Cheat Engine #3) # 튜토리얼 2 - 체력 정보는 메모리에 저장이 됨 > health와 같은 변수명을 가지고 저장 - 컴퓨터의 프로그램을 분석 방법 > 정적분석: 소스코드를 바탕으로 분석 > 동적 분석: 프로그램을 실행하고 메모리를 조작하며 분석 - 튜토리얼 목적: health를 1000으로 변경하기 - Scan Type을 Exact Value로 설정하고, Hex에 현재 체력 값인 100을 입력하여 New Scan을 누르면, 현재 값이 100인 변수들의 주소가 나타남 - Hit me 버튼을 누르니 체력이 97로 변함 - 치트 엔진 프로그램에서도 ..
게임 메모리 해킹: 치트 엔진(Cheat Engine) 튜토리얼 1단계 해결하기 (Game Memory Hacking Tutorial by Using Cheat Engine #2) # 치트엔진이란 - 메모리 수정 프로그램으로 기능이 매우 많아 게임 해킹의 필수품으로 여겨짐 - 'cheat engine assembler'를 지원 - 프로그램에 어셈블리 코드를 끼워넣을 수 있음 # 튜토리얼 열기 - next 버튼을 누르면 다음 단계로 넘어갈 수 있음 - n 단계로 바로 넘어가기 위해서는 password를 기억하면 됨 - 튜토리얼이 꺼지면 Help -> Cheat Engine Tutorial에 들어가서 다시 실행시킬 수 있음 # 튜토리얼 1 - 튜토리얼 1단계를 읽어보니 프로세스를 불러오는 작업을 해야함 - ..
Reversing Engineering - 7. 쉬운 crackme를 통한 디버거 사용법 - 2 # 프롤로그 - 문제는 어떤 값을 입력을 받아 특정 조건을 만족하면 correct!을 출력하고 틀리면 wrong!을 출력함 # 문제 풀이 - 0 - 처음 문제를 실행하면 input: 이라는 문자열이 출력됨 - 문제 지문에서 어떠한 형식으로 값을 입력받는지에 대해 알려주지 않았기 때문에 적당히 아무 문자열을 넣고 enter를 누르면 wrong!이 뜨는 것을 볼 수 있음 - 어떠한 형식으로 입력을 받는지는 모르지만, 문제의 형태가 이전 강의에서 풀이한 문제와 비슷 > 다음과 같은 방식으로 분석할 수 있을 것임 1. 메인함수를 찾아낸다 2. 입력의 형식이 어떤 형식인지 알아낸다 3. 입력받은 값은 어떤 방식으로 처..
Reversing Engineering - 6. 쉬운 crackme를 통한 디버거 사용법 - 1 # 프롤로그 - 문제는 2개의 정수를 입력받아 값이 특정 조건을 만족하면 correct!을 출력하고 틀리면 wrong!을 출력함 # 문제 풀이 - 0 > 주어진 문제를 실행하면 input: 이라는 문자열이 출력됨 > 숫자 2개를 입력하면 wrong! 이라는 문자열을 출력함 - 추측 > main함수에서 printf, puts 등의 출력 함수 및 scanf와 같이 입력을 받는 함수가 포함되었을 것임 > wrong!이 출력되기 전 입력받은 숫자 2개를 처리하는 부분이 있을 것임 # 문제 풀이 - 1 - 다양한 방법으로 찾을 수 있지만 Az 버튼을 사용하여 input: 문자열을 찾아 main 함수를 발견 > 처음 출..
Reversing Engineering - 5. hello-world로 배우는 x64dbg 사용법 # 프롤로그 - hello-world.cpp // hello-world.cpp #include void main(){ puts("hello world!\n"); } # x64dbg 기본 설정 - x64dbg로 hello-world.exe를 열면 아무런 설정을 안했을 경우 아래와 같이 뜸 > 박스 부분을 살펴보면 현재 ntdll부분에 멈춰있는 것을 알 수 있음 > 이는 x64dbg가 기본적으로 시스템 중단점 설정이 켜져있기 때문 - 설정 - 환경설정으로 들어가서 아래 사진과 같은 창에서 시스템 중단점 설정을 변경해야 함 > 위의 창에서 박스로 표시된 옵션을 해제하면 됨 > 이후 디버깅 프로그램을 재시작하면 시..
Reversing Engineering - 4. x64dbg 1. x64dbg 사용법 # x64dbg - 윈도우 디버거 - UI나 기능 등 많은 면에서 ollydbg를 닮았으며, ollydbg는 소스 코드가 공개되어 있지 않고 32비트만 지원하는데 반해 x64dbg는 오픈소스이고 32비트와 64비트를 둘 다 지원 - 강력한 디스어셈블 엔진을 가지고 있으며 그래프 뷰, 플러그인 등 리버싱에 있어서 편리한 여러가지 기능들이 내장되어 있음 # x64dbg의 사용법 - 기본적인 UI - x64dbg의 상단바 1. 분석할 프로그램을 열음 2. 프로그램을 재시작함 3. 프로그램을 완전히 정지 4. 프로그램을 실행(재개)함 5. 프로그램을 일시정지 시킴. 실행중인 상태에서 임의로 중단시키고 싶을 때 사용 6. 어셈블..
Reversing Engineering - 3. puts("hello world!\n") → x86_64 asm 1. hello world # hello world - 1 - "hello world!"를 출력하는 코드가 어떤식으로 어셈블리 코드로 바뀌었는지 확인 #include int main(){ puts("hello world!\n"); return 0; } > 소스는 visual studio code 2019를 통해 64비트 릴리즈 모드로 컴파일 # hello world - 2 - 보는 방법 1. 주소: 해당 어셈블리 코드의 시작 주소가 표시됨 2. 기계 코드 > 사람이 읽을 수 있는 어셈블리 코드의 전 단계인 기계어가 여기에 표시됨 > : 앞에 있는 값은 prefix이고 띄어쓰기 다음에 있는 부분..