Reversing

    Win32 API - 지뢰 찾기 핵 제작

    지뢰 위치를 찾기 위해, 메모리를 분석해 지뢰의 메모리 상 위치를 찾아보자. 치트엔진에서 지뢰를 찾고, 남은 지뢰 갯수를 카운트하는 변수가 저장된 메모리 주변을 찾아 지뢰가 어디에 있는지, 메모리 구조는 어떻게 되어 있는지 확인해보자. 닫힌칸은 0F로 표시되고, 열린칸은 해당 칸의 숫자로 표시된다. 40은 0이니까 빈 칸을 나타내는 듯. 그럼 8F로 표시된게 지뢰인가? 1바이트당 한칸을 배정해 연달아서 이어지고 있고, 한 줄의 시작점부터 다른 줄의 시작 점 까지는 0x20, 32바이트만큼 차이가 난다. 9*9인데도 그렇게 배정한 걸 보면 더 큰 크기일때를 고려하여 이렇게 한듯. 사용자 지정 옵션을 하더라도 최대 길이는 30 까지밖에 안되고, 각 줄의 시작과 끝에는 0x10이 들어가 있다. 01005361..

    win32API - GDI overlay

    이제 화면위에 올릴 overlay를 구현해야 한다. 배경을 검정색으로 바꾼 다음 , 검정색을 투명으로 변경하는 함수를 사용하여 투명 오버레이를 구현하자. c.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(0, 0, 0)); 실행시 WinMain에서 hWnd 생성 후에 다음 코드를 추가해준다. SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) ^ WS_EX_LAYERED); SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0),0 , LWA_COLORKEY); SetWindowLong 함수는 윈도우(창)의 설정을 변경하거나 정보를 저장할때 사용하고, SetLayeredWindo..

    win32API - GDI

    GDI(Graphics Device Interface) : 윈도우에서 그래픽 작업 처리를 위해 제공하는 기본 graphic API acase WM_PAINT: { RECT rect; RECT rect2; PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); SetTextColor(hdc, RGB(0xFF, 0x00, 0x00)); rect.left = 10; rect.top = 10; rect2.left = 10; rect2.top = 30; DrawText(hdc, L"Hello Win Gdi World!", -1, &rect, DT_SINGLELINE | DT_NOCLIP); DrawText(hdc, L"Hello Win Gdi 2!", -1, &rect2, DT_S..

    win32API - 기초

    게임의 내부 메모리 구조를 리버싱을 통해 분석하고, win32API로 오버레이를 만들어 ESP를 만들어볼거다. 원래 해놨던 작업들을 한꺼번에 블로그 포스팅에 정리해봤는데.. 결과가 신기하긴 한데 괜히 했다 싶기도 한 그런 경험이었다 ㅋㅋ #include /* 윈도우 프로시저 선언 */ LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); HWND : GUI요소를 위해 사용되는 인자. 어떤 윈도우에서 콜백이 발생하는지를 지정 UINT : Unsigned Int . 어떤 종류의 메시지인지 메지시 아이디를 인자로 넘김 WPARAM, LPARAM : 윈도우가 메시지에 자료를 추가할 떄 사용하는 매개변수 wparam : word로 넘기는 데이터 . 주로 핸들이나 정수를..