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

Рекомендуемые сообщения

Как можно записать в скрипт указатель на нужный адрес? Раньше я использовал в одном из скриптов такую запись:

mov eax,[[[[[[[1201ed44]+b8]+8]+14]+1b0]+10]+120]

И все работало. Сейчас, в другой игре, которая использует 64 битные адреса, нужно сделать похожую запись, пишу вот так:

mov eax,[[[[[[[[[[DAI.exe+160B8D0]+98]+28]+0]+100]+10]+10]+1d0]+20]+1a0]

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

Ссылка на комментарий
Поделиться на другие сайты

Как можно записать в скрипт указатель на нужный адрес?

Выложи скрипт.

Проще будет исправить в нём. 

А так к примеру, в недавнем моём скрипте:

push eaxmov eax,[00985954]         // Если ставил mov eax,["Fahrenheit.exe"+00585954] - компилятор тоже mov eax,[eax+0]            // ругался, поэтому пришлось записать, так mov eax,[00985954].mov eax,[eax+1c]mov eax,[eax+14]mov dword ptr [eax+54],#100 mov dword ptr [eax+58],#100 mov dword ptr [eax+5c],#100 mov dword ptr [eax+6c],#100 mov dword ptr [eax+74],6    pop eax
Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

NullAlex: большой код принято заключать не только в тег кода, но и в спойлер.
[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048,"DAI.exe"+373B05)label(returnhere)label(originalcode)label(exit)alloc(Coord,64)alloc(offset,64)newmem: //this is allocated memory, you have read,write,execute access//place your code heremov [offset],(float)0.7push eaxmov eax,[[[[[[[[[[DAI.exe+160B8D0]+98]+28]+0]+100]+10]+10]+1d0]+20]+1a0]mov [Coord],eaxfld [Coord]fadd [offset]fstp [Coord]mov eax,[Coord]mov [rbx+10],eaxpop eaxpush eaxmov eax,[[[[[[[[[[DAI.exe+160B8D0]+98]+28]+0]+100]+10]+10]+1d0]+20]+1a4]mov [rbx+14],eaxpop eaxpush eaxmov eax,[[[[[[[[[[DAI.exe+160B8D0]+98]+28]+0]+100]+10]+10]+1d0]+20]+1a8]mov [rbx+18],eaxpop eaxoriginalcode:mov eax,[rbx+10]movss xmm1,[rbx+18]exit:jmp returnhere"DAI.exe"+373B05:jmp newmemnopnopnopreturnhere:  [DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)dealloc(Coord)dealloc(offset)"DAI.exe"+373B05:mov eax,[rbx+10]movss xmm1,[rbx+18]
Ссылка на комментарий
Поделиться на другие сайты

Можно не писать такой длинный указатель, а сделать инъекцию, которая работает с поинтером или вытаскивает его. Получится один, два уровня из всего этого длинного указателя. Ну или считать на ассемблере и возможно с проверкой каждого уровня указателя на не null ссылку

Ссылка на комментарий
Поделиться на другие сайты

Попробуй так:

Если компилятор будет ругаться, тогда [DAI.exe+160B8D0] сперва попробуй так  ["DAI.exe"+160B8D0], а если и это не скушает, то замени на адрес без букв.

 

PS: Чуть-чуть подправил скрипт - были лишние push и pop.

[ENABLE]alloc(newmem,2048,"DAI.exe"+373B05)label(returnhere)alloc(Coord,64)alloc(offset,64)newmem:mov [offset],(float)0.7push ebxpush eaxmov ebx,[DAI.exe+160B8D0]mov ebx,[ebx+98]mov ebx,[ebx+28]mov ebx,[ebx+0]mov ebx,[ebx+100]mov ebx,[ebx+10]mov ebx,[ebx+10]mov ebx,[ebx+1d0]mov ebx,[ebx+20]mov eax,[ebx+1a0]mov [Coord],eaxfld [Coord]fadd [offset]fstp [Coord]mov eax,[Coord]mov [rbx+10],eaxmov eax,[ebx+1a4]mov [rbx+14],eaxmov eax,[ebx+1a8]mov [rbx+18],eaxpop eaxpop ebxmov eax,[rbx+10]movss xmm1,[rbx+18]jmp returnhere"DAI.exe"+373B05:jmp newmemnopnopnopreturnhere:[DISABLE]"DAI.exe"+373B05:mov eax,[rbx+10]movss xmm1,[rbx+18]dealloc(Coord)dealloc(offset)dealloc(newmem) 
Изменено пользователем Garik66
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

