PDA

Просмотр полной версии : Запуск dll или exe из L2PacketHack


skymanrus
04.01.2008, 04:40
Собственно вот в чем вопрос:
возможно ли запускать с помощью какой то функции или команды из L2PacketHack другие экзешники
скажем я поставил скрипт бота на ночь а ночью бот ступил и сдох и в целях экономии электроэнергии мне хочется запустить экзешник который вырубает комп :)
или другой случай: в L2PacketHack конечно скрипты шустро пашут но если в скрипте больше 1000 строк и куча циклов то начинает несколько подтормаживать вот чтоб не загружать по уши работой L2PacketHack почему бы не написать на С++ или делфи екзешник для выполнения всех расчётов и всех циклов

в общем возможно ли это? если да то примерчик скриптика скиньте полиз :)

NLObP
04.01.2008, 13:32
Вроде ДЛЛ подключать можно было. Что-то сейчас найти не могу, где видел.

skymanrus
04.01.2008, 13:50
если б можно было подключить длл это было бы вообще замечательно! :)
жду примера скрипта с нетерпением :)

я сам уже весь форум обыскал но ничего об длл подключении и экзешниках не нашел

04.01.2008, 15:11
//sample.c
#define UNICODE
#include <windows.h>
#define DLL_EXPORT __declspec(dllexport) __stdcall
void DLL_EXPORT FromClient(wchar_t* pck)
{
if (pck[0]==0x38 && pck[1]==0x78 && pck[3]==0x78)
MessageBox(0,L"medved",L"preved",0);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
return TRUE;
}



//samplescript.txt
var
lib:Integer;

procedure Init;
begin
lib:=loadLibrary('sample.dll');
end;

procedure Free;
begin
FreeLibrary(lib);
end;

begin
if FromClient then
begin
CallFunction(lib,'FromClient',1,[pck]);
end;
end.


примерно вот так :D

skymanrus
05.01.2008, 18:29
спасибо за пример rateg
но чёт в dll MessageBox(0,L"medved",L"preved",0); не пашет
я скрипт запускаю и ничего не происходит
а я так понял должно сообщение выскочить "medved preved" с кнопкой ок
ну это не так важно на самом деле

скажите а можно передать из dll файла переменные в L2PacketHack

к примеру есть такой код

в С++

//sample.c
#define UNICODE
#include <windows.h>
#define DLL_EXPORT __declspec(dllexport) __stdcall

int DLL_EXPORT FromClient(int i)
{
int dda=133;
return 56;
}

int DLL_EXPORT APIENTRY DllMain (int i )
{
i=i+123;
return 34;
}


а в L2PacketHack

//samplescript.txt
var
Res:variant; lib:Integer; timer1:TTimer;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=true;
timer1.interval:=1000;
lib:=loadLibrary('Project62.dll');
end;

procedure Free;
begin
FreeLibrary(lib);
timer1.Free;
end;

procedure OnTimer(Sender: TObject);
begin
Res:=CallFunction(lib,'DllMain',1,[2]);
ShowMessage('!'+VarToStr(Res)+'!');
end;
begin
end.

