N

Исправление ошибки OllyDbg для MU Online

Автор napuk228, 2010 Март 24, 14:52

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Imp0ssible

#20
Начни отсюда 0053F055, и все получится)

Свободное пространство можешь найти тут 0054CDC9


Работай на здоровье. Мэйн не был упакован и никакой защиты.

napuk228

Цитата: sokk от 2010 Март 25, 13:18  Начни отсюда 0053F055, и все получится)

Свободное пространство можешь найти тут 0054CDC9


Работай на здоровье. Мэйн не был упакован и никакой защиты.

0054CDC9 - Такого у меня даже нет...

А 0053F055 сдесь  у меня кусок кода...

p.s пробовал снова та же самая ошибка....
У кого есть время помогите через тим вивер ... просто посмотрите в чем моя ошибка...

Imp0ssible


## здесь был скриншот ##

потом

## здесь был скриншот ##


napuk228

Цитата: sokk от 2010 Март 25, 14:34  ## здесь был скриншот ##

потом

## здесь был скриншот ##

Хмм... Во первых когда я просто открываю МАИН первое состояние у меня такое :



Почему у меня нет нормально кода .. а просто вот так всё ?

А вот что когда перехожу на 0054CDC9 :
Ну сдесь я вижу что кусок кода и свободное пространство:

 

И насколько видно из первого скрина Entry Point у меня это : (08B69000)

p.s. После всего этого опять пробую сделать все :

1. На оффсете 0054CDC9  прописовую имя мой dll.
2. После PUSH  и  этот же оффсет 0054CDC9.
3. Потом узнал оффсет LoadLibraryA.
4. CALL DWORD PTR DS:[54D174] - пишу ниже строчки где писал PUSH.
5. Потом JMP и токча входа 08B69000
(Адрес точки входа даже посмотрел в PE Explorer ) Вот скрин :



В итоге у меня получилось вот что :
(Обращайте внимание на оффсеты .. если там все правильно)



6. После я выделю ту часть кода которую изменил и жму правый клик ---> Copy to Executable ---> Selection



И вот что мне на этот раз выдало ... ( P.S. Чуствую на этот раз все получится )))) )



После я  нажал правый клик.... Save Fail ...  и успешно сохранил маин ...  теперь надо его как то проверить))))))




Очень интересно... вроде все сделал правильно... всключил сервер... кинул маин в клиент.. а DLLку не кинул... и оно свободно без нее заходит в игру... что такое  почему так ?ф

User MU и sokk дайте свой контактные данные... ICQ или Skype

Imp0ssible

#24
Если ты пойдешь по жампу, то дойдешь и до кода)


08B69000 >-E9 FB3FF2FF      JMP main.08A8D000

08A8D000  -E9 FB3FF2FF      JMP main.089B1000

089B1000  -E9 FB3FF2FF      JMP main.088D5000

088D5000  -E9 50A0C6F7      JMP main.0053F055

вот и приперлись к нормальному коду)

0053F055   . 8BEC                    MOV EBP,ESP
0053F057   . 6A FF                    PUSH -1
0053F059   . 68 48E95400         PUSH main.0054E948
0053F05E   . 68 14295400         PUSH main.00542914                       ;  SE handler installation
0053F063   . 64:A1 00000000    MOV EAX,DWORD PTR FS:[0]
0053F069   . 50                        PUSH EAX                                 ;  kernel32.BaseThreadInitThunk
0053F06A   . 64:8925 000000>  MOV DWORD PTR FS:[0],ESP
0053F071   . 83EC 58               SUB ESP,58
0053F074   . 53                       PUSH EBX
0053F075   . 56                      PUSH ESI
ЦитироватьПосле я нажал правый клик.... Save Fail ... и успешно сохранил маин ... теперь надо его как то проверить))))))


Теперь не забудь сменить EP (EntryPoint) точку входа.

Судя по твоему скрину, новая точка входа это 0054CDD7.

В LordPE тебе надо поставить см. рисунок
## здесь был скриншот ##

user_MU

#25
Хммм, открыл маин, вставил код, сохранил, никаких проблем не увидел ....