Cпасибо, вашим методом указатели работают через скрипт) Только в том скрипте, который вы предложили еще все ebx на rbx поменять понадобилось - адреса то 64 битные, в ebx не умещались.

Ссылка на комментарий
Поделиться на другие сайты

Судя, потому что я услышал, можно обойтись без указателей.

Проверь ещё такой скрипт:

Но в данном случае может понадобиться найти фильтр, если нужная инструкция работает не только с нашим адресом.

 

PS: Может неправильно объявляю переменные (ни разу не ломал 64-битные игрушки) скорее всего нужно так:

[ENABLE]alloc(newmem,128,"DAI.exe"+373B05)label(returnhere)registersymbol(Coord)registersymbol(offset)newmem:push eaxmov eax,[rbx+1a0]mov [Coord],eaxfld [Coord]fadd [offset]fstp [Coord]mov eax,[Coord]mov [rbx+10],eaxmov eax,[rbx+1a4]mov [rbx+14],eaxmov eax,[rbx+1a8]mov [rbx+18],eaxpop eaxmov eax,[rbx+10]movss xmm1,[rbx+18]jmp returnhereCoord:dd 0offset:dd (float)0.7"DAI.exe"+373B05:jmp newmemnopnopnopreturnhere:[DISABLE]"DAI.exe"+373B05:mov eax,[rbx+10]movss xmm1,[rbx+18]unregistersymbol(Coord)unregistersymbol(offset)dealloc(newmem) 
Coord:dq 0offset:dq (float)0.7
Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

Не, без указателя там нельзя было обойтись. Я rbx после внесения указателя в eax восстанавливал pop'ом.

А насчет вашей замены alloc на registersymbol.. в чем вообще разница между ними? Я обычно в alloc все заношу, как-то мне это более понятно - резервирую место в памяти с указанием размера и туда забрасываю значения.

Ссылка на комментарий
Поделиться на другие сайты

А насчет вашей замены alloc на registersymbol.. в чем вообще разница между ними?

Практически ни в чём, как я понял, только при использовании registersymbol выделяется память под переменную уже внутри выделенной памяти newmem,128, а в случае alloc - отдельно выделяется память под переменную.

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

Возникла еще проблема. Захотел сделать для этой же игры бессмертие. Нашел нужную инструкцию - при ее отключении урон просто не засчитывается. Эта же инструкция работает также и с монстрами, соответственно все становятся бессмертными. Инструкция вида cmp dword ptr [rbx+00000168],00, в rbx+168 находится адрес жизней, если монстр бьет по мне - моих (который статический), если я бью по монстру - его. В других играх ставил простой фильтр, который сравнивал значение регистра с адресом жизней (с учетом смещения, естественно) и если адрес совпадал с геройским - скрипт перепрыгивал оригинальную инструкцию. Сейчас  же у меня что-то не выходит, фильтр не срабатывает, в чем может быть проблема? К слову, недавно делал еще 1 скрипт для этой игры и там также была проблема с фильтром, определяющим адрес, фильтр заработал только с регистром, в котором находился "0" в нужном мне случае.

 

 

Адрес самих жизней - 7FFEFDE9BA8

 

UPD

 

Просидел полчаса, не понимал что не так, запостил здесь и сразу же пришла мысль сравнить rbx не с самим значением, а с rax, предварительно положив это же значение в него (rax) и все заработало.. теперь задаюсь другим вопросом - почему не получилось сравнить напрямую? В прошлых играх всегда напрямую сравнивал и работало.. точно также, как и с этими указателями - старая запись перестала работать в 64 битной игре..

