-
Постов
115 -
Зарегистрирован
-
Посещение
-
Победитель дней
22
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные SnedS91
-
-
Баг по создание АА кода с помощью плагина.
Тока встречается этот баг когда касается командой CMP (Сравнение)
[ENABLE]
alloc(newMem, 2048)
label(returnHere)
newMem:
cmp ecx,FCjne 007BE3A0
jmp returnHere
cheatengine-i386.exe+3BE394:
jmp newMem
returnHere:
[DISABLE]
cheatengine-i386.exe+3BE394:
cmp ecx,FCjne 007BE3A0
dealloc(newMem)А эта обычным путем создание АА скрипта.
[ENABLE]
alloc(newmem,2048)
label(returnhere)
newmem:
cmp ecx,FC
jne cheatengine-i386.exe+3BE3A0
"cheatengine-i386.exe"+3BE394:
jmp newmem
returnhere:
[DISABLE]
"cheatengine-i386.exe"+3BE394:
cmp ecx,FC
jne cheatengine-i386.exe+3BE3A0
dealloc(newmem)Разница видна? через плагин пишется орг. код cmp ecx,FCjne 007BE3A0.
Да я тоже заметил такую ошибку, нужно в плагине поменять функцию GetInfoInjection на эту:
function GetInfoInjection(strAddress) -- return addressReturnHere, originalCodeString, nopsString
local sumBytes = 0
local originalCodeString = ""
local addressReturnHere = strAddress
local countBytes = 0
repeat
countBytes = getInstructionSize(addressReturnHere)
lineDissassemble = disassemble(addressReturnHere)
extrafield, opcode, bytes, addressReturnHere = splitDisassembledString(lineDissassemble)
sumBytes = sumBytes + countBytes
--addressReturnHere = string.format("%x", ("0x"..addressReturnHere) + countBytes)
addressReturnHere = addressReturnHere..'+'..countBytes
if sumBytes >= 5 then
originalCodeString = originalCodeString..opcode
else
originalCodeString = originalCodeString..opcode.."\r\n"
end
until (sumBytes >= 5)
local nopsString = ""
local nopsCount = sumBytes - 5
if (nopsCount>0) then
for i = 1, nopsCount do
if i == nopsCount then
nopsString = nopsString.."nop"
else
nopsString = nopsString.."nop\r\n"
end
end
end
return addressReturnHere, originalCodeString, nopsString
end- 2
-
Sned, могу предложить попытаться сделать для игры "Sniper: Ghost Warrior, обман кол-ва гранат".
Долго игру проходить не надо. Идём на тренировочную миссию. Проходим до места, в котром во время игры гранаты появляются на столе, если их там мало.
Я пытался сделать так, чтобы после броска гранаты в арсенале игрока создавалась новая. А точнее если кол-во гранат меньше максимального, то создать недостающие гранаты. Сделать это у меня не получилось, а потом всё руки не доходили продолжить. Т.к. гранаты появляются на столе автоматически это прекрасно. Мне не приходилось игру проходить и искать эти гранты в каких-то местах игры.
Хорошо попробую, как скачается
-
Итак, как я сломал 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! Значит можно добавить скрипт, меняющий число в условии.
[ENABLE]
hooktest.exe+1138:
cmp edi,00000320
[DISABLE]
hooktest.exe+1138:
cmp edi,0000018CНо тут сталкиваемся с неприятностью: при перезарядке программа вылетает! Но все логично: Мы под созданные объекты не выделили память! Значит добавим в скрипт, меняющий значение выделяемой памяти:
[ENABLE]
hooktest.exe+10F6:
push 00000320
hooktest.exe+1138:
cmp edi,00000320
[DISABLE]
hooktest.exe+10F6:
push 00000190
hooktest.exe+1138:
cmp edi,0000018CТеперь, при нажатии перезарядки получаем 200 патронов! Но при нажатии выстрела, получаем 0.
Дальше я сравнил список функций (бряк на доступ), получаемый при обычном выстреле и список при включенном скрипте:
Замечаем, что во втором случае не выполняется inc [esi]. Перейдя в отладчик, натыкаемся на еще одну конструкцию, напоминающую конструктор, и выше замечаем, что опять идет выделение памяти (тоже добавим в скрипт). Условием входа в цикл является 64 (100) вот и ограничение, а значит просто занопим сам прыжок, тогда вход будет всегда!
[ENABLE]
hooktest.exe+10F6:
push 00000320
hooktest.exe+11CB:
push 00000320
hooktest.exe+11F1:
db 90 90
hooktest.exe+1138:
cmp edi,00000320
[DISABLE]
hooktest.exe+10F6:
push 00000190
hooktest.exe+11CB:
push 00000190
hooktest.exe+11F1:
jg hooktest.exe+1227
hooktest.exe+1138:
cmp edi,0000018CИ ура, товарищи! Патроны адекватно уменьшаются и при перезарядке их 200, осталось сделать их постоянными.
Для этого посмотрим место, где удаляются объекты:
Видим рядом с циклом 2 декремента, нам нужен, который снизу, т.к. логичней сначала удалить все объекты, а потом уже уменьшать счетчик =) Допишем наш скрипт:
[ENABLE]
//выделение памяти
hooktest.exe+10F6:
push 00000320
hooktest.exe+11CB:
push 00000320
//нужное число объектов, умноженное на 4
hooktest.exe+1138:
cmp edi,00000320
//убрать ограничение в 100 объектов
hooktest.exe+11F1:
db 90 90
//отключить уменьшение количества предметов
hooktest.exe+11B2:
db 90 90
[DISABLE]
hooktest.exe+10F6:
push 00000190
hooktest.exe+11CB:
push 00000190
hooktest.exe+1138:
cmp edi,0000018C
hooktest.exe+11F1:
jg hooktest.exe+1227
hooktest.exe+11B2:
dec [ebx]Вот и весь взлом Сложного тут, пожалуй, это анализ кода (например, когда нужно отслеживать как получилось значение какого то регистра), а в принципе тут все просто
- 2
-
Вдохновился идеей Кодера, накидал легкий трейнми, интересно, как быстро его поломаете )
Задача
Сделать 200 патронов и чтобы они не уменьшались, и чтобы после 10 "выстрелов" не вылетала прога ))
Можно сколько угодно раз делать перезагрузку, кстати, при перезагрузке, количество патронов тоже должно быть равно 200.
Решается за три минуты, если честно ) Плюс в репу тому, кто первым поломает по условиям задачи, гарантирован.
вот скрипт (сломал где то за 15 минут):
[ENABLE]
//выделение памяти
hooktest.exe+1045:
push 00000320
hooktest.exe+10F6:
push 00000320
hooktest.exe+11CB:
push 00000320
//нужное число объектов, умноженное на 4
hooktest.exe+1138:
cmp edi,00000320
//убрать ограничение в 100 объектов
hooktest.exe+11F1:
db 90 90
//отключить уменьшение количества предметов
hooktest.exe+11B2:
db 90 90
[DISABLE]
hooktest.exe+1045:
push 00000190
hooktest.exe+10F6:
push 00000190
hooktest.exe+11CB:
push 00000190
hooktest.exe+1138:
cmp edi,0000018C
hooktest.exe+11F1:
jg hooktest.exe+1227
hooktest.exe+11B2:
dec [ebx]В дополнение к версии 1.4 Coder'а дописал функцию createObj, теперь звуки будут чередоваться
(нужно еще объявить метки z1 и z2)
createObj:
pushad
push 20
call TrainME.exe+16C9
push 14
mov ebx,eax
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 ebx,[TrainME.exe+4110]
test ebx,1
jpe z1
mov [eax+10],esi
jmp z2
z1:
mov [eax+10],10
z2:
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- 2
-
а на 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 FF2) Сам скрипт, создающий 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) -
как я понял нужно сделать так, чтобы набралось определенное число объектов, а потом, при снятии скрипта, все должно адекватно уменьшаться с чередованием звуков... или я не так думаю
-
там вроде как еще звуки чередуются..
-
А вот это уже действительно правильный взлом.
Скажу чисто от себя - просто восхитительнейшая работа, и она заслуживает уважение!
Думаю администрация очень хорошо оценит такой взлом. Моя оценка: 5 из 5 баллов.
P.S. Идёт работа над версией 1.3
Спасибо! Трейнми интересный получился (побольше бы таких) Жду следующих версий.
-
Вот рабочий скрипт для 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)- 3
-
небольшую поправку нужно написать, чтоб при ошибке не создавался скрипт:
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)- 2
-
-
Спасибо. Немножко дополню, хорошо?
Перед установкой вышеописанной програмки, почитайте faq к ней. что делает и на каких девайсах.
http://code.google.c...tether/wiki/FAQ
Ну или немного по русски тут - http://4pda.ru/forum...howtopic=263112
Цитата:
Функция USB-модем или USB tethering (в англоязычной терминологии) сейчас реализована стандартно практически на всех устройствах на всех прошивках, т.к. начиная с Android 2.3 это функция является встроенной в сам Андроид
Стандартно она практически на всех официальных прошивках, а на модифицированных (например, Cianogen) это все вырезано. Поэтому некоторым пользователей приходится ставить похожие программы.
-
Вот и недостающее звено цепочки! Работа через usb.
В принципе все то же самое, что из поста #14, только с небольшими изменениями, а именно:
- скачать и установить на андроид-устройство программу Wired Tether
- запустить программу и нажать на значок usb
- идем в параметры адаптера (сетевые подключения на XP) должно появится новое соединение
- Идем в настройки этого соединения и меняем его IP и маску на 172.20.23.253 / 255.255.255.252, а остальное делаем пустыми (это ВАЖНО! иначе инет пропадет)
Применяем изменения, а дальше все как обычно - запускаем настроенный терминал, а в СЕ, нажав кнопку сеть, в поле Discowered servers будет IP нашего устройства, то есть 172.20.23.254 (если ничего не меняли). И не пугайтесь что он отличен от IP настроенного соединения! Порт так же не меняется.
При такой настройке все должно работать
Приятного взлома!
- 1
- скачать и установить на андроид-устройство программу Wired Tether
-
SnedS91, да у тебя прямо талант, не перестаёшь удивлять.
Но только Cheat Engine это внешняя программа со сканером памяти и не всегда хочешь включать ПК ради того чтобы включить Cheat Egnine. На этот случай удобнее встроенный сканер памяти GameCIH или аналогичные и CE в большинстве случаев не потребуется (правда встречаются шифрованные последовательности в некоторых играх - специально шифруют, не хотят чтобы их игру быстро прошли)
Спасибо!
Согласен, что неудобно, но это стоит того..Можно память просматривать, например.. И было бы гораздо легче, если бы СЕ был в виде приложения на андроиде
Что интересно, приложение/игру нет необходимости сворачивать, в этом плюс, да и заморозка тоже неплохая вещь иногда.
И еще, к примеру, была одна игра, работающая реалтайм (деньги постоянно увеличивались), то есть нельзя паузу ставить, получилось найти только в СЕ (сначала поиск неизвестного значения, потом увеличилось/уменьшилось)
Так что интересная штука для исследования..
-
Нашел более удобный способ подключения к СЕ, теперь 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.
Теперь можно спокойно искать значения в памяти!
На этом все, удачного взлома!
- 2
- Android Terminal Emulator (если у кого еще не установлен);
-
Забыл, еще нужно назначить права скрипту.
Для этого можно, находясь в директории data, воспользоваться командой
chmod 777 cesrvКстати, тестировал на Galaxy Ace (arm6) на удивление подключился! Но пока что поиск прерывается так же.. думаю надо поиграться с настройками СЕ..
Нашел в чем ошибка
Поиск наконец заработал!
Необходимо условие:
СЕ должен использоваться только одним ядром процессора! (в случае многоядерных компов) то есть надо сделать так, чтобы СЕ висел только на одном ядре (это можно сделать в диспетчере задач, если Win8) либо сторонней прогой, типа CPU-Control..
если и тогда не будет работать, то в настройках поиска СЕ указать размер буфера 4Кб (но у меня и с 512кб хорошо ищет)
Вроде все работает, пошел проверять игры..
Проверил на игре Monster Shooter, работает на ура, деньги взломались с первого поиска! Даже заморозка работает! Жаль отладчик не прикрутить..
- 1
-
Попробуй воспользоваться автоматическим поиском указателей в СЕ
-
игра имеет Windows Live?
-
Моя попытка подключения СЕ к андроиду.
Требования:
- телефон должен быть 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 и если все правильно сделали получим список процессов на андроиде
Это пока что все, к чему я пришел... Если что нибудь получится найти, я опишу способ..
Удачи!
- 2
- телефон должен быть ARM7! (я тестировал на Galaxy S2)
-
-
Что то в андройд маркете не могу найти Game killer.
его там и нет, я с 4pda брал
-
Dark Byte писал:
make sure your android device has ROOT. If not, root it, or buy one that has the ability to get root.
download the beta of ce 6.2 (sign up with the beta tester usergroup)
extract the ceserver-linux_arm_android to your android device and execute it using the sdk's ADB tool, or using a local terminal app running as root
you might have to make it executable so a "chmod 777 ceserver-linux_arm_android" from the proper dir might be needed before you can execute it (./ceserver-linux_arm_android )
autodiscoverport: 3296 (only needed if you do not know the ip of your device, and only works if your device is not in sleepmode)
used port: 52736 (works even in sleep)
Then run the ce version in this archive, go to the processlist and click the network button. Connect to your android device and target the process you want to cheat on
Now you can scan and edit memory (no debugging or other fancy stuff)
-
На андроиде все утилиты для взлома мало чем отличаются друг от друга, хотя Game killer интересная, умеет немного с памятью работать)) и все равно не хватает СЕ'шных функций =(..
через adb подключается только через какую-нибудь среду разработки, а вот как напрямую к СЕ - загадка...
и насколько я знаю adb общается с компьютером посредством разнообразных сообщений-логов..
Plugin AA Maker (создание АА скриптов)
in Cheat Engine
Опубликовано
Решил дополнить AA-aobscan.
Теперь, чтобы создать скрипт не нужно выделять код и искать уникальные байты, функция сделает все за нас, достаточно нажать по первой инструкции ПКМ (можно и выделить часть инструкций) и выбрать Create AA-aobscan
Вот, собственно, и сама функция: