Вернуться   CoderX :: Forums > Основные форумы > Полезности
Войти через OpenID

Полезности Исключительно для полезных тем из других разделов.
Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 27.12.2011, 00:51   #471
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Все верно пишет maxilam, используя Api почти ничего не нужно менять. При переходе на God я не изменил в механизме отправки ни одной функции. Только в последнем обновлении пришлось кое что подправить.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 27.12.2011, 02:03   #472
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

Yegor, долго разбирался как в клиенте всё работает? мб тоже попробовать на апи клиента че-нить сварганить
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 27.12.2011, 02:16   #473
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

supernewbie, ты что уже доделал свой L2 сервер?
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 27.12.2011, 02:23   #474
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

о! доделывай, а мы его про лэдвапэхакнем!
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
Старый 27.12.2011, 02:46   #475
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

Цитата:
Сообщение от Yegor Посмотреть сообщение
supernewbie, ты что уже доделал свой L2 сервер?
нет, но почему надо всё время заниматься только им)
вообще интересно сделать радар, который рисует с учетом поворота камеры в клиенте, тем более что в этой теме вроде была инфа по камере

Добавлено через 1 минуту
Цитата:
Сообщение от SeregaZ Посмотреть сообщение
о! доделывай, а мы его про лэдвапэхакнем!
доп. шифрация пишется за час-два максимум
__________________
Начало.

Последний раз редактировалось supernewbie, 27.12.2011 в 02:46. Причина: Добавлено сообщение
supernewbie вне форума   Ответить с цитированием
Старый 21.01.2012, 00:10   #476
Пользователь
 
Аватар для Silent
 
Регистрация: 07.02.2011
Сообщений: 32
Сказал Спасибо: 8
Имеет 4 спасибок в 4 сообщенях
Silent пока неопределено
По умолчанию Need help

Доброго времени суток. Прошу подсказать неучу где я накосячил и как нужно правильно делать.
Почитал статьи Ms-Rem-а на wasm.ru по перехвату API функций, написал небольшой тестовый пример по перехвату функций из библиотеки wtsapi32, опробовал на своем проекте все нормально отрабатывает.
Код:
library WTSSession;

uses
  Windows,
  NativeAPI, Dialogs;

type
 OldCode = packed record
  One: dword;
  Two: word;
 end;


far_jmp = packed record
  PuhsOp: byte;
  PushArg: pointer;
  RetOp: byte;
 end;

  _WTS_CONNECTSTATE_CLASS = (
    WTSActive,              // User logged on to WinStation
    WTSConnected,           // WinStation connected to client
    WTSConnectQuery,        // In the process of connecting to client
    WTSShadow,              // Shadowing another WinStation
    WTSDisconnected,        // WinStation logged on without client
    WTSIdle,                // Waiting for client to connect
    WTSListen,              // WinStation is listening for connection
    WTSReset,               // WinStation is being reset
    WTSDown,                // WinStation is down due to error
    WTSInit);               // WinStation in initialization
  {$EXTERNALSYM _WTS_CONNECTSTATE_CLASS}
  WTS_CONNECTSTATE_CLASS = _WTS_CONNECTSTATE_CLASS;
  {$EXTERNALSYM WTS_CONNECTSTATE_CLASS}
  TWtsConnectStateClass = WTS_CONNECTSTATE_CLASS;

  PWTS_SESSION_INFOW = ^WTS_SESSION_INFOW;
  {$EXTERNALSYM PWTS_SESSION_INFOW}
  _WTS_SESSION_INFOW = record
    SessionId: DWORD;              // session id
    pWinStationName: LPWSTR;       // name of WinStation this session is connected to
    State: WTS_CONNECTSTATE_CLASS; // connection state (see enum)
  end;
  {$EXTERNALSYM _WTS_SESSION_INFOW}
  WTS_SESSION_INFOW = _WTS_SESSION_INFOW;
  {$EXTERNALSYM WTS_SESSION_INFOW}
  TWtsSessionInfoW = WTS_SESSION_INFOW;
  PWtsSessionInfoW = PWTS_SESSION_INFOW;

