witcherD
28.06.2010, 01:40
Лирическое отступление (можно пропустить, к делу это не относится). Не так давно играл я в игру под названием Perfect World. И все было бы ничего, но как-то раз мой аккаунт забанили из-за какой-то ерунды. Конечно можно было обратиться в техподдержку, но я понимал, что игра стала занимать все больше времени и пора уже было с ней завязывать. Но в душе осталась обида, и я решил хоть как-то подпортить их администрации жизнь. Тогда после долгих поисков я наткнулся на пост от господина Void(вроде так), в котором он говорил о простоте связи с сервером и ниже написал примерный код. В то время я плохо понимал о чем он говорил, но как человек любопытный я скопировал этот код себе и скомпилировал его, и, о чудо, он оказался рабочим. После нескольких тестов до меня дошло, что это код подключения. Где одно подключение - там и несколько, а это уже почти брут =), который впоследствии я и решил сделать. Занялись мы этим одновременно с господином TBX1n, сначала просто двойным циклом(с отправкой аккаунтов мне, может некоторые помнят, забавно вышло), потом с потоками, а затем и с формами. Но поддерживать его, обновлять, общаться с десятками людей, которым лень прочитать полностью первый пост, не говоря уж об остальных, мне доставляло мало удовольствия и я отказался от этой идеи(и как показала история с прибылью все того же г-на TBX1n, зря я это сделал=) ). Как ни странно, но брут начал убивать почти всю мозговую деятельность на форуме, все начало сводиться к отмыванию аккаунтов, причем люди взламывающие их почувствовали себя неимоверно крутыми, самыми умными, с единственно верным мнением. И как мне показалось, раздел Perfect World на данный момент плоностью себя исчерпал.
Поэтому я начал переходить в другие разделы. А так как по C# тем нет(жаль, хотя наверное люди которые этим занимаются профессионально, общаются на специализированных форумах, далеких от этого, но все таки буду рад если такие темы еще кого-нибудь заинтересуют), то я попал сюда. До этого я немного занимался delphi, и у меня осталось немного заготовок, которые могут показаться кому-нибудь интересными(а если так, то смогу выложить и другие примеры). И вообще было бы неплохо привлечь в этот раздел новых людей и расшевелить его.
Итак, ближе к делу. Почти все что я делал было взято либо из королевства делфи, либо из Фленова. Полностью раскрывать тему, рассказывать теорию и внедряться в подробности я не собираюсь(честно сказать, что означают те или иные функции, я уже не помню(а может и никогда не знал =) ), но немного комментариев разумеется оставлю.
Показываться пароль будет при нажатии клавиши Ctrl и клика мышью на пароль. Вся логика будет в dll! В основной части программы лишь установка ловушки и ее завершение, то есть собственно команда к началу отображению звездочек. Это делается с помощью вызова метода RunStopHook(true/false) который будет прописан позже в библиотеке. Объявление метода выглядит так procedure RunStopHook(State : Boolean) stdcall; external 'hackpass.dll' index 1;, где hackpass.dll - название библиотеки, индекс 1 - индекс метода.
Переходим в dll.
library hackpass;
uses Windows, Messages;
var
SysHook : HHook = 0;
Wnd : Hwnd = 0;
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
//отправляем перехваченное сообщение дальше в систему
CallNextHookEx(SysHook, Code, wParam, lParam);
if code = HC_ACTION then
begin
//находим идентификатор окна сгенерировавшего сообщение
Wnd := TMsg(Pointer(lParam)^).hwnd;
//Проверяю тип сообщения.
//если была нажата левая кнопка мыши
if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
//и нажата клавиша ctrl
if ((TMsg(Pointer(lParam)^).wParam and MK_CONTROL) = MK_CONTROL) then
begin
// убраем в окне отправившем сообщение звёздочки
SendMessage(Wnd, em_setpasswordchar, 0, 0);
//перерисовываем окно.
InvalidateRect(Wnd, nil, true);
end;
end;
end;
//тут и так понятно из названия =)
procedure RunStopHook(State : Boolean) export; stdcall;
begin
if State=true then
begin
//Запускаем ловушку.
SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, Instance, 0);
end
else
begin
//Отключить ловушку.
UnhookWindowsHookEx(SysHook);
SysHook := 0;
end;
end;
Вот вроде и все. Надеюсь на оживление раздела =)
Поэтому я начал переходить в другие разделы. А так как по C# тем нет(жаль, хотя наверное люди которые этим занимаются профессионально, общаются на специализированных форумах, далеких от этого, но все таки буду рад если такие темы еще кого-нибудь заинтересуют), то я попал сюда. До этого я немного занимался delphi, и у меня осталось немного заготовок, которые могут показаться кому-нибудь интересными(а если так, то смогу выложить и другие примеры). И вообще было бы неплохо привлечь в этот раздел новых людей и расшевелить его.
Итак, ближе к делу. Почти все что я делал было взято либо из королевства делфи, либо из Фленова. Полностью раскрывать тему, рассказывать теорию и внедряться в подробности я не собираюсь(честно сказать, что означают те или иные функции, я уже не помню(а может и никогда не знал =) ), но немного комментариев разумеется оставлю.
Показываться пароль будет при нажатии клавиши Ctrl и клика мышью на пароль. Вся логика будет в dll! В основной части программы лишь установка ловушки и ее завершение, то есть собственно команда к началу отображению звездочек. Это делается с помощью вызова метода RunStopHook(true/false) который будет прописан позже в библиотеке. Объявление метода выглядит так procedure RunStopHook(State : Boolean) stdcall; external 'hackpass.dll' index 1;, где hackpass.dll - название библиотеки, индекс 1 - индекс метода.
Переходим в dll.
library hackpass;
uses Windows, Messages;
var
SysHook : HHook = 0;
Wnd : Hwnd = 0;
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
//отправляем перехваченное сообщение дальше в систему
CallNextHookEx(SysHook, Code, wParam, lParam);
if code = HC_ACTION then
begin
//находим идентификатор окна сгенерировавшего сообщение
Wnd := TMsg(Pointer(lParam)^).hwnd;
//Проверяю тип сообщения.
//если была нажата левая кнопка мыши
if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then
//и нажата клавиша ctrl
if ((TMsg(Pointer(lParam)^).wParam and MK_CONTROL) = MK_CONTROL) then
begin
// убраем в окне отправившем сообщение звёздочки
SendMessage(Wnd, em_setpasswordchar, 0, 0);
//перерисовываем окно.
InvalidateRect(Wnd, nil, true);
end;
end;
end;
//тут и так понятно из названия =)
procedure RunStopHook(State : Boolean) export; stdcall;
begin
if State=true then
begin
//Запускаем ловушку.
SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, Instance, 0);
end
else
begin
//Отключить ловушку.
UnhookWindowsHookEx(SysHook);
SysHook := 0;
end;
end;
Вот вроде и все. Надеюсь на оживление раздела =)