PDA

Просмотр полной версии : Эмуляция нажатий.


Denever
18.04.2012, 04:33
Набрасал для теста.
program teste;

uses
Windows, Messages, SysUtils, ExtCtrls, IdGlobal;

var dlyaComboBox:HWND;

begin
dlyaComboBox:=FindWindow('l2UnrealWWindowsViewport Window',nil);
if dlyaComboBox <> 0 then begin
sendmessage(dlyaComboBox, WM_KEYDOWN, VK_F1, 0);
exit;
end;
end.


Лог на таймере в 5 сек
1706556
1706556
1706556
1706556
1706556
1706556
0
0
0


Данный пример эмулирует нажатие F1 в клиент игры это используется 1 раз и программа закрывается..
Сообственно пробема такова: Если дописать таймер и поставить скажем на x сек то через 15-20 секунд клиент уже не принимает эмуляцию. Сервер l2.ru
Подскажите в чём проблема?

Yegor
18.04.2012, 09:54
Denever, в FrosPtotector. Он через несколько секунд после запуска программы подгружается в виде dll и перехватывает вызов FindWindow и подобных winapi функций.

Denever
18.04.2012, 14:10
Denever, в FrosPtotector. Он через несколько секунд после запуска программы подгружается в виде dll и перехватывает вызов FindWindow и подобных winapi функций.
Ну а обойти же можно каким либо способом?)

supernewbie
18.04.2012, 16:14
Denever, можно например хукнуть у себя LoadLibraryW и не грузить длл фроста

Denever
18.04.2012, 19:43
Denever, можно например хукнуть у себя LoadLibraryW и не грузить длл фроста
Можно пример?

Yegor
19.04.2012, 00:53
Denever, можно например хукнуть у себя LoadLibraryW и не грузить длл фроста
У меня именно для фроста это не сработало. Для ГГ работает.
в хуке LoadLibraryW я только вижу системные библиотеки которые подгружает для себя FrostProtector, а вот сам сабж как то шифруется.

Demion
19.04.2012, 07:03
Не знаю на сколько это сейчас актуально, но попробуйте перехватить kernel32.WriteProcessMemory в LineageII.exe и вернуть ноль, ничего не делая. Мне это раньше помогало.

Yegor
19.04.2012, 07:54
Demion, только не в LineageII.exe, а в своем приложении. Нужно попробовать.

Demion
19.04.2012, 08:05
Именно в LineageII.exe я делал) Ибо насколько я помню оно внедряло.

Yegor
19.04.2012, 08:07
Demion, а причем тут LineageII.exe? Зачем нам беспокоится что в него там загружается? Тем более это надо подгружать свою dll в LineageII.exe для перехвата. И мы говорим про руоф, а там LineageII.bin.

Demion
19.04.2012, 08:10
Не буду спорить, ибо руофом сейчас не занимаюсь и даже клиента нет. Но, если не изменяет память - там Запускатор запускает LineageII.exe, которая уже запускает L2.bin. Кроме того LineageII.exe внедряет библиотеку во все процессы. Перехватывая WriteProcessMemory мы обламываем ей (LineageII.exe) внедрение.

---

Если у тебя есть клиент, проверь сам. А потом отпишешься о результатах. Может я не прав.

Yegor
19.04.2012, 09:40
Demion, а тогда понятно. Но может быть както можно обламать внедрение только в своей программе? Ведь после записи в наш процесс кода и запуска его на исполние процессом LineageII.exe этот код каким то образом вызывает подгрузку dll протектора, только вот какой именно.

supernewbie
19.04.2012, 10:01
Можно пример?

var
OldLoadLibraryW:function (lpLibFileName: PWideChar): HMODULE; stdcall;

function MyLoadLibraryW(lpLibFileName: PWideChar): HMODULE; stdcall;
begin
if ExtractFileName(lpLibFileName)='frostProtector.dll ' then
result:=0
else
result:=OldLoadLibraryW(lpLibFileName);
end;

procedure AntiFrost;
begin
HookProc('kernel32.dll','LoadLibraryW',@MyLoadLibr aryW,@OldLoadLibraryW);
end;

Добавлено через 1 минуту
раньше работало, щас хрен знает

Добавлено через 18 минут
щас проверил - работает

Demion
19.04.2012, 10:15
Но может быть както можно обламать внедрение только в своей программе?

Ну скорее всего только через перехват LoadLibraryA / LoadLibraryW. Больше ничего на ум не приходит.