[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048,"DAI.exe"+1671B5)label(returnhere)label(originalcode)label(exit)newmem: //this is allocated memory, you have read,write,execute access//place your code herecmp rbx,000007FFEFDE9A40je exitoriginalcode:cmp dword ptr [rbx+00000168],00exit:jmp returnhere"DAI.exe"+1671B5:jmp newmemnopnopreturnhere:[DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)"DAI.exe"+1671B5:cmp dword ptr [rbx+00000168],00//Alt: db 83 BB 68 01 00 00 00
Изменено пользователем Abraham08
Ссылка на комментарий
Поделиться на другие сайты

Возникла еще проблема.

Не поленись - сделай Анализ структуры:

Во- первых, где-то здесь ([rbx+00000164]) или ([rbx+0000016с]) скорее всего будут лежать максимальная жизнь героя и соответсвеено можно будет записать, код так:

newmem: cmp [rbx+........],...........// во-вторых найдёшь фильтрjne originalcodepush [rbx+00000164] // выталкиваем максимальное значение жизни в стек. (или [rbx+0000016с])pop [rbx+00000168]  // заталкиваем в адресoriginalcode:cmp dword ptr [rbx+00000168],00

Во-вторых найдёшь фильтр.

Ссылка на комментарий
Поделиться на другие сайты

Да, так тоже работает, адрес максимальных жизней лежал в [rbx+170].

Но уже получилось и по другому сделать, запись вида:

cmp rbx,000007FFEFDE9A40je exitoriginalcode:cmp dword ptr [rbx+00000168],00exit:jmp returnhere

Оказалась неисправной, а вот так:

push raxmov rax,000007FFEFDE9A40cmp rbx,raxje exitoriginalcode:cmp dword ptr [rbx+00000168],00exit:pop raxjmp returnhere

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

Ссылка на комментарий
Поделиться на другие сайты

Не  понимаю в чем разница, какие еще сюрпризы принесет 64 разрядность.

Я думаю, что не в разрядности дело.

Вот сейчас пишу скрипты для очень старой игрушки.

И у меня тоже фильтр (по регистру EDI), причём, при соблюдении условий в игре для работы фильтра, на одну секунду фильтр как бы работает в противоположную сторону, а потом работает как надо. 

Ссылка на комментарий
Поделиться на другие сайты

А может кто-нибудь ответить еще на 1 вопрос - почему некоторые адреса, изменяемые через скрипт, работают иначе, чем при ручном изменении? Простой пример: я нашел адрес с координатами героя (там их было штук 100 для каждой координаты, я выбрал нужный), если вручную, через таблицу, поменять значение, то происходит телепорт и все нормально. Но если в этот адрес занести нужное значение через скрипт (записью вида: mov [xxxxxxxx],(float)xx ), то происходит лишь иллюзия телепорта - герой перемещается на нужный участок, но при любом движении сразу же возвращаетя назад. Я обратил внимание, что при ручном изменении все оставшиеся 99 адресов также изменяются на то, что я ввел в первый адрес. А при изменении скриптом они остаются прежними, меняется только тот, в который я занес значение, что и заставляет, видимо, персонажа вернуться назад. Как с этим бороться, что сделать, чтобы при изменении адреса через скрипт эффект был бы аналогичен ручному изменению?

Ссылка на комментарий
Поделиться на другие сайты

что сделать, чтобы при изменении адреса через скрипт эффект был бы аналогичен ручному изменению?

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

 

А так, без этой информации, попробуй в скрипте поменять местами - допустим у тебя записан скрипт так: ты вводишь новые координаты, а потом срабатывает оригинальная инструкция -> сделай наоборот, сперва срабатывает оригинальная инструкция, а потом твои инструкции по записи новых координат.

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

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

 

Инструкция вообще не имеет отношения к координатам..

