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

lamalamaz

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

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

  • Посещение

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

    7

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

  1. Ну тут проще вместо ecx пиши свое значение(смотря какой тип данных обрабатывает эта инструкция) mov [rbx+50],(float)100 cmp qword ptr [rdx+00000088],00 или mov [rbx+50],64 cmp qword ptr [rdx+00000088],00 все зависит от типа данных
  2. Попробуйте воспользоваться AOB сканом при создании скрипта.
  3. [ENABLE] alloc(newmem,2048,"ShadowOfMordor.exe"+CC1FBC) label(returnhere) label(life) label(exit) newmem: movss xmm7,[life] movss [rbx+54],xmm7 exit: jmp returnhere life: dd (float)200 "ShadowOfMordor.exe"+CC1FBC: jmp newmem returnhere: [DISABLE] "ShadowOfMordor.exe"+CC1FBC: movss [rbx+54],xmm7 dealloc(newmem)
  4. lamalamaz

    X64 Dbvm

    Стоит Windows 8.1 x64. Не получается запустить отладчик в режиме ядра, нужна DBVM. Как я посмотрель на официальном форуме Cheat engine. DBVM поддерживает только процессоры с технологией intel VT(кои мой процессор не поддерживает), и все что советует Darkbyte ставить x86 систему и мол не париться. Так есть ли какая нибудь альтернативная возможность запустить отладчик(Ida,Olly) в режиме ядра?
  5. Спасибо MasterGH! Замечательный тутор, все понятно и доступно рассказано. Про справку в самом Cheat engine как раз и забыл....
  6. Спасибо, так вроде работает. Не знаете ли где можно почитать подробнее про операции с FPU регистрами и командами на примере игр. Просто все что находится в Гугле очень обширно и мало интересно. А вот конкретные примеры с играми очень пригодились бы для полного понимания как правильно использовать команды сопроцессора.
  7. Есть инструкция которая срабатывает на запись, я хочу что бы при каждом ударе отнималось 150. То есть как загрузить в FPU стек свое значение чтобы оно корректно отнималось? Сам скрипт [ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(subst)label(exit)newmem:subst:dd (float)150originalcode:fsub dword ptr [subst] //так не работаетfstp dword ptr [eax] //инструкция срабатывающая на запись жизней противника push esi //оригинальный кодmov ecx,edi //оригинальный кодexit:jmp returnhere"Darksiders2.exe"+3B7857:jmp newmemreturnhere: [DISABLE]dealloc(newmem)"Darksiders2.exe"+3B7857:fstp dword ptr [eax]push esimov ecx,ediВот так отнимает единицу, а как сделать свое произвольное значение? [ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)abel(exit)newmem:originalcode:fstp ST(0) fld dword ptr [eax] fld1 fsubp fstp dword ptr [eax]push esimov ecx,ediexit:jmp returnhere"Darksiders2.exe"+3B7857:jmp newmemreturnhere: [DISABLE]dealloc(newmem)"Darksiders2.exe"+3B7857:fstp dword ptr [eax]push esimov ecx,ediЕсли просто написать fstp dword ptr [eax] sub dword ptr [eax] ,(float)150 то жизни противников превращаются в 2.54846917E-35.
  8. В таких случаях надо найти (если к примеру игрок) видимое и цифровое значение отображаемое на экране(патроны например) добавить адрес патрон в таблицу. Смысл в том что все параметры игрока хранятся рядом, то есть методом отсева изменилось не изменилось не отсеиваются адреса,то можно посмотреть на адрес патронов(прим) и таким методом определить нужный адрес. К примеру адрес патронов 1FBCADFC то нужные нам адреса скорее всего будут начинаться 1FBXXXXX. Много раз именно так находил значения когда отсев не убирает лишние адреса.
  9. Со стратегиями вообще все очень печально в плане сравнения структур. Generals ,Rome total war да куча всяких. Там тоже фиг найдешь в структуре именно нужное отличие(хотя в тех же Generals например под одним поинтером в смещении было указано Player(string) и имена ботов. Попробуй порыть в указателях. Хотя повторюсь со стратегиями все печально в сравнении структур.
  10. Да там проблема в самой игре. Она посекторно что ли разбита, то есть сохранил в блокноте координаты места отбежал подальше и вписал записаные координаты то все равно откидывает к исходному месту... Или не телепортирует вообще.
  11. Пробывал все также. Когда жмешь загрузку координат то его подтряхивает, то есть как я понял он хочет телепортнутся но его что-то возвращает на место но иногда срабатывает и он телепортируется. Что странно... если прописывать вручную то телепортируется без проблем.
  12. Здравствуйте Геймхаклаберы. Постараюсь описать проблему по подробнее. И так решил состряпать телепорт для Prototype. Нашел координату Z.Поставил бряк на доступ. Получилось вот что. Как видим нет инструкции которая работает только с моей координатой. Значит придется писать фильтр. Решил потестить только с координатой Z. Нашел смещение которое отличает мой адрес Z от адресов всех остальных. Попробовал написать так: [ENABLE]alloc(newmem,2048)label(orig)label(jemper)label(returnhere)newmem:cmp word ptr [eax+5C],088A //смещение которое действительно только для моего адресаje jumperjmp originalcodejumper:mov [eax+34],(float)100fld dword ptr [ecx+38]jmp returnhereoriginalcode:fstp dword ptr [eax+34]fld dword ptr [ecx+38]jmp returnhere"prototypeenginef.dll"+600F5:jmp newmemnopreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheat"prototypeenginef.dll"+600F5:fstp dword ptr [eax+34]fld dword ptr [ecx+38]dealloc(newmem)Так я решил проверить работает ли фильтр правильно. Все работает, фильтр постоянно записывает значение 100 в любой части города и только мне. Далее сама проблема написал я телепорт для координаты Z только таким образом. [ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048)label(returnhere)label(originalcode)label(jumper)label(coordZ)label(_save)label(_load)label(_saveCoords)label(_loadCoords)registersymbol(_saveCoords)registersymbol(_loadCoords)newmem: //this is allocated memory, you have read,write,execute accesscmp word ptr [eax+5C],088Aje jumperjmp originalcodeoriginalcode:fstp dword ptr [eax+34]fld dword ptr [ecx+38]jmp returnherejumper:_save:cmp [_saveCoords],1jne _loadpush ecxmov ecx,[eax+34]mov [coordZ],ecxpop ecxmov [_saveCoords],0jmp returnhere_load:cmp [_loadCoords],1jne originalcodepush ecxmov ecx,[coordZ]mov [eax+34],ecxpop ecxmov [_loadCoords],0jmp returnherecoordZ:dd 0_saveCoords:dd 0_loadCoords:dd 0"prototypeenginef.dll"+600F5:jmp newmemnopreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheat"prototypeenginef.dll"+600F5:fstp dword ptr [eax+34]fld dword ptr [ecx+38]dealloc(newmem)unregistersymbol(_saveCoords)unregistersymbol(_loadCoords)//Alt: db D9 58 34 D9 41 38Добавил _saveCoord и _loadCoord поставил хоткей на присвоении 1. Проблема в том что координата Z не хочет загружаться. То есть я забрался на дом сохранил Z потом спрыгнул вниз и загрузил Z. Но ничего не происходит. Но есть одно но. Если постоянно тыкать хоткей на load координате то иногда срабатывает и телепортирует на ту высоту на которой я сохранился. Если менять значения вручную то проблем нет. И как я написал выше фильтр рабочий проверял напрямую.... Так что это может быть? Мб написал криво или есть какие нибудь иные тонкости? Прошу помощи.
  13. Смещение ты не верное нашел в [esi+50] значение динамически меняется и поэтому скрипт срабатывает не всегда следовательно когда там не 1(оно походу игры в короткие промежутки времени скачет от 3 до 15 и проскакивает иногда 1,поэтому работает криво...) то скрипт не работает. Ищи статичное смещение которое не меняется никогда и которое действительно только для тебя. P.S. Рабочее смещение искать не стал т.к. это метод научного тыка и перебора. P.S.S. Проверял без фильтра на инструкции movss xmm0,[esi+0C] movss [esi+04],xmm0 Вывод искать статичное смещение которое верно только для тебя.
  14. Можно попробывать без 14.fld dword ptr [ecx+04](то есть удалить 14-ю строчку из скрипта) или же попробывать с comiss xmm0,[esi+04](первый) взять за основу и написать примерно так [ENABLE] alloc(newMem, 2048) label(returnHere) label(hack) newMem: cmp [esi+50],1 je hack comiss xmm0,[esi+04] jmp returnHere hack: comiss xmm0,[esi+04] push [esi+04] pop [esi+0C] jmp returnHere если будеть криво работать также из hack: можно поробывать удалить comiss xmm0,[esi+04]
  15. А можно скриншот инструкций которые обращаются к адресу жизней? А по поводу float инструкции попробуй так [ENABLE] alloc(newMem, 2048) label(returnHere) label(hack) newMem: cmp [ecx+50],1 je hack fld dword ptr [ecx+04] fdiv dword ptr [esp] jmp returnHere hack: fld dword ptr [ecx+04] fst dword ptr [ecx+C] fdiv dword ptr [esp] jmp returnHere [DISABLE] "CNC4.game"+2FB324: fld dword ptr [ecx+04] fdiv dword ptr [esp] dealloc(newmem)
  16. Попробуй так просто в commis засунуть 0(причем 0 засунется во всех врагов а в тебя нет т.к. фильтр) Если 0 не прокатит суй (float)-1. newmem: cmp [esi+00000078],6B726F77 je god jne orig god: mov [esi+000000B8],(float)10 jmp returnhere orig: commis [esi+000000B8],0 jmp returnhere А да и поставь хоткей на скрип - жмешь умирают все
  17. Значит такой тут расклад Как видим инструкции наносящие урон разные. Тут фильтр не используем(т.к. инструкции разные) конечно можно но инструкции пишут постоянно поэтому фигня получится) И так пишем скрипт на 1 удар .... mov [esi-000002FC],0 addss xmm0,[esi-000002FC] .... //можно вставить 0.1 как (float) 0.1 Ноль не рекомендую использовать нигде страшное это число все крашит и заставляет скрипты глючить или останавливаться на пол пути. Чтобы мы были бессмертными смотрим какие адреса не обращаются к врагам а то есть .... mov [edi-000002FC],(float)10 movss xmm0,[edi-000002FC] .... После применения данных скриптов мы бессмертные а вся живность(враги кабаны курицы и т.д.) ломаются с 1 удара. А теперь по поводу фильтров. Как видишь в таблице 3 адреса. 2 адреся жизней гномов(наши хп) и 1 адрес врага. Заходим в dissect data structures смотрим Сверху адреса жизней + смещение я брал относительно инструкции commis Видим смещение 78(все смещения находятся методом перебора) у нас значение worker(у всех гномов) у врага (slug). Переводим string worker в HEX 4байта 6B726F77 Вот это число всегда для нас постоянно и только у нас. То есть можно отталкиваться а то есть сравнивать если по смещению 78 значение 6B726F77(worker) то мы а если нет то не мы. Как писать скрипт... newmem: cmp [esi+00000078],6B726F77 je god jne orig god: mov [esi+000000B8],(float)10 jmp returnhere orig: commis [esi+000000B8],xmm0 jmp returnhere При таком фильтре будем бессмертны только мы. P.S. при постоянном обращении инструкции 1hit написать затруднительно. P.S.S инструкция наносящяя урон врагам действительно movss [ecx-00000364],xmm0 в ecx лежит некий адрес а по смещению -364 адреса жизней врагов... И если эту инструкцию взять в оборот то так же можно сделать 1hit(то есть она полностью рабочая) .Не сталкивался с таким типом инструкций.
  18. movss xmm0, [esi+000000B8] это чтение ,если судить по правилам ассемблера, считывается значение и отправляется в xmm0. Обычно запись происходит так [xxx],ххх. А чтение xxx,[xxx] если я ничего не путаю. Вот посмотри видео наглядно показывается как отделить своих от чужих средствами cheat engine. Не важно что там mass effect техника написания фильтра работает для всех игр, главное понять суть
  19. comiss xmm0,[esi+000000B8] << это получает доступ. проверяет хп у всех. Как я понял обращается постоянно. Нужно чуть подругому чтобы легче определить... Надо искать что пишет(writes) причем когда наносится урон смотреть сколько раз инструкция выполняется. Смотришь и выбираешь инструкцию(если она не одна) которая обратилась только когда был нанесен урон. Жмешь show in disacembler. Затем в дизасемблере жмешь правой кнопкой на инструкцию и выбираешь what addres accsec появится окошечко которое будет следить с какими адресами будет работать инструкция(сразу поставь тип float в появившемся окне) А теперь внимательно. Нам надо что бы отобразились твои адреса и адреса врагов. Теперь переключаешься в игру и струкаешь пару юнитов врагов. При нанесении урона адреса должны отобразиться в окне. Чтобы было наверняка сначало побей пару своих юнитов и адреса которые всплыли в окне перенеси в chetengine даблкликом и переименуй в me. А потом уж сделай тоже самое с врагом так же добавь и переименуй в enemy. После всей свистопляски должны получится хотя бы 4 адреса(2 твоих 2 врагов). Теперь идешь в dissect data structures и создаешь 2 группы. 1 группа соответственно будет твоя а второя вражин. Добавляешь адреся в ячейки и так как инструкция [esi+000000B8] отнимаешь B8. к примеру выглядеть будет так 0BAC3DE-B0 можно так и писать cheatengine сам вычтет. и таким же образом заполняешь все 4 адреса. Жмешь define structure окей. Появится куча смещений вот сидишь и сравниваешь какие смещения одинаковые у тебя и отличные у врагов P.S. вангую что инструкция будет movss [esi+000000B8],xmm0
  20. Да ну просто лишние переменные в ассемблере вводить. Как то вообще не комильфо :-D
  21. push ecx mov ecx, [ebx+C] - берём максимальное значение mov [ebx+04], ecx - и пишем в текущее pop ecx jmp exit можно уточнить что мне такой расклад не совсем нравится. А вот так не круче? push [ebx+C] pop [ebx+04]
  22. А зачем указатели? Нельзя код на прямую анализировать? То есть что обращается, что пишет? Много лишнего вы не считаете? Push и pop и все то есть по смещению находим макс значиние жизней. Пушим макс значение и попим на инструкцию техущих хп. Вся работа...
  23. Спасибо всем за поддержку, сам тоже склоняюсь что структура должна быть. А эти инструкции для отвода глаз. Но пока не нашел....... кстати elder scroll morrowind такой же херней мается, но там на структуру я нашел через акробатику.
  24. Дополню при установке брекпоинта срабатывает моментально(не важно какую инструкцию выбрал). Адрес которы записывается первым возвращает ноль, а потом "рандомные" адреса... и что самое интересное то например жизни хранятся по адресу 5acxxxxx то очки в 02bxxxxx(при нахождении обоих методом отсеивания). То есть даже не пойму как подобраться к структуре. Если выбирать анализ структур например нашел патроны или жизни или очки или души то смещение одно [xxx+04]. Как быть в таких случаях?
×
×
  • Создать...

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

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