но нажатие происходит,только когдда окно активно, а в свёрнутое ничего не послает..
Kitsune
15.05.2012, 18:25
Meg(0), сначала окно разморозить надо.
Meg(0)
15.05.2012, 21:37
а как его разморозить через делфи?
zaparca
15.05.2012, 21:45
найти Unfreeze адрес для ПВ это
Unfreeze=00420204 (84 C0 > B0 01) /B0 00 - заморожен/ или 00420206 (88 75 > C6 01)
или UnfreezeFlag
9C1984 - UnfreezeFlag (0 - Inactive; 1 - Active)
адрес старый
krukovis
15.05.2012, 22:01
а как его разморозить через делфи?
Можно разморозить моим патчером. У меня в подписи.
AEBus
16.05.2012, 00:14
сначала окно разморозить надо.
если через инжекты можно и не размораживать
Kitsune
16.05.2012, 00:42
если через инжекты можно и не размораживать
Инжект нажатия клавиши? /kidding
Meg(0)
16.05.2012, 01:39
найти Unfreeze адрес для ПВ это
или UnfreezeFlag
как это записать?
я записал,что:
unfreeze_flag: Byte;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
v:=FindWindow(nil, PChar(Edit1.Text));
unfreeze_flag := 1;
PostMessage(v, WM_KEYDOWN, VK_F1, 0);
но ничего не размораживается..
а если так,то не выходит..вообще ошибку пишет..(
procedure Tform1.unfreeze;
var
BytesCountOfWrite: DWORD;
begin
unfreeze_flag := 1;
WriteProcessMemory(hProcess, ptr(unfreeze_addr), @unfreeze_flag, 1, BytesCountOfWrite);
end;
Zo_Om4eG
16.05.2012, 06:42
Попробуй так.
var
unfreeze_flag: Byte;
unfreeze_addr: dword;
ProcessId, hProcess: Integer;
Wnd: HWND;
begin
Wnd:=FindWindow('Elementclient Window', nil);
if Wnd <> 0
then
begin
unfreeze_flag:=1;
GetWindowThreadProcessId(Wnd,@ProcessId);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,Pro cessId);
WriteProcessMemory(hProcess, ptr(unfreeze_addr), @unfreeze_flag, 1, BC);
end;
end;
AEBus
16.05.2012, 09:28
Инжект нажатия клавиши?
инжект нужного действия, он же чего то хочет добиться нажимая ту или иную клавишу
Kitsune
16.05.2012, 09:49
Nitrogen, проще кнопку послать, чем инжект делать ;)
Meg(0)
16.05.2012, 15:28
Zo_Om4eG, во...спасибо, очень помогло))
Добавлено через 8 часов 31 минуту
ничё не пойму... запустил,всё работает как надо,выключил,снова запустил,не работает... как и раньше если окно активно,то нажимает кнопочку,видимо не размораживается?
procedure TForm1.Timer1Timer(Sender: TObject);
var
v:HWnd;
unfreeze_flag: Byte;
unfreeze_addr: dword;
ProcessId, hProcess: Integer;
BC : dword;
begin
v:=FindWindow(nil, PChar(Edit1.Text));
if v <> 0 then
begin
v:=FindWindow(nil, PChar(Edit1.Text));
unfreeze_flag:=1;
GetWindowThreadProcessId(v,@ProcessId);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,Pro cessId);
WriteProcessMemory(hProcess, ptr(unfreeze_addr), @unfreeze_flag, 1, BC);
unfreeze_flag:=1;
PostMessage(v,WM_KEYDOWN,VK_F1,0);
dwa83
17.05.2012, 04:26
видимо не размораживается?
Когда окно не в фокусе, анимация в нём идёт? Если нет то не разморозилось, если даже если фокус на другом окне, но анимация в окне ПВ идёт, то разморозилось.
Meg(0)
17.05.2012, 15:48
Когда окно не в фокусе, анимация в нём идёт? Если нет то не разморозилось, если даже если фокус на другом окне, но анимация в окне ПВ идёт, то разморозилось.
нет анимации,значит не размораживается(
попробуйте плиз кто-нить этот код..(
есть адрес unfreez flaga (00A57F3C) как его можно использовать?
поидее так,но почему показывается ошибка в ReadAddr ?
dwa83
17.05.2012, 18:56
ReadAddr чситывает значения (read=чтение) а не записывает в память.
unfreeze_addr := ReadAddr ('Base', 'unfreeze_addr', $00A57F3C));
почему тут в параметрах строки "Base" и "Unfreeze_adr"? почему 2 закрывающие скобки?
Итак, открываем OllyDbg. Подключаемся к ПВ. Жмём F9, чтобы продолжить выполнение клиента. Жмём ctrl+g, вводим адрес поиска, тот что выделен
Unfreeze=00420204 (84 C0 > B0 01) /B0 00 - заморожен/ или 00420206 (88 75 > C6 01)
Видим опкод и соответствующие команды:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь щёлкнем правой кнопкой по данной строчке. Выьерем Edit->Bynary edit. В нижнем поле вводим B001.
Получаем:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Развернём окно ПВ и перейдём на другое окошко. Картинка в ПВ двигается? да, разморозили вручную. Теперь по этому адресу нужно записать программно эти самые B0 и 01. Есть у вас функция WriteAddr? Записываем в переменную типа DWORD значение 01B0 (hex) или 432(dec) и пишем(Write) из неё двухбайтовое значение по тому адресу что указан выше. Тем самым мы меняем код клиента так, чтобы после проверки на неактивность окна у нас не происходила его заморозка(посути проверку мы убираем и пишем однозначное 01-разморожен. Если записать 00, будет заморожено всегда). Или записать по адресу 00420204 значение B0 и по следующему адресу 00420205 пишем 01, так же разморозится.
Zo_Om4eG
17.05.2012, 21:14
Meg(0),
var
unfreeze_flag: Byte;
unfreeze: dword;
ProcessId, hProcess: Integer;
Wnd: HWND;
begin
Wnd:=FindWindow('Elementclient Window', nil);
if Wnd <> 0
then
begin
unfreeze_flag:=1;
unfreeze:=$B0;
GetWindowThreadProcessId(Wnd,@ProcessId);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,Pro cessId);
WriteProcessMemory(hProcess, ptr($00420204), @unfreeze, 1, BC);
WriteProcessMemory(hProcess, ptr($00420205), @unfreeze_flag, 1, BC);
end;
end;
Meg(0)
17.05.2012, 22:19
WriteAddr? Записываем в переменную типа DWORD значение 01B0 (hex) или 432(dec) и пишем(Write) из неё двухбайтовое значение по тому адресу что указан выше
WriteAddr:= ('01B0','00420204', B0); - но это совсем какой-то бред..(
окно разморозилось,но всёравно отправляет только в активное окно
а.. это если несколько окон одинакового имени,то тогда работает только то,что активно,а если разные имена,то и свёрнутое работает
ASDitsh
22.10.2012, 02:49
Всем доброго времени суток!
Объясните, пожалуйста, каким образом "UnfreezeFlag=00A57F3C" связан с "Unfreeze=00420204 (84 C0 > B0 01)"?
Точнее, как программно получить Unfreeze, зная UnfreezeFlag?
Ginrey
08.02.2013, 19:09
Точнее, как программно получить Unfreeze, зная UnfreezeFlag?
Странный вопрос, Unfreeze - это сам адресс, а UnfreezeFlag это разморожено окно или нет (1 или 0). Через CE можно путем отсеивания найти данный адресс