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

01.08.2009, 22:48
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
м, лучше уж что-нть типа md5 и (если длинновато) - разбить на куски и, например, похорить
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|

01.08.2009, 22:50
|
|
Постоянный
Регистрация: 12.07.2006
Сообщений: 327
Провел на форуме: 1654818
Репутация:
117
|
|
slesh
спасибо так и сделаю.
|
|
|

02.08.2009, 14:26
|
|
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме: 1035284
Репутация:
52
|
|
привеит всем возник такой вопрос
как узнать по букве визическое имя диска? вчастности флеш =)
пробовал так
Код:
QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR);
в lpQuery будет строка типа
Код:
'\Device\Harddisk1\DP(1)0-0+9'
чтозначат чимволы после Harddisk1? да и прав ли я в том что '\\.\PHYSICALDRIVE1' = '\Device\Harddisk1\DP(1)0-0+9'? если да то почему бывает такая ошибка когда начинаю извлекать безопасно диск пиши F а он извлекает к примеру диск E все эти диски флеш да и потом через прогу немогу извлечить диск F!
вот код модуля где я извелкаю диски (USBFLASH)
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,setupapi;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Button2: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure OnDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function IsUSBDevice(DevInst: DWORD): boolean;
var
IDLen: DWORD;
ID: PChar;
s:string;
begin
{'USBSTOR\DISK&VEN_&PROD_USB_FLASH_DRIVE&REV_34CH\196B09014EC7&0'}
result := false;
if (CM_Get_Device_ID_Size(IDLen, DevInst, 0) <> 0) or (IDLen = 0) then
begin
// exit;
end;
inc(IDLen);
ID := GetMemory(IDLen);
if ID = nil then
exit;
if (CM_Get_Device_ID(DevInst, PAnsichar(ID), IDLen, 0) <> 0) or (not CompareMem(ID, PChar('USBSTOR'), 7)) then
begin
s:=ID;
form1.memo1.Lines.Add(String(ID));
FreeMemory(ID);
exit;
end;
s:=ID;
form1.memo1.Lines.Add(String(ID));
FreeMemory(ID);
result := true;
end;
function GetDeviceName(PnPHandle: HDEVINFO; const DevData: TSPDevInfoData): string;
var
BytesReturned: DWORD;
RegDataType: DWORD;
Buffer: array [0..256] of CHAR;
begin
BytesReturned := 0;
RegDataType := 0;
Buffer[0] := #0;
SetupDiGetDeviceRegistryProperty(PnPHandle, DevData, SPDRP_FRIENDLYNAME,
RegDataType, PByte(@Buffer[0]), SizeOf(Buffer), BytesReturned);
Result := Buffer;
if Result<>'' then exit;
BytesReturned := 0;
RegDataType := 0;
Buffer[0] := #0;
SetupDiGetDeviceRegistryProperty(PnPHandle, DevData, SPDRP_DEVICEDESC,
RegDataType, PByte(@Buffer[0]), SizeOf(Buffer), BytesReturned);
Result:=Buffer;
end;
function DWORDtoDiskNames(val:DWORD):string;
var
_i: integer;
begin
Result:='';
for _i := 0 to 25 do
begin
if ((val mod 2)=1) then Result:=result+ chr(_i + 65);
val:=val shr 1;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
VAR
lpQuery: array [0..MAXCHAR - 1] of Char;
Volume,s:STRING;
begin
{'\\.\PHYSICALDRIVE1'}
Volume:=Edit1.text+':';
Volume[3] := #0;
QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR);
s:=lpQuery;
Volume:='';
Edit2.Text:=s;
{'\Device\Harddisk1\DP(1)0-0+9'}
end;
procedure TForm1.OnDeviceChange(var Msg: TMessage);
var
MSGSTR:String;
begin
if Msg.WParam=DBT_DEVICEARRIVAL then
begin
case PDEV_BROADCAST_HDR(Msg.LParam)^.dbch_devicetype of
DBT_DEVTYP_VOLUME:
begin
MSGSTR:='новый диск'+MSGSTR;
Edit1.Text:=(MSGSTR+' '+DWORDtoDiskNames(PDEV_BROADCAST_VOLUME(Msg.LParam)^.dbcv_unitmask)+':');
end;
end;
end;
if Msg.WParam=DBT_DEVICEREMOVECOMPLETE then
begin
case PDEV_BROADCAST_HDR(Msg.LParam)^.dbch_devicetype of
DBT_DEVTYP_VOLUME:
begin
MSGSTR:='извлечён диск'+MSGSTR;
Edit1.Text:=(MSGSTR+' '+DWORDtoDiskNames(PDEV_BROADCAST_VOLUME(Msg.LParam)^.dbcv_unitmask)+':');
end;
end;
end;
end;
procedure RemoveDrive(index:integer);
var
DrivesPnPHandle: HDEVINFO;
DevInfo: TSPDevInfoData;
Parent: DWORD;
s:string;
VetoName:array[0..MAX_PATH] of char;
begin
DevInfo.cbSize := sizeof(SP_DEVINFO_DATA);
DrivesPnPHandle := SetupDiGetClassDevsA(@GUID_DEVCLASS_DISKDRIVE, nil, 0, 2);
if DrivesPnPHandle = INVALID_HANDLE_VALUE then
exit;
if SetupDiEnumDeviceInfo(DrivesPnPHandle, index,DevInfo) then
begin
s:=GetDeviceName(DrivesPnPHandle,DevInfo);
if (IsUSBDevice(DevInfo.DevInst)) and (CM_Get_Parent(Parent, DevInfo.DevInst, 0) = CR_SUCCESS)
then
begin
CM_Request_Device_Eject(Parent, nil, nil{@VetoName}, {MAX_PATH}0, 0);
end
else
ShowMessage('Это не USB устройство');
end;
SetupDiDestroyDeviceInfoList(DrivesPnPHandle);
end;
procedure TForm1.Button1Click(Sender: TObject);
VAR
lpQuery: array [0..MAXCHAR - 1] of Char;
Volume,s:STRING;
begin
Volume:=Edit1.text+':';
Volume[3] := #0;
QueryDosDevice(PChar(Volume), @lpQuery[0], MAXCHAR);
s:=lpQuery;
Volume:='';
Memo1.Lines.add(s);
{'\Device\Harddisk1\DP(1)0-0+9'}
RemoveDrive(StrToInt(lpQuery[16]));
end;
end.
ткните носом в мои ошибки! если можно то с примерами исправления!
|
|
|