У меня есть структура заклинаний. Там можно изменить кол-во вылетающих снарядов, скорость, траекторию и даже дочерние части спелла, прикрепленные к заклинанию. Т.е. изменяя числа и id в этой структуре можно создавать свои уникальные заклинания. Так вот, я написал скрипт, который приделан к удару правой рукой (инструкция считывается пока нажата кнопка удара, успевает за 1 нажатие проработать раз 15-20), сразу после срабатывания этой инструкции я вписал свои mov [xxx],(float)xx или mov [xxx],#xx и так далее, где вместо [xxx] - адреса, в которые я хочу внести изменения (и которые не имеют отношения к выполняемой инструкции), а в (float)xx - новые значения. Так вот некоторые адреса, изменяемые таким образом, дают нужный результат, а другие нет, хотя если менять их вручную - все выдают нужный результат. Телепорт я привел только в качестве примера тк это один из вариантов, в которых такая подмена работала неверно. Вот и хочу понять где зарыта собака.. скрипт выкладывать нет смысла мне кажется - стандартный шаблон, сразу после оригинальной инструкции (повторюсь, не имеющей отношения к изменяемым адресам) эти строки с подменой значений в адресах. Или так вообще не стоит делать?

И еще, эти адреса, которые пытаюсь изменить таким способом - статические.

Изменено пользователем Abraham08
Ссылка на комментарий
Поделиться на другие сайты

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

Я тоже использовал такой метод, в некоторых скриптах. Но не все адреса  в структуре будут работать именно с той одной инструкцией с которой ты и построил структуру.

У меня было именно так, 

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

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

 

Итак, что делает этот скрипт? Он телепортирует всех монстров, которые в данный момент просчитываются игрой, к игроку. Работа здесь идет только с одной инструкцией:

 

"DAI.exe"+BCB4AA:
movaps xmm0,[rax+000001A0]

 

Она отвечает за координаты как героя, так и монстров, в [rax+1A0] хранится адрес этой самой координаты (первой идет X, с шагом 4 идут Y и Z).

Вначале (то, что находится между //1) мы cравниваем что лежит в [rax+1A0] (координата Х) и [rax+1A8] (координата Z) с тем, что лежит в адресах этих координат, принадлежащих игроку, т.е. делаем фильтр, отсеивающий их изменение. Далее (//2) мы кладем координаты игрока в [moffset+4,8,C], сам [moffset] равен 1, что отвечает за расстояние, на котором должны появится монстры относительно игрока, а [mmindist] - дистанция, на которой монстры могут быть захвачены (т.е. если ввести 1 - монстры не захватятся вообще, а в 5000 захватываюстя со всей локации), таким образом монстры должны были бы телепортироваться к игроку. Вот эта часть мне ясна. Собственно, если так и оставить (заменив [moffset+*] на [rax+*]), то монстры действительно будут телепортироваться к игроку, но после отключения скрипта, сделав хоть 1 движения, они сразу же вернутсья туда, откуда их вытащили. И вот дальнейшая часть скрипта каким-то образом это исправляет, заставляя их остаться на месте.

 

С другими инструкциями, вроде бы, работы не ведется, потому мне не понятно как это происходит.

 

Особенно мне непонятно то, что находится между //3 (в дальнейшем есть еще несколько таких конструкций). Как я понимаю, это какой-то цикл, но как именно он работает так и не смог разобраться, может кто-то объяснить эту конструкцию? Могу сказать одно - если отключить эти циклы, то телепорта не будет происходить никакого.. а еще, перед последним патчем в mov rcx,2 (это счетчик, как я понимаю, т.е. сколько раз должен цикл выполниться), был равен 9. После патча такая конструкция стала работать неверно - монстры захватывались далеко не все, могли телепортироваться те, которые стояли в другой части карты, а стоящие в 2х шагах не захватывались. Когда я поменял 9 на 2 - все заработало снова, как прежде.

 

Извиняюсь за всю эту стену, но сам так и не разобрался во всем этом, может найдется кто-то, кому не лень будет немного пролить свет на все это?) Или, хотя бы, объяснить как работает цикл между //3.

