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

Лидеры

  1. SER[G]ANT

    SER[G]ANT

    Разработчики (+)


    • Баллы

      8

    • Постов

      618


  2. Laziz

    Laziz

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


    • Баллы

      5

    • Постов

      207


  3. Garik66

    Garik66

    Помогаторы


    • Баллы

      2

    • Постов

      5 750


  4. gmz

    gmz

    Разработчики (+)


    • Баллы

      1

    • Постов

      400


Популярный контент

Показан контент с высокой репутацией 03.02.2016 во всех областях

  1. Если что вот оно 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 балла
  2. LUA-скрипт от MasterGH: function onMemRecPreExecute(memoryrecord, newstate) print(memoryrecord.Description) print(memoryrecord.ID) print(memoryrecord.Index) end Видео от Garik66:
    1 балл
  3. А эти адреса на скриншоте, потом после выстрела, восстанавливаются в 0 ??? если нет - то и адреса то не те. Смотри - когда оружие в спокойном состоянии, значение адреса отдачи 0 а если ты выстрелил, то туда записалось на пример 0.0003232 что то в этом духе, а после выстрела спустя секунду, опять восстановилось в 0
    1 балл
  4. Где тут по меняющем сигнатурам (по маскам) поиск так и не понял, или идея в другом?... не понятно
    1 балл
  5. 1 балл
  6. Чудеса короче да и только. У меня нет слов. У меня только одно предположение. Так как я писал скрипт в табличке созданной ещё на СЕ 6.4 и в ней компилируется, то проблема в СЕ 6.5. По-видимому Дарк Байт решил, что функция keybd_event устаревшая и выкинул её из компилятора СЕ 6.5. Если кто хорошо знает английский, задайте вопрос на форуме СЕ пожалуйста. Выкинул он keybd_event и как можно восстановить, если выкинул.
    1 балл
  7. protected List<MEMORY_BASIC_INFORMATION> MemoryRegion { get; set; }
    1 балл
  8. тогдааа... это будет выглядеть так: kOptionA это db 0,0
    1 балл
  9. Можно Memory View -> Tools -> Dissect PE headers или Редактор памяти -> Инструменты -> Анализ заголовков PE Но удобно ли? Нет. Сделано просто ради того, чтобы было, не более. Лучше воспользоваться специализированным софтом.
    1 балл
  10. 1 балл
  11. 6 числа вышло небольшое обновление Ссылка та же.
    1 балл
  12. Да, это релизная версия с официального сайта. Но, т.к. не было массового теста, может выйти обновление в течении 7 дней (если будут найдены мелкие баги) или месяца (если что-то серьёзное)
    1 балл
  13. Грубо говоря, ты можешь создать кластер из компьютеров для поиска указателей. На всех них должен быть запущен CE, а игра лишь на одном, на главном (родитель). Более подробно рассказать не могу, т.к. не пользовался
    1 балл
  14. Доступна RC2. Ссылка в первом сообщении
    1 балл
  15. Cheat Engine 6.5 Release Candidate 1 http://cheatengine.org/temp/CheatEngine65RC1.exe
    1 балл
×
×
  • Создать...

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

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