ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

23.10.2009, 10:19
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
для тех кто не умеет юзать файл маппинг вот пример:
Код:
program Project2;
{$APPTYPE CONSOLE}
uses
Windows;
const
find_data : array [0..4] of byte = ($CD, $16, $0F, $85, $09);
replace_data : array [0..4] of byte = ($CD, $16, $90, $90, $90);
// выдрал sysutils
function CompareMem(P1, P2: Pointer; Length: Integer): Boolean; assembler;
asm
PUSH ESI
PUSH EDI
MOV ESI,P1
MOV EDI,P2
MOV EDX,ECX
XOR EAX,EAX
AND EDX,3
SAR ECX,2
JS @@1 // Negative Length implies identity.
REPE CMPSD
JNE @@2
MOV ECX,EDX
REPE CMPSB
JNE @@2
@@1: INC EAX
@@2: POP EDI
POP ESI
end;
var
hFile : THANDLE;
hFileMap : THANDLE;
Mem : pointer;
FileSize : dword;
x : dword;
begin
hFile := CreateFileA('c:\Relase.exe', GENERIC_WRITE or GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hFile <> INVALID_HANDLE_VALUE then
begin
FileSize := GetFileSize(hFile, nil);
hFileMap := CreateFileMappingA(hFile, nil, PAGE_READWRITE , 0, FileSize, nil);
if hFileMap <> INVALID_HANDLE_VALUE then
begin
Mem := MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, FileSize);
if Mem <> nil then
begin
for x := 0 to FileSize - 6 do
begin
if CompareMem(pointer(dword(Mem) + x), @find_data[0], 5) then
begin
CopyMemory(pointer(dword(Mem) + x), @replace_data[0], 5);
break;
end;
end;
UnmapViewOfFile(Mem);
end;
CloseHandle(hFileMap);
end;
CloseHandle(hFile);
end;
end.
Такими методом можно очень быстро найти данные любой длинные и также быстро заменить их.
Хотя вместо CompareMem можно было просто проверить 4 байта, а потом 1 байт и это было бы быстрее при небольшом размере проверяемых данных. т.е. примерно так проверять
Код:
if (dword(pointer(dword(Mem) + x)^) = dword(pointer(@find_data[0])^)) and
(byte(pointer(dword(Mem) + x + 4)^) = find_data[4]) then
И теперь главное. если таким методом патчить виндовые проги (незапущенные) то вл:егкую обходится WFP защита. Я так патчил эксплорер.
Когда его прибиваеш, патчиш, и потом опять запускаеш, то на Win XP WFP молчал.
Последний раз редактировалось slesh; 23.10.2009 в 10:27..
|
|
|

23.10.2009, 11:16
|
|
Участник форума
Регистрация: 14.03.2009
Сообщений: 237
Провел на форуме: 813785
Репутация:
314
|
|
slesh, твоя захардкоденая функция CompareMem - это ведь тоже самое, что и lstrcpyn?
|
|
|

23.10.2009, 12:06
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
нет lstrcpyn - это копирование строки, а CompareMem сравнение памяти
|
|
|

24.10.2009, 14:36
|
|
Участник форума
Регистрация: 23.10.2009
Сообщений: 103
Провел на форуме: 289669
Репутация:
7
|
|
ребят, есть статья по отправке сокетов через хттп протокол? оч надо.
|
|
|

24.10.2009, 16:40
|
|
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
Провел на форуме: 5209663
Репутация:
357
|
|
Как узнать сколько времени у таймера осталось? Без камасутры
|
|
|

24.10.2009, 16:45
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Сообщение от DiHWO
ребят, есть статья по отправке сокетов через хттп протокол? оч надо.
Если тебе надо для теста, а не для написания сложных программ, то можешь юзать Indy. Это встроенный компоннент Delphi.
WinSock, конечно, лучше, но его используй потом - когда освоишь азы протокола 
|
|
|

24.10.2009, 16:47
|
|
Новичок
Регистрация: 22.08.2009
Сообщений: 2
Провел на форуме: 661915
Репутация:
27
|
|
Прога должна отправлять собщение на ICQ.
Но не отправляет, почему???
procedure TForm1.Button1Click(Sender: TObject);
begin
ICQClient1.UIN:=strtoint('555453705');
ICQClient1.Password:='lODZjetE';
ICQClient1.ICQServer:='login.icq.com';
ICQClient1.ICQPort:=strtoint('5190');
ICQClient1.Login();
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ICQClient1.SendMessage(StrToInt64('554104078'),'He llo!!!TEST!!!');
end;
|
|
|

24.10.2009, 16:59
|
|
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
Провел на форуме: 5209663
Репутация:
357
|
|
Сообщение от sherlock
Прога должна отправлять собщение на ICQ.
Но не отправляет, почему???
procedure TForm1.Button1Click(Sender: TObject);
begin
ICQClient1.UIN:=strtoint('555453705');
ICQClient1.Password:='lODZjetE';
ICQClient1.ICQServer:='login.icq.com';
ICQClient1.ICQPort:=strtoint('5190');
ICQClient1.Login();
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ICQClient1.SendMessage(StrToInt64('554104078'),'He llo!!!TEST!!!');
end;
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
ICQClient1.SendMessage(554104078,'Hello!!!TEST!!!');
end;
Кстати:
Код:
ICQClient1.UIN:=555453705;
Последний раз редактировалось НTL; 24.10.2009 в 17:08..
|
|
|

24.10.2009, 17:08
|
|
Новичок
Регистрация: 22.08.2009
Сообщений: 2
Провел на форуме: 661915
Репутация:
27
|
|
Сообщение от НTL
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
ICQClient1.SendMessage(554104078,'Hello!!!TEST!!!');
end;
Нероботает...
|
|
|

24.10.2009, 17:10
|
|
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
Провел на форуме: 5209663
Репутация:
357
|
|
Сообщение от sherlock
Нероботает...
Анти-спам на 554104078 есть? Если до то добавь 555453705 в КЛ 554104078
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|