Всунуто 4 абсолютно пустых секции. Видимо чей-то неудачный опыт.
И можно было не переходить на 0054CDC9.
Просто занопить 008B69000. И пиши хоть запишись - места на вставку ГСа хватит - 4 секции.
Забыл, команду с 008B69000 - JMP 08A8D000 поставить в конец своего когда, где прыг на ОЕП.
Вот и все.
В принципе эти 4 пустых секции можно просто отрезать.


Заходит - потому что ты не сделал проверку на наличие DLL, и если она отсутствует - выход из процесса.
Вот код с проверкой наличия DLL (копипастил с форума, <<< это коменты мои):
Спойлер
PUSH на оффсет AntiHack.dll
CALL [LoadLibraryA] // Вызов функции LoadLibraryA <<< советую юзать в таком виде CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>]
OR EAX, EAX // Проверка
JE 'Оффсет на пустое место или на функцию ExitProces' // Если main не найдет .dll файл, он выдаст ошибку.
PUSH на оффсет Main
PUSH EAX
CALL [GetProcessAdress] // Вызов функции GetProcessAdress <<<  тоже советую иначе прописывать
CALL EAX
JMP EntryPoint // Прыжок на точку входа программы
[свернуть]

napuk228

Цитата: user_MU от 2010 Март 25, 17:24  Хммм, открыл маин, вставил код, сохранил, никаких проблем не увидел ....

Всунуто 4 абсолютно пустых секции. Видимо чей-то неудачный опыт.
И можно было не переходить на 0054CDC9.
Просто занопить 008B69000. И пиши хоть запишись - места на вставку ГСа хватит - 4 секции.
Забыл, команду с 008B69000 - JMP 08A8D000 поставить в конец своего когда, где прыг на ОЕП.
Вот и все.
В принципе эти 4 пустых секции можно просто отрезать.


Заходит - потому что ты не сделал проверку на наличие DLL, и если она отсутствует - выход из процесса.
Во первых Что за 4 секции ... ? Насколько я понял ... это кто то хотел добавить места... тоесть пустоого кода... если да .. то это хорошо или плохо .. *?

Во вторых .. тоесть моя дллка работает если ее кинуть в клиент ?

И наконец в третьих как сделать проверку на наличие DLL ???

user_MU

#27
1 Да кто-то пытался добавить свободного места. Не плохо и не хорошо.
2 Да. Проверка - кинь в клиент DLL, запусти игру, запусти чит который блчится этой DLL. Сработает значит все верно
3 Проверку написал в предыдущем посте.

Imp0ssible

#28
2 user_MU,

эти "4 секции" можно проигнорировать, сменив EP ))

с 08769000 -> 0013F055  LordPE

с 08B69000 -> 0053F055  PE Explorer

napuk228

Цитата: user_MU от 2010 Март 25, 17:39  1 Да кто-то пытался добавить свободного места. Не плохо и не хорошо.
2 Да. Проверка - кинь в клиент DLL, запусти игру, запусти чит который блчится этой DLL. Сработает значит все верно
3 Проверку написал в предыдущем посте.

Да ... DLL работает отлично.. а вот насчет проверки буду мучатся сейчас... пойду приму душ и буду мучатся..

Оставьте свой скайп или icq////






Так у меня вопрос :

Что такое и где найти :
OR EAX, EAX // Проверка

И что такое JE ?

JE 'Оффсет на пустое место или на функцию ExitProces' // Если main не найдет .dll файл, он выдаст ошибку.

PUSH EAX --- это  push на  вот это : "OR EAX, EAX // Проверка"



CALL [GetProcessAdress] // Вызов функции GetProcessAdress <<< тоже советую иначе прописывать    --- Что значит иначе ... напиши в ковычках как ?
CALL EAX ---  и тут что ?

user_MU

OR EAX, EAX // Проверка <<<<< так и пиши OR EAX, EAX
JE 'Оффсет на пустое место или на функцию ExitProcess <<< CALL DWORD PTR DS:[ExitProcess] вот так

PUSH EAX --- это push на вот это .... <<<< просто так и пиши

CALL [GetProcessAdress] <<<<< CALL DWORD PTR DS:[GetProcessAdress]

CALL EAX --- и тут что ? <<<<<<<< просто CALL EAX

Долго вдаватся в подробности да и не зачем.

napuk228

А PUSH на оффсет Main ... ? это на Entry point или на какой оффсет ?

user_MU

Это функция в вызываемой DLL.

