Esempio n. 1
0
        public PwClient(IntPtr descript)
        {
            this.Descrypt = descript;
            Int32 processID;

            WinApi.GetWindowThreadProcessId(descript, out processID);
            ProcessID = processID;
            handle    = WinApi.OpenProcess(WinApi.ProcessAccessFlags.All, false, ProcessID);
            Name      = CalcMethods.ReadString(handle, OfsPresenter.getInstance("BA")[0], OfsPresenter.getInstance("GA+Player+Name+0x0"));
            Money     = CalcMethods.ReadInt(handle, OfsPresenter.getInstance("BA")[0], OfsPresenter.getInstance("GA+Player+Money"));
        }
Esempio n. 2
0
 public static void setConfig(String path, Type type)
 {
     if (path.EndsWith(".txt"))
     {
         if (instance == null)
         {
             instance = new OfsPresenter();
         }
         reader           = (IOfsReader)Activator.CreateInstance(type);
         instance.listOfs = reader.SetOfs(path);
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Инжект для GUI элементов
        /// </summary>
        /// <param name="win_struct"></param>
        /// <param name="command_text"></param>
        /// <param name="processID"></param>
        public static void GUI_Inject(int win_struct, int command_text, IntPtr oph)
        {
            try
            {
                // ---- Создаем скелет пакета для инжектирования
                byte[] gui_packet =
                {
                    0x60,                     //Pushad
                    0xB9, 0x0, 0x0, 0x0, 0x0, //Mov_ECX + win_struct_address
                    0x68, 0x0, 0x0, 0x0, 0x0, //Push68 + command_text_address
                    0xB8, 0x0, 0x0, 0x0, 0x0, //Mov_EAX + call_address
                    0xFF,0xD0,                //Call_EAX
                    0x61,                     //Popad
                    0xC3                      //Ret
                };

                // ---- заменяем указанные эелементы пакета адресом для GUI инжектирования
                var x = OfsPresenter.getInstance("GUI")[0];
                Buffer.BlockCopy(BitConverter.GetBytes(OfsPresenter.getInstance("GUI")[0]), 0, gui_packet, 12, 4);
                // ---- заменяем указанные эелементы пакета адресом структуры необходимого окна
                Buffer.BlockCopy(BitConverter.GetBytes(win_struct), 0, gui_packet, 2, 4);
                // ---- заменяем указанные эелементы пакета адресом функции необходимого контрола
                Buffer.BlockCopy(BitConverter.GetBytes(command_text), 0, gui_packet, 7, 4);
                // ---- временные переменные
                int    lpNumberOfBytesWritten = 0;
                IntPtr lpThreadId;
                // ---- выделяем место в памяти
                IntPtr gui_address = WinApi.VirtualAllocEx(oph, IntPtr.Zero, 20, WinApi.AllocationType.Commit, WinApi.MemoryProtection.ReadWrite);
                // ---- записываем в выделенную память наш пакет
                WinApi.WriteProcessMemory(oph, (int)gui_address, gui_packet, 20, out lpNumberOfBytesWritten);
                // ---- запускаем записанную в память функцию
                IntPtr hProcThread = WinApi.CreateRemoteThread(oph, IntPtr.Zero, 0, gui_address, IntPtr.Zero, 0, out lpThreadId);
                // ---- Ожидаем завершения функции
                WinApi.WaitForSingleObject(hProcThread, WinApi.INFINITE);
                // ---- подчищаем за собой
                WinApi.VirtualFreeEx(oph, gui_address, 20, WinApi.FreeType.Release);
                WinApi.VirtualFreeEx(oph, hProcThread, 20, WinApi.FreeType.Release);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Esempio n. 4
0
 public static void GetCords(PwClient pw, out double x, out double y, out double z)
 {
     x = Math.Round(CalcMethods.ReadFloat(pw.Handle, OfsPresenter.getInstance("BA")[0], OfsPresenter.getInstance("GA+Player+X")), 1);
     y = Math.Round(CalcMethods.ReadFloat(pw.Handle, OfsPresenter.getInstance("BA")[0], OfsPresenter.getInstance("GA+Player+Y")), 1);
     z = Math.Round(CalcMethods.ReadFloat(pw.Handle, OfsPresenter.getInstance("BA")[0], OfsPresenter.getInstance("GA+Player+Z")), 1);
 }
Esempio n. 5
0
 public static void CheckMoney(PwClient pw)
 {
     pw.Money = CalcMethods.ReadInt(pw.Handle, OfsPresenter.getInstance("BA")[0], OfsPresenter.getInstance("GA+Player+Money"));
 }
Esempio n. 6
0
        ///// <summary>
        ///// Узнаем адрес контрола активного окна указанного по ID процесса клиента
        ///// </summary>
        ///// <param name="processID"></param>
        ///// <returns></returns>
        //public static int[] CalcControlAddress(IntPtr oph)
        //{
        //    try
        //    {
        //        int[] result = { 0, 0 };
        //        string name_control = "";
        //        int[] offset_win_struct = { 0x1c, 0x18, 0x8, 0x74 };
        //        int address_win_struct = ReadInt(oph, Offsets.getInstance().BaseAdress, offset_win_struct);

        //        int temp_address = CalcInt32Value(oph, address_win_struct + 0x1cc);
        //        for (int k = 0; k < 50; k++)
        //        {
        //            int window_address = CalcInt32Value(oph, temp_address + 0x4);
        //            for (int j = 0; j < k; j++)
        //            {
        //                window_address = CalcInt32Value(oph, window_address + 0x4);
        //            }
        //            int controlstruct_address = CalcInt32Value(oph, window_address + 0x8);
        //            window_address = CalcInt32Value(oph, controlstruct_address + 0x18);
        //            name_control = CalcStringValue_ASCII(oph, window_address + 0x0);
        //            if (name_control.IndexOf("Btn_Back") != -1)
        //            {
        //                int address_to_command_control = CalcInt32Value(oph, controlstruct_address + 0x1c);
        //                result[0] = address_win_struct;
        //                result[1] = address_to_command_control;
        //                return result;
        //            }
        //        }
        //        return result;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        ///// <summary>
        ///// Узнаем адрес активного окна
        ///// </summary>
        ///// <param name="oph"></param>
        ///// <returns></returns>
        //public static int CalcAddressActiveWindow(IntPtr oph)
        //{
        //    try
        //    {
        //        int[] offset_win_struct = { 0x1c, 0x18, 0x8, 0x74 };
        //        return ReadInt(oph, Offsets.getInstance().BaseAdress, offset_win_struct);
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //}

        /// <summary>
        /// Узнаем адрес контрола активного окна указанного по ID процесса клиента.
        /// Возвращает {указатель на окно, указатель на команду контрола, указатель на контрол}
        /// </summary>
        /// <param name="oph">Дескриптор окна</param>
        /// <param name="window_name">Имя окна</param>
        /// <param name="processID">Имя контрола</param>
        /// <returns></returns>
        public static Int32[] CalcControlAddress(IntPtr oph, String window_name, String control_name)
        {
            try
            {
                //вводим временный массив дял хранения результатов
                Int32[] result = { 0, 0, 0 };
                //вводим пустые переменные для хранения имени окна и контрола
                String win_name_8C  = String.Empty;
                String win_name_AC  = String.Empty;
                String name_control = String.Empty;
                //считываем начало массива структур окон нижнего или верхнего уровня уровня во временную переменную
                var   xxx             = OfsPresenter.getInstance("BA")[0];
                Int32 temp_address_8C = ReadInt(oph, OfsPresenter.getInstance("BA")[0], new Int32[] { 0x1c, 0x18, 0x8, 0x8C });
                Int32 temp_address_AC = ReadInt(oph, OfsPresenter.getInstance("BA")[0], new Int32[] { 0x1c, 0x18, 0x8, 0xAC });
                //в цикле проверяем имя каждого окна, пока не найдем нужное
                for (Int32 iter = 0; iter < 1500; iter++)
                {
                    if (iter > 0)
                    {
                        temp_address_8C = CalcInt32Value(oph, temp_address_8C + 0x0);
                        temp_address_AC = CalcInt32Value(oph, temp_address_AC + 0x0);
                    }
                    Int32 temp_address_8C_2 = CalcInt32Value(oph, temp_address_8C + 0x8);
                    Int32 temp_address_AC_2 = CalcInt32Value(oph, temp_address_AC + 0x8);
                    Int32 temp_address_8C_3 = CalcInt32Value(oph, temp_address_8C_2 + 0x4c);
                    Int32 temp_address_AC_3 = CalcInt32Value(oph, temp_address_AC_2 + 0x4c);
                    win_name_8C = CalcStringValue_ASCII(oph, temp_address_8C_3 + 0x0);
                    win_name_AC = CalcStringValue_ASCII(oph, temp_address_AC_3 + 0x0);
                    if (win_name_8C == "" && win_name_AC == "")
                    {
                        break;
                    }
                    if (CalcStringValue_ASCII(oph, temp_address_8C_3 + 0x0) == window_name)
                    {
                        //сохраняем значение временной переменной и выходим из цикла
                        result[0] = temp_address_8C_2;
                        break;
                    }
                    if (CalcStringValue_ASCII(oph, temp_address_AC_3 + 0x0) == window_name)
                    {
                        //сохраняем значение временной переменной и выходим из цикла
                        result[0] = temp_address_AC_2;
                        break;
                    }
                }
                //если не нашли нужное окно, то выходим и возвращаем 0
                if (result[0] == 0)
                {
                    return(result);
                }
                //считываем начало массива контролов найденного окна во временную переменную
                Int32 temp_address = CalcInt32Value(oph, result[0] + 0x1e4);
                //в цикле проверяем имя каждого контрола, пока не найдем нужное
                for (Int32 iter = 0; iter < 100; iter++)
                {
                    if (iter > 0)
                    {
                        temp_address = CalcInt32Value(oph, temp_address + 0x4);
                    }
                    //считываем адреса структуры контрола
                    Int32 controlstruct_address = CalcInt32Value(oph, temp_address + 0x8);
                    Int32 temp_address_2        = CalcInt32Value(oph, controlstruct_address + 0x18);
                    name_control = CalcStringValue_ASCII(oph, temp_address_2 + 0x0);
                    if (CalcStringValue_ASCII(oph, temp_address_2 + 0x0) == control_name)
                    {
                        //сохраняем значение адреса структуры контрола
                        result[1] = CalcInt32Value(oph, controlstruct_address + 0x1c);
                        result[2] = controlstruct_address;
                        return(result);
                    }
                }
                return(result);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }