프로그램 BaseAddress에 오프셋을 더해서 원하는 주소를 찾으려고 하는데
치트엔진에선 잘만 나오는게 C++로 가면 어떤 포인터를 사용하던간에 맨 마지막 오프셋을 더하면 자꾸 이상한 주소가 나옴
이건 지금 사용 중인 코드
1 2 3 4 5 6 7 8 9 10 11 12 | std::vector<unsigned int> Profile = { 0x59C6DF8, 0x8, 0x8, 0x8, 0x1F0 }; void get_address() { auto Address = BaseAddress; // for (int a = 0; a < Profile.size(); a++) { ReadProcessMemory(hProcess, LPVOID(Address + Profile[a]), &Address, sizeof(Address), NULL); printf("PROFILE ADDRESS = %p\n", Address); } } | cs |
어디에서 실수한건질 모르겠음..
뭐가 잘못된걸까
BaseAddress 타입이 먼데
치트엔진 고수인거랑 상관없는거 같은데 BaseAddress 타입이 포인터면 +연산은 숫자*자료크기임 int포인터에 +1하면 메모리 주소는 +4인식으로
포인터 마즘 uintptr_t
baseaddress 값 구하는건 아래 코드 그대로 복붙해서 사용했고
https://stackoverflow.com/a/26573045
https://www.javatpoint.com/pointer-arithmetic-in-c
타입을 size_t, void* 아니면 char*로 바꿔서 연산하고 다시 uintptr_t로 바꿔라
무슨 짓을 해도 저렇게 나와서 다른 값 찾고 그 주소 얻는 걸로 해결했음 도와줘서 정말 ㄱㅅㄱㅅ
타겟에 보호를 위해서 어떤 기법이 사용됐고 치트엔진이 우회해준거아님?
저번에 다른 게임에서 포인터 주소 가져오려고 할 때도 이런 적 있었는데 내가 잘못한 게 아니면 어떤 보안이 있긴 한가봄 그냥 마지막 오프셋에 0xAB0처럼 마지막 숫자에 0이 붙으면 안되는 거 같기도 하고..