var
 JmpWTS: far_jmp;
 OldWTS: OldCode;
 PtrWTS: pointer;

function WTSEnumerateSessionsW(hServer: THandle; Reserved: DWORD; Version: DWORD;
  var ppSessionInfo: PWTS_SESSION_INFOW; var pCount: DWORD): BOOL; stdcall; external 'wtsapi32.dll';

{$R *.res}

function TrueWTSEnumerateSessionsW(hServer: THandle; Reserved: DWORD; Version: DWORD;
  var ppSessionInfo: PWTS_SESSION_INFOW; var pCount: DWORD): BOOL; stdcall;
var Written: dword;
begin
WriteProcessMemory(INVALID_HANDLE_VALUE, PtrWTS, @OldWTS, SizeOf(OldCode), Written);
Result := WTSEnumerateSessionsW(hServer, Reserved, Version, ppSessionInfo,pCount);
WriteProcessMemory(INVALID_HANDLE_VALUE, PtrWTS, @JmpWTS, SizeOf(far_jmp), Written);
end;

function NewWTSEnumerateSessionsW(hServer: THandle; Reserved: DWORD; Version: DWORD;
  var ppSessionInfo: PWTS_SESSION_INFOW; var pCount: DWORD): BOOL; stdcall;
var i:Integer;
    SI: PWTS_SESSION_INFOW;
begin
Result := TrueWTSEnumerateSessionsW(hServer, Reserved, Version, ppSessionInfo, pCount);
SI := ppSessionInfo;
if Result then
  begin
    for i:= 0 to Pred(pCount) do
      begin
        ShowMessage(SI.pWinStationName);
        inc(SI);
      end;
  end
else
  ShowMessage('False');
end;

Procedure SetHook();
var
 Bytes: dword;
begin
  PtrWTS  := GetProcAddress(GetModuleHandle('wtsapi32.dll'), 'WTSEnumerateSessionsW');
  ReadProcessMemory(INVALID_HANDLE_VALUE, PtrWTS, @OldWTS, SizeOf(OldCode), Bytes);
  JmpWTS.PuhsOp  := $68;
  JmpWTS.PushArg := @NewWTSEnumerateSessionsW;
  JmpWTS.RetOp   := $C3;
  WriteProcessMemory(INVALID_HANDLE_VALUE, PtrWTS, @JmpWTS, SizeOf(far_jmp), Bytes);
end;

Procedure Unhook();
var
 Bytes: dword;
begin
  WriteProcessMemory(INVALID_HANDLE_VALUE, PtrWTS, @OldWTS, SizeOf(OldCode), Bytes);
end;

Function MessageProc(code : integer; wParam : word;
                    lParam : longint) : longint; stdcall;
begin
 CallNextHookEx(0, Code, wParam, lparam);
 Result := 0;
end;

procedure DLLEntryPoint(dwReason: DWord);
begin
  case dwReason of
    DLL_PROCESS_ATTACH: begin SetHook(); end;
    DLL_PROCESS_DETACH: begin Unhook(); end;
  end;
end;

begin
  DllProc := @DLLEntryPoint;
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
Решил попробовать на примере Л2 перехватить функции и зашел в тупик, клиент постоянно валится в крит, причем перехват происходит т.к. валится уже при вызове оригинальной функции. Возможно кто-то сможет растолковать неучу где я накосячил.
Код:
library Red;

uses
  Windows,
  NativeAPI, Dialogs;

type
 OldCode = packed record
  One: dword;
  Two: word;
 end;


far_jmp = packed record
  PuhsOp: byte;
  PushArg: pointer;
  RetOp: byte;
 end;

var
 JmpWTS: far_jmp;
 OldWTS: OldCode;
 PtrWTS: pointer;
 OriginalF: procedure(i:Integer); stdcall;

{$R *.res}

procedure CallF(i: Integer); stdcall;
asm
    mov     ecx, PtrWTS
    mov     esp, ebp
    pop     ebp
    jmp     [OriginalF]
end;

procedure NewF(i: Integer); stdcall;
begin
  CallF(i);
end;