эти два кода не к чему не ведут :(
переменные не передаются из dll

как передать при вызове dll значение переменной dda из dll в L2PacketHack ???

Добавлено спустя 23 часа 18 минут 16 секунд:
ну народ помогите плиз !!!
я не верю что здесь никто ничего не знает о подключении dll файлов :(

NLObP
06.01.2008, 03:38
Вот что нашел, может подойдет тебе.
Merdek 16 ноя 2007, 11:10
Проблема использования DLL написанной в Delphi.

Скомпелированная DLL лежит в той же папке, что и PacketHack 1.3.8
При вызове "CallFunction" вылетает ошибка "Invalid Argument".
Подскажите что не так...

Код DLL-ки в Delphi
library DLL;

uses
SysUtils,Classes;

function Str1(b:integer): string;
stdcall;
begin
if b=0 then
result := '1!'
else
result := '2!';
end;

exports
Str1 index 1 name 'op';

begin
end.

Код скрипта
var
lib, lib1:Integer;
Res:variant;
ar:array of variant;
str1: string;

procedure Init;

begin
str1:='0';

lib := loadLibrary('User32.dll');
lib1 := loadLibrary('DLL.dll');

Res:= CallFunction(lib1,'op',1,[0]);
str1:=Res;
Res := CallFunction(lib,'MessageBoxW',4,[nil,str1,'text2',0]);

FreeLibrary(lib);
FreeLibrary(lib1);
end;

begin
end;


dmitry501 16 ноя 2007, 12:24
Это кто тебя учил использовать дельфийские стринги без sharemem?
Почитай, что пишет Делфи, когда создаешь пустую dll
а лучше используй array of char с ручным управление памятью, как в классическом С.
Посмотри, как используются системные .dll, сначала подготавливаются буфера, а потом вызываются dll, причем передаются указатели на буфер.

Br1nk 11 дек 2007, 12:00
Если твоя строка будет меньше 256 символов, ты можешь вместо string использовать shortstring, не изменяя более ничего в программе.

function Str1(b:integer): shortstring;

//by Angel
Да дело не в сложности, а в удобо читаемости и в скорости работы.
dll не так уж сложно привязать (подгрузить к процесу).
пример привязки dll от xkor
Код:
var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
begin
lib := loadLibrary('User32.dll'); <--- -- привязка dll
|
lib1 := loadLibrary('GDI32.dll'); <---
Res := CallFunction(lib,'MessageBoxW',4,[nil,'Text1','text2',0]);
Res := CallFunction(lib,'GetDC',1,[0]);
CallFunction(lib1,'LineTo',3,[Res,100,100]);
CallFunction(lib,'ReleaseDC',2,[0,Res]);
FreeLibrary(lib);
FreeLibrary(lib1);
end.
главно dll нармально сделать, с нормальными названиями функций, процедур и тд

skymanrus
06.01.2008, 14:35
скопировал из system32 в директорию пакет хака 2 файла User32.dll и GDI32.dll
написал код в пакет хаке
var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
procedure Init;
begin
lib := loadLibrary('User32.dll');
lib1 := loadLibrary('GDI32.dll');
Res := CallFunction(lib,'MessageBoxW',4,[nil,'Text1','text2',0]);
Res := CallFunction(lib,'GetDC',1,[0]);
ShowMessage('!'+VarToStr(Res)+'!');
CallFunction(lib1,'LineTo',3,[Res,100,100]);
CallFunction(lib,'ReleaseDC',2,[0,Res]);
FreeLibrary(lib);
FreeLibrary(lib1);
end;
begin
end.

и все заработало
потом пытаюсь подключить какую то из своих dll и ничего не происходит :(((
можете исходный код на с++ работающего dll показать
который можно к пакет хаку подключить ?
тут с++ программеры есть ?

Добавлено спустя 11 минут 50 секунд:
Re: Запуск dll или exe из L2PacketHack
можете хотябы на делфи пример длл показать
вот я к примеру пишу такой код в делфи
library DLL;

uses
SysUtils,Classes;

function Str1: integer; stdcall;
begin
result := 2;
end;

exports
Str1 index 1;

begin
end.

а в пакет хаке такой
var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
procedure Init;
begin
lib := loadLibrary('Project2.dll');
Res := CallFunction(lib1,'Str1',1,[0]);
ShowMessage('!'+VarToStr(Res)+'!');
FreeLibrary(lib);
end;
begin
end.


мне все равно от длл приходит пустота :((
что не так то делаю ???

NLObP
06.01.2008, 16:06
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }

skymanrus
07.01.2008, 19:29
я конечно не силён в техническом английском и тем более в делфи но мне кажется модуль ShareMem необходим, чтобы экспортировать длинные строки
а я пытаюсь экспортировать integer тоесть числа :(
строки кстати пытался с этим модулем экспортировать получил ту же пустоту :(
единственная длл которая у меня заработала это

library FIRSTDLL;

uses ShareMem, Dialogs, Classes, SysUtils, Windows;

begin
ShowMessage ('Initialization Code Called');
end


табличка выскакивает а переменные не передаются и не экспортируются :((((((((
HELP!!!!!!!!!!!!

Добавлено спустя 1 день 1 час 19 минут 42 секунды:
люди ну я внатуре себе уже мозги поломал над этой фигнёй :( мож поможете?
я прост хочу сделать надстройку к пакет хаку тоесть написать длл который будет связан с экзешником написанном на делфях который будет очень похож на валкера
ну в общем хочу сделать вариант ин гейм бота но без знания как связать длл с пакет хаком ничё не выйдет :((

07.01.2008, 19:41
А в пакетхаке судя по всему не работает нормально вызов DLL.
Проверил твою DLL в WP PPC - вызов из скриптов там работает нормально, а вот в пакетхаке нет.

skymanrus
12.01.2008, 13:15
в том то и дело что в пакет хаке работает вызов длл !:(
вызов функций из виндузовых длл таких как User32.dll и GDI32.dll проходит на ура и эти функции возвращают в пакет переменные!
а я просто не могу правильно составить длл чтоб переменные передавались :(
скорее всего многоуважаемый создатель пакет хака может как то меня просветить по этому вопросу

SWS
12.01.2008, 19:22
как передать при вызове dll значение переменной dda из dll в L2PacketHack ???

Очень легко используй обычные функции вместо процедур и при ее описании укажи тип возвращаемого значения и лови это значение на выходе в L2ph.

мне все равно от длл приходит пустота :((
что не так то делаю ???

Я честно давно не писал уже DLL, попробуй отладь в делфи, может у тя сама DLL не пашет? Если компилируется, еще не значит, что с ней все ок, для того чтоб откомпилировать DLL, надо написать прогу, которая ее использует. Если не знаешь как делать, то почитай в поисковик те быстро выдаст статейки.

еще попробуй убери в uses все модули, все равно ты там ничего из них не используешь и проверь еще раз.

Вообще, я сам собираюсь написать DLL в которую из l2ph будут просто передаваться пакеты от клиента и сервака, а там уже будут процедурки для анализа пакетов и т.д. (т.е. там я помещу как раз весь тот код, который хочу реализовать), а обратно l2ph будет получать на выходе модифицированный пакет и отправлять. Кто подскажет можно мне как нить сделать так, чтоб я мог из DLL отправлять пакеты какие-то серваку или клиенту? Если так напрямую нельзя, то подскажите как реализовать оп другому, вообщем нужно сделать так, чтобы я мог когда мне нужно отослать пакеты клиенту или серваку, но весь исполняемый код будет в DLL, т.к. DLL намного быстрее выполняется, чем скрипт в l2ph, да и возможностей побольше предоставляет :)

13.01.2008, 00:57
Правильная передача параметров в DLL в пакетхаке не работает.
Механизм работы с DLL был тупо передран с форума http://fast-report.com/ru/forum/index.p ... topic=3593 (http://fast-report.com/ru/forum/index.php?showtopic=3593)
и никто не собирается его модифицировать или хотя бы разобраться.
В это способе все очень криво и не совсем правильно сделано и работает только частично.

13.01.2008, 00:58
В WP PPC все работает там явно использован другой механизм.

skymanrus
13.01.2008, 16:14
хех ладно.. я в ЛС написал xkor по поводу dll, надеюсь он ответит..
если нормально dll не пашут в пакетхаке придётся все свои скрипты под WP PPC перегонять :(
а жаль... в пакет хаке в 100 раз проще всё

кстати кто нидь может дать ссылку на темку про WP PPC где описывается как простейшие FS скрипты писать?

SWS
13.01.2008, 16:33
skymanrus, пожалуйста:

http://saur.x33.ru/ (http://saur.x33.ru/) - ссылка на офф сайт автора проги
http://saur.x33.ru/wp.html (http://saur.x33.ru/wp.html) - тут сразу можешь скачать самую последнюю бесплатную версию, сейчас 5.07

В архиве с прогой есть папка doc, там найдёшь документацию самого автора, описано как ее подключить и описание методов написание скриптов.

Вообще, если тут не работает нормально подключение сторонней dll, то придётся отложить свою идею о написание dll, в которой будет производится все вычисления и модификации с пакетами :(
Надеюсь автор программы обратит на сей факт свое внимание и раскажет подробно как правильно следует подключать dll, иначе придётся искать альтернативные варианты.

13.01.2008, 18:17
На АЧ есть много скриптов для ппц, даже есть на полную дешифрацию логин трафика для интерлюдии и камаэля

SWS
13.01.2008, 20:00
На АЧ есть много скриптов для ппц, даже есть на полную дешифрацию логин трафика для интерлюдии и камаэля

АЧ пока не работает )) У них переезд :(

skymanrus
14.01.2008, 12:06
действительно те длл которые я пытался запустить в пакетхаке прекрасно работают в WP PPC
а я так с ними мучился... :(

но меня все же удивляет и поражает что виндузовые библиотеки User32.dll и GDI32.dll все же пашут в пакет хаке :shock: :shock:
значит если как то все же изловчиться можно подобную библиотеку под пакетхак написать
жалко что исходники этих библиотек недостанеш нигде :(

может у кого то все же есть какие то дллки с исходным кодом которые в пакет хаке пашут?

SWS
14.01.2008, 14:56
skymanrus, у меня есть исходники, где в DLL создаётся форма, есть внешняя функция, которая создаёт и показывает модальное окно, по окончанию работы с ней форма разрушается.
Так же научился передавать строковые типа и никакой модуль ShareMem не нужен)) Единственное, что ща не могу реализовать, так это создание немодального окна, ибо модальное окно стопорит процесс передачи пакетом в том скрипте, где она вызвалась и пока не завершишь работу с ней пакеты не проходят, я в частности делал так: при написание какого-либо сообщения в клиенте, я подгружал DLL и вызывал функцию, все норм, а после выгружал. Но мля, модальное окно не катит, нужен механизм немодального, я нашел его, но там требуется 2 параметра, которые я не могу в скрипте узнать: Application.Hadle основной программы (l2ph) и CallForm.Handle, в этом вся запара, попробую написать xkor может поможет, вообще я знаю уже способ, но он требует поправки исходного кода программы))
Вообще мог бы и сам наверно поправить, тока Delphi я щас юзаю 7 и компоненты не ставил таких как JEDI, на счет версии Delphi я мож и не прав :)

Код скрипта:

var
MyLib:Integer;
Res:Variant;
ar:array of variant;
begin

//38 - пакет когда вы пишите что нить в чат, не важно что и в какой, тут проверяется тока тип пакета )
if FromClient and (pck[1]=#$38) and (MyLib=0) then begin
MyLib := LoadLibrary('D:\Программы\l2phx318\MyLib\MyLib.dll '); //Здесь укажи свой путь до DLL
if (MyLib = 0) then ShowMessage('Не удалось загрузить библиотеку!')
else Res := CallFunction(MyLib,'ShowFormInDLL',1,['Мое окошко, че хочу, то и делаю с ним ^^']);
ShowMessage('Окошко должно было появится, а это сообщение выводится после того как вы его закрыли');
end;

if FromClient and (pck[1]=#$38) and (MyLib<>0) then
begin
ShowMessage('Попытка выгрузить библиотеку');
FreeLibrary(MyLib);
ShowMessage('Библиотека должна была выгрузится');
end;

end.

Код самой Dll:

library MyLib;
uses
ShareMem,
SysUtils,
Classes,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

exports
ShowFormInDLL;

begin
end.

Код Unit1, в котором описана форма, этот модуль подключён к основной DLL в разделе uses:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

function ShowFormInDLL(Name: PWideChar): TModalResult; stdcall;

implementation

{$R *.dfm}

function PWideToString(pw: PWideChar): string;
var
p: PChar;
iLen: integer;
begin
iLen := lstrlenw(pw) + 1;
GetMem(p, iLen);

WideCharToMultiByte(CP_ACP, 0, pw, iLen, p, iLen * 2, nil, nil);

Result := p;
FreeMem(p, iLen);
end;

function StringToPWide(sStr: string; var iNewSize: integer): PWideChar;
var
pw: PWideChar;
iSize: integer;
begin
iSize := Length(sStr) + 1;
iNewSize := iSize * 2;

pw := AllocMem(iNewSize);

MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize);

Result := pw;
end;

function ShowFormInDLL(Name: PWideChar): TModalResult; stdcall;
begin
Form1 := TForm1.Create(Application);
Result := Form1.ShowModal;
Form1.Free;
end;

end.

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

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

QaK
14.01.2008, 15:41
Delphi я щас юзаю 7 и компоненты не ставил таких как JEDI
Я ставил - все норм ставится и Jedi И FastScript, только в 7й дельфе нет компонента TTrayIcon.

14.01.2008, 17:19
действительно те длл которые я пытался запустить в пакетхаке прекрасно работают в WP PPC
а я так с ними мучился... :(

но меня все же удивляет и поражает что виндузовые библиотеки User32.dll и GDI32.dll все же пашут в пакет хаке :shock: :shock:
значит если как то все же изловчиться можно подобную библиотеку под пакетхак написать
жалко что исходники этих библиотек недостанеш нигде :(

может у кого то все же есть какие то дллки с исходным кодом которые в пакет хаке пашут?

Пакетхак написан очень не грамотно, в нем есть ошибки, для исправления которых придется переписывать 70% пакетхака. И эти ошибки критичны, поэтому постоянно вылетают ошибки приложения.
Неправильный вызов ф-ций DLL это только цветочки, например класс TTimer всегда используется не корректно, так как он использует очередь сообщений главного окна, а в пакетхаке вообще нету правильной синхронизации основного потока и его очередей с потоками скриптов в случае использования Visual Component Library. Подобных ляпов в программе много, исправлять нет смысла, только если полность писать новый продукт.

SWS
14.01.2008, 17:23
Гость, Пределагаешь юзать WP PPC ?) Вариант-то нужно какой-то найти. Ни сидеть же вот так без DLL.

14.01.2008, 17:27
Не вижу ни слова про предложение использовать WP. Зато вижу намеки что стоит написать свой перехватчик клиента линейки и писать напрямую что хотите.

SWS
14.01.2008, 17:31
кпк, дело в том товарищ, что это не всем дано, можно и свою операционку написать, а вот делом мочь никто че-то не желает. Расскажи хотя б с чего начать писать, как расшифровать траффик и т.д.
Умные советы и я давать могу. :)

14.01.2008, 17:34
Есть исходники пакетхака по ним можно посмотреть как расшифровать траффик игрового сервера а больше и не надо

SWS
14.01.2008, 17:39
кпк, ты их смотрел? Если нет, посмотри, я смотрел, и понял, что мне потребуется много времени чтоб во всем разобраться. Даже первая функция это создание критической секции, ты хоть знаешь че это такое? Она используется для синхронизации потоков, код написанный в критической секции может выполнятся тока одним потоком одновременно, пока какой-то поток не освободит другой этот код использовать не может, поток будет временно приостановлен. Если для тебя это все так легко, то флаг те в руки как говорится. Я лично не берусь писать свою прогу парсинга и расшифровки пакетов. Думаю если попросить дружно xkor обновить свою программу и указать основные направления улучшения, то дело сдвинется с мёртвой точки.

14.01.2008, 17:44
Ну так сиди и жди когда перепишут как сказал гость 70% кода и не ной что не можешь понять а лучше иди и разбирись

SWS
14.01.2008, 17:45
кпк, те какое дело? Хочу и ною :)

skymanrus
14.01.2008, 21:03
SWS я по своему решил проблему создания немодального окна :D
может это конечно не самый лучший вариант но как говорится - "чем богаты..."
я сделал дллку которая генерирует ини файлик (в делфи на удивление просто с ини файлами обращатся)
а затем я просто написал прогу которая читает этот файл и таким образом я связал экзешник с длл
в общем отпала необходимость создавать форму прямо из длл (хотя хотелось бы)

длл

library dllll;
uses
SysUtils, IniFiles;

var
MobsX, MobsY, MobsZ, MobsRAS, MobsID: array[1..30] of integer;
MaxID, MyXpos, MyYpos, MyZpos, MyID: integer;
on1: Boolean;

//-------------------------------------------------
function GetMaxX: integer;
var
i, MaxX: Integer;
begin
MaxX:=0;
MaxID:=0;
for i:= 1 to 30 do
begin
if (MobsRAS[i]>=MaxX) then
begin
MaxX:=MobsRAS[i];
MaxID:=i;
end;
end;
result:=MaxX;
end;
//-------------------------------------------------
function Summ: integer;
var
i, Summa: Integer;
begin
Summa:=0;
for i:= 1 to 30 do
begin
if (MobsID[i]>1) then
begin
Summa:=Summa+1;
end;
end;
Summa:=Summa+2;
result:=Summa;
end;
//-------------------------------------------------
function rastoyanie(xpos1, ypos1, xpos2, ypos2:integer): integer;
begin
result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2))));
end;
//-------------------------------------------------
function FuncTst1(s, i, j: string): integer;
var
sIniFile: TIniFile;
sPath : String[160];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath+'\BOT.INI');
sIniFile.WriteString(s, i, j);
sIniFile.Free;
result:=1;
end;

//-------------------------------------------------
function FuncTst2(s : string): integer;
var
sIniFile: TIniFile;
sPath : String[160];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath+'\BOT.INI');
sIniFile.EraseSection(s);
sIniFile.Free;
result:=1;
end;
//-------------------------------------------------
function DelElArr(ele:integer): integer; //??????? ????!
begin
MobsID[ele]:=0;
MobsRAS[ele]:=0;
MobsX[ele]:=0;
MobsY[ele]:=0;
MobsZ[ele]:=0;
//Attacker[ele]:=false;
result:=1;
end;
//-------------------------------------------------

function AddBD(id, posx, posy, posz:integer): integer; stdcall;
var
k: Integer;
povtor: Boolean;
begin
if (on1=true) then begin
if (Summ>=25) or (GetMaxX>2500) then DelElArr(MaxID);

povtor:=false;
for k:= 1 to 30 do
begin
if (MobsID[k]=id) and (MobsX[k]=posx) and (MobsY[k]=posy) then
begin
povtor:=true;
break;
end;
if (MobsID[k]=id) then
begin
MobsRAS[k] := rastoyanie(MyXpos, MyYpos, posx, posy);
MobsX[k]:=posx;
MobsY[k]:=posy;
MobsZ[k]:=posz;
povtor:=true;
break;
end;
end;

if (povtor=false) then begin
for k:= 1 to Length(MobsID) do begin
if (MobsID[k]=0) then begin
MobsRAS[k] := rastoyanie(MyXpos, MyYpos, posx, posy);
MobsID[k]:=id;
MobsX[k]:=posx;
MobsY[k]:=posy;
MobsZ[k]:=posz;
break;
end;
end;
end;

// FuncTst2('bd');
for k:= 1 to 30 do begin
if (MobsID[k]<>0) then FuncTst1('bd', IntToStr(k), IntToStr(k)+'-'+IntToStr(MobsRAS[k])+'-'+IntToStr(MobsID[k])+'-x'+IntToStr(MobsX[k])+'-y'+IntToStr(MobsY[k])+'-z'+IntToStr(MobsZ[k]));
if (MobsID[k]=0) then FuncTst1('bd', IntToStr(k), '-');
end;
end;
result:=1;
end;
//-------------------------------------------------
function funcON(id, posx, posy, posz:integer): integer; stdcall;
begin
if (on1<>true) then begin
MyID:=id;
MyXpos:=posx;
MyYpos:=posy;
MyZpos:=posz;
on1:=true;
end;
result:=2;
end;
//-------------------------------------------------
exports AddBD, funcON;

begin
end.



экзешник читающий ини

unit rUnit1;

interface

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

type
TForm1 = class(TForm)
ListBox1: TListBox;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
i: integer;
sIniFile: TIniFile;
sPath : String[160];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath+'\BOT.INI');
ListBox1.clear;
for i:= 1 to 20 do begin
if ('-1'<>sIniFile.ReadString('bd', inttostr(i), inttostr(-1))) then
ListBox1.Items.Add( sIniFile.ReadString('bd', inttostr(i), inttostr(-1) ));
end;

//ListBox1.Items.Add( sIniFile.ReadString('bd', '1', inttostr(-1) ));

sIniFile.Free;
end;

end.

и ещё ты написал как форму создавать а как просто переменную передать из длл в пакетхак можеш скинуть код ??

NLObP
14.01.2008, 21:51
Пакетхак написан очень не грамотно, в нем есть ошибки, для исправления которых придется переписывать 70% пакетхака. И эти ошибки критичны, поэтому постоянно вылетают ошибки приложения.
Неправильный вызов ф-ций DLL это только цветочки, например класс TTimer всегда используется не корректно, так как он использует очередь сообщений главного окна, а в пакетхаке вообще нету правильной синхронизации основного потока и его очередей с потоками скриптов в случае использования Visual Component Library. Подобных ляпов в программе много, исправлять нет смысла, только если полность писать новый продукт.

Много Вас, тут таких критиков. Только и слышно - дай, дай... Сделай лучше, если сможешь и исходники не забудь выложить как Xkor сделал. :(

SWS
14.01.2008, 22:17
и ещё ты написал как форму создавать а как просто переменную передать из длл в пакетхак можешь скинуть код ??

Юзай обычные функции с указанным типом возвращаемого параметра и лови этот параметр в скрипте)) Функция его обязательно должна возвратить по идее. :)

SWS я по своему решил проблему создания немодального окна :D
может это конечно не самый лучший вариант но как говорится - "чем богаты..."
я сделал дллку которая генерирует ини файлик (в делфи на удивление просто с ини файлами обращатся)
а затем я просто написал прогу которая читает этот файл и таким образом я связал экзешник с длл

Ты че тупо записываешь какие то параметры из Dll в ини файл, а потом постоянно экзешником в цикле считываешь файл с жесткого диска? Не меня такой кривой способ не устроит, мало того, что параметры передаются не молниеносно, так еще и жёсткий диск постоянно в напряге держать, боже упаси :) Вообще для хорошей и правильной работы с DLL многие заранее в программе предусматривают такое понятие как плагин, т.е. спец образом написанная и оформленная Dll, которая легко прикручивается к программе и взаимодействует с ней, добавляя в нее функциональность, думаю все знают ту же Миранду )) Так вот, можно было бы попросить xkor реализовать хотя бы простейший механизм подключения сторонних Dll, так чтобы они не с помощью скрипта прикручивались, а именно через программу, так было бы намного лучше и правильнее, да и проблем с подключением не было.

skymanrus
14.01.2008, 22:42
Юзай обычные функции с указанным типом возвращаемого параметра и лови этот параметр в скрипте)) Функция его обязательно должна возвратить по идее.


ну вот я юзаю самую обычную функцию funcON с integer как тип возвращаемого параметра
выше я уже писал её код и вызываю её из пакетхака
должно в пакет хак прийти число 2 а приходит все равно пустота :( :( :(
ну что не так что :( помогите нубу :)

вот как я её вызываю
var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
procedure Init;
begin
lib := loadLibrary('dllll.dll');
Res := CallFunction(lib1,'funcON',4,[1,1,1,2]);
ShowMessage('!'+VarToStr(Res)+'!');
FreeLibrary(lib);
end;
begin
end.

SWS
14.01.2008, 23:11
skymanrus, я завтра проверю выложу, должно по идее ))

Во общем xkor сказал, что не видит вариантов возможности вызова окна из Dll обычным, не модальным образом. :(
Скачаю исходники попробую разобраться, главное разобраться в методе внедрения процесса к другому и перехвату приходящих пакетов, для меня это пока сложновато.
Знаю одно, что за это отвечает библеотека inject.dll,которую написал умный программист,т.к. в ней для внедрения в чужой процесс использовались низкоуровневые Native API функции, функции на которых базируются такие библиотеки GUI32.dll, kernel32.dll, user32.dll и т.д. Вся беда в том, что Native API официально не документированы, попробую все таки разобратся в программе и в методе внедрения и перехвата, если разберусь остальное дело техники. :)

skymanrus
16.01.2008, 13:03
хех получается что мой вариант вызова окна через ини файл является на сегодняшний день лучшим вариантом :)

SWS
16.01.2008, 14:16
хех получается что мой вариант вызова окна через ини файл является на сегодняшний день лучшим вариантом :)

Не обижайся, но это самый бредовый вариант.

skymanrus
16.01.2008, 15:12
я и не обижаюсь :) я вобще не злопамятный :D

мне прост интересно есть ли сейчас другие варианты ?
я бы с удавольствием ими воспользовался :)

SWS
17.01.2008, 01:55
skymanrus, будут, по крайне мере я лично собираюсь сделать свою прогу, которая будет так же перехватывать трафик и расшифровывать (я посмотрел уже исходники l2ph). Если хочешь я могу написать отдельную прогу, которая будет перехватывать трафик и отдавать его твоей dll, которую будет очень легко подключить к программе, т.к. именно по той причине, что этого не возможно нормально сделать в l2ph я пишу свою. :)

xkor
17.01.2008, 17:42
Думаю если попросить дружно xkor обновить свою программу и указать основные направления улучшения, то дело сдвинется с мёртвой точки.
да я собсно давно начал писать новый перехватчик.., тока вот бросил временно из за нехватки времени...

QaK
18.01.2008, 09:51
да я собсно давно начал писать новый перехватчик.., тока вот бросил временно из за нехватки времени...
Новая версия пектхака? =) Или вообще нечто другое, по функциональности (и небесплатное :D )

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

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

А зачаем делать подобие универсального wp ppc ? пакетхак отличается имено своей отличимостью и простотой без лишних настроек и задумок

xkor
21.01.2008, 03:50
А зачаем делать подобие универсального wp ppc ? пакетхак отличается имено своей отличимостью и простотой без лишних настроек и задумок
ну простату постараюсь оставить, нагромаждать кучу всего повсюду как в ppc небуду), тока расширю сферу применения и увеличу стабильность, ну и в скриптах сделаю побольше встроенных функций...
ЗЫ ну это всё ещё хз когда сделаю)

