rendered paste bodyusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
namespace HaloHBF
{
public partial class Form1 : Form
{
private MemoryHandler memHandler = new MemoryHandler();
private List<int> ptable = new List<int>(30);
private int myAddy = 0;
private int myHotkey = 0x10;
private int aimingAddy = 0;
private bool aimOn = true, drawLead = true, injected = false;
/*change the trial lead here Halo FV is 7,
* but trial is bigger, so make it 8 or 9*/
private float lead = 9;
public struct vect2d
{
public float h;
public float v;
}
public struct vect3d
{
public float x;
public float y;
public float z;
}
public Form1()
{
InitializeComponent();
}
private bool findHalo()
{
if (memHandler.ProcessRunning)
return true;
return memHandler.setProcessByTitle("Halo");
}
private int getClosestPlayerAddy()
{
int closestAddy = -1;
double shortestDist = 0;
vect3d myVect = getMyCoords();
vect3d playerVect;
float maxFov = float.Parse(txtFov.Text);
for (int i = 0; i < ptable.Count; i++)
{
playerVect = getPlayerVect(ptable[i]);
if (ptable[i] == myAddy)
continue;
double dist = getAngleDistance(getMouse(), get2dVect(myVect, playerVect));
if (dist > maxFov)
continue;
if (dist != 0 /* not ourselves */ && (dist < shortestDist || shortestDist == 0))
{
shortestDist = dist;
closestAddy = ptable[i];
}
}
return closestAddy;
}
private vect2d get2dVect(vect3d vect1, vect3d vect2)
{
vect2d resVect = new vect2d();
float dx = vect2.x - vect1.x, dy = vect2.y - vect1.y, dz = vect2.z - vect1.z;
float divisor = (float)Math.Sqrt(dx * dx + dy * dy);
resVect.v = (float)Math.Atan2(dz, divisor == 0 ? 0.0001F : divisor);
// don't want divide by zero for tan
divisor = dx;
if (divisor == 0)
divisor = 0.0001F;
// we use abs here since we are going to offset the angle by quandrants below
resVect.h = (float)Math.Atan(Math.Abs(dy) / Math.Abs(divisor));
// quad 1
if (dx > 0 && dy >= 0)
;
// quad 2
if (dx < 0 && dy >= 0)
resVect.h = (float)(Math.PI - resVect.h);
// quad 3
if (dx < 0 && dy < 0)
resVect.h = (float)(Math.PI + resVect.h);
// quad 4
if (dx > 0 && dy < 0)
resVect.h = (float)(2 * Math.PI - resVect.h);
return resVect;
}
public float getAngleDistance(vect2d vect1, vect2d vect2)
{
return (float)(60 * Math.Acos(Math.Sin(vect1.v) * Math.Sin(vect2.v) + Math.Cos(vect1.v) * Math.Cos(vect2.v) * Math.Cos(vect2.h - vect1.h)));
}
private double get3dDistance(vect3d vect1, vect3d vect2)
{
// 3d dist: sqrt((ax - bx)^2 + (ay - by)^2 + (az - bz)^2)
return Math.Sqrt(Math.Pow(vect1.x - vect2.x, 2) + Math.Pow(vect1.y - vect2.y, 2) + Math.Pow(vect1.z - vect2.z, 2));
}
#region halomemfunc
public bool inMenu()
{
return memHandler.readMemoryByte(0x00718EBC) != 0x0;
}
private void trapMouse()
{
memHandler.WriteProcessMemory(0x4722DA, new byte[] { 0x90, 0x90, 0x90 });
memHandler.WriteProcessMemory(0x47277A, new byte[] { 0x90, 0x90, 0x90 });
memHandler.WriteProcessMemory(0x4727B4, new byte[] { 0x90, 0x90, 0x90 });
}
private void releaseMouse()
{
memHandler.WriteProcessMemory(0x4722DA, new byte[] { 0xD9, 0x5F, 0x0C });
memHandler.WriteProcessMemory(0x47277A, new byte[] { 0xD9, 0x57, 0x10 });
memHandler.WriteProcessMemory(0x4727B4, new byte[] { 0xD9, 0x5F, 0x10 });
}
private vect2d getMouse()
{
vect2d mVect = new vect2d();
mVect.h = memHandler.readMemoryFloat(0x4BD7D4B8);
mVect.v = memHandler.readMemoryFloat(0x4BD7D4BC);
return mVect;
}
private void setMouse(vect2d mVect)
{
memHandler.writeMemoryFloat(0x4BD7D4B8, mVect.h);
memHandler.writeMemoryFloat(0x4BD7D4BC, mVect.v);
}
private bool inVehicle()
{
return memHandler.readMemoryByte(0x6A3970) != 0x00;
}
/*Beginning of Player Table. Gets the x,y,z coords of each player*/
private vect3d getMyCoords()
{
vect3d tVect = new vect3d();
tVect.x = memHandler.readMemoryFloat(0x6A3964);
tVect.y = memHandler.readMemoryFloat(0x6A3968);
tVect.z = memHandler.readMemoryFloat(0x6A396C);
return tVect;
}
public string getCurrentMap()
{
byte[] buf;
int read = memHandler.ReadProcessMemory(0x400001E8, 13, out buf);
return Encoding.ASCII.GetString(buf, 0, read);
}
public vect3d getPlayerVect(int playerLocAddy)
{
vect3d tVect = new vect3d();
tVect.x = memHandler.readMemoryFloat(playerLocAddy);
tVect.y = memHandler.readMemoryFloat(playerLocAddy + 4);
tVect.z = memHandler.readMemoryFloat(playerLocAddy + 8);
return tVect;
}
public vect3d getPlayerVectOffsets(int playerLocAddy)
{
vect3d tVect = new vect3d();
tVect.x = memHandler.readMemoryFloat(playerLocAddy + 12);
tVect.y = memHandler.readMemoryFloat(playerLocAddy + 16);
tVect.z = memHandler.readMemoryFloat(playerLocAddy + 20);
return tVect;
}
#endregion
private void updatePlayerList()
{
// sanity and menu check
if (!memHandler.ProcessRunning || inMenu())
return;
/*1st line of code is the code-cave and ASM injection.
* 2nd line is the jmp to the code-cave.
* The 2nd line jmps to 1st, then back and continues on with halo.*/
if (!injected)
{
injected = true;
memHandler.WriteProcessMemory(0x40034C, hexToBytes("A344034000A14803400089900006400083F850740583C004EB05B800000000A348034000A144
034000891A8942046A0051897208E96F881500"));
memHandler.WriteProcessMemory(0x558BE9, hexToBytes("E95E77EAFF909090909090"));
}
// grabs addresses from the injected output and stores them in adr
int[] adr = new int[20];
for (int i = 0; i < adr.Length; i++)
adr[i] = memHandler.readMemoryInt(0x400600 + (i * 4));
// stores only unique addresses from adr into unique
List<int> unique = new List<int>(20);
for (int i = 0; i < adr.Length; i++)
if (!unique.Contains(adr[i]))
unique.Add(adr[i]);
// stores old addresses from ptable that still exist into updated
List<int> updated = new List<int>(20);
for (int i = 0; i < ptable.Count; i++)
if (unique.Contains(ptable[i]))
updated.Add(ptable[i]);
// any address from unique that weren't in ptable are now added to updated
for (int i = 0; i < unique.Count; i++)
if (!updated.Contains(unique[i]))
updated.Add(unique[i]);
ptable.Clear();
ptable = updated;
// gets your coords to find yourself on the list
vect3d myVect = getMyCoords();
for (int i = 0; i < ptable.Count; i++)
if (myVect.x == memHandler.readMemoryFloat(ptable[i]))
{
myAddy = ptable[i];
break;
}
}
private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
//MessageBox.Show("" + e.KeyValue);
string keyname = "";
if (e.Modifiers == Keys.Shift)
keyname = "Shift";
else if (e.KeyCode == Keys.CapsLock)
keyname = "Caps Lock";
else if (e.KeyCode == Keys.Tab)
keyname = "Tab";
else if (e.Modifiers == Keys.Alt)
keyname = "Alt";
else if (e.Modifiers == Keys.Control)
keyname = "Control";
else if (e.KeyValue > 47 && e.KeyValue < 94)
keyname = ((char)e.KeyValue).ToString();
if (keyname != "")
{
textBox2.Text = keyname;
myHotkey = e.KeyValue;
}
}
#region HexManip
public static string bytesToHex(byte[] bytes, int start, int length, string delim)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder(bytes.Length * 2);
int end = start + length;
for (int i = start; i < end; i++)
{
sb.Append(bytes[i].ToString("X2"));
sb.Append(delim);
}
return sb.ToString();
}
public static byte[] hexToBytes(string hexString)
{
if (hexString.StartsWith("0x"))
hexString = hexString.Substring(2);
hexString = System.Text.RegularExpressions.Regex.Replace(hexString, "[^a-fA-F0-9]", "");
if (hexString.Length % 2 != 0)
hexString = hexString.Substring(0, hexString.Length - 1);
int length = hexString.Length / 2;
byte[] buf = new byte[length];
for (int i = 0; i < length; i++)
buf[i] = byte.Parse(hexString.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber);
return buf;
}
public static int hexToInt(string hexString)
{
if (hexString.StartsWith("0x"))
hexString = hexString.Substring(2);
return int.Parse(hexString, System.Globalization.NumberStyles.HexNumber);
}
#endregion
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
timer1.Enabled = false;
}
private void timer1_Tick(object sender, EventArgs e)
{
int res = WinApi.GetKeyState(119);
if ((res & 0x8000) != 0)
{
aimOn = !aimOn;
Thread.Sleep(200);
}
// F7
res = WinApi.GetKeyState(118);
if ((res & 0x8000) != 0)
{
drawLead = !drawLead;
Thread.Sleep(200);
}
// + sign
if ((WinApi.GetKeyState(107) & 0x8000) != 0)
{
lead += 0.5F;
Thread.Sleep(200);
}
// - sign
if ((WinApi.GetKeyState(109) & 0x8000) != 0)
{
lead -= 0.5F;
Thread.Sleep(200);
}
if (drawLead)
{
IntPtr hWnd = WinApi.FindWindowA("Halo", null);
IntPtr hDC = WinApi.GetDC(hWnd);
Graphics memDC = Graphics.FromHdc(hDC);
memDC.DrawString("" + lead, new Font("Arial", 14, FontStyle.Bold), Brushes.Red, new PointF(5, 5));
WinApi.ReleaseDC(hWnd, hDC);
label4.Text = "Press F7 to disable lead drawing";
}
else
label4.Text = "Press F7 to enable lead drawing";
if (!aimOn)
{
label2.Text = "Press F8 to enable aimbot";
return;
}
else
label2.Text = "Press F8 to disable aimbot";
findHalo();
res = WinApi.GetKeyState(myHotkey);
res &= 0x8000;
if (res != 0)
{
updatePlayerList();
vect3d myvector = getMyCoords();
vect3d enemyvector = getPlayerVect(aimingAddy);
vect3d enemyoffset = getPlayerVectOffsets(aimingAddy);
enemyvector.x += enemyoffset.x * lead;
enemyvector.y += enemyoffset.y * lead;
float height = inVehicle() ? 0.1F : 0.6F;
enemyvector.z += height + enemyoffset.z * lead;
vect2d lookVect = get2dVect(myvector, enemyvector);
//if (getAngleDistance(getMouse(), lookVect) > float.Parse(txtFov.Text))
//aimingAddy = -1;
// finds a new player if needed
if (aimingAddy == -1)
aimingAddy = getClosestPlayerAddy();
if (aimingAddy != -1)
{
setMouse(lookVect);
}
}
else
{
aimingAddy = -1;
}
}