02.08.2009, 14:56
|
|
Участник форума
Регистрация: 07.01.2009
Сообщений: 186
Провел на форуме: 1247273
Репутация:
166
|
|
slesh, по посту 4030 поможешь? Так и не осилил PrintWindow, чтобы получить скрин интересующего меня элемента на форме (координаты и размер известны)
|
|
|

02.08.2009, 15:25
|
|
Познающий
Регистрация: 02.06.2009
Сообщений: 67
Провел на форуме: 237284
Репутация:
54
|
|
Код:
const
x = 225;
y = 132;
w = 102;
h = 41;
var
rc: TRect;
bmp: TBitmap;
dc: HDC;
wnd: HWND;
begin
bmp := TBitmap.Create;
bmp.Width := w;
bmp.Height := h;
wnd := GetForegroundWindow;
dc := GetDC(wnd);
BitBlt(bmp.Canvas.Handle, 0, 0, w, h, dc, x, y, SRCCOPY);
ReleaseDC(wnd, dc);
bmp.SaveToFile('screen.bmp');
bmp.Free;
end;
x,y - координаты элемента
w,h - ширина и высота
Последний раз редактировалось Nullsleep; 02.08.2009 в 16:01..
|
|
|

02.08.2009, 19:27
|
|
Новичок
Регистрация: 21.05.2009
Сообщений: 3
Провел на форуме: 3289
Репутация:
0
|
|
Вводят 7е число нужно посчитать сумму двух последних цифр и если она бут равна 1й цифре то выдать труе.
|
|
|

02.08.2009, 19:38
|
|
Познающий
Регистрация: 02.06.2009
Сообщений: 67
Провел на форуме: 237284
Репутация:
54
|
|
Код:
function Aga(num: Integer): Boolean;
var
s: string;
l: Integer;
begin
Result := False;
s := IntToStr(num);
l := Length(s);
if StrToInt(s[l])+StrToInt(s[l-1]) = StrToInt(s[1]) then
Result := True;
end;
|
|
|

02.08.2009, 20:29
|
|
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме: 5749763
Репутация:
1680
|
|
Сообщение от slesh
2 Nightmarе Код под загрузке бинарника в буфер - это просто ужас.
1) Читает по 1 байту.
2) EOF - это эля текстовых файлов.
более правильнее былобы
такая последовательность функций
CreateFile (... GENERIC_READ ....)
size := GetFileSize(...)
setlength(buf, size);
ReadFile(... @buf[1], size, ....)
CloseFile();
т.е. ты открываешь файл на чтение. Получаешь его размер.
Под этот размер расширяешь строку, и сразу весь файл считываешь в неё.
Если возможно то приведи плиз полный пример кода, а то хз как это юзать ;(
И ещё, эта функция тоже пихает весь файл в оперативку? если к примеру файл 100 метров
|
|
|

02.08.2009, 20:33
|
|
Новичок
Регистрация: 21.05.2009
Сообщений: 3
Провел на форуме: 3289
Репутация:
0
|
|
СПАСИБО!
|
|
|

02.08.2009, 22:24
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
1 Nightmarе для больших файлов тебе нужно переписывать сам алгоритм отправки.
т.е. подгрузку реализовывать внутри самой функции отправки.
Но вообще лучше проверить размер файлов и если размер больше 64 кила.
ТО выделить буфер на 64 кила и читать пока читается и сразу отсылать.
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|