skymanrus
22.01.2008, 19:28
эх... быстрей бы :))
такая бы жизнь началась :)))

а можно щас как то поправить текущую версию пакет хака чтоб он длл нормально поддерживал???
это ведь не займет столько времени сколько займет разработка новой программы ??

Добавлено спустя 1 день 1 час 49 минут 10 секунд:
короче люди в версии l2phx319 dll заработали у меня !!! :))))

в пакет хаке пишу такую шнягу

var
lib,Lib1:Integer;
Res:variant;
ar:array of variant;
procedure Init;
begin
lib := loadLibrary('n2ewxor.dll');
Res := CallFunction(lib,'Str1',0,[0]);
ShowMessage('!'+VarToStr(Res)+'!');
FreeLibrary(lib);
end;
begin
end.


в делфи это

library n2ewxor;


uses
SysUtils,Classes;

function Str1: integer; stdcall;
begin
result := 212;
end;

exports
Str1;

begin
end.


и в результате из дллки приходит ответ - !212!
в общем все заработало респект xkor! :)

Добавлено спустя 1 минуту 16 секунд:
теперь могу продолжить свои разработки в ботостроительстве :))

xkor
23.01.2008, 16:12
интересно почему раньше неработало, ведь в новой версии в работе длл ничего не менял %)

