-
Постов
120 -
Зарегистрирован
-
Посещение
-
Победитель дней
7
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные lamalamaz
-
-
Мало данных,что за смещение, что за игра? смещение в стеке или смещение по анализу структур?
mov xmm0,[rax+rbx] инструкция чтения.
-
mov xmm0,[rax+rbx-12с]
-
Да, инструкция разовая - срабатывает, в моём случае когда одеваешь или снимаешь шмотку с героя.
[ENABLE]alloc(newMem,64)label(returnHere)label(nol)label(sto)label(load)newMem:cmp dword ptr [esi+00000280],(float)100je nolcmp dword ptr [esi+00000280],(float)0je stojmp loadnol:mov dword ptr [esi+00000280],(float)0 jmp returnHeresto:mov dword ptr [esi+00000280],(float)100jmp returnHereload:mov dword ptr [esi+00000280],(float)100jmp returnHereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)
Попробуй так
- 1
-
При каком условии должно быть 100 а при каком 0?При срабатывании инструкции чередовать 100 и 0?
- 1
-
- 1
-
Вообще удаляешь Games for windows live из системы. Качаешь крякнутый xlive.dll кидаешь его в папку с игрой(там где exe файл)
....Profit
- 1
-
Csharp так же как и C++ не могут напрямую работать с регистрами, так что использование инструкций отпадает. Искать только статический указатель.
Как искать, к примеру логика такая 2 уровня хоть бы найти вручную а потом воспользоваться автоматическим поиском.
То есть уже визуально можно видеть какие указатели не правильные чтобы не отсеивать по 100500 раз.
к примеру твоя инструкция [ecx+34],eax то последний уровень будет 0x34.
Ты бы сделал скрин инструкции которая пишет в твой адрес азота новое значение.
-
Пробовал, но пока не нашёл, нужно будет ещё поискать (iD карты).
Как я помню они запакованы в mpq архивы,сам формат карт .ds1
Скачать распаковщик с сайтов диабло моддинга и полазить в архивах
First, let's extract these files from the MPQs :
- from Patch_D2.mpq :
- Data\Global\Excel\Levels.txt
- Data\Global\Excel\LvlPrest.txt
- Data\Global\Excel\LvlTypes.txt
- Data\Global\Excel\Objects.txt
- from D2Exp.mpq :
- Data\Global\Excel\LvlWarp.txt
- Data\Global\Excel\ObjType.txt
- Data\Global\Tiles\Act1\Town\TownE1.ds1
- Data\Global\Tiles\Act1\Tristram\Tri_Town4.ds1
- Data\Global\Tiles\Act2\Town\LutN.ds1
- from D2Data.mpq :
- Data\Global\Tiles\Act1\Barracks\JailEWarpNext.ds1
- Data\Global\Tiles\Act1\Caves\CaveDR1.ds1
- Data\Global\Tiles\Act1\Caves\CaveEDown1.ds1
- Data\Global\Tiles\Act1\Caves\CaveESpec.ds1
- Data\Global\Tiles\Act1\Caves\CaveNSpec.ds1
- Data\Global\Tiles\Act1\Caves\CaveSSpec.ds1
- Data\Global\Tiles\Act1\Caves\CaveWSpec.ds1
- Data\Global\Tiles\Act1\Graveyard\Gravey.ds1
- Data\Global\Tiles\Act1\Outdoors\Cott1.ds1
- 1
- from Patch_D2.mpq :
-
Я думаю у каждой локации(уровни 1-16) есть свое уникальное имя. То есть при переходе в портал загружается карта с именем "catacombs.map" это к примеру.
То есть ИМХО надо определить имена подземелий(покопаться в ресурсах игры) в Olly через имя выйти на инструкцию.
Так сузить круг поисков.
-
попробуй заменить прям в коде sub ecx,edi на add ecx,ecx
По идее при любом растрачивании поинтов они должны увеличиваться в 2 раза.
или jb в том же промежутке на je заменить, как я понял без этого сравнения деньги уйдут в минуса но ты можешь покупать все даже с минусом.
Нет игры на данный момент, снес... Играть невозможно
-
mov ecx,[rax+28]
mov [rax+28],ecx
Обычно между инструкциями такого типа идет вычисление то есть типо того
mov ecx,[rax+28] //сохраняем текущее значение в ecx
... //манипуляции с ecx
mov [rax+28],ecx //обновляем текущее значение из ecx
можно скриншот MemoryView между этими инструкциями? Смысл в том что можно без AA скрипта сделать деньги.
PS. Юбики выпустили очень сырой релиз Unity. Она даже на консольках глючит а FPS выше 23 не поднимается. О пк геймерах вообще молчу баг на баге оптимизация кривейшая. Нужно ждать патчи.
-
Как и писал Xipho попробуй запуститься в режиме без проверки подписей драйверов.
Подробнее тут
http://skesov.ru/otklyuchenie-proverki-tsifrovoy-podpisi-drayverov/#p1
-
Не задавался таким вопросом, но попробую...)
Мне одному кажется странным, что "количество жизней после урона" - в двух регистрах содержится?
По-моему, использование команды pushad здесь не уместно (хотя может у меня ошибочное мнение на его счет).
Если все же представить, что:
- ebx - "прошлое" значение здоровья
- [ecx+000002D4] - количество здоровья после получения урона
push ebpmov dword ptr ebp,edx // устанавливаем текущее значение в ebpsub dword ptr ebp,[ecx+000002D4] // отнимаем остаток здоровья от "прошлого" значения здоровья, и в ebp получаем уронpop ebp
А дальше, чтобы проверить, правильно-ли подсчитано количество урона, то можно зарегистрировать метку (4 байта), и установить в нее значение ebp, затем добавить в таблицу имя метки, и смотреть ее значение.Пример:
Далее - в СЕ клацаем на кнопку "Добавить адрес", ставим тип: 4 байта, а в качестве адреса вводим: damage
Нажимаем "OK", включаем скрипт, получаем урон, смотрим на значение метки damage (в таблице)
P.S.
И да - пользуемся тегом [code ] (без пробелов). Надоедает посты править уже...
P.S. #2
А вообще, должна быть инструкция, которая отнимает из здоровья нужное количество единиц урона, посмотри выше по коду в отладчике.
Спасибо NullAlex!Вроде разобрался что к чему.
Теперь по мне бьют в 4 раза меньше, а я луплю по врагам в 3 раза сильнее . А то Onehit и God уж очень портят впечатления, а так вроде как повысил дамаг и дефенс играть куда интереснее
[ENABLE]label(newmem,2048)label(returnhere)label(damage)registersymbol(damage)newmem:push ebpmov dword ptr ebp,edx // устанавливаем текущее значение в ebpsub dword ptr ebp,[ecx+000002D4] // отнимаем остаток здоровья от "прошлого" значения здоровья, и в ebp получаем уронmov dword ptr [damage],ebp // записываем в метку damage количество урона// дальше выполняем оригинальный кодdamage:dd 0// инструкция[DISABLE]unregistersymbol(damage)dealloc(newmem)
-
Здравствуйте Геймхаклаберы!
Есть такая инструкция
mov edx,[ecx+000002D4] (срабатывает только когда наносится урон)
Где edx - количество жизней после урона
[ecx+000002D4] - количество жизней после урона.
Значения верные смотрел из инструкции которая пишет mov [ebp+000002D4],eax(не взял ее потому что часто обращается даже когда урон не наносится) eax=edx,[ecx+000002D4]=[ebp+000002D4].
все значения целое 4 байта
Суть в том что хочу высчитать сам урон.
написал вот что:
pushadmov eax,edx //кол-во после урона сохраняем в eaxmov ebx,[ecx+000002D4] //кол-во до сохраняем в ebxsub ebx,eax //до урона-после урона=сам уронsub [ecx+000002D4],ebx // от жизней отнимаем сам уронpopadmov edx,[ecx+000002D4] //оригинальная инструкцияjmp returnhere
Суть в том что не работает, мобы умирают с одной тычки. Подскажите правильно ли вообще так обсчитывать? И как вычислить урон иным методом если тут написание не верно. -
Какой див, вы что? Целочисленное деление на числа, кратные двум делаются побитовым сдвигом вправо. Например, если число нужно разделить на
2 - делается сдвиг вправо на 1 бит
4 - сдвиг вправо на 2 бита
8 - 3 бита
16 - 4 бита и так далее.
Спасибо огромное вроде разобрался.
sar eax,1
mov [ebx],eax
mov ebx,eax
mov eax,[esp+14]
Работает как надо.
-
Хорошая мысль. Игра XIII. Ниже скину сам скрипт. Суть в том что с 0 не получается сравнивать(условие не срабатывает).
Еще суть в том что сначала из eax вычитается урон из оружия потом делится. Пробывал перед вычитанием делить всеравно опускается ниже нуля(FFFFF0C) и начинает делить уже это число. Как бы это обойти? Вот такой чудо скрипт написал чтобы хоть как то это обойти.
[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048)label(returnhere)label(1hit)label(orig)label(origs)label(cont) // Инструкция вычитания жизней работает и с адресом врагов и с моим и еще с кучей разных адресовnewmem:cmp [ebx+38],0 // отсеиваем левые адреса(оставляем только мои ХП и ХП врагов)je contjmp origcont:cmp [ebx+80],0 //отсеиваем все адреса кроме адреса ХП враговje origjmp 1hit1hit:pushad //стекем все регистрыmov edx,0 //обнуляем высший порядок для деленияmov eax,eax // это для наглядности так как eax делимоеmov edi,2 // это делитель в нашем случае 2div edi // делим на 2//следующей строчкой идет сравнение так как жизни перемахивают через 0 и получаются числа (FFFFFXX и т.д.)cmp eax,1111111 //11111111 взял это число т.к. он успевает поделить FFFFFFFXXjg origs // если больше заданного прыгаем на обнулениеmov [ebx],eax // оригинальная инструкцияpopad //восстанавливаем регистрыmov ebx,eaxmov eax,[esp+14]jmp returnhereorig: // оригинальная инструкцияmov [ebx],eaxmov ebx,eaxmov eax,[esp+14]jmp returnhereorigs: // сюда прыгаем после сравнения результата деленияpopad //восстанавливаем регистрыmov eax,0 //обнуляем eaxmov [ebx],eaxmov ebx,eaxmov eax,[esp+14]jmp returnhere"Core.dll"+1959E:jmp newmemnopnopnopreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)"Core.dll"+1959E:mov [ebx],eaxmov ebx,eaxmov eax,[esp+14]//Alt: db 89 03 8B D8 8B 44 24 14
Как убрать эти костыли? Сделать так чтобы при невозможном делении на целое(1/2) выдавало 0 и остаток 1. Как-то так.
P.S. Или как то заменить умножением с дробными числами все куда проще нежели с целыми.
-
Вроде делится но теперь такая трабла.
Жизни доходят до целого которое делится на 2 например до 3. И тут при следующем делении выскакивает 268435427 и потом оно делит делит весь цикл пока не дойдет до 0.(враг умирает). Как этот цикл убрать?
-
Ну так а как это прикрутить к моей инструкции?
-
Здравствуйте Геймхаклаберы. Возник вопрос по целочисленному делению. Читал инфу из статей и справочников, но вот как это применить в игре не получается.
Вот пример инструкции которая пишет обновленное количество жизней при ударе врага.
mov [esi+000000F1C],eax
Так вот вопрос. Как eax разделить на 2.
То есть
код
код
прилетает значение жизней противника в eax(к примеру 500)
потом 500 прилетает в [esi+000000F1C].
как тот же 500 разделить на 2 при обращении к инструкции.
пробовал так
pushad
mov edx,0
mov eax,eax
mov edi,2
div edi
mov [esi+000000F1C],eax
popad
Но происходит вылет... Прошу помощи исходя из моей инструкции.
-
Как в OllyDBG и CE посмотреть асму- хз.Через классы- тож не варик,не понимаю как там и что.
Урок кодера по Far Cry смотри:
http://www.youtube.com/watch?v=4249xzjqI88
Отличный видео-урок.
-
Выложил бы трейнер в раздел трейнеры,собственные поделки тут поощряются
-
Написано что с хоткеями проблема. И в Features used зачем галочку ставить на veh debugger?
Покажи скрин со сборкой и хоткеями
-
Оказывается инструкция мертвая была. Переписал на новую, работает)
AOBScan - идея неплохая... Но слабо оптимизированная, ибо писать буду в том же СЕ
Вот еще одна непослушная инструкция ))
[ENABLE]alloc(newmem,2048,"ShadowOfMordor.exe"+CC19E4) label(returnhere)label(originalcode)label(exit)newmem:originalcode:mov [rbx+50],ecxcmp qword ptr [rdx+00000088],00exit:jmp returnhere"ShadowOfMordor.exe"+CC19E4:jmp newmemnopnopnopnopnopnopreturnhere:[DISABLE]"ShadowOfMordor.exe"+CC19E4:mov [rbx+50],ecxcmp qword ptr [rdx+00000088],00dealloc(newmem)
Не посоветуешь, как лучше ее "укротить" ?)
Ну тут проще вместо ecx пиши свое значение(смотря какой тип данных обрабатывает эта инструкция)
mov [rbx+50],(float)100
cmp qword ptr [rdx+00000088],00
или
mov [rbx+50],64
cmp qword ptr [rdx+00000088],00
все зависит от типа данных
-
Попробуйте воспользоваться AOB сканом при создании скрипта.
найти смещение
in Вопросы по созданию читов в одиночных играх
Опубликовано
newmem:
cmp rbx,12C
je instruction
jmp originalcode
instruction: // сюда если rbx(смещение равно 12С)
mov [rax+rbx],(float)100 //к примеру
mov xmm0,[rax+rbx]
jmp returnhere
originalcode: //сюда во всех остальных случаях
mov xmm0,[rax+rbx]
jmp returnhere