[ENABLE]alloc(magnet,4096,"DAI.exe"+BCB4AA)label(returned)label(skipme)label(skipplayer)label(pcoord)label(mcoord)label(moffset)label(mcount)label(mmindist)label(mcalcdist)label(mconst)label(pangle)label(tests)registersymbol(mmindist)registersymbol(mcount)registersymbol(moffset)magnet:push raxpush rbxpush rdxpush rcxpush rdipush rsipush edx //1push rbxmov rbx,[DAI.exe+160B8D0]mov rbx,[rbx+98]mov rbx,[rbx+28]mov rbx,[rbx+0]mov rbx,[rbx+100]mov rbx,[rbx+10]mov rbx,[rbx+10]mov rbx,[rbx+1d0]mov rbx,[rbx+20]mov edx,[rbx+1a0]pop rbxcmp [rax+000001A0],edxpop edxjne testspush edxpush rbxmov rbx,[DAI.exe+160B8D0]mov rbx,[rbx+98]mov rbx,[rbx+28]mov rbx,[rbx+0]mov rbx,[rbx+100]mov rbx,[rbx+10]mov rbx,[rbx+10]mov rbx,[rbx+1d0]mov rbx,[rbx+20]mov edx,[rbx+1a8]pop rbxcmp [rax+000001A8],edxpop edxje skipplayer //1{let's just check this isn't the player}//mov ebx,[[[[[[[DAI.exe+FDB074]+74]+B8]+8]+14]+1B0]+10]//cmp ebx,eax//je skipplayer{copy player coords}tests:push edx //2push rbxmov rbx,[DAI.exe+160B8D0]mov rbx,[rbx+98]mov rbx,[rbx+28]mov rbx,[rbx+0]mov rbx,[rbx+100]mov rbx,[rbx+10]mov rbx,[rbx+10]mov rbx,[rbx+1d0]mov rbx,[rbx+20]mov edx,[rbx+1a0]pop rbxmov [moffset+4],edxpop edxpush edxpush rbxmov rbx,[DAI.exe+160B8D0]mov rbx,[rbx+98]mov rbx,[rbx+28]mov rbx,[rbx+0]mov rbx,[rbx+100]mov rbx,[rbx+10]mov rbx,[rbx+10]mov rbx,[rbx+1d0]mov rbx,[rbx+20]mov edx,[rbx+1a8]pop rbxmov [moffset+C],edxpop edxpush edxpush rbxmov rbx,[DAI.exe+160B8D0]mov rbx,[rbx+98]mov rbx,[rbx+28]mov rbx,[rbx+0]mov rbx,[rbx+100]mov rbx,[rbx+10]mov rbx,[rbx+10]mov rbx,[rbx+1d0]mov rbx,[rbx+20]mov edx,[rbx+1a4]pop rbxmov [moffset+8],edxpop edx//2mov [mmindist],(float)5000mov [moffset],(float)1//3add rbx,1A0mov rsi,rbxmov rdi,pcoordcldmov rcx,2rep movsb //3//jmp skipplayer{copy monster coords}add rax,1A0mov rsi,raxmov rdi,mcoordcldmov rcx,2rep movsbsub rax,1A0{calculate distance}movss xmm0,[pcoord]movss xmm1,[mcoord]subss xmm0,xmm1mulss xmm0,xmm0movss [mcalcdist],xmm0movss xmm0,[pcoord+4]movss xmm1,[mcoord+4]subss xmm0,xmm1mulss xmm0,xmm0movss [mcalcdist+4],xmm0movss xmm0,[pcoord+8]movss xmm1,[mcoord+8]subss xmm0,xmm1mulss xmm0,xmm0movss [mcalcdist+8],xmm0movss xmm0,[mcalcdist]movss xmm1,[mcalcdist+4]addss xmm0,xmm1movss xmm1,[mcalcdist+8]addss xmm0,xmm1movss [mcalcdist+c],xmm0fld dword ptr [mcalcdist+c]fsqrtfstp dword ptr [mcalcdist+c]{test distance}movss xmm0,[mcalcdist+c]movss xmm1,[mmindist]cmpss xmm0,xmm1,1movss [mcalcdist+C],xmm0cmp [mcalcdist+C],0je skipme{increment monster counter}mov rcx,[mcount]inc rcxmov [mcount],rcx{get orientation}//mov ebx,[[[[DAI.exe+FDB074]+74]+B4]+A8]// movss xmm0,[ebx+54]//movss xmm0,[ebx]//addss xmm0,[mconst+4]//mulss xmm0,[mconst]//movss [pangle],xmm0{calculate sine/cosine pair}fld dword ptr [pangle]fsincosfstp dword ptr [pangle+4]fstp dword ptr [pangle+8]{calculate offsets}movss xmm0,[pcoord]addss xmm0,[moffset+4]movss xmm1,[moffset]mulss xmm1,[pangle+8]subss xmm0,xmm1movss [mcoord],xmm0movss xmm0,[pcoord+4]addss xmm0,[moffset+8]movss [mcoord+4],xmm0movss xmm0,[pcoord+8]addss xmm0,[moffset+C]movss xmm1,[moffset]mulss xmm1,[pangle+4]subss xmm0,xmm1movss [mcoord+8],xmm0{assign new coords to "previous" vector}add rax,1A0mov rsi,mcoordmov rdi,raxcldmov rcx,crep movsb{assign new coords to "next" vector}add rax,20mov rsi,mcoordmov rdi,raxcldmov rcx,crep movsbskipme:pop rsipop rdipop rcxpop rdxpop rbxpop rax{old scope}movaps xmm0,[rax+000001A0]jmp returnedskipplayer:mov [mcount],0 {start counting from zero again}pop rsipop rdipop rcxpop rdxpop rbxpop raxmovaps xmm0,[rax+000001A0]jmp returnedpcoord:dq 0dq 0dq 0pangle:dq 0dq 0dq 0mcoord:dq 0dq 0dq 0mcount:dq 0mcalcdist:dq 0dq 0dq 0dq 0mmindist:dq (float)10moffset:dq (float)5dq (float)0dq (float)0dq (float)0mconst:dq (float)3.14159265dq (float)1dq (float)-1{blank out the call to fall timer test (I think?)}//"DAI.exe"+34139D://nop//nop//nop//nop//nop{hook magnet at per-critter position update code}"DAI.exe"+BCB4AA:jmp magnetnopnopreturned:[DISABLE]"DAI.exe"+BCB4AA:movaps xmm0,[rax+000001A0]unregistersymbol(mmindist)unregistersymbol(mcount)unregistersymbol(moffset)dealloc(magnet)
Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