skymanrus
23.01.2008, 18:18
да у меня такое частенько тоже бывает :) тестирую какую то прогу
правлю её потом забываю что поправил и в результате получается очень неожиданный результат :)) :crazy:

skymanrus
25.01.2008, 23:35
чет никак не могу передать string из dll в пакетхак
ShareMem подключил рассовал по всем директориям borlndmm.dll
потом забил на него подключил FastShareMem та же фигня...
пробывал менять string на shortstring, longstring, widestring толку ноль все равно пакет хак при чтении стринга даёт ошибку чтения памяти :(

вот что пишу:

library newBOT;

uses
ShareMem,
SysUtils,
Classes;
//FastShareMem in 'FastShareMem.pas';

{$R *.res}

function proc: String; stdcall;
begin
Result:='sdfg';
End;

exports proc;

begin
end.


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

мож кто знает в чем дело???

xkor
26.01.2008, 11:43
может массивом символов фиксированной длинны передавать попробуеш?

skymanrus
26.01.2008, 12:39
символы тоже не передаются не массив не даже один простейший char :)
но я нашёл выход ! :))
написал такую функцию

delphi


function proc: integer; stdcall;
var
i: Byte;
begin
if (res=0) then res:=1;
alfav[1]:='q';
alfav[2]:='w';
alfav[3]:='e';
alfav[4]:='r';
alfav[5]:='t';
alfav[6]:='y';
alfav[7]:='u';
alfav[8]:='i';
alfav[9]:='o';
alfav[10]:='p';
alfav[11]:='a';
alfav[12]:='s';
alfav[13]:='d';
alfav[14]:='f';
alfav[15]:='g';
alfav[16]:='h';
alfav[17]:='j';
alfav[18]:='k';
alfav[19]:='l';
alfav[20]:='z';
alfav[21]:='x';
alfav[22]:='c';
alfav[23]:='v';
alfav[24]:='b';
alfav[25]:='n';
alfav[26]:='m';
alfav[27]:=' ';
alfav[28]:='0';
alfav[29]:='1';
alfav[30]:='2';
alfav[31]:='3';
alfav[32]:='4';
alfav[33]:='5';
alfav[34]:='6';
alfav[35]:='7';
alfav[36]:='8';
alfav[37]:='9';
alfav[38]:='A';
alfav[39]:='B';
alfav[40]:='C';
alfav[41]:='D';
alfav[42]:='E';
alfav[43]:='F';
alfav[44]:='й';
alfav[45]:='ц';
alfav[46]:='у';
alfav[47]:='к';
alfav[49]:='е';
alfav[50]:='н';
alfav[51]:='г';
alfav[52]:='ш';
alfav[53]:='щ';
alfav[54]:='з';
alfav[55]:='х';
alfav[56]:='ё';
alfav[57]:='ф';
alfav[58]:='ы';
alfav[59]:='в';
alfav[60]:='а';
alfav[61]:='п';
alfav[62]:='р';
alfav[63]:='о';
alfav[64]:='л';
alfav[65]:='д';
alfav[66]:='ж';
alfav[67]:='э';
alfav[68]:='я';
alfav[69]:='ч';
alfav[70]:='с';
alfav[71]:='м';
alfav[72]:='и';
alfav[73]:='т';
alfav[74]:='ь';
alfav[75]:='б';
alfav[76]:='ю';
alfav[77]:='.';

