Esempio n. 1
0
 /// <summary>
 /// Записать текст в память
 /// </summary>
 /// <param name="Address">Адрес записи</param>
 /// <param name="Text">Текст который будет записан в память</param>
 public static bool WriteString(ulong Address, string Text)
 {
     if (Address > ProtectedLowAddressZone)
     {
         fixed(char *ptr = Text)  //Фиксируем текст и записываем куда надо
         return(InternalMagic.ReadWriteBytes(Address, (void *)(ptr), (uint)Text.Length, false));
     }
     return(false);
 }
Esempio n. 2
0
 /// <summary>
 /// Записать массив байт
 /// </summary>
 /// <param name="Address">Адрес записи</param>
 /// <param name="Bytes">Массив байт который буем записывать</param>
 public static bool WriteBytes(ulong Address, byte[] Bytes)
 {
     if ((Address > ProtectedLowAddressZone) || (Bytes != null))
     {
         fixed(byte *ptr = Bytes)  //Фиксируем массив, и драйвер все сам прочитает
         return(InternalMagic.ReadWriteBytes(Address, ptr, (uint)Bytes.Length, false));
     }
     return(false);
 }
Esempio n. 3
0
 /// <summary>
 /// Записать число в память
 /// В среднем занимает 1,250326 тика для uint
 /// </summary>
 /// <typeparam name="T">Число</typeparam>
 /// <param name="Address">Адрес записи</param>
 /// <param name="Value">Записываемое число</param>
 public static bool Write <T>(ulong Address, T Value)
 {
     if (Address > ProtectedLowAddressZone)
     {
         TypedReference tRef = __makeref(Value); //Грязные хаками получаем адрес 'T Value'
         return(InternalMagic.ReadWriteBytes(Address, (void *)*(UInt64 *)(&tRef), (uint)Marshal.SizeOf(typeof(T)), false));
     }
     return(false);
 }
Esempio n. 4
0
 /// <summary>
 /// Прочитать в уже инициализированный массив байт
 /// </summary>
 /// <param name="Address">Адрес чтения</param>
 /// <param name="Bytes">Инициализированный массив байт</param>
 public static bool ReadBytes(ulong Address, ref byte[] Bytes)
 {
     if ((Address > ProtectedLowAddressZone) || (Bytes != null))
     {
         fixed(byte *ptr = Bytes)  //Фиксируем массив, и после драйвер все пихнет в него сам
         return(InternalMagic.ReadWriteBytes(Address, ptr, (uint)Bytes.Length, true));
     }
     return(false);
 }
Esempio n. 5
0
 /// <summary>
 /// Записать число в память
 /// Самый молниеносный способ!
 /// В среднем занимает 1,079411 тика для uint
 /// </summary>
 /// <param name="Address">Адрес записи</param>
 /// <param name="ValueAddress">Адрес записываемого числа</param>
 /// <param name="ValueSize">Размер записываемого числа</param>
 public static bool Write(ulong Address, void *ValueAddress, uint ValueSize)
 {
     if (Address > ProtectedLowAddressZone)
     {
         return(InternalMagic.ReadWriteBytes(Address, ValueAddress, ValueSize, false));
     }
     else
     {
         return(false);
     }
 }
Esempio n. 6
0
 /// <summary>
 /// Проверка что процесс 64 битный
 /// </summary>
 /// <param name="PID">PID процесса</param>
 /// <param name="Is64Bit">Результат</param>
 public static bool IsProcess64Bit(UInt16 PID, out bool Is64Bit)
 {
     if (!Environment.Is64BitOperatingSystem)
     {
         Is64Bit = false;
         return(true);
     }
     else
     {
         return(InternalMagic.ProcessIsWOW64(PID, out Is64Bit));
     }
 }
Esempio n. 7
0
        //Прочитать строку по нужному адрессу и в нужной кодировке с ограничением по длине
        private static string ReadStringInternal(Encoding Encoding, ulong Address, ushort MaxLenght)
        {
            byte[] Array = new byte[MaxLenght];
            fixed(byte *ptr = Array)
            {
                if (InternalMagic.ReadWriteBytes(Address, ptr, (uint)Array.Length, true))
                {
                    //Сквозь массив ищем null терминатор строки
                    for (int i = 0; i < MaxLenght; i++)
                    {
                        if (*(ptr + i) == '\0') //Ищем null терминатор
                        {
                            return(Encoding.GetString(Array, 0, i));
                        }
                    }

                    //Окей, мы не нашли конец строке, вернем все!
                    return(Encoding.GetString(Array));
                }
                return(""); //Ошибка!
            }
        }
Esempio n. 8
0
 /// <summary>
 /// Получить базовый адрес процесса жертвы
 /// </summary>
 public static UInt64 GetBaseAddress()
 {
     return(InternalMagic.GetBaseAddress());
 }
Esempio n. 9
0
 /// <summary>
 /// Проверить, работает ли драйвер?
 /// </summary>
 public static bool CheckDriverIsWorking()
 {
     return(InternalMagic.DriverIsWorking());
 }
Esempio n. 10
0
 /// <summary>
 /// Инициализировать магию по имени процесса!
 /// </summary>
 /// <param name="ProcessName">Имя процесса жертвы</param>
 public static bool InitializateMagic(string ProcessName, DebugPrintParams DebugMode = DebugPrintParams.DEFAULT)
 {
     return(InternalMagic.InitializateMagic(ProcessName, DebugMode));
 }
Esempio n. 11
0
 /// <summary>
 /// Инициализировать магию!
 /// </summary>
 /// <param name="TargetPID">PID жертвы</param>
 public static bool InitializateMagic(ushort TargetPID, DebugPrintParams DebugMode = DebugPrintParams.DEFAULT)
 {
     return(InternalMagic.InitializateMagic(TargetPID, DebugMode));
 }
Esempio n. 12
0
 /// <summary>
 /// Установить текущий режим вывода отладочной информации
 /// </summary>
 public static bool SetDebugMode(DebugPrintParams DebugMode, bool PrintThisInDebug)
 {
     return(InternalMagic.SetDebugMode(DebugMode, PrintThisInDebug));
 }