PDA

Просмотр полной версии : Ищю исходники Торгового бота


Sherman
09.12.2009, 18:24
Собственна, ищю исходники любого простого торгового бота на Дельфи с минимальным функционалом, логин, выставить вещи на трейд, сесть на трейд / встать с трейда. Гугл непомогает. Встречал исходник TradeBot, но сцылки мертвые. Помогите кто может. :)

Был бы признателен Hint'у, если бы дал исходники своего бота с вырезанными кусками работы с защитой.

Либо интересуют реализованные алгоритмы работы перехода с ЛС на ГС и поддержка обмена пакетами NetPing Бота с ГС.

Sherman
11.12.2009, 12:42
Апп тему!

alexteam
11.12.2009, 13:01
куски с моего. не совсем торгового.. то что предназначено для паблика. на данный момент для цт2.3
скрипт работы с протоколом гс, первые пакеты:
procedure CallProtocolVersion(Protocolversion:Integer);
begin
buf := '';
WriteMask('bd',[$0E, Protocolversion]);
buf := buf +
HStr('0907545603090B010702545456070002555600510053 57040755085401070153005655560106050451030851085156 045406550802095156015306550453005656'+
'5301090209015154510955560903040705550406550406090 45101080806055206040107540306525506555551010204540 3555401575155055205540751515507'+
'0253530052055207015400030505080605050603000D08010 709035103075309510607540A5056025204055551025300085 4045256060209000803535601050055'+
'060856040D0607520607040A0601045404000502045400095 253050401040505015251520D065108095453000D010203545 30105030856540702540B06115D1F60');
SendBuf;
end;

Procedure CallAuthLogin(LoginName:string; SessionKey1_1, SessionKey1_2, SessionKey2_1, SessionKey2_2: Integer);
begin
buf := '';
WriteMask('bsdddd', [$2b, LoginName, SessionKey2_2, SessionKey2_1, SessionKey1_1, SessionKey1_2]);
buf := buf + HStr('010000002A02000000000000');
SendBuf;
end;

кусок кода не совсем из паблика подключающий дллку
function TUserEngine.LoadLsLib(unload: boolean): boolean;
begin
result := false;

if HLsWorkOut <> 0 then
begin
if assigned(LsWorkout) then
begin
LsWorkout.Destroy;
LsWorkout := nil;
end;
FreeLibrary(HLsWorkOut);
HLsWorkOut := 0;
LsWorkoutCreate := nil;
end;

if (TLsClass(UserClass.CurrentLS).LSlibraryPath = '') or unload then exit;



if FileExists(TLsClass(UserClass.CurrentLS).Lslibrary Path) then
HLsWorkOut := LoadLibrary(PChar(TLsClass(UserClass.CurrentLS).Ls libraryPath))
else
HLsWorkOut := LoadLibrary(PChar(apppath+'\DATA\WorkOuts\LS\'+TLs Class(UserClass.CurrentLS).LslibraryPath));

if HLsWorkOut > 0 then
begin
try
@LsWorkoutCreate := GetProcAddress(HLsWorkOut,'LSWorkoutCreate');
result := true;
except
end;
if (@LsWorkoutCreate = nil) or not result then
begin
AddLogMain(format(rs_lib_hasNoExport, [TLsClass(UserClass.CurrentLS).LSlibraryPath, 'LSWorkoutCreate']),2)
end
else
begin
AddLogMain(format(rs_lib_load_ok, [TLsClass(UserClass.CurrentLS).LSlibraryPath]),0);
try
LsWorkoutCreate(@LSworkout);
if @LSworkout = nil then else Result := true;
except
result := false;
end;
if not result then AddLogMain(format(rs_lib_object_create_fail, [TLsClass(UserClass.CurrentLS).LSlibraryPath]),2);
end;
end
else
begin
Result := false;
AddLogMain(format(rs_lib_loadfail, [TLsClass(UserClass.CurrentLS).LSlibraryPath]),2);
end;
end;


модуль работы с ЛС в полном виде в аттаче. представляет собой дллку с классом похожим на компоненту (код "сперт" с l2clientemu). uLSAuthSharedData.pas подключаеться и к длл и к приложению ее подгружающую и содержит нужные структуры с коментариями позволяющими понять порядок вызова методов и что означает тот либо иной проперти.

alexteam
11.12.2009, 13:17
зы. на цт2.3 нетпинга нет

Sherman
19.12.2009, 18:53
зы. на цт2.3 нетпинга нет

С нетпингом я разобрался, с ответом ГГ тоже, а вот авторизация для меня пока темный лес. :(
Может быть есть у кого наработки для авторизации на C4 с621 протокол?

xkor
20.12.2009, 02:09
с ответом ГГ тожеоО, как это разобрался?, не поверю что ты понял как отвечать ГГ так же как оригинальный ГГ!

Sherman
20.12.2009, 10:20
оО, как это разобрался?, не поверю что ты понял как отвечать ГГ так же как оригинальный ГГ!

Дело в том что на интересующем меня сервере ГГ убит, но освобожденный ответ на гг используется для каких то целей, и генерируется не в engine, или как наверное в оригинальном клиенте в GameGuard.des, а в dll защиты, в итоге контрол Ц, контрол Вэ, в свою функцию в скобочках asm решило проблему.

ЗЫ: Уже неделю сижу в отладчике, не могу понять в чем дело. l2emu_client не хочет жевать пакеты логин сервера. Клиент в отладчике нормально логиниться, есть изменения обработки пакетов от ЛС в клиенте, повторение этих изменений в l2emu_client не приводит к результату, возникает догадка что l2emu_client не очень корректно работает с С4. М.б. кто нибудь достанет из загашнеков исходник для логинсервера С4.?

Xkor, а у тебя случаем не осталось исходника L2proxy?

xkor
20.12.2009, 15:30
Xkor, а у тебя случаем не осталось исходника L2proxy?L2proxy это предок пакетхака, так что хз зачем оно тебе)

Sherman
20.12.2009, 19:08
Хочу попробовать на локалхост завести l2emul и клиента, и засылать одинаковые пакеты в тот и другой, и проанализировать работу.

Sherman
23.12.2009, 10:32
xkor, удали тему. С логин сервером разобрался. Пришлось вспомнить как писать серверные сокеты. Сделал эмулятор логин сервера и проигрывал в нем записанные заранее пакеты. Анализировал работу клиента и эмулятора. Результат положительный. Могу исходник эмулятора лс выложить если кому интересно. Заранее говорю что у меня древний протокол авторизации 785a.

NLObP
25.12.2009, 21:31
Выкладывай, интересно.

Sherman
28.12.2009, 11:19
собственно вот. Лог серверных пакетов береться из l2_emul и вставляется в исходный код. Писал чисто для себя и под конткретную задачу, по этому гнилыми памидорами просьба не закидывать )

Sherman
29.12.2009, 12:55
alexteam, я так понял ты своего бота пишешь. Вопрос, как у тебя реализована работа с ГС. Именно блокируемый/неблокируемый сокет, обработка событий в отдельном потоке или нет. Интересуют хотя бы примерные исходники реализации неблокируемого сокета с обработкой событий сокета в потоке. Весь ГуглоЯндекс перелопатил, готовых решений нету :(

alexteam
29.12.2009, 13:00
для каждого соединения в отдельном потоке. блокируемый режим.