본문 바로가기

전체 글339

8. 가변인자 템플릿 가변인자 템플릿 n개의 인자를 받는 템플릿 0개일 수도 있고, 여러 개일 수도 있음 인자와 타입의 개수가 정해지지 않은 형태의 템플릿 tuple의 경우 가변인자 클래스 템플릿으로 되어 있음 인자를 0개를 줘도, 1개를 줘도, n개를 줘도 에러가 발생하지 않는다. // 가변인자 클래스템플릿 template class xtuple { }; // 가변인자 함수템플릿 template void foo(Types ... args) { } 타입의 경우 1개가 아니므로 관례상 Types로 통일 받는 인자쪽도 arg가 아닌 복수형 args로 통일 Parameter Pack C++11부터 지원 가변인자를 받는 함수의 경우 Parameter Pack을 통해 args를 사용할 수 있다. 인자가 몇 개 있는지 알고 싶으면 si.. 2022. 10. 6.
7. 게임 플로우 조작하기 본 게시글은 메모리에 대한 깊은 이해를 위해 에이콘 출판사의 "봇을 이용한 게임 해킹" 서적을 보고 필기한 자료입니다. 따라서 디테일한 부분에서 본 서적의 실제 내용과 다를 수 있고 글쓴이의 주관이 들어가 있음을 참고해주시기 바랍니다. 문제 시 비공개 처리하도록 하겠습니다. 후킹이란? 코드가 수행되는 과정에 개입해 프로세스를 변경하고 모니터링을 수행한 후 이를 원상태로 돌아가지 않게 방지하는 기술 프로세스의 모든 코드를 삭제하거나 실행 순서를 변경해 주입된 함수를 실행하도록 하는 것 NOP을 통해 코드 삭제하기 NOP을 사용해야 하는 경우? 투명화된 적을 상대해야 하는데 그 적이 체력바도 보이지 않아 접근하는지조자 알 수 없을 때 for (int i = 0; i < creatures.size(); i++.. 2022. 10. 4.
함수 포인터가 함수를 직접 가리키지 않는다!? 함수 포인터가 가진 주소가 함수 주소가 아니다 오늘 nop코드 덮어쓰기 실습 도중 알게 된 사실인데 함수 포인터에 함수 주소가 바로 담기는게 아님 함수의 주소는 별도 메모리에 존재하고 그 함수의 시작점으로 jmp하도록 offset이 있는 배열이 있음 함수 포인터 외에도 함수의 주소에 접근하는 연산들은 (함수포인터를 DWORD로 바꿔서 담는다던가) 모두 이 offset 배열의 특정 인덱스를 가리키도록 되어 있고, 함수 포인터로 함수를 호출하면 이 인덱스로 점프 -> 인덱스에서 다시 함수로 점프 drawCreatureHealthBarExample이 함수의 이름이고 조사식에서 함수의 실제 주소를 의미함 그리고 함수를 가리키는 함수포인터 mem이 있는데 함수랑 주소가 다름 함 수 : 0x00b770f0 함수 포.. 2022. 10. 2.
6. 코드 인젝션 본 게시글은 메모리에 대한 깊은 이해를 위해 에이콘 출판사의 "봇을 이용한 게임 해킹" 서적을 보고 필기한 자료입니다. 따라서 디테일한 부분에서 본 서적의 실제 내용과 다를 수 있고 글쓴이의 주관이 들어가 있음을 참고해주시기 바랍니다. 문제 시 비공개 처리하도록 하겠습니다. 코드 인젝션이란 프로세스가 수행되는 메모리 공간과 실행 환경에서 외부 코드를 수행하도록 강제하는 것 코드 인젝션 방법 코드 케이브를 만들고 스레드를 주입하는 방법 직접 외부 바이너리를 이식하는 것 스레드 인젝션으로 코드 케이브 주입하기 다른 프로세스에 코드를 주입하는 첫 단계는 셸 코드 셸 코드란? 위치와 상관없이 수행 가능한 어셈블리 코드를 바이트 배열 형태로 작성한 것 셸 코드를 작성해 코드 케이브를 만들 수 있고, 코드 케이브는.. 2022. 10. 1.