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

RockHammer

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

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

  • Посещение

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

    7

Весь контент RockHammer

  1. Здравствуйте, геймхакеры! Реверсю deadrising 3... Нашел значение патронов. Оно странное... Остановил на доступ - при выстреле трассирую огромное кол-во адресов. На запись - два адреса. Убиваю один... Мимо! Убиваю второй... Мимо! Убиваю сразу оба... Готов! Странно, правда? Решил изменять значение по указателю. Ищу указатели через встроенный поисковик в СЕ. Нашел. Много. Отсеиваю. На выходе получил около 30 рабочих указателей. Пилю один в таблицу, ставлю игру в оконку и смотрю как работает указатель. Работает, но странно... Вот в чем странности: -- Указатель показывает правильное значение только в определенных группах патронов (весь огнестрел вроде винтовок пистолетов и автоматов) но на дробовиках и гранатометах - мусор показывает -- Само значение указателя скачет "как белка в колесе". Допустим, одно оружие. Стреляю. (исходное кол-во патронов - 500. накрутил) 500...499... -245... 1..55..22.. 498... Это я выстрелил два раза, т.е. должно было быть 500, 499,498. з.ы. кое что придумал для сишки. Что-то вроде эмулятора АА. К примеру, прибавление значения по желанию пользователя. Реализация (в моем нубском видении))): 1) Чтение памяти по указателю 2) Получение адреса (конечного) по указателю 3) Получение значения указателя (т.е. указывает на адрес, значение которого, к примеру, 500. это значение получаем и записываем в программу) 4) Прибавление к этому значению наше (к примеру, было 30 мы прибавили 170 стало 200) 5) Запись нового значения по конечному адресу указателя. Как вам задумка?)) Еще для красоты, можно прикрутить textBox если на WinForm писать. В этот textBox пользователь вводит значение (которое добавить) или уже конечное, жмет "добавить" и вуоля! Как это реализовать?)
  2. Сам делал видосы?) Красава!) Я тоже варфейс взламываю)))) Эм... немного отвлеклись от темы... Кто-то знает как решить проблему?
  3. СЕ грузился в чужой процесс???????
  4. Пфф, пентагон взломать, конечно же)) Не, ну трейнер обычный... Аобскан, инъекци... Или просто поиск байтов в памяти и их замена нупами.
  5. Я, если честно, сам в шоке) Знаю, что тип int занимает 4 байта, но почему же тогда тип float занимает так же 4 байт? Ведь Int хранит одно число, а тип float хранит целых 7 цифр... 1-само число и еще 6 знаков после запятой (или 7, тут я не помню) А как на дельфях писать?
  6. эм... тогда сколько? sizeof(float)=4 Bytes p.s. я сам с ответов мейл ру узнал
  7. Чтобы долго не печатать: Проблема с указателями. Конкретно - не ищутся.
  8. На дельфинарии? Дак на этом языке почти нет уроков по gamehackin'у...
  9. Нет, чтоб хотябы шаблон сделал для остальных читов. Т.е. показал как "размножить" эту функцию и как ее потом включать отдельно от остальных. Не думаю что это так уж прям долго. Минуты 2-3...
  10. Было бы неплохо сделать урок по поиску и записи сразу нескольких сигнатур. Т.е. допустим 3 разных поиска - 3 разных сигнатуры. (к примеру, отдача разброс и патроны)
  11. Демонстрация чита на Far Cry 1 (интересен процесс изготовления, которого нет на канале), защита, взлом .net приложений, создание сетевого чата... Можно ссылочку на новый урок, в котором нет этого недостатка?) Или серии уроков.
  12. RockHammer

    OLLY.Tools 2014

    Ok, а что на счет скриптов для снятия протекторов?
  13. Че, блин? Ну ты хоть теорию почитай. Или уроки посмотри у кодера или Михаила Ремизова (keng) - они понятно объясняют. В моем понимании - смещение это отклонение регистра от нуля на указанное количество байт. Смещение и адреса всегда в hex (16-ричная система исчистления). К примеру, из записи mov [eax+18],xmm0 мы можем видеть, что eax - регистр, а 18 - смещение. Однако, лайф хак: чтобы в анализе структур увидеть значение регистра уже со смещением - просто возьми начальный адрес регистра и прибавь смещение. К примеру, если адрес регистра eax - 485E24A5 то в анализе структур запиши 485E24A5+18, где 18 - наше смещение. Тогда нулевой адрес будет наш адрес, уже со смещением. Так же, из записи mov [eax+18],xmm0 мы можем видеть, что регистр xmm0 копируется в смещение [eax+18]. Т.е: На первом месте идет глагол. То, что мы делаем с инструкцией. К примеру: mov - записать (сдвинуть) смещение, dec - вычесть 1, inc - прибавить 1, cmp - сравнение (используется в бессмертии и OHK)На втором месте идет "подопытный". То, с чем мы проводим операцию. В нашем случае - это смещение. Однако "подопытным" может быть и адрес и многое другое.На третьем месте идет "виновник торжества". Объект нашего действия. Он будет выполнять действие, указанное на первом месте, с тем, что указано на втором месте. Формулировка мутная, но думаю ты поймешьP.s. Я вижу тут тебе уже помогли, но малоли... Может все же будет полезно.
  14. Понятно. Я писал по уроку, а в уроке было помоему 4 байта... Теперь не понятно как это пофиксить) Да, и... Есть ли у кого исходный код этого урока? (всей серии этих уроков, там помоему 4 урока) Получается... Что нужно сделать, чтобы пофиксить баг? Вот еще скриншот полного описания функции: Решение найдено! (на ответах мейл) Добрые люди посоветовали заменить это: for (int q = 0; q < signature.Length; q++)на это: for (int q = 0; q < signature.Length && i + q < buffer.Length; q++)
  15. Всем привет! Итак, решил написать трейнер по уроку Hacking Memory. Сканер сигнатур на Си - вполне заманчиво. Написал. Ошибок при компиляции не возникло. Однако... Есть непонятная ошибка в работе программы, которую я совсем не понимаю. Не исключаю рукожопость при изготовлении трейнера, поэтому код под спойлером using System;using System.Diagnostics;using System.Runtime.InteropServices;namespace ConsoleC_sharp{ class Function { //ReadProcessMemory [DllImport("kernel32.dll", SetLastError = true)] static extern bool ReadProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead ); //OpenProcess // Flag = All = 0x001F0FFF [DllImport("kernel32.dll")] public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); // CloseHandle [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool CloseHandle(IntPtr hObject); [StructLayout(LayoutKind.Sequential)] public struct MEMORY_BASIC_INFORMATION { public IntPtr BaseAddress; public IntPtr AllocationBase; public uint AllocationProtect; public IntPtr RegionSize; public uint State; public uint Protect; public uint Type; } // VirtualQueryEx [DllImport("kernel32.dll")] static extern int VirtualQueryEx(IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, uint dwLength); //WriteProcessMemory [DllImport("kernel32.dll", SetLastError = true)] static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten); [DllImport("kernel32.dll", SetLastError = true)] static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, UIntPtr lpNumberOfBytesWritten); int GetProcessID() { foreach (Process proc in Process.GetProcessesByName("Game"))//тут имя процесса return proc.Id; return -1; } public void WriteBytes() { var handle = OpenProcess(0x001F0FFF, false, GetProcessID()); byte[] buffer = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 }; //байты нупов var dammy = new UIntPtr(); var address = FindSignature(); if (address!= -1) WriteProcessMemory(handle, (IntPtr)address, buffer, (uint)buffer.Length, out dammy); CloseHandle(handle); Console.WriteLine("Cheat is activated!"); } private int FindSignature() { int[] signature = { 0xF3, 0x0F, 0x11, 0x95, -1, -1, -1, -1, 0xF3, 0x0F, 0x10, 0x52, 0x74, 0xF3, 0x0F, 0x58, 0xC7, 0xF3, 0x0F, 0x58, 0xD0 }; //Тут сигнатура long MaxAddress = 0x7fffffff; long address = 0; MEMORY_BASIC_INFORMATION m; var handle = OpenProcess(0x001F0FFF, false, GetProcessID()); m.BaseAddress = IntPtr.Zero; m.RegionSize = IntPtr.Zero; byte[] buffer; Console.WriteLine("Process ID : {0}", GetProcessID().ToString()); Console.WriteLine("Handle process : {0}", handle.ToString()); while (address <= MaxAddress) { VirtualQueryEx(System.Diagnostics.Process.GetCurrentProcess().Handle, (IntPtr)address, out m, (uint)Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION))); buffer = new byte[(uint)m.RegionSize]; int dammy = 0; ReadProcessMemory(handle, m.BaseAddress, buffer, (int)m.RegionSize, out dammy); if (address == (long)m.BaseAddress + (long)m.RegionSize) break; int count = 0; address = (long)m.BaseAddress + (long)m.RegionSize; if (buffer.Length > signature.Length) { for (int i = 0; i < buffer.Length; i++) { if (buffer[i] == signature[0]) { for (int q = 0; q < signature.Length; q++) { if (buffer[i + q] == signature[q] || signature[q] == -1) { count++; if (count == signature.Length) { CloseHandle(handle); return i + (int)m.BaseAddress; } } else { count = 0; } } } } } } CloseHandle(handle); return -1; } }}
  16. RockHammer

    OLLY.Tools 2014

    Можно мне инструкцию, как установить sigmaker? Он не отображается в списке плагинов, хоть оля запускается от администратора. Да, и... Как работают "скрипты для снятия упаковщиков, протекторов" ?
  17. Здравствуйте. Где-то на форуме был вопрос по уроку. Не могу его найти... В этом уроке через DirectHook на экран выводился адрес патронов. Собственно, хочу спросить: у кого был этот урок? Можно ссылку на него? Спасибо
  18. Создаем метку aobscan, передаем ей метку с прыжком (расписанным) и байты скана. В отключении скрипта - удаляем метку и возвращаем исходную инструкцию. Как это сделать - найди на форуме. Такое точно было. [ENABLE]alloc(newmem,2048,FC64.dll+B87009) label(returnhere)label(ammo) //создаем метку ammoregistersymbol(ammo) aobscan(aob_ammo, 89 03 48 8B 5C 24 30 C6 47 39 01) //создаем функцию aobscan с нашим адресом и байтамиnewmem:mov [rbx],eaxmov [rbx],10 //записываю в регистр rbx значение 10.mov rbx,[rsp+30]//mov [rbx],eax --- оригинальный код, который присутствовал в метке Originalcode//mov rbx,[rsp+30] --- origcodeaob_ammo:ammo:jmp newmemnopreturnhere:[DISABLE]dealloc(newmem)unregistersymbol(ammo) //уничтожаем метку ammoammo:mov [rbx],eax // возвращаем оригинальный кодmov rbx,[rsp+30]//Alt: db 89 03 48 8B 5C 24 30
  19. Но все же, есть хорошая статейка по взлому Xlive. Я сам хотел ее пробить, но у меня небыло подходящей таблицы для тестирования обхода, т.к. взламывал лицуху из стимака. Tzeentch, как закончишь взлом - скинь табличку в ЛС) Хочу все таки пробить эту несчастную Xlive
  20. Всем привет! Трейнер наконец-то дописан! Но пользоваться им все же не удобно, все время игру сворачивать чтобы функцию включить или выключить. Решил написать KeyboardHook, видел что-то подобное в уроках Keng'a, в его видео про DirectHook, но не помню в каком именно)) Как же он выглядит на с# ? P.s. задумывается, что при перехвате нажатии определенной клавиши - переключается checkBox вкл/выкл.
  21. Нуу... Просто не совсем понятно зачем приводит к типу Float )) Edit3->Text = FloatToStr(S); Проблема решена! Написал аналог на с#, все успешно работает)
×
×
  • Создать...

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

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