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

Garik66

Помогаторы
  • Постов

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

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

    292

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

  1. ТОВАРИЩИ HELP!!!!!!!!!!!!!!!!

    Пока игрался с проверкой скриптов, случайно сохранил поверх своей таблицы нулевую таблицу.

    Неужели вся 2-х недельная работа на смарку (там 10 рабочих скриптов и куча адресов была)?

    Или есть возможность как то восстановить?


    что за бред....

    push ecx

    push esi

    push edi

    mov ecx,size
    mov esi,oldaddress
    mov edi,newaddress
    rep movsb

    pop edi

    pop esi

    pop ecx

    Проверил скрипт: при запуске кода - игра вылетела.

  2. [ENABLE]...alloc(newmem,2048)...label(loop)newmem:...push eax // Заталкиваем в стекpush esi // регистрыpush ecx // чтобы восстановить потомpush ebx // оригинальные значенияmov ecx,364 // Записываем количество проходов в циклеloop:lea esi,[oldaddress] // Поместить в ESI адрес старого участка памятиlea ebx,[newaddress] // поместить в ebx адрес-приемникlodsb // загрузить в al байт из [ESI]mov byte ptr [ebx],al // записать в новый адресdec ecx // Уменьшить счетчик циклаinc ebx // Увеличить адрес-приемникcmp ecx,0 // Достигли ли конца цикла?je @F // Если да, выходим из циклаjmp loop // Прыгаем на метку loop, то есть, переходим к следующей итерации цикла@@: // Безымянная метка для указания местоположения выхода из циклаpop ebx // Восстановлениеpop ecx // задействованных pop esi // в циклеpop eax // регистров...
    Как-то так. Где многоточия - там какой-то другой код.

     

    Мне кажется что в скрипте ошибка, Нужно сюда :

     

    dec ecx // Уменьшить счетчик цикла

    inc ebx // Увеличить адрес-приемник

     

    добавить ещё одну строку, т.е. так:

     

    dec ecx // Уменьшить счетчик цикла

    inc esi // Увеличить адрес старого участка памяти

    inc ebx // Увеличить адрес-приемник

     

    Попробую это проверить. (а то пока код не работает).

    Нет так тоже не работает. Где то ещё ошибка. Проверьте скрипт пожалуйста.

    А то писать 364 раза 

    push ebx

    mov byte ptr ebx,[eax+4]

    move byte ptr [eax+dbc],ebx

    pop ebx

    push ebx

    mov byte ptr ebx,[eax+5]

    move byte ptr [eax+dbd],ebx

    pop ebx

    .............................

    и так далее, не хочется

     

  3. что за бред....

    push ecx

    push esi

    push edi

    mov ecx,size

    mov esi,oldaddress

    mov edi,newaddress

    rep movsb

    pop edi

    pop esi

    pop ecx

    Если работает, то красиво! (Код короче, нету лишней метки и использует 3 регистра). Попозже тоже попробую. Но у MasterGH 2 регистра. Хочется попробовать и этот скрипт.

    Как новичку - что делает инструкция rep movsb?

    И правильно я понимаю что в "mov ecx,size" size в шестнадцатитер. системе, т.е. в моём случае 16c?

  4. Если это надо сделать на CE Autoassembler, то пример из справки с записью 16 байт из адреса 00410000.

    ReadMem examplealloc(x,16)alloc(script,2048)script:mov eax,[x]mov edx,[x+c]retx:readmem(00410000,16) //place the contents of address 00410000 at the address of X

    Если на Ассемблере, то укажи какой именно Ассемблер: fasm, masm, tasm и прочие... Хотя ты мог поискать как работать с память на WinAPI на интересующем Ассемблере.

    Это надо сделать на CE Autoassembler. В программировании 0, пользуюсь только CE. В следующий раз буду обязательно писать CE Autoassembler.

     

    Попытался вставить скрипт в код, возникли вопросы:

     

    alloc(newMem, 2048)

    alloc(x,364)
    label(returnHere)
     
     
    newMem:
     
    ....................................
     
    push ebx
    push edx
    mov ebx,[x+4]
    mov edx,[x+dbc]
    ret
     
    x:
    readmem(?????????,364)
    pop edx
    pop ebx
     
    jmp returnHere
     
    ..............................
    jmp newMem
    ..............................
    returnHere:
     
    [DISABLE]
    .................................
     
    1. alloc(x,364) - у Вас 16 у меня 364. Я правильно понял, что это в десят. системе, т.к. 16c (364 в десят.) CE не приняла?
    2. Все регистры используются, поэтому правильно ли я использую push и pop?
    3. Допустим мне нужно  скопировать 364 байта начинающихся с адреса [eax+4] в   [eax+dbc], что поставить вместо ????????? или как получить ????????? значение.
    4. Перепишите пожалуйста мой код правильно.
  5. При написании скрипта возникла необходимость скопировать довольно большой участок памяти (точнее 364 байта) из одного адреса в другой (Вручную это получалось и в игре получаю то что хотел).

    Помогите написать скрипт на Ассемблере.

  6. Алло. Дальше что делать?

    Ок перехожу в личные сообщения.

    Пока решения нет.

    Повторю.

    Более конкретно (с чем сейчас встрял),

    Например, вернёмся к Туториал CE v. 6.3 шаг 9.

    Допустим, у меня есть адрес с цепочкой указателей на здоровье наших союзников.

    Мне нужно вытащить значение в адресе в тренер, в окошко, с возможностью редактировать значение в самом тренере (без СЕ).

    Как это можно сделать?

    Здоровье Дейва (Игрок 1) [[[006313a0]+4b8]+4], здоровье Эрика (Игрок 2) [[[006313a0]+4bc]+4].

  7. Зачем тебе два окошка? Без разницы можно и одно. Неважно. Туториал эт я для примера взял.

    A1t0r

    Ну что попробуем так сделать? Извини, нужно было выйти в Скайп - звонила сестра.

    Сначала добавил горячую кнопку на Бессмертие.

    Затем я перешёл в "Пользовательский дизайн".

    Что нужно сделать дальше?

    Точнее, что выбираем в FormDesigner:

  8. readFloat(address) и writeFloat(address,value).

    Что "ридом" читаем, а "врайтом" пишем это-то понятно. и что в инструкции должен быть Float тоже понятно, т.к. у нас значение здоровья float.

    Меня интересует как всё это вытащить в тренер, а точнее в форму.

    A1t0r

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

    Так будет проще по-моему.

  9. CE v. 6.3 (ru).

    Сделал себе тренер с 12 функциями с горячими кнопками (активирующими и деакт. скрипты из таблицы). таких примеров на форуме много. Огромное спасибо!!!

    В программировании и английском к сожалению "0".

    Для дальнейшего изучения возможностей СЕ, нужны переводы main.lua и описание на русском всего что входит в "свой дизайн" при создании тренера, если есть. Если нет, придётся (как я понял, продолжая ломать игру) ещё много вопросов позадавать на форуме.

    Более конкретно (с чем сейчас встрял),

    Например, вернёмся к Туториал CE v. 6.3 шаг 9.

    Допустим, у меня есть адрес с цепочкой указателей на здоровье наших союзников.

    Мне нужно вытащить значение в адресе в тренер, в окошко, с возможностью редактировать значение в самом тренере (без СЕ).

    Как это можно сделать?

    Здоровье Дейва (Игрок 1) [[[006313a0]+4b8]+4], здоровье Эрика (Игрок 2) [[[006313a0]+4bc]+4].

    В main.lua увидел такую функцию writeFloatLocal(address,value), думаю, что скорее всего её нужно в данном примере использовать, но как не знаю. Примеров не нашёл.

  10. Полностью согласен, просто хотелось уяснить для себя, как правильно записывать адреса в код.

    А по структуре согласен на все сто. Очень помогло, нашёл многие характеристики, именно изучая структуру главного героя (выносливость, которую в этой игре по-моему вообще обычным способом не найдёшь, отравление, окаменение, проклятие ну и т.д.).

    Сейчас мучаюсь с поиском координат. В структуре почти в самом начале лежат, координаты это видно, но они больше похожи на координаты камеры, потому что при изменении этих значений (и заморозке) герой стоит на месте, а изменяется именно расстояние до него от камеры. А вот найти координаты Ггероя пока не получается смотрел и в структуре, и поиском неизвестного (здесь вооще: при поиске Z - оставалось около 650 адресов, но они уже ни в какую не менялись, Х или Y - оставалось 2500 неменяющихся значений) уже 7 раз начинал искать, но так и бросал, слишком долго.

    Кстати SER[G]ANT как выделить все адреса я понимаю - CTRL+A, а вот ка заморозить сразу много выделенных адресов не могу понять, подскажите пожалуйста.

    И повторю вопрос: Как встроить спидхак в свой тренер? Интересует именно назначение Горячих клавиш, а не кнопка на форме (с кнопкой я понял как сделать, как оказалось у меня вообще не работал вызов LUA-скриптов ни в таблице, ни при создании трейнера, так что пришлось вчера пару часов чистить реестр вручную для полного удаления СЕ (утилиты как оказалось не полностью чистят) и по новой переустанавливать СЕ).

    И ещё вопрос: Есть ли в доступе исходный код спидхака СЕ или он слишком навороченный для моего теперешнего уровня.

  11. Решил проверить, всё ли я понял и вернулся к шагу 9 Туториала CE.

    Есть решение с использованием структуры игрока и нахождением ID - Туториал CE v. 6.3 шаг 9 v. ID:


    [ENABLE]
    alloc(newmem,2048)
    label(returnhere)
    label(originalcode)

    newmem:
    cmp [ebx+10],1
    je originalcode

    mov [ebx+04],0
    originalcode:
    fldz
    jmp returnhere

    "Tutorial-i386.exe"+27E76:
    jmp newmem
    returnhere:


    [DISABLE]
    "Tutorial-i386.exe"+27E76:
    mov [ebx+04],eax
    fldz
    dealloc(newmem)

    Это понятно, это прекрасно работает.

    Я, всё-таки в продолжении своего вопроса, нашёл адреса с указателями здоровья наших игроков (Дейва и Эрика), поэтому вариант

    Туториал CE v. 6.3 шаг 9 v. Адрес:


    [ENABLE]
    alloc(newmem,2048)
    label(returnhere)
    label(originalcode)

    newmem:
    push edx
    lea edx,dword ptr [ebx+04]
    push eax
    lea eax,[[[006313a0]+4b8]+4]
    cmp edx,eax
    pop eax
    je originalcode

    push eax
    lea eax,[[[006313a0]+4bc]+4]
    cmp edx,eax
    pop eax
    je originalcode

    mov [ebx+04],0
    originalcode:
    pop edx
    fldz
    jmp returnhere

    "Tutorial-i386.exe"+27E76:
    jmp newmem
    returnhere:


    [DISABLE]
    "Tutorial-i386.exe"+27E76:
    mov [ebx+04],eax
    fldz
    dealloc(newmem)

    Всё вроде хорошо - при нажатии кнопок "Атака", здоровье наших остаётся неизменным, а враги сразу умирают.

    Но при нажатии "Случайная игра" умирают все четыре игрока и соответственно мы проиграли.

    Мастера, пожалуйста подскажите, где я ошибаюсь и почему не работает скрипт.

    И как правильно всё-таки записать скрипт во втором варианте. А то уже голову сломал.

    Извините меня тормоза, собственно SER[G]ANT мне уже всё ответил, перед этим.

    Для таких же лузеров как я, выложу правильный скрипт с использованием адресов с указателями:


    [ENABLE]
    alloc(newmem,2048)
    label(returnhere)
    label(originalcode)

    newmem:
    cmp ebx,[[006313a0]+4b8]
    je originalcode
    cmp ebx,[[006313a0]+4bc]
    je originalcode

    mov [ebx+04],0
    originalcode:
    fldz
    jmp returnhere

    "Tutorial-i386.exe"+27E76:
    jmp newmem
    returnhere:

    [DISABLE]
    "Tutorial-i386.exe"+27E76:
    mov [ebx+04],eax
    fldz
    dealloc(newmem)

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

    • Плюс 1
  12. SER[G]ANT Сенк!

    Во втором моём варианте, как раз я вписываю текущее максимальное здоровье.

    SER[G]ANT и ещё вопрос, если можно?

    Как встроить спидхак в свой тренер? Хочу на горячую кнопку назначить спидхак встроенный в CE. Нашёл в нете и на форуме "Speed hack_setSpeed (2)" (2 - это в моём случае), но пока не могу врубиться, как встроить это в таблицу и в тренер.

  13. ANT' timestamp='1400334599' post='17532']

    а зачем такие сложности с пушами и лиами, если можно просто.

    Круто!

    Но я "Лузер" и пока пишу только первый тренер.

    SER[G]ANT всё понял в Вашем скрипте, только не понял, что это - #100. (100 %; - здоровья или просто 100?)

    И в игре объединять InfHealth и OHK в один скрипт не стоит из-за NPC, которым нужно сохранить жизнь до поры. А делать фильтры на нужных NPC или всех врагов - эт слишком много и долго. Так что во втором моём варианте я разделил эти два чита используя две инструкции игры.

  14. Как я понял, раз ни кто не пишет, наверное тема на форуме мусолилась неоднократно.

    Жаль.

    Всё таки мне не понятно из-за чего происходил вылет в первом варианте. Это я где-то ошибаюсь или не возможно записать многоуровневый указатель в код в принципе?

    KENG может Вы посмотрите (начинал учиться по Вашим урокам на Тюбе, жаль, что нету урока 7 часть 1 и один урок, для меня тоже очень важный, без звука).

    KENG, если посмотрите и подскажите, моя благодарность не будет знать границ в пределах возможного :-D .

    Короче добился, чтобы первый вариант тоже работал и поэтому, для таких же "Лузеров" как я, выкладываю готовый вариант чита на бессмертие только Вашего Героя:

    [ENABLE]

    alloc(newmem,2048)

    label(returnhere)

    newmem:

    push edx

    lea edx,dword ptr [esi+000000FC]

    push eax

    lea eax,[[[DarkSoulsII.exe+FB3E3C]+74]+fc]

    cmp edx,eax

    pop eax

    pop edx

    je returnhere

    mov [esi+000000FC],ecx

    jmp returnhere

    "DarkSoulsII.exe"+1BB521:

    jmp newmem

    nop

    returnhere:

    [DISABLE]

    "DarkSoulsII.exe"+1BB521:

    mov [esi+000000FC],ecx

    dealloc(newmem)

    Но второй вариант, выложенный мною в предыдущем посте, всё же лучше и правильнее для игры.

    Так что тему можно закрыть.

  15. Нужно не

    Нужно так

    push edx

    push esp

    ..............

    pop esp

    pop edx

    je returnhere

    Поменял, всё равно вылет из игры.

    Я писал ранее, что можно использовать pusha/popa. Исправляюсь: эти команды работают с 2 байтами регистров(ax,bx...). Для eax,ebx... нужно использовать pushad/popad

    На pushad edx и т.д. ругается сам CE, говорит что эта инструкция не компилируется.

    Я конечно нашёл решение, внимательно просмотрев шаг 9 в обучении CE, т.е. с использованием структуры.

    Теперь бессмертие выглядит так:

    [ENABLE]

    alloc(newmem,2048)

    label(returnhere)

    label(originalcode)

    label(exit)

    label(myinstr)

    newmem:

    cmp dword ptr [eax+1c],01

    je myinstr

    originalcode:

    mov eax,[eax+000000FC]

    exit:

    jmp returnhere

    myinstr:

    push [eax+00000104]

    pop [eax+000000fc]

    jmp originalcode

    "DarkSoulsII.exe"+1BB052:

    jmp newmem

    nop

    returnhere:

    [DISABLE]

    dealloc(newmem)

    "DarkSoulsII.exe"+1BB052:

    mov eax,[eax+000000FC]

    а Убийство с одного удара, так:

    [ENABLE]

    alloc(newmem,2048)

    label(returnhere)

    label(originalcode)

    label(exit)

    newmem:

    cmp dword ptr [esi+1c],01

    je returnhere

    originalcode:

    mov [esi+000000FC],0

    exit:

    jmp returnhere

    "DarkSoulsII.exe"+1BB521:

    jmp newmem

    nop

    returnhere:

    [DISABLE]

    dealloc(newmem)

    "DarkSoulsII.exe"+1BB521:

    mov [esi+000000FC],ecx

    Но мне всё равно интересно - почему не работает первый вариант? И как правильно записать адрес с указателями в код и правильно выбрать регистр для кода (потому что я больше грешу именно на то, что я не правильно выбрал регистр и он где-то в тот же момент используется из-за этого происходит вылет.)

    PS: Кстати работа со структурой помогла найти характеристику гГероя, которую простым методом поиска с отсеиванием я найти не смог, а именно выносливость, так что у меня теперь есть и чит на бесконечную выносливость.

  16. Да и значение edx и esp запарывается, т.к. pushf их не сохраняет. Используйте pusha/popa

    Есть пара вопросов.

    1. Ориганальный код в кейве помещает 0, а в исходнике ecx. Опечатка?

    mov [esi+000000FC],0 Нет здесь не опечатка - это One Hit Kill.

    2. Что такое Ь ?

    Это очепятка :-D Извиняюсь не заметил. Это FC , (Гугл со своим переводчиком мутит.)

    Значения регистров esp и edx запарываются, т.к. pushf/popf сохраняют и загружают только регистр флагов. Используйте тогда pusha/popa

    Такие варианты, тоже пробовал:

    push edx

    lea edx,dword ptr [esi+000000FC]

    push esp

    mov esp,[DarkSoulsII.exe+FB3E3C]

    mov esp,[esp+74]

    lea esp,[esp+fc]

    cmp edx,esp

    pop edx

    pop esp

    je returnhere

  17. Спросил двух мастеров: в какую тему мне, как новичку, можно писать, пока ничего не ответили, поэтому создал новую тему.

    Пишу под себя тренер для игры Dark Souls V. 1.01.

    Использую Чит Egnite против 6.3 (RU).

    Вопросов много возникает походу написания.

    Вот один из них:

    Это код на бессмертие и убийство с одного удара.

    [ENABLE]

    alloc(newmem,2048)

    label(returnhere)

    label(originalcode)

    label(exit)

    newmem:

    push edx

    lea edx,dword ptr [esi+000000FC]

    cmp edx,087bDE2C

    pop edx

    je returnhere

    originalcode:

    mov [esi+000000FC],0

    exit:

    jmp returnhere

    "DarkSoulsII.exe"+1BB521:

    jmp newmem

    nop

    returnhere:

    [DISABLE]

    dealloc(newmem)

    "DarkSoulsII.exe"+1BB521:

    mov [esi+000000FC],ecx

    Если в строке "CMP EDX, 087bDE2C" стоит адрес для текущей загрузки игры, код работает.

    Нашёл постоянный адрес [[[DarkSoulsII.exe + FB3E3C] +74] + Ь] здоровья Ггероя.

    Никак не получается записать этот адрес с указателями в код, чтобы не было вылета из игры.

    Перепробовал разные варианты, вот один из них:

    [ENABLE]

    alloc(newmem,2048)

    label(returnhere)

    label(originalcode)

    label(exit)

    newmem:

    pushf

    lea edx,dword ptr [esi+000000FC]

    mov esp,[DarkSoulsII.exe+FB3E3C]

    mov esp,[esp+74]

    lea esp,[esp+fc]

    cmp edx,esp

    popf

    je returnhere

    originalcode:

    mov [esi+000000FC],0

    exit:

    jmp returnhere

    "DarkSoulsII.exe"+1BB521:

    jmp newmem

    nop

    returnhere:

    [DISABLE]

    dealloc(newmem)

    "DarkSoulsII.exe"+1BB521:

    mov [esi+000000FC],ecx

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

    PS: На всякий случай: [DarkSoulsII.exe + FB3E3C] можно записать и так [013B3E3C].

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

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

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