Вверху ты пишешь AntiHack.dll и Main
Ну я же незнаю какую DLL ты пришиваешь.
В стандартной так.

napuk228

Вот что у меня получилось .... но  ошибка  в  PUSH на оффсет Main ...

Название DLL  'napuk228.dll'



Посмотри если остальное правильно ? И что писать туда где у меня ошибка ? тоесть   функцию dll
где найти ?

Вот мой маин ... уже с вшитой dll но без проверки ...

https://www.multiupload.com/97URMR2770

user_MU

Ты немного не так понял.

Вот обычный код:
PUSH main_new.00755A70 ; /FileName = "SuperAntiCheat.dll"
CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; LoadLibraryA
CMP EAX,0
JMP main_new.0073C6B8

а вот он же только + проверка наличия DLL:

PUSH на оффсет AntiHack.dll
CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>]
OR EAX, EAX
JE 'Оффсет на пустое место или на функцию ExitProces'
PUSH на оффсет Main
PUSH EAX
CALL DWORD PTR DS:[<&KERNEL32.GetProcessAdress>]
CALL EAX
JMP main_new.0073C6B8

А ты написал 2 раза каждый код. Выбери что-то одно.

Грубо говоря вот сама проверка DLL:

OR EAX, EAX
JE 'Оффсет на пустое место или на функцию ExitProces'

Вставь её после LoadLibrariA.

Хотя если в дальнейшем планируешь паковать молебоксом - можешь не заморачиватся с проверкой/

napuk228

Цитата: user_MU от 2010 Март 25, 18:19  Ты немного не так понял.

Вот обычный код:
PUSH main_new.00755A70 ; /FileName = "SuperAntiCheat.dll"
CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; LoadLibraryA
CMP EAX,0
JMP main_new.0073C6B8

а вот он же только + проверка наличия DLL:

PUSH на оффсет AntiHack.dll
CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>]
OR EAX, EAX
JE 'Оффсет на пустое место или на функцию ExitProces'
PUSH на оффсет Main
PUSH EAX
CALL DWORD PTR DS:[<&KERNEL32.GetProcessAdress>]
CALL EAX
JMP main_new.0073C6B8

А ты написал 2 раза каждый код. Выбери что-то одно.

Грубо говоря вот сама проверка DLL:

OR EAX, EAX
JE 'Оффсет на пустое место или на функцию ExitProces'

Вставь её после LoadLibrariA.

Хотя если в дальнейшем планируешь паковать молебоксом - можешь не заморачиватся с проверкой/

Сейчас заного попробую..
Мне просто главное понять как это ... а молебоксом или нет неважно )

user_MU

#36
Важно, если в молебокс - можно забить на проверку. Так как длл всегда будет при маине.

Вот еще темка была - /index.php?topic=3136.0

napuk228

Сделал .. но всеравно проверки непроисходит .. :( :


user_MU

Жестко - а у тебя маин вабще запускется? По коду у тебя просто закрытие маина после загрузки длл.
Где - JE 'Оффсет на пустое место или на функцию ExitProces' ????

napuk228

#39
Цитата: user_MU от 2010 Март 25, 18:51  Жестко - а у тебя маин вабще запускется? По коду у тебя просто закрытие маина после загрузки длл.
Где - JE 'Оффсет на пустое место или на функцию ExitProces' ????

Маин запускается ))))) и работает все...


Так что ли :




:( :( :(

Всё ... !! :@ я не понимаю!!! !!! чем больше вариантов ищу тем больше путаюсь 1 :(

Вот сам код:

PUSH *to AntiHack.dll Offset*   ---------- Тут название dll
CALL DWORD PTR DS:[LoadLibraryA]   ------------  CALL DWORD PTR DS:[54D174]
OR EAX,EAX   ---------    OR EAX,EAX
JE *EmptySpace* - If dll will not founded, it will crash the gs   -------------   JE 0
PUSH *to Main() Offset*    --------------------------- А ТУТ ТО ЧТО ПИСАТЬ ???????
PUSH EAX ------------- PUSH EAX
CALL DWORD PTR DS:[GetProcAddress]   ------------  CALL DWORD PTR DS:[54D170]
CALL EAX   --------- CALL EAX
JMP *EntryPoint*   --------------  JMP 08B69000

Похожие темы (5)