procedure HookF(i: Integer); stdcall;
asm
  push    ecx
  push    [ebp+8]
  push    ecx
  call    NewF
  pop     ecx
end;

Procedure SetHook();
var
 Bytes: dword;
begin
  PtrWTS  := GetProcAddress(GetModuleHandle('engine.dll'), '?OnAcceptGameStart@UGameEngine@@UAEXH@Z');
  OriginalF := GetProcAddress(GetModuleHandle('engine.dll'), '?OnAcceptGameStart@UGameEngine@@UAEXH@Z');
  ReadProcessMemory(INVALID_HANDLE_VALUE, PtrWTS, @OldWTS, SizeOf(OldCode), Bytes);
  JmpWTS.PuhsOp  := $68;
  JmpWTS.PushArg := @HookF;
  JmpWTS.RetOp   := $C3;
  WriteProcessMemory(INVALID_HANDLE_VALUE, PtrWTS, @JmpWTS, SizeOf(far_jmp), Bytes);
end;

Procedure Unhook();
var
 Bytes: dword;
begin
  WriteProcessMemory(INVALID_HANDLE_VALUE, PtrWTS, @OldWTS, SizeOf(OldCode), Bytes);
end;

procedure DLLEntryPoint(dwReason: DWord);
begin
  case dwReason of
    DLL_PROCESS_ATTACH: begin SetHook(); end;
    DLL_PROCESS_DETACH: begin Unhook(); end;
  end;
end;

begin
  DllProc := @DLLEntryPoint;
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
Буду признателен за любую помощь.
Silent вне форума   Ответить с цитированием
Старый 21.01.2012, 00:41   #477
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Надеюсь пробуешь на клиенте отвязанном от GG на какой нибудь фришке?
Sherman вне форума   Ответить с цитированием
Старый 21.01.2012, 00:44   #478
Пользователь
 
Аватар для Silent
 
Регистрация: 07.02.2011
Сообщений: 32
Сказал Спасибо: 8
Имеет 4 спасибок в 4 сообщенях
Silent пока неопределено
По умолчанию

На астериосе
P.S. Кроме евроофа, руофа и астериоса больше нету клиентов, так что самый безобидный получается последний.
Silent вне форума   Ответить с цитированием
Старый 21.01.2012, 06:08   #479
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Цитата:
Сообщение от Silent Посмотреть сообщение
На астериосе
P.S. Кроме евроофа, руофа и астериоса больше нету клиентов, так что самый безобидный получается последний.
OllyDbg, безсонные ночи тебе в помощь ) Скорее всего там стоит аналогичный хук. Хук на хук получаешь AV клиента. Отладка-отладка и еще раз отладка.
Sherman вне форума   Ответить с цитированием
За это сообщение Sherman нажился спасибкой от:
Старый 21.01.2012, 07:36   #480
Пользователь
 
Регистрация: 27.08.2010
Сообщений: 46
Сказал Спасибо: 6
Имеет 19 спасибок в 12 сообщенях
maxilam пока неопределено
По умолчанию

Silent, найди фришку на которой работает L2ph (если нужна годовская фриха, велком ко мне в личку). И на ней уже отрабатывай свои хуки. На астериосе, если я не ошибаюсь, стоит защита.
По отладке могу дать один совет:
Когда получаешь адресс функции
delphi Код:
PtrWTS  := GetProcAddress(GetModuleHandle('engine.dll'), '?OnAcceptGameStart@UGameEngine@@UAEXH@Z');
сохрани память по этому адресу, размером к примеру 1024кб в текстовый файл. Потом открой этот файл через HEX Editor Neo. В нем есть встроеный дизасемблер (только в полной версии, и триальной). Через дизасемблер посмотри код функции.
Потом тоже самое сделай после хука функции. То есть сохрани участок памяти по адресу PtrWTS размером 1024 и посмотри как ложится твой хук на функцию.
С одной стороны гиморно, а с другой стороны, этот метод мне очень помогает в отладке хуков.
maxilam вне форума   Ответить с цитированием
За это сообщение maxilam нажился 3 спасибками от:
Ответ

  CoderX :: Forums > Основные форумы > Полезности



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 02:55.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!