Boterrr
20.04.2012, 03:33
ребята, вы реально сами понимаете что несёте ?

Denever
20.04.2012, 04:01
Конечно спасибо но всеравно как-то..
Помогите пож припоять http://coderx.ru/showthread.php?t=50 к l2.ru
Примерно:
program Project1;

{$APPTYPE CONSOLE}

uses
Windows;

var lib_NWindow:THandle;
lib:integer;
p:pointer;
OldPageProtection: Cardinal;
begin
lib_NWindow := LoadLibrary('nWindow.dll');
lib := lib_NWindow + $563D0; // ïîìåíÿòü íàäî
if VirtualProtect(pointer(lib), 6, PAGE_EXECUTE_READWRITE, OldPageProtection) then begin
writeLn('change old-new attributes.');
p := pointer(lib);
byte(p^) := $e9; writeLn('#1.');
byte(pointer(dword(p) + 1)^) := $eb; writeLn('#2.');
byte(pointer(dword(p) + 2)^) := $00; writeLn('#3.');
byte(pointer(dword(p) + 3)^) := $00; writeLn('#4.');
byte(pointer(dword(p) + 4)^) := $00; writeLn('#5.');
byte(pointer(dword(p) + 5)^) := $90; writeLn('#6.');
end;
if VirtualProtect(pointer(lib), 6, OldPageProtection, OldPageProtection) then begin
writeLn('change new-old attributes.');
end;
Readln;
end.

Aries
20.04.2012, 10:07
На L2.ru скорее всего бан чата контролируется не только клиентом, но и сервером.

Denever
20.04.2012, 10:58
На L2.ru скорее всего бан чата контролируется не только клиентом, но и сервером.
Это заметно по спам ботам:)

Aries
20.04.2012, 11:12
Я хз, я их давно не видел))
Правда и давно в ла2 не был))

Yegor
28.04.2012, 15:06
Да работает. Я оказывается через LoadLibraryA перехватывал.

qwm
29.04.2012, 23:09
Извиняюсь, если прошу слишком многого, но извольте поподробнее объяснить, что именно делает фрост для восперпятствия Post/SendMessage(... WM_[SYS]KEYDOWN/UP ...) ?

Просто у меня Виндос настроена так, что не позволяет всякому "леваку" вклиниваться в мои процессы, посему всё работает прекрасно; чего нельзя сказать про человека, для которого собственно кликер и писался. По географическим причинам домой к нему я с олькой попасть не могу, вот и приходится работать вслепую.

Отсюда вопрос. Фрост внедряет свою длл во все процессы? Если да, то интересует имя дллки. Каким методом это реализовано: через стандартные виндовые хуки (если да, то на какие msg они повешены), через CreateRemoteThread(... &LoadLibraryA/W ...), через WriteProcessMemory - CreateRemoteThread, или же длл вообще не юзается, а инжектится код? Также интересует, запускаемый в моём приложении тред резидентный, или лишь выполняет своё грязное дело (какое именно, тоже неплохо бы знать) и завершается?
И что это за свой msg WM_USER+266, что постоянно приходит окну ла2?
В общем, приветствуется любая информация по защите на официальных русских серверах ла2.

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

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

P.S.: я в ла2 совсем новичок, так что не обессудьте.

Yegor
30.04.2012, 01:08
На предыдущей странице есть полный готовый код обхода этой проблемы, там же указана имя dll которую подгружает frost во все виндовые процессы.
Самый простой и безопасный метод это не дать загрузистя этой dll в свой процесс и все.

qwm
30.04.2012, 01:17
Спасибо за помощь.
Насчёт "беспалевности" Post/SendMessage-кликера вопрос остаётся в силе.

Silent
03.05.2012, 11:45
Самый простой и безопасный метод это не дать загрузистя этой dll в свой процесс и все.Да, но тогда к таким процессам фрост будет относится с подозрением.

Yegor
03.05.2012, 12:57
Да, но тогда к таким процессам фрост будет относится с подозрением.
Да, но явно сказать что это бот программа фрост не сможет. Мало ли по какой причине винда не смогла дллку подгрузить.

qwm
04.05.2012, 21:20
Да, в мире существует предостаточно программ, по той или иной причине не позволяющих грузить в себя чужие модули. Например, антивирусы и некоторые системные процессы.
Если и это тебя не успокаивает - можешь в хукнутой лоадлибе возвращать не 0. Пусть считает, что это валидный хендл. Правда, в этом случае он может попробовать общаться с ним.