All pastes #961360 Raw Edit

Miscellany

public text v1 · immutable
#961360 ·published 2008-03-28 20:53 UTC
rendered paste body
using 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;
            }
        }