Как стать автором
Обновить
4
0
xRay @xRay

Пользователь

Отправить сообщение
Чтобы стрелки были ровными можно включить их отображение через Unicode: «e scr.utf8=true»
Или же можно добавить эту команду в $HOME/.config/radare2/.radare2rc
Рекомендую почитать нашу книгу и блог, чтобы ознакомиться с возможностями.
Могу еще порекомендовать HT editor, который намного попроще, зато радует знакомым с детства интерфейсом.
Меня на radare2 навел один из его разработчиков, xvilka, и проект мне понравился, и хотя его интерфейс по умолчанию писали любители vim, но это его не портит. Очень жду, когда допилят Bokken до приличного состояния, и можно понемногу уходить с IDA в сторону открытых решений, а то уж больно дорого стоит нынче ее лицензия.

и да, DelegateAdapter от Juan Ignacio тоже основана та статье Hannes Dorfmann про Adapter Delegates(JOE'S GREAT ADAPTER HELL ESCAPE).

Похоже на вариацию паттерна DelegateAdapter от Juan Ignacio в статье RecyclerView — Delegate Adapters

Рекомендую обратить внимание на два проекта — flashrom(утилита для записи и чтения из флешки) и bios_extract(утилита для распаковки образов Award, AMI, Insyde, Phoenix). Оба с открытыми исходниками, так что можете и патчи присылать. :)

Почему автоматное описание противопоставляется UML? Есть же UML state machine / UML statechart...

Статью стоило бы назвать "Невидимые друзья вашего github-репозитория, если вы — Javascript-хипстер". Только три перечисленных инструмента работают вне экосистемы npm.

НЛО прилетело и опубликовало эту надпись здесь
А за три года до этого, Убер перешел с MySQL на PostgreSQL
Да, есть такое дело.
Тот же самый автор — Evan Klitzke — писал об этом переходе: https://www.yumpu.com/en/document/view/53683323/migrating-uber-from-mysql-to-postgresql
Он, видимо, всё никак он не определится.
Честно говоря ни разу не применял шаблон Closure Table, но вообще надо будет сделать потестить.
Ну вогнать dll-ку в чужой процесс не так уж и сложно

Я в курсе. Делал инжектор невидимой DLLки (т.е. без файла на диске) для win32/win64.
Но пока подход с дебагом работает, можно кодить основное направление.
Ну вогнать dll-ку в чужой процесс не так уж и сложно
вот как вариант, тут, правда, не хватает пары проверок
program Injector;

uses
  shellapi,
  Windows;

type
  TInject = packed record
    PushLoadLibraryCommand: BYTE;
    LoadLibraryArg: DWORD;
    CallLoadLibrary: word;
    CallLoadLibraryAddr: DWORD;
    PushExitThread: BYTE;
    ExitThreadArg: DWORD;
    CallExitThread: word;
    CallExitThreadAddr: DWORD;
    AddrLoadLibrary: pointer;
    AddrExitThread: pointer;
    LibraryName: array [0 .. MAX_PATH] of Char;
  end;

{$R *.res}

  { Внедрение Dll в процесс }
function InjectDll(Process: DWORD; ModulePath: PChar): boolean;
  function Offset(struct, field: pointer): cardinal;
  begin
    Result := cardinal(field) - cardinal(struct);
  end;

var
  Memory: pointer;
  Code: DWORD;
  BytesWritten: DWORD;
  ThreadId: DWORD;
  hThread: DWORD;
  hKernel32: DWORD;
  Inject: TInject;
begin
  Result := false;
  Memory := VirtualAllocEx(Process, nil, sizeof(Inject), MEM_TOP_DOWN or MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  if Memory = nil then
    Exit;

  Code := DWORD(Memory);
  // инициализация внедряемого кода:
  FillChar(Inject, sizeof(Inject), 0);

  Inject.PushLoadLibraryCommand := $68;
  Inject.LoadLibraryArg := Code + Offset(@Inject, @Inject.LibraryName);
  Inject.CallLoadLibrary := $15FF;
  Inject.CallLoadLibraryAddr := Code + Offset(@Inject, @Inject.AddrLoadLibrary);

  Inject.PushExitThread := $68;
  Inject.ExitThreadArg := 0;
  Inject.CallExitThread := $15FF;
  Inject.CallExitThreadAddr := Code + Offset(@Inject, @Inject.AddrExitThread);

  hKernel32 := GetModuleHandle('kernel32.dll');
  Inject.AddrLoadLibrary := GetProcAddress(hKernel32, 'LoadLibraryW');
  Inject.AddrExitThread := GetProcAddress(hKernel32, 'ExitThread');
  lstrcpy(@Inject.LibraryName, ModulePath);
  // записать машинный код по зарезервированному адресу
  WriteProcessMemory(Process, Memory, @Inject, SIZE_T(sizeof(Inject)), SIZE_T(BytesWritten));
  // выполнить машинный код
  hThread := CreateRemoteThread(Process, nil, 0, Memory, nil, 0, ThreadId);
  if hThread = 0 then
    Exit;
  WaitForSingleObject(hThread, INFINITE);
  CloseHandle(hThread);
  VirtualFreeEx(Process, Memory, 0, MEM_RELEASE);
  // надо-надо умываться по утрам и вечерам
  Result := True;
end;

procedure StartHook;
var
  ShellInfo: SHELLEXECUTEINFO;
begin
  FillChar(ShellInfo, sizeof(ShellInfo), 0);
  ShellInfo.cbSize := sizeof(ShellInfo);
  ShellInfo.lpFile := PChar('hoockedexe.exe');
  ShellInfo.nShow := SW_NORMAL;
  ShellInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  ShellExecuteEx(@ShellInfo);
  InjectDll(ShellInfo.hProcess, 'inject.dll');
end;

begin
  StartHook;

end.
А со сплайсингом помогает вот эта либа MinHook.
Скажите, почему был выбран метод отладки как способ перехвата пакетов, а не например тот-же dll proxy/injection + сплайсинг, разве наличие int 3 не замедляет выполнение программы?
Конкретно в этом пункте ничего особенного, всё было написано на чистом WinAPI строго по MSDNу. Я думаю, примеров минимальных отладчиков везде полно, нужен CreateProcess() с DEBUG_PROCESS, и WaitForDebugEvent() с ContinueDebugEvent() в цикле. На удивление простое и понятное API.

Но если вас интересует конкретная реализация (с брейкпоинтами и вытягиванием памяти) я могу поделиться исходником своего класса отладчика. Только он на FPC, если вас это не смутит.
github.com/Camelion/jts-tanks
уже давно разобрали и пилится эмулятор
это же, чёрт побери, Python Pickle

Этого следовало ожидать, ибо там половина клиента с Python скриптами (достаточно поглядеть в любой продвинутый мод типа DM).
Думается мне, проще было пойти по этому пути (судя по всему swf-ки в GUI уже имеют доступ к распакованным данным из клиента), чем пытаться реверсить клиент
Можно еще исправить не переход (его иногда бывает непросто найти), а просто добавить свое устройство в список.
Во второй части расскажу и про этот класс модов (whitelist removal) тоже.
Также есть очень полезная штука, PredicateBuilder, позволяет объединять выражения с помощью And, Or, Not.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность