Перейти к содержанию

Laziz

Пользователи+
  • Постов

    207
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

Сообщения, опубликованные Laziz

  1. В 16.05.2017 в 03:41, Blackdots сказал:

    Зачем? Это тоже самое, что скачать библиотеку которая умеет выводить MessageBox, изихук - лишнее

    Да, он умеет выводит MessageBox но, он в целом внедряет .NET в программу а эта не только MessageBox.

    Больше дело меньше разговора как говорится, кто та хукнул уже DX9, DX10, DX11 или DX12?

  2. Вчера захожу на pinvoke.net, а там не хорошие слова написаны и нужной инфы нет. И так на всех страницах.

    Хотелось бы узнать мнение знающих, как взломали и зачем взломали?

    Интерес усугу[CENSORED]ется тем что pinvoke написана на ASP.NET, а я активно изучаю эту сферу.

  3. 16 минут назад, roma91212 сказал:

    Чистый с# приветствуется))

    Ну, не совсем чистый C#, в прочем почитай про них сам. Называется

    1. "EasyHook". (для инъекции библиотеки написанный на C# в любую программу)

    2. "SharpDX" (типо аналог DirectXа на C#)

    Я делал хук на примере Chameleon Wallhack по видео Keng`a только на C# с помощью этих библиотек, получилось довольно не плохо.

  4. В 23.04.2017 в 08:39, roma91212 сказал:

    Итак,хотелось бы затронуть такую тему как Хук функций на c#. Соответсвенно со сканером сигнатур.

    Но главный вопрос каким образом можно найти code cave, и сделать переадресацию на свою кастомную функцию?

    Только c#, без плюсов)))

    А готовый библиотекой пользоваться приветствуется?

  5. 11 час назад, Razi сказал:

    Приведу пример: Нужно через редактор изменить начальное оружие персонажа на другое.
      Начальное оружие персонажа находится в адресе(offset) 9380 в Hex, в игровом файле Namemenu.mnu

    Его каждый раз надо менять? почему один раз поменял и не все?

    • Плюс 1
  6. 2 минуты назад, gmz сказал:

    взять fasm или nasm, создать окно, в окне создать "radio button" на все пушки, добавить название пушек, написать функцию патча файла.. легко xD

     

    Почему именно fasm или nasm? для отпугивание читателей и автора?

    • Плюс 2
  7. В 05.01.2016в02:26, DarkPower2 сказал:

    Уже все перепробовал, что только мог... После выполнения в CE пишет неверный адрес перехода...

    Я думаю проблема в том, что caveAddress = 0000000011223344 (пример), a addressFrom = 000007FED32A22DA (тоже).

    Помогите решить эту проблему!

    И при выполнении замененного кода возвращает тоже на неверный адрес. 

    Проблема в том что VirtualAllocEx выделяет адрес слишком далеко от стартового адреса, из за этого "jmp адрес" не возможно, потому что шаг перехода уже не влезает на 4 байта. Что бы выделит адрес по ближе надо в ручную искать Cave адрес. Если нужно будет подробнее объясню.

  8. Приведи код где jmp адрес высчитывается

    случайно не такой?

    string Jmp_Call(long iCave, long jumpFrom, long iNext, bool jc)
            {// Возвращает байт при прыжке / Вызов cave из исходного местоположения.
                string ins = GetIns(BitConverter.GetBytes(iCave - jumpFrom - 5));
                for (var i = 5; i < iNext - jumpFrom; i++)
                    ins += "90";
                return jc ? "E9" + ins : "E8" + ins;
            }

     

  9. 2 часа назад, Recpec158 сказал:

    трейнер определил при запуске какая у тебя разрядность и загрузил тот указатель или адрес,

     

    Разрядность операционный системы:

    Environment.Is64BitOperatingSystem
    //или
    if (IntPtr.Size == 8)
                {
                    //x64
                }
                else
                {
                    //x32
                }

    Разрядность процесса:

    тут посмотри Тынц

     

     

    • Плюс 1
  10. 4 часа назад, Xipho сказал:

    Насчет скорости работы форума - у кого-то еще, кроме meft подобные проблемы возникают?

    Скорость у меня нормально.

    Желаю скорейшего выздоровление!!!

  11. Тут идея не в поиске по маске, а в том, что если байт в сигнатуре равен -1(0xFF), то это и есть "неопределенный" байт, который может меняться.

     

    Согласен что 0xFFы может быт меняется, но и другие тоже может меняться. Не зря же придумали маску.

  12. for (int i = End; sIn[Pool + i] == sFor[i] | sFor[i] == 0xFF; i--)// Если (смещение + длина сигнатуры равна i-евому байту сигнатуры) или (i-евый байт сигнатуры равен -1),то цикл вычитается
    Но сигнатуру таким способом не находит. Я пробовал и копаться в откладчике c#, но так и не понял в чем проблема.

     

    Где тут по меняющем сигнатурам (по маскам) поиск так и не понял, или идея в другом?... не понятно

    • Плюс 1
  13. Если что вот оно

    З.Ы. Мне кажется не фига не быстрый это... Хотя особо не проверял

    using System;using System.Collections.Generic;using System.Linq;using System.Runtime.InteropServices;using System.Text;namespace temp1{    class AOBScan    {        [DllImport("kernel32.dll")]        public static extern IntPtr OpenProcess(ProcessAccessFlags processAccess, bool bInheritHandle, int processId);        [Flags]        public enum ProcessAccessFlags : uint        {            All = 0x001F0FFF,            Terminate = 0x00000001,            CreateThread = 0x00000002,            VirtualMemoryOperation = 0x00000008,            VirtualMemoryRead = 0x00000010,            VirtualMemoryWrite = 0x00000020,            DuplicateHandle = 0x00000040,            CreateProcess = 0x000000080,            SetQuota = 0x00000100,            SetInformation = 0x00000200,            QueryInformation = 0x00000400,            QueryLimitedInformation = 0x00001000,            Synchronize = 0x00100000        }        //ReadProcessMemory        [DllImport("kernel32.dll")]        protected static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] buffer, uint size, int lpNumberOfBytesRead);        //VirtualQueryEx        [DllImport("kernel32.dll")]        protected static extern int VirtualQueryEx(IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, int dwLength);        [StructLayout(LayoutKind.Sequential)]        protected struct MEMORY_BASIC_INFORMATION        {            public IntPtr BaseAddress;            public IntPtr AllocationBase;            public uint AllocationProtect;            public uint RegionSize;            public uint State;            public uint Protect;            public uint Type;        }        protected List<MEMORY_BASIC_INFORMATION> MemoryRegion { get; set; }        protected void MemInfo(IntPtr pHandle)        {            IntPtr Addy = new IntPtr();            while (true)            {                MEMORY_BASIC_INFORMATION MemInfo = new MEMORY_BASIC_INFORMATION();                int MemDump = VirtualQueryEx(pHandle, Addy, out MemInfo, Marshal.SizeOf(MemInfo));                if (MemDump == 0) break;                if ((MemInfo.State & 0x1000) != 0 && (MemInfo.Protect & 0x100) == 0)                    MemoryRegion.Add(MemInfo);                Addy = new IntPtr(MemInfo.BaseAddress.ToInt32() + (int)MemInfo.RegionSize);            }        }        protected IntPtr Scan_withOutMask(byte[] sIn, byte[] sFor)        {            int[] sBytes = new int[256]; int Pool = 0;            int End = sFor.Length - 1;            for (int i = 0; i < 256; i++)                sBytes[i] = sFor.Length;            for (int i = 0; i < End; i++)                sBytes[sFor[i]] = End - i;            while (Pool <= sIn.Length - sFor.Length)            {                for (int i = End; sIn[Pool + i] == sFor[i]; i--)                    if (i == 0) return new IntPtr(Pool);                Pool += sBytes[sIn[Pool + End]];            }            return IntPtr.Zero;        }        protected IntPtr Scan_withMask(byte[] sIn, byte[] sFor, bool[] mask)        {            int[] sBytes = new int[256]; int Pool = 0;            int End = sFor.Length - 1;            for (int i = 0; i < 256; i++)                sBytes[i] = sFor.Length;            for (int i = 0; i < End; i++)                sBytes[sFor[i]] = End - i;            while (Pool <= sIn.Length - sFor.Length)            {                for (int i = End; equal(sIn[Pool + i], sFor[i], mask, i); i--)                    if (i == 0) return new IntPtr(Pool);                Pool += sBytes[sIn[Pool + End]];            }            return IntPtr.Zero;        }        bool equal(byte sIn, byte sFor, bool[] mask, int maskNumber)        {            if (mask[maskNumber])            {                return true;            }            else if(sIn == sFor)            {                return true;            }            return false;        }        /// <summary>        /// Поиск по байтам. Если маски нету то, там где "mask" пишем null        /// </summary>        /// <param name="Pattern"></param>        /// <param name="mask">Маска или null</param>        /// <param name="handle"></param>        /// <returns></returns>        public IntPtr AobScan(byte[] Pattern, string mask, IntPtr handle)        {            MemoryRegion = new List<MEMORY_BASIC_INFORMATION>();            MemInfo(handle);//сюда записываем handle процесса            if (string.IsNullOrEmpty(mask)) // если маски нету            {                for (int i = 0; i < MemoryRegion.Count; i++)                {                    byte[] buff = new byte[MemoryRegion[i].RegionSize];                    ReadProcessMemory(handle, MemoryRegion[i].BaseAddress, buff, MemoryRegion[i].RegionSize, 0);                    IntPtr Result = Scan_withOutMask(buff, Pattern);                    if (Result != IntPtr.Zero)                        return new IntPtr(MemoryRegion[i].BaseAddress.ToInt32() + Result.ToInt32());                }                            }            else            {                bool[] maskBool = new bool[mask.Length/2];                for (int i = 0; i <= mask.Length - 2; i += 2)                {                    maskBool[i/2] = mask.Substring(i, 2) == "xx" ? true : false;                }                for (int i = 0; i < MemoryRegion.Count; i++)                {                    byte[] buff = new byte[MemoryRegion[i].RegionSize];                    ReadProcessMemory(handle, MemoryRegion[i].BaseAddress, buff, MemoryRegion[i].RegionSize, 0);                    IntPtr Result = Scan_withMask(buff, Pattern, maskBool);                    if (Result != IntPtr.Zero)                        return new IntPtr(MemoryRegion[i].BaseAddress.ToInt32() + Result.ToInt32());                }            }            return IntPtr.Zero;        }    }}
       AOBScan aobscan = new AOBScan();   int address;   int pID = 4180;   IntPtr handle = AOBScan.OpenProcess(AOBScan.ProcessAccessFlags.All, false, pID);   address = (int)aobscan.AobScan(new byte[] { 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x8B, 0x45, 0x08, 0x85, 0xC0, 0x74, 0x0F, 0x50, 0x6A, 0x00, 0xFF, 0x35, 0x08, 0x30, 0x88, 0x76, 0xFF, 0x15, 0x2C, 0x40, 0x88, 0x76, 0x8B, 0x45, 0x0C, 0x85, 0xC0 }, "8Bxxxx8Bxx8Bxxxx85xx74xxxx6AxxFFxxxxxxxxxxFFxxxxxxxxxx8Bxxxx85xx", handle); или   address = (int)aobscan.AobScan(new byte[] { 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x8B, 0x45, 0x08, 0x85, 0xC0, 0x74, 0x0F, 0x50, 0x6A, 0x00, 0xFF, 0x35, 0x08, 0x30, 0x88, 0x76, 0xFF, 0x15, 0x2C, 0x40, 0x88, 0x76, 0x8B, 0x45, 0x0C, 0x85, 0xC0 }, null, handle);   если нету маски
    • Плюс 2
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.