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

A1t0r

Ветераны
  • Постов

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

  • Посещение

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

    39

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

  1. Скачал репак. Попробовал по пунктам:

    1. Нашёл ячейку с количеством земли.

    2. Поставил бряк на запись(write).

    3. В найденной инструкции посмотрел значение edi.

    4. Его поискал в памяти с галочкой в Writable. Нашлось 18 адресов.

    5. Взял и поставил на первую, вторую бряк на доступ. Ничего не нашлось.

    В этом случае нужно все адреса проверить на доступ?

    Попробуй остальные, благо их не так уж много. Где-то должна быть та, от которой игра будет подтормаживать, значит она.

  2. Вот только что попробовал с квадратом, тоже не находит :(

    Я использовал VEH отладчик (так как с виндовсовским вылетает игра) и ставил квадрат в ту функцию, искал сразу на доступ и на запись. Ни там, ни там нету инструкций при поиске второго указателя.

    Может у меня что-то не настроено? или настроено что-то не то? или я что-то не так делаю?

    У меня стоит Windows debugger. VEH использовал редко.

    Только что прошёлся ещё раз. Ковырял через землю.

    1. Нашёл ячейку с количеством земли.

    2. Поставил бряк на запись(write).

    3. В найденной инструкции посмотрел значение edi.

    4. Его поискал в памяти с галочкой в Writable. Нашлось примерно 15 адресов.

    5. Взял и поставил на первый бряк на доступ. Нашлось очень много инструкций.

    6. Взял первую. Посмотрел в ней edi. (а смещения то мы записываем!!! здесь +1C). И запустил снова поиск в памяти с теми же параметрами.

    7. Нашлась туча значений. Среди них 5-я единственная зелёная(статический адрес и расположен в CraftWorld.exe).

    Вот и получилась цепочка [[[CraftWorld.exe+3168B4]+1C]+X]

    • Плюс 1
  3. У меня в CE есть следующее:

    Параметры сканирования памяти

    Перезаписыв. < это оно? там стоит галочка, её снять? на что это влияет?

    Да, хотя тогда правильнее Rewritable.

    Если галочка стоит, то поиск будет происходить в секциях с возможностью записи значений. Если нет, то запись в этих секциях запрещена, можно только читать. Если не уверен где искать ставь закрашенный квадратик, будет искать везде.

    ae1afb5577d33e9960754df74ecd9a7e.png

  4. A1t0r, а в каких случаях надо ставить бряк на доступ, запись? в смысле какой из них куда приведёт?

    Если поставить на доступ, то поймаешь инструкции которые каким-либо образом читают или пишут значения по этому адресу. На запись - только модифицирующие данное значение.

    Адреса указателей не находились, возможно из-за того,что ты не убрал галочку с Writable

  5. Ну вот а как мне самому это всё найти? Вы мне дали все адреса и байты для поиска. А как самому найти это всё?

    Я начал поиск с дерева(или земли, не помню))).

    Добыл одно, поискал, нашёл ещё одно отсеял и т.д., пока не нашёл ячейку.

    Поставил бряк на запись. Нашлась инструкция(та что выше), посмотрел что в edi. Поискал это значение, среди найденных взял "зелёный" адрес(не последний, там системная библиотека). Составил цепочку(на скрине). Теперь если найти адрес ресурса и вычесть значение которое в [[[CraftWorld.exe+3168B4]+1C]+0] будет как раз смещение от начала структуры(значение X)

  6. о_О но как?

    Также как и с землёй только вместо 14c будет 419c. Это благодаря тому, что относительно друг друга ячейки не сдвигаются. Нашёл адрес начала и считаю от него, хотя такого указателя игра может не использовать.

  7. Craft The World

    Взял версию 0.9.033. repack от United Packer Group

    Удалось найти инструкцию, которая увеличивает кол-во ресурсов и корневой указатель.

    Удалось модифицировать инструкцию, чтобы любое изменение(получение, трата, крафт) ресурса давало максимум(обрезается) 999.


    00D4FEB7 - 01 9F 4C010000 - add [edi+0000014C],ebx
    ||
    V
    mov [edi+0000014C],edi

    В edi большое число, но оно режется до 999.

    Вот формула поиска значений ресурсов:


    [[[CraftWorld.exe+3168B4]+1C]+X]
    где X:
    +14c земля
    +5e4 камни
    +13ac дрова
    +98e4 каменный топор
    +f710 лестница

    Осталось найти значения смещений для всех ресурсов)

    • Плюс 1
  8. Хочу в игре денег наколдовать, адрес со значением нашёл. Указатель на этот адрес нашёл. А вот когда ищу кто указывает на найденный указатель, то ничего не находит :(

    Ставлю бряк в СЕ на доступ к указателю, трачу денешку а инструкции не появляются в окне бряка. В чём причина и что делать чтобы найти искомое?

    Название игры можно? Интересно посмотреть самому.

  9. Что можно предпринять что бы искало?

    В CE в главном окне поставить/убрать(или оставить закрашенной, если не знаешь точно) галочку в пункте Writable, можно ещё Executable попробовать. Может не находиться, но редко из-за того что включён быстрый поиск с выравниванием.

    • Плюс 1
  10. Да, уже сам додумался. Но тут такой вопрос почему CE в одном случае нашел то, что обведено красным а во втором нет? И даже 1000A2B2 не ищет, хотя этот адрес работает нормально если смотреть что он содержит то все норм показывает..

    Как вариант, не ищется потому что установлен поиск в секциях с возможностью или невозможностью записи.

  11. Кстати я так и не вкурил чем же отличается


    db 90 90

    от


    nop
    nop

    Ничем. nop - это инструкция, а db 90 90 значит записать код инструкции 2 раза по какому-либо адресу.

    Вторая инструкция, возможно, это уменьшение кол-ва гранат или кол-ва патронов не-в-обойме.

  12. Если адрес патронов динамический, то по-любому должна существовать цепочка указателей от хотя бы одного статичного. Игра ведь должна как-то "добираться" к ячейке с патронами. А что на месте второй инструкции?

    90h это код инструкции nop

  13. Недавно купил в стиме и решил сломать, что называется для галочки) Можно будет доделать как и в диабло быструю прокачку и ещё что-нибудь по вкусу. В архиве скрипт трейнера и сам трейнер.

    Набор стандартный: бессмертие и бесконечная мана.

    Поиграл 15 минут всё было нормально. Тестим.

    Grim Dawn v0.2.5.6(b19) trainer +2 by A1t0r.rar

    • Плюс 1
  14. alloc(newmem,2048)

    label(branch2)

    label(returnhere)

    label(originalcode)

    label(exit)

    newmem:

    originalcode:

    cmp [ESI+67],(FLOAT)64

    jne branch2

    mov [esi+76],edx

    mov edx,[ebp-54]

    jmp exit

    branch2:

    mov [esi+68],(FLOAT)100

    mov edx,[ebp-65]

    exit:

    jmp returnher

    тут всё так?

    Этот кусок правильный, только допиши e на конце jmp returnhere, метку originalcode и её объявление можешь убрать и если на выходе после метки exit сразу переход на returnhere можно сделать так:



    [убрать объявление метки exit]
    ...
    mov edx,[ebp-54]
    jmp returnhere

    branch2:
    mov [esi+68],(FLOAT)100
    mov edx,[ebp-65]

    jmp returnhere

    Надеюсь куда return'ить уже написано)

  15. Регистры? registersymbol имеешь в виду? А что там?)

    В секции активации скрипта - создал, в секции отключения скрипта - уничтожил. Вот в общем-то и все различие по поводу "жизни" таких флагов. :)

    Нет, я про EDF DSD DFT GGR FER

    И про синтаксис mov

  16. Можеш написать шаблон к 3 на основе моего выше

    1.если EDF+47 РАВНО 50 ТО

    2.ВЫПОЛНЯЕМ ОБЫЧНУЮ ИНСТРУКЦИЮ ТИПА

    MOV DSD+54

    MOV DFT+78

    А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПА

    MOV GGR+76

    MOV FER+84

    3.ВЫХОД ИЗ ИНСТРУКЦИИ

    Тоесть надо если параметр = 50 то выполняем одну инструкцию а если не равен другую

    если EDF+47 РАВНО 50 ТО...

    А ЕСЛИ НЕ РАВНО 1 ТО ВЫПОЛНЯЕМ ДРУГУЮ ИНСТРУКЦИЮ ТИПА...

    вот это не понял, два противоречивых сравнения, напишу ==50/ !=50

    орфография сохранена)


    cmp [EDF+47],#50
    jne branch2
    mov DSD+54 //если ==50
    mov DFT+78
    jmp exit

    branch2: //если !=50
    mov GGR+76
    mov FER+84

    exit:

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

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

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