게임핵 개발02

게임핵 개발02

Summary 게임핵 개발에 대한 내용으로, 소수점 표현을 두 자리로 제한하는 코드와 WriteInt를 사용하여 메모리 값을 변경하는 방법을 설명합니다. 실시간으로 플레이어 데이터를 읽고 수정하는 방법과 관련된 코드 예시가 포함되어 있습니다.


🎥 동영상 보기

🔥 소숫점 2자리까지만 출력되게 만드는 코드 (#.##) 예를들어 코드가

1
2
3
x_angle = 0.12345

Angle_LBL.Text = "Angle : " + mainPlayer.x_angle;

0.12345

1
2
3
x_angle = 0.12345

Angle_LBL.Text = "Angle : " + mainPlayer.x_angle.ToString("#.##")

0.12

🎥 동영상 보기

🔥 WriteInt를 사용하여 메모리 값 변경하기 ReadInt로 실시간으로 값을 불러오고 WriteInt로 값을 수정함

0,1초마다 한번씩 메모리를 읽는 Timer를 이용하여 계속해서 Read하고 Write를 한다

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#PlayerData.cs

using ProcessMemoryReaderLib;

public PlayerData(Process proc, int offset, ProcessMemoryReader mem)
{
			public void SetPlayerData(ProcessMemoryReader mem) //메모리를 읽고 실시간으로 값을 받아오기 위함
      {
          HP = mem.ReadInt(base_addr + HP_offset); //프로세스 주소 + 0xEC
          Proof = mem.ReadInt(base_addr + Proof_offset);
          Ammo = mem.ReadInt(base_addr + Ammo_offset);
          x_pos = mem.ReadFloat(base_addr + x_pos_offset);
          z_pos = mem.ReadFloat(base_addr + z_pos_offset);
          y_pos = mem.ReadFloat(base_addr + y_pos_offset);
          x_angle = mem.ReadFloat(base_addr + x_angle_offset);
          y_angle = mem.ReadFloat(base_addr + y_angle_offset);
      }

      internal void hack_HP(ProcessMemoryReader mem)
      {
          mem.WriteInt(base_addr + HP_offset, 10000); //체력을 10000으로
      }

      internal void hack_Ammo(ProcessMemoryReader mem)
      {
          mem.WriteInt(base_addr + Ammo_offset, 10000); //탄약을 100000으로
      }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#Form1.cs

private void timer1_Tick(object sender, EventArgs e) // 0.1초마다 동작
        {
            if (attach)
            {
                try
                {
                    if (HP_hack)
                    {
                        mainPlayer.hack_HP(mem);
                    }
                    if (Ammo_hack)
                    {
                        mainPlayer.hack_Ammo(mem);
                    }

                    mainPlayer.SetPlayerData(mem); //데이터 모니터링
                    Health_LBL.Text = "Health : " + mainPlayer.HP;
                    Ammo_LBL.Text = "Ammo : " + mainPlayer.Ammo;
                    BulletProof_LBL.Text = "BulletProof : " + mainPlayer.Proof;
                    Angle_LBL.Text = "Angle : " + mainPlayer.x_angle.ToString("#.##") + " | " + mainPlayer.y_angle.ToString("#.##");
                    Position_LBL.Text = "Position : " + mainPlayer.x_pos.ToString("#.##") + " | " + mainPlayer.z_pos.ToString("#.##") + " | " + mainPlayer.y_pos.ToString("#.##");
                }
                catch { }
            }
        }
        private void Health_BT_Click(object sender, EventArgs e)
        {
            if (HP_hack)
            {
                HP_hack = false;
            }
            else
            {
                HP_hack = true;
            }
        }
        private void Ammo_BT_Click(object sender, EventArgs e)
        {
            if (Ammo_hack)
            {
                Ammo_hack = false;
            }
            else
            {
                Ammo_hack = true;
            }
        }

🎥 동영상 보기

🔥 수학 삼각함수… 예를들어 코드가

1
2
3
x_angle = 0.12345

Angle_LBL.Text = "Angle : " + mainPlayer.x_angle;

0.12345

1
2
3
x_angle = 0.12345

Angle_LBL.Text = "Angle : " + mainPlayer.x_angle.ToString("#.##")

0.12

💬 댓글

GitHub 계정으로 로그인하여 댓글을 남겨보세요. GitHub 로그인

🔧 댓글 시스템 설정이 필요합니다

GitHub Discussions 기반 댓글 시스템을 활성화하려면:

  1. Giscus 설정 페이지에서 설정 생성
  2. GISCUS_SETUP_GUIDE.md 파일의 안내를 따라 설정 완료
  3. Repository의 Discussions 기능 활성화

Repository 관리자만 설정할 수 있습니다. 설정이 완료되면 모든 방문자가 댓글을 남길 수 있습니다.

목차