ST := 'bk sk jktu 3435 жил был олег.';
for i := 1 to Length(ST) do
begin
Ch[i] := ST[i];
end;

Result:=-1;

for i := 1 to Length(alfav) do
begin
if ((Ch[res]='') and (Ch[res+1]='')) then
begin
Result:=-9;
res:=1;
break;
end;
if (alfav[i]=Ch[res]) then
begin
Result:=i;
break;
end;

end;

res:=res+1;
End;


пакет хак

//обьявляю тут точно такой же массив alfav
for i := 1 to 255 do
begin
reshd:=CallFunction(lib,'proc',0,[0]);
if (reshd=-9) then break;
dfg:=dfg+alfav[reshd];
end;
frm := TForm.Create(nil);
frm.Caption := dfg;

короче строка разбивается на символы и по символам передаётся в виде integer а затем собирается в пакетхаке :)
скрипт пашет довольно таки быстро и все обходится без всяких там ShareMem, borlndmm.dll и FastShareMem
все равно они не пашут :)

Grinch
28.02.2008, 22:13
ну бесплатность останется, покрайней мере по началу точно, но сорци уже наверно небуду выкладывать
а по поводу функциональности дубаю сделать универсальный перехватчик который сможет перехватить даже пакеты браузера)
Лёх если пакетхак перестанет зависать :) я те 500р перечислю на кашелёк (уже так делал, если помниш, ну не 500 просто после покупки бота осталось), просто так, сырцов мне не надо, главное что б не зависал и имел панель окон допустим :) буквально придумал 5-10 секунд назад, типа сварачиваем клиент в трей, а в пакет хаке кнопочка появляется с вызовом из трея( с именем чара на окно вот тогда будет красиво, но главное стабильность красивости если нет желания лутьше не делать), а сырцов думаю для тех кто шарит уже хватит, мне они как 5-е колесо

Grinch
28.02.2008, 22:13
ну бесплатность останется, покрайней мере по началу точно, но сорци уже наверно небуду выкладывать
а по поводу функциональности дубаю сделать универсальный перехватчик который сможет перехватить даже пакеты браузера)
Лёх если пакетхак перестанет зависать :) я те 500р перечислю на кашелёк (уже так делал, если помниш, ну не 500 просто после покупки бота осталось), просто так, сырцов мне не надо, главное что б не зависал и имел панель окон допустим :) буквально придумал 5-10 секунд назад, типа сварачиваем клиент в трей, а в пакет хаке кнопочка появляется с вызовом из трея( с именем чара на окно вот тогда будет красиво, но главное стабильность красивости если нет желания лутьше не делать), а сырцов думаю для тех кто шарит уже хватит, мне они как 5-е колесо