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

Dark_XSM

Стажёры
  • Постов

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

  • Посещение

Репутация

0 Навыки не прокачены
  1. Только если адреса грузить отдельным файлом с таблицей, я так думаю. Да не сказать что с большим, просто утомляет. Мне надо было написать небольшой exe для запуска, а этот LUA то одно не умеет, то второе не так как обычно.Что особого в готовом решении я не совсем понял, тем более что адрес я таки собираю с нуля, да и значение нормально считывается(тут, кстати, забавная штука, указатели на адрес собираются после записи туда значения, в результате чего отловить изначальную запись у меня не получилось, адрес всегда разный)... Фриз/анфриз мне вообще не нужен, значение задаётся один раз, и пока не вырубишь(ясен пень что я не стал заниматься фигнёй, и нашёл куда пишется базовое значение, с которого берутся все остальные, и с которым сравниваются изменяющиеся). Вроде нашёл что-то, тоже позволяет скрипты писать... тока у меня с ней косяк, я не доверяю прогам, и доступ она получила крайне ограниченный, так что не работает (менять ничего не хочу, пусть не работает) Сделал. С ним та же фигня, путь уже чётко заданный нужен. Можно конечно заставлять юзера пихать файл в C:\, но хочется без этого. В курсе, это я так...Правда с другими языками я тоже не знаком почти. В общем, благодарю за помощь, но, кажись, LUA я оставлю в сторонке, и буду писать ланчеры на C++ Тем более что ночью скачался C++ Builder 2010-го года. Правда с установкой непонятная фигня, но это уже к теме не относится.
  2. Эм... да не, таблица по моему в файле есть, раз он спрашивает оставить ли её. Меня смущает сам факт этого вопроса, ведь если там нажать "No", то и изменений не будет.В общем, я решил, что для exe лучше в самом скрипте адреса считать, что бы не было этого вопроса. Про MHS я не в курсе(таких сокращений дико много, я не представляю о чём речь). По поводу запуска - фиг бы знал. В теме всё то же что я уже знаю, и что не работает. os.execute хорошо бы, но она запускает только то что записано в системные пути. Было бы хорошо считать путь из реестра... Кстати, через cmd можно бы его получить, и если выполняемый LUA скрипт может принимать внешние параметры запуска, то передавать через них. Да и вообще, если так делать, то можно на реестр забить, и считывать прям так. P.S Или может ну его на фиг, на каком-нить нормальном языке писать?..
  3. А "return caFree" чего делает? И про "создать запись "MyFloatValue" в главной таблице CE: по шаблону f[[[[process.exe+0x0051E404]+0x24]+0xE4]+0xA0]" я не совсем понял. В главной таблице можно создать просто адрес с указателями, а f[[...]+..] для меня загадка(в смысле, понятно что это, но куда это писать?)... upd: файл я создал(exe), но при запуске значения не меняются, да ещё и вылазит вопрос, хочу ли я оставить предыдущую таблицу. Значения так-же не меняются если я запущу CE через process.ct, и соглашусь на выплнение LUA-скрипта. Если сначала запустить CE, а потом скрипт... та же фигня. Процесс сверху вроде тот написан, но значения он не считывает. В списке в полях адресов строки типа [process.exe+490DA6] OpenProcess("process.exe") работает как надо. Ну и вдогонку, щас процесс создаётся через createProcess("DISK:/path/process.exe",nil,nil,nil), а надо что-нить типо createProcess("process.exe",nil,nil,nil) Как это реализовать? Именно такая запись почему-то не работает, даже если exe лежит в папке с... exe Путь-то может быть разный...
  4. Наверно тему лучше было назвать как-то иначе, потому что есть ещё один вопрос, и к формам отношения никакого не имеет. Есть скрипт на LUA Он стартит процесс, открывает его, ловит создание одного адреса(таки допёр как собрать адрес из указателей юзая LUA), и если там появляется цифра 5, меняет её на 6(адрес статичный, в нём тока эта цифра, так что всё ок). А нельзя ли как-нить сделать из этого .exe ? Типа LaunchNPatch.exe Ибо основная идея - сделать эту штуку общедоступной, без использования CE Да, и ещё, вот, собсно, скрипт. Хотелось бы узнать, как можно его улучшить
  5. Извиняюсь за тупой вопрос, но как в LUA работать с формами? С формой созданной в CE-же, с дефолтным названием UDF1 События запускают скрипты, это фигня, а как вытащить текст из поля CEdit к примеру? Я уже все известные мне способы перепробовал, либо говорит что неожиданное появление какого-то знака, либо ничего не делает. Я уже 3 часа потратил, в ИНете задолбался рыться, нигде никакой инфы о работе с формами нет. Вот ж блин, почти допёр.Решил завтра её попробовать, а она, оказывается, как раз и есть то, что мне надо.
  6. 5 флоатная, выглядит как 40A00000 "0xADDRESS" уже пробовал. Можно бы вычислить по обращениям в период между началом загрузки, и записью значения в постоянное место, но почему-то условие типа ((ESP == 0x0012FABC) and (EDI == 0x40A00000)) не срабатывает. А иначе я задолбаюсь кнопку продолжения тыкать.
  7. LUA я не знаю, на OllyDBG оно жалуется что найден отладчик.
  8. Не знаю где спросить, а ИНет почему-то сильно тормозит, и просмотр тем куда надо писать может занять до 30 минут, так что спрашиваю тут: Нельзя ли поставить брейкпоинт так, что бы он срабатывал только тогда, когда число в адресе становится равным, к примеру, 5 ? Я не знаю как сформулировать вопрос, так что опишу ситуацию: Есть некий адрес, который используется для хранения самых разных значений, в том числе и нужного мне. Обращений к адресу примерно 1000 в секунду, примерно с 600 разных мест. И какое-то из обращений пишет в адрес цифру 5 Можно как-то просто узнать, где она пишется, а не проверять каждую из 600 функций вручную?
  9. Ещё вопрос имеется. Есть несколько строк типа "repe movsd", в которых происходит что-то страшное. Мне в это надо вмешаться, и что-то подправить, но я не представляю как, и что... Как оно работает, и как вмешаться в её работу? Там что-то происходит, с участием адреса 306F962C (хотя скорее не он нужен), надо что бы этого не происходило. upd: думаю, это важно. Во время работы этой строки меняются esi и edi, с шагом 4 байта, и ecx с шагом 1 00000184 306F9268 01B2F610 ... 00000183 306F926C 01B2F614
  10. Понял.И ещё вопрос возник. Не совсем по этой теме... Я так понял, на LUA можно несколько удобнее сделать? Там же во время выполнения можно менять переменные по горячим клавишам, таким образом включая/отключая разные секции кода? Тогда получается что в моём случае можно было бы менять сразу несколько переменных, включая и отключая любые из них, не трогая остальные(записывающиеся в адреса), а в автоассемблере есть только варианты вкл/выкл вообще всего... Жаль что из программирования я тока про Паскаль чего-то помню, и про Java Script
  11. xmm0 используется там каждые 20-30 строк, при чём постоянно с записями типа movss xmm0,[какой-нить адрес], и movss [тот же адрес],xmm0 Предыдущий код я понял, в тот раз затупил из-за movss xmm0,[ecx], но без неё всё стало ясно. Не совсем понял чем mov ecx,[[[[[p4dftre.dll+01849C8C]+24]+28]+128]+4] lea ecx,[ecx+208]хуже mov ecx,[p4dftre.dll+01849C8C] mov ecx,[ecx + 24] mov ecx,[ecx + 28] mov ecx,[ecx + 128] mov ecx,[ecx + 4] lea ecx,[ecx + 208]Одно и то же делают вроде? Или это в целях повышения стабильности? Типа, "а вдруг!.."? Но ведь если адрес поменяется, оба варианта окажутся не верными... и в случае сравнения вообще ничего не произойдёт, всё будет идти как раньше, вылета не будет. Кстати, крэш. Разбираюсь. upd: помогла замена fld dword [value] faddp dword [ecx]на fld dword [ecx] fadd dword [value] fstp dwoed [ecx]Работает, но выглядит ужасно(не код, а последствия его срабатывания). Всё же оставлю сравнение, бывает когда изменение переменной нежелательно(оно само определяет, надо ли менять) newmem: pushf mov ecx,[[[[[p4dftre.dll+01849C8C]+24]+28]+128]+4] lea ecx,[ecx+208] cmp eax,ecx jne originalcode fld dword [ecx] fadd dword [value] fstp dword [ecx] movss xmm0,[ecx] originalcode: popf mov ecx,esi movss [eax],xmm0 jmp returnhere
  12. Если честно, не очень понял. Адрес же через указатели генерится... и если адрес которым будет оперировать игра не совпадёт с тем с которым планировалось, просто ничего не произойдёт... по моему... Эм... указатель-то вроде точный... но не делать сравнения, значит просто его туда дописать отдельно? Э... что-то я тут подвис. Там же куча переменных идёт, через xmm0, все разные, для разных адресов...А в этом примере получается что любой адрес будет получать то что генерится в ecx И кстати, почему ecx? Учтём.P.S В общем, либо я туплю, либо чего-то не понимаю. В данной ситуации это немного разные вещи...
  13. Хм... это бы конечно хорошо, но как это скрестить с тем что есть я не понял. Есть вот что: newmem: pushf //на всякий push ebx //в ebx строю указатель, в eax он уже есть mov ebx,[[[some.dll+01249F10]+11]+200] //собсно, постройка указателя add ebx,208 //всё ещё она... cmp eax,ebx //сравнение того что у меня получилось с тем что записано в eax, ибо через это место единовременно считается примерно 200 переменных для разных адресов jne originalcode //прыг если не то add [eax],500000 //а если то, то, к примеру, добавить 500 тысяч обычных прям в память movss xmm0,[eax] //запись из памяти в какое-то страшное место originalcode: pop ebx //восстановление ebx до чего-то там в диапозоне от 1 до 7 popf //восстановление "на всякий" mov ecx,esi //неизвестная фигня movss [eax],xmm0 //запись в память из какого-то страшного места jmp returnhere Именно тут вместо 500000 требуется нечто более точное, ибо в [eax] число с точкой, и требует точности, а то что я написал хоть и работает, но немного не так как хотелось бы. mov ecx,esi сюда запихать пришлось потому что в месте внедрения не хватило места для джампа. Я не знаю что они делают. P.S Я, кстати, думаю, что там где +500000 можно записывать не в память, а локально, но не знаю есть ли смысл. Быстродействие не страдает абсолютно, а для чего ещё менять запись?.. upd: Вот до чего додумался за просмотром серии симпсонов(7-й сезон): newmem: pushf push ebx mov ebx,[[[[[p4dftre.dll+01849C8C]+24]+28]+128]+4] add ebx,208 cmp eax,ebx jne originalcode fld dword [ebx] fadd dword [value] fstp dword [ebx] movss xmm0,[ebx] originalcode: pop ebx popf mov ecx,esi movss [eax],xmm0 jmp returnhere value: dd (float)1.0Удивительно, но работает именно так как надо. Благодарю за помощь. Хоть я и не понял как работает вот это: fld dword [esp] fadd dword [value] fstp dword [esp] ... value: dd (float)1.0 (это я к тому, что хотелось бы подробностей, как оно взаимосвязано, но самому смотреть лень)
  14. Не знаю, ответят или нет, но спрашиваю: А при замене куска памяти(Injection), если его можно включать и выключать, да и вообще, может произойти крэш? Типа, прога обращается к адресу 004F2A12, а инжект в этот момент заменяет адреса с 004F2A00 по 004F2A20(допустим). Я только второй день вплотную знакомлюсь со всей этой ассемблерной фигнёй, так что вопросов масса, но этот меня волнует больше всего. Ещё вопрос: иногда случается крэш без видимой причины. Всё вроде работает, но при установке брейкпоинта и пошаговом выполнении иногда крэшится. В чём может быть причина? Так всё работает идеально, а поставил брейкпоинт, пару циклов(и не обязательно пару, может вообще не вылететь, может вылететь сразу же) вручную запустил(ну в смысле кнопка Run, когда прога на брейкпоинте тормознёт), и крэш. Ну и интересно было бы как добавить к float'ному значению float'ное же. А то в eax что-то вроде 175.4727812, и добавть надо, допустим 3.4383 Читал статьи(где про FPU), но автоассемблер говорит что хрен бы знал чего я от него хочу...
×
×
  • Создать...

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

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