-
Постов
115 -
Зарегистрирован
-
Посещение
-
Победитель дней
22
Тип контента
Профили
Форумы
Загрузки
Блоги
Весь контент SnedS91
-
Версия игры 1.1.0.0; версия трейнера 1.1; +1; дата создания 19.10.2012 Описание: Бесконечное нитро. Инструкция: 1. Запустить трейнер и игру; 2. Войти в режим гонки; 3. Нажать клавишу [Numpad 0] для активации/деактивации чита; Трейнер: Trainer_1.1_NFSR_1_1.7z [Fixed] - После прохождения нитро ставится в половину - Небольшая оптимизация производительности
-
Решил дополнить AA-aobscan. Теперь, чтобы создать скрипт не нужно выделять код и искать уникальные байты, функция сделает все за нас, достаточно нажать по первой инструкции ПКМ (можно и выделить часть инструкций) и выбрать Create AA-aobscan Вот, собственно, и сама функция:
-
Да я тоже заметил такую ошибку, нужно в плагине поменять функцию GetInfoInjection на эту:
-
Хорошо попробую, как скачается
-
Итак, как я сломал hooktest.exe : Начало обычное, то есть поиск числа патронов. Здесь проще всего найти значение, один раз выстрелив, а потом перезарядить. Найдя нужное единственное значение, как обычно, ставим бряк на него (на доступ) и нажимаем перезарядку. Наблюдаем следующее: Видим, что с нашим адресом работает 99 раз аж 3 функции! проверим каждую из них: Посмотрев чуть выше первой функции, можно заметить вызов operator delete, что значит здесь идет перебор всех объектов с их удалением, так, значит должен быть и конструктор объектов. Следующие две функции как раз входят в структуру, напоминающую конструктор, причем выше можно заметить место где выделяется память, о чем говорит PUSH 00000190 и последующая функция call ebx, которую можно найти, проследив выше по коду что же пишется в ebx, а именно по адресу hooktest.exe+1028 - mov ebx,[hooktest.exe+209C] что это за функция, можно узнать по адресу, содержавшемуся в [hooktest.exe+209C] : функция создания новых объектов! А значит в нашем цикле создаются патроны и условием выхода из него, является число 18C (396) Дальше я разделил его на 4 (я всегда так делаю, т.к. такие числа часто встречаются в играх) и получил в результате 99! Значит можно добавить скрипт, меняющий число в условии.
-
вот скрипт (сломал где то за 15 минут):
-
а на 1.3 выкладывать не стоит наверное - там практически то же самое, отличие только в получении количества объектов
-
Вот, что нарыл по версии 1.4: 1) Тут стоит какая то защита на количество объектов: можно создать не более 24 объектов, исправляется скриптом: [ENABLE] TrainME.exe+147C: mov eax,[TrainME.exe+4110] nop nop TrainME.exe+14C9: mov edx,[TrainME.exe+4110] nop TrainME.exe+1502: mov edx,[TrainME.exe+4110] nop [DISABLE] TrainME.exe+147C: db 8B C2 C1 E8 1F 03 C2 TrainME.exe+14C9: db C1 E9 1F 8D 54 11 FF TrainME.exe+1502: db C1 E9 1F 8D 54 11 FF 2) Сам скрипт, создающий 100 объектов: [ENABLE] alloc(newMem, 512) label(exit) label(skip) label(createObj) label(m1) label(m2) newMem: pushfd pushad push [ebp+10] mov eax,[TrainME.exe+4110] mov ebx,#100 sub ebx,eax mov eax,ebx cmp eax,0 jl short skip call createObj skip: pop [ebp+10] popad popfd //-----Original-code------ call TrainME.exe+1730 //------------------------ jmp exit createObj: pushad push 20 call TrainME.exe+16C9 push 14 call TrainME.exe+1730 xor esi,esi add esp,08 cmp eax,esi je m1 fld dword ptr [TrainME.exe+3178] inc byte ptr [eax+04] fstp dword ptr [eax+0C] mov [eax+08],edi mov [eax],TrainME.exe+31A0 mov [eax+10],esi //тип звукового сигнала: esi - дзынь, 10 - ошибка jmp m2 m1: xor eax,eax m2: lea ecx,[ebp+10] push ecx mov ecx,TrainME.exe+410C mov [ebp+10],eax call TrainME.exe+1160 popad dec eax cmp eax,0 jge createObj ret TrainME.exe+1457: jmp newMem exit: [DISABLE] TrainME.exe+1457: call TrainME.exe+1730 dealloc(newMem) unregistersymbol(address)
-
как я понял нужно сделать так, чтобы набралось определенное число объектов, а потом, при снятии скрипта, все должно адекватно уменьшаться с чередованием звуков... или я не так думаю
-
там вроде как еще звуки чередуются..
-
Спасибо! Трейнми интересный получился (побольше бы таких) Жду следующих версий.
-
Вот рабочий скрипт для 1.2: [ENABLE] // For Train ME by Coder from SnedS91 AOBSCAN(aobAddress, A1xxxxxxxx5068xxxxxxxx56FF15xxxxxxxx8B0Dxxxxxxxx83C40C5651 ) alloc(newMem, 512) label(exit) label(skip) label(address) label(createObj) label(m1) label(m2) registersymbol(address) newMem: pushfd pushad mov eax,[TrainME.exe+33DC] mov ebx,#100 sub ebx,eax mov eax,ebx cmp eax,0 jl short skip call createObj skip: popad popfd //-----Original-code------ mov eax,[TrainME.exe+33DC] //------------------------ jmp exit createObj: pushad push 20 call TrainME.exe+159D mov esi,[TrainME.exe+20D4] push 0C mov [ebp+10],eax call esi xor ebx,ebx add esp,08 cmp eax,ebx je short m1 mov [eax+08],00000040 jmp short m2 m1: xor eax,eax m2: mov [TrainME.exe+33C4],eax mov eax,TrainME.exe+33C4 call TrainME.exe+1440 popad dec eax cmp eax,0 jg short createObj ret aobAddress: address: jmp newMem exit: [DISABLE] address: mov eax,[TrainME.exe+33DC] dealloc(newMem) unregistersymbol(address)
-
небольшую поправку нужно написать, чтоб при ошибке не создавался скрипт: function OnItemMenuGenerateAAWithAOBSCANClick(sender) local script = GetScriptAOBSCAN() if (script ~= nil) then local newTableEntry = AddAARecord(script, 'New AOBSCAN-Script ') OpenAAEditor(newTableEntry) end end Я хочу дополнить шаблоном для быстрого нопа выделенных функций: NopCodeTemplate = [[ [ENABLE] ->>address: ->>nops [DISABLE] ->>address: ->>originalCode //->>comment ]] function GetNops(strAddress, length) -- return originalCodeString, originalBytesString, nopsString local sumBytes = 0 local originalCodeString = "" local originalBytesString = "" local address = strAddress local countBytes = 0 repeat countBytes = getInstructionSize(address) lineDissassemble = disassemble(address) extrafield, opcode, bytes, address = splitDisassembledString(lineDissassemble) sumBytes = sumBytes + countBytes address = address..'+'..countBytes originalCodeString = originalCodeString..opcode.."\r\n" originalBytesString = originalBytesString..bytes until (sumBytes >= length) ---------------nops----------------- local nopsString = "db " local nopsCount = length if (nopsCount>0) then for i = 1, nopsCount do if i == nopsCount then nopsString = nopsString.."90" else nopsString = nopsString.."90 " end end end return originalCodeString, originalBytesString, nopsString end function GetScriptAANop() local script = NopCodeTemplate local originalCode = '' local originalBytes = '' local extra = '' local nops = '' local address = math.min(dv_address1, dv_address2) local stop = math.max(dv_address1, dv_address2) local length = stop + getInstructionSize(stop) - address local strSignature = GetFullSignature(address, length) originalCode, originalBytes, nops = GetNops(address, length) local baseAddress = getNameFromAddress(address) script = string.gsub(script,"->>address", baseAddress) script = string.gsub(script,"->>originalCode", originalCode) script = string.gsub(script,"->>comment", originalBytes) script = string.gsub(script,"->>nops", nops) script = string.gsub(script,"->>NscriptCount", scriptCount) return script end function OnItemMenuGenerateAANopClick(sender) local script = GetScriptAANop() local newTableEntry = AddAARecord(script,'New Script') OpenAAEditor(newTableEntry) end AddItemMenuInMemoryViewForm('* Create AA NOP', 'Ctrl+Shift+N', OnItemMenuGenerateAANopClick, OnSelectionTracker)
-
Вот и недостающее звено цепочки! Работа через usb. В принципе все то же самое, что из поста #14, только с небольшими изменениями, а именно: скачать и установить на андроид-устройство программу Wired Tether запустить программу и нажать на значок usb идем в параметры адаптера (сетевые подключения на XP) должно появится новое соединение Идем в настройки этого соединения и меняем его IP и маску на 172.20.23.253 / 255.255.255.252, а остальное делаем пустыми (это ВАЖНО! иначе инет пропадет) Применяем изменения, а дальше все как обычно - запускаем настроенный терминал, а в СЕ, нажав кнопку сеть, в поле Discowered servers будет IP нашего устройства, то есть 172.20.23.254 (если ничего не меняли). И не пугайтесь что он отличен от IP настроенного соединения! Порт так же не меняется. При такой настройке все должно работать Приятного взлома!
-
Спасибо! Согласен, что неудобно, но это стоит того..Можно память просматривать, например.. И было бы гораздо легче, если бы СЕ был в виде приложения на андроиде Что интересно, приложение/игру нет необходимости сворачивать, в этом плюс, да и заморозка тоже неплохая вещь иногда. И еще, к примеру, была одна игра, работающая реалтайм (деньги постоянно увеличивались), то есть нельзя паузу ставить, получилось найти только в СЕ (сначала поиск неизвестного значения, потом увеличилось/уменьшилось) Так что интересная штука для исследования..
-
Нашел более удобный способ подключения к СЕ, теперь adb не нужен! (работать должно на любом телефоне c ARM6 и выше!) Что для этого надо: Android Terminal Emulator (если у кого еще не установлен); Скрипт cesrv из предыдущих постов или по ссылке (в папке /data в памяти телефона и с правами 777) p.s. я переименовал скрипт для удобства. Рутованый телефон; Соединение через wifi роутер (желательно знать ip телефона). Сначала идем в терминал, заходим в Настройки -> Команды запуска. Дописываем с новой строки: su ./data/cesrv Закрываем терминал, устанавливаем соединение wifi. Запускаем снова терминал и должны увидеть приглашение типа: &s=0xbeaeeb9c main=0x9938 CEServer. Waiting for client connection socket=3 bind=0 listen=0 IdentifierThread active Все, телефон настроен, можно свернуть терминал! Запускаем свою игру и переходим к СЕ. СЕ нужно повесить на одно физическое ядро процессора (если проц многоядерный), для этого вызываем диспетчер задач, переходим во вкладку процессы, ПКМ по СЕ -> Задать соответсвие... Делаем так, чтобы стояла только одна галочка напротив любого из CPU (иначе поиск работать не будет!) Далее все как обычно: Выбор процесса -> Сеть В Host пишем свой ip, Port оставляем без изменений (52736). Если все делали правильно, то должны увидеть список процессов на android. Теперь можно спокойно искать значения в памяти! На этом все, удачного взлома!
-
Забыл, еще нужно назначить права скрипту. Для этого можно, находясь в директории data, воспользоваться командой chmod 777 cesrv Кстати, тестировал на Galaxy Ace (arm6) на удивление подключился! Но пока что поиск прерывается так же.. думаю надо поиграться с настройками СЕ.. Нашел в чем ошибка Поиск наконец заработал! Необходимо условие: СЕ должен использоваться только одним ядром процессора! (в случае многоядерных компов) то есть надо сделать так, чтобы СЕ висел только на одном ядре (это можно сделать в диспетчере задач, если Win8) либо сторонней прогой, типа CPU-Control.. если и тогда не будет работать, то в настройках поиска СЕ указать размер буфера 4Кб (но у меня и с 512кб хорошо ищет) Вроде все работает, пошел проверять игры.. Проверил на игре Monster Shooter, работает на ура, деньги взломались с первого поиска! Даже заморозка работает! Жаль отладчик не прикрутить..
-
Моя попытка подключения СЕ к андроиду. Требования: телефон должен быть ARM7! (я тестировал на Galaxy S2) root обязателен! наличие wifi-роутера (т.к. через кабель не получилось пока что) установленные драйвера от телефона Качаем архивчик с ADB и распаковываем в удобную папку. Ставим на телефон adbWireless из архива. Нужно скопировать скрипт cesrv из архива в директорию /data телефона (я использовал Root Explorer) На компьютере в зависимости от системы запускаем соответственно: cmdXP.exe - (у кого Windows XP) cmd7.exe - (у кого Windows 7, с правами администратора) На телефоне: запускаем adbWireless и нажимаем большую зеленую кнопку. Снизу должны высветиться ip адрес телефона и порт. На компьютере: в консоли пишем adb connect 192.168.0.101:5555 (вместо 192.168.0.101 ставим свой ip телефона.) Должны увидеть надпись connected to 192.168.0.101:5555 Хорошо! Пишем далее (последовательно) adb shell su cd data ./cesrv Должны получить что-то типа: &s=0xbeaeeb9c main=0x9938 CEServer. Waiting for client connection socket=3 bind=0 listen=0 IdentifierThread active С консолью закончили, переходим на компьютер. Открываем СЕ, нажимаем кнопку выбора процесса, нажимаем Сеть. В поле Host пишем свой IP телефона (у меня 192.168.0.101), поле Port оставляем без изменений! (т.е. 52736) Жмем Connect и если все правильно сделали получим список процессов на андроиде Это пока что все, к чему я пришел... Если что нибудь получится найти, я опишу способ.. Удачи!