Привет всем, помогите правильно в писать указатели, как фильтр.

[ENABLE]aobscanmodule(BeskonechnyeZhizniArmii,mowas_2.exe,F3 0F 10 81 BC 00 00 00 51)alloc(newmem,$1000)label(returnhere)label(originalcode)registersymbol(BeskonechnyeZhizniArmii)newmem:mov eax,["mowas_2.exe"+00A40130]mov eax,[ecx+0000000a]mov eax,[ecx+000000f8]mov eax,[ecx+0000000C]mov eax,[ecx+000000BC]mov eax,["mowas_2.exe"+00A4002C]mov eax,[ecx+00000000]mov eax,[ecx+000000f8]mov eax,[ecx+0000000C]mov eax,[ecx+000000BC]mov eax,["mowas_2.exe"+00A3FD4C]mov eax,[ecx+00000004]mov eax,[ecx+00000000]mov eax,[ecx+000000f8]mov eax,[ecx+0000000C]mov eax,[ecx+000000BC]mov [ecx+000000BC],(float)999originalcode:movss xmm0,[ecx+000000BC]jmp returnhere"mowas_2.exe"+4D4960:jmp newmemnopnopnopreturnhere:[DISABLE]"mowas_2.exe"+4D4960:movss xmm0,[ecx+000000BC]unregistersymbol(BeskonechnyeZhizniArmii)dealloc(newmem)
Изменено пользователем Baracuda
Ссылка на комментарий
Поделиться на другие сайты

Baracuda, хватит некропостить - в последний раз устно предупреждаю. И заучи уже наконец-таки тег кода

P.S.

И - да, "гей хакерам" привет, уже в который раз :)

Ссылка на комментарий
Поделиться на другие сайты

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

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

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