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

lamalamaz

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

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

  • Посещение

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

    7

Сообщения, опубликованные lamalamaz

  1. Стоит Windows 8.1 x64. Не получается запустить отладчик в режиме ядра, нужна DBVM. Как я посмотрель на официальном форуме Cheat engine. DBVM поддерживает только процессоры с технологией intel VT(кои мой процессор не поддерживает), и все что советует Darkbyte ставить x86 систему и мол не париться.

     

    Так есть ли какая нибудь альтернативная возможность запустить отладчик(Ida,Olly) в режиме ядра?

  2.  

    Как минимум

    dd (float)150

    находится в исполняемом коде. Нужно вынести, например так

    newmem:originalcode:fsub dword ptr [subst] fstp dword ptr [eax] push esimov ecx,ediexit:jmp returnheresubst:dd (float)150"Darksiders2.exe"+3B7857:jmp newmemreturnhere:

     

     

    Спасибо, так вроде работает. Не знаете ли где можно почитать подробнее про операции с FPU регистрами и командами на примере игр. Просто все что находится в Гугле очень обширно и мало интересно. А вот конкретные примеры с играми очень пригодились бы для полного понимания как правильно использовать команды сопроцессора.

  3. Есть инструкция которая срабатывает на запись, я хочу что бы при каждом ударе отнималось 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.

  4.  

    вопрос по нахождения неизвестного значения.

    Поиск по точному дает только видимое значение, но не настоящее и изменения ни к чему не приводят, только визуально.

    пробовал через неизвестное, путем уменьшилось/увеличилось , но и там ничего не находилось ( доходил до 15-20 значений и фризив каждое проверял, но не вышло)

    потом вспомнил, что где-то может быть обратное, т.е. когда увеличивается, надо искать уменьшилось. но там остается слишком много значений (более 100) и каждое фризить не получается, т.к. игра вылетала раньше, чем я находил нужное, (если оно там вообще было) а пробовал и с конца и сначала перебирать и рандомно, но не вышло.

    а просто изменилось/ не изменилось находит под 300 значений и меньше не становиться.

    подскажите пожалуйста, что в этом случае можно сделать?

     

     

    В таких случаях надо найти (если к примеру игрок) видимое и цифровое значение отображаемое на экране(патроны например) добавить адрес патрон в таблицу. Смысл в том что все параметры игрока хранятся рядом, то есть методом отсева изменилось не изменилось не отсеиваются адреса,то можно посмотреть на адрес патронов(прим) и таким методом определить нужный адрес. К примеру адрес патронов 1FBCADFC то нужные нам адреса скорее всего будут начинаться 1FBXXXXX. Много раз именно так находил значения когда отсев не убирает лишние адреса.

  5. Блин, слушайте, какие бы я смещения не пробовал делать как бы не сравнивал, всё без толку(( Я уже перепробовал с пару десятков смещений, всё бесполезно, либо работает так же глючно, либо вообще не работает. Что делать уже хз. Возможно есть ещё у кого - нибудь идеи как это исправить?

    Со стратегиями вообще все очень печально в плане сравнения структур. Generals ,Rome total war да куча всяких. Там тоже фиг найдешь в структуре именно нужное отличие(хотя в тех же Generals например под одним поинтером в смещении было указано Player(string) и имена ботов. Попробуй порыть в указателях. Хотя повторюсь со стратегиями все печально в сравнении структур.

  6. Здравствуй. У меня была похожая проблема с darksiders. Сейчас посмотреть не могу так-как с телефона. Тоже было что иногда срабатывало, а иногда нет и проблема была не в фильтре. Если не ошибаюсь, то я брал код ниже и все заработало на отлично. Попробуй взять инструкцию ниже той, которая идет сразу же после работы с координатой z. Не гарантирую что сработает, но попробуй.

    Да там проблема в самой игре. Она посекторно что ли разбита, то есть сохранил в блокноте координаты места отбежал подальше и вписал записаные координаты  то все равно откидывает к исходному месту... Или не телепортирует вообще.

  7. Попробуй этот же скрипт, только в версии CE 6.3. Многие жаловались, что в 6.4 присутствует много неприятных багов. Возможно, это тоже какой-то баг, ибо я посмотрел скрипт, и, на первый взгляд, ошибок нет.

    Пробывал все также. Когда жмешь загрузку координат то его подтряхивает, то есть как я понял он хочет телепортнутся но его что-то возвращает на место но иногда срабатывает и он телепортируется. Что странно... если прописывать вручную то телепортируется без проблем.

  8. Здравствуйте Геймхаклаберы. Постараюсь описать проблему по подробнее.

     

    И так решил состряпать телепорт для Prototype. Нашел координату Z.Поставил бряк на доступ. Получилось вот что.

     

    ebb29b042eaf.png

     

    Как видим нет инструкции которая работает только с моей координатой. Значит придется писать фильтр.

     

    Решил потестить только с координатой 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 координате то иногда срабатывает и телепортирует на ту высоту на которой я сохранился. Если менять значения вручную то проблем нет. И как я написал выше фильтр рабочий проверял напрямую....

     

    Так что это может быть? Мб написал криво или есть какие нибудь иные тонкости? Прошу помощи.

  9. Смещение ты не верное нашел в [esi+50] значение динамически меняется и поэтому скрипт срабатывает не всегда следовательно когда там не 1(оно походу игры в короткие промежутки времени скачет от 3 до 15 и проскакивает иногда 1,поэтому работает криво...) то скрипт не работает. Ищи статичное смещение которое не меняется никогда и которое действительно только для тебя.

     

    P.S. Рабочее смещение искать не стал т.к. это метод научного тыка и перебора.

     

    P.S.S. Проверял без фильтра на инструкции

     

    movss xmm0,[esi+0C]

    movss [esi+04],xmm0

     

    Вывод искать статичное смещение которое верно только для тебя.

  10. Можно попробывать без  14.fld dword ptr [ecx+04](то есть удалить 14-ю строчку из скрипта) или же попробывать с comiss xmm0,[esi+04](первый) взять за основу и написать примерно так

     

    1. [ENABLE]
    2. alloc(newMem, 2048)
    3. label(returnHere)
    4. label(hack)
    5.  
    6. newMem:
    7. cmp [esi+50],1
    8. je hack
    9. comiss xmm0,[esi+04]
    10. jmp returnHere
    11.  
    12. hack:
    13. comiss xmm0,[esi+04]
    14. push [esi+04]
    15. pop [esi+0C]
    16. jmp returnHere

    если будеть криво работать также из hack: можно поробывать удалить comiss xmm0,[esi+04]

  11. А можно скриншот инструкций которые обращаются к адресу жизней?


    А по поводу float инструкции попробуй так

     

    1. [ENABLE]
    2. alloc(newMem, 2048)
    3. label(returnHere)
    4. label(hack)
    5.  
    6. newMem:
    7. cmp [ecx+50],1
    8. je hack
    9. fld dword ptr [ecx+04]
    10. fdiv dword ptr [esp]
    11. jmp returnHere
    12.  
    13. hack:
    14. fld dword ptr [ecx+04]
    15. fst dword ptr [ecx+C]
    16. fdiv dword ptr [esp]
    17. jmp returnHere
    18.  
    19.  
    20.  
    21.  
    22. [DISABLE]
    23. "CNC4.game"+2FB324:
    24. fld dword ptr [ecx+04]
    25. fdiv dword ptr [esp]
    26. dealloc(newmem)
    • Плюс 1
  12. Попробуй так просто в commis засунуть 0(причем 0 засунется во всех врагов а в тебя нет т.к. фильтр)

     

    Если 0 не прокатит суй (float)-1. :-D

     

    newmem:

    cmp [esi+00000078],6B726F77

    je god

    jne orig

     

     

    god:

    mov [esi+000000B8],(float)10

    jmp returnhere

     

     

    orig:

    commis [esi+000000B8],0

    jmp returnhere


    А да и поставь хоткей на скрип - жмешь умирают все

  13. Значит такой тут расклад

    e577552f15e4.png

     

    Как видим инструкции наносящие урон разные. Тут фильтр не используем(т.к. инструкции разные) конечно можно но инструкции пишут постоянно поэтому фигня получится)

     

    И так пишем скрипт на 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 смотрим

     

    adac4847a6b7.png

     

    Сверху адреса жизней + смещение я брал относительно инструкции 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(то есть она полностью рабочая) .Не сталкивался с таким типом инструкций.

    • Плюс 2
  14. movss xmm0, [esi+000000B8] это чтение ,если судить по правилам ассемблера, считывается значение и отправляется в xmm0. Обычно запись происходит так [xxx],ххх. А чтение xxx,[xxx] если я ничего не путаю.

     

     Вот посмотри видео наглядно показывается как отделить своих от чужих средствами cheat engine. Не важно что там mass effect техника написания фильтра работает для всех игр, главное понять суть

     

    • Плюс 1
  15. 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 :-D

    • Плюс 2
  16. А зачем указатели? Нельзя код на прямую анализировать? То есть что обращается, что пишет? Много лишнего вы не считаете? Push и pop и все 8-)

    то есть по смещению находим макс значиние жизней. Пушим макс значение и попим на инструкцию техущих хп. Вся работа...

  17. Спасибо всем за поддержку, сам тоже склоняюсь что структура должна быть. А эти инструкции для отвода глаз. Но пока не нашел.......

    кстати elder scroll morrowind такой же херней мается, но там на структуру я нашел

    через акробатику.

  18. Дополню при установке брекпоинта срабатывает моментально(не важно какую инструкцию выбрал). Адрес которы записывается первым возвращает ноль, а потом "рандомные" адреса...

    и что самое интересное то например жизни хранятся по адресу 5acxxxxx то очки в 02bxxxxx(при нахождении обоих методом отсеивания). То есть даже не пойму как подобраться к структуре. Если выбирать анализ структур например нашел патроны или жизни или очки или души то смещение одно [xxx+04]. Как быть в таких случаях?

  19. Скачал Painkiller и решил поломать. Только вот загвоздка за жизни,жизни врагов,патроны,количество душ,очки... Отвечают только вот эти инструкции.

    Других инструкций которые бы обращались к адресам нет. А если выбрать какие адреса обращаются к инструкции то там вылезате 100500 адресов с разными значениями.

    да при всем при этом все значения хранятся во Float. Будь то патроны,жизни,очки или души или враги.

    mov eax,[eax+04] постоянно обращается

    mov [ebx+04],ecx при уменьшении/увеличении(патронов,очков,жизней,душ и т.д.)

    f78ae8dd0ffct.jpg

    Так вот сам вопрос как анализировать код исходя из такой инструкции. Как найти структуру(начало структуры) если смещения одинаковые постоянно для всего. То есть для патрон, жизней, и далее по списку. Каким образом производить анализ?

×
×
  • Создать...

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

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