Как я могу перепроектировать зашифрованные пакеты в приложении Windows? - PullRequest
5 голосов
/ 13 февраля 2009

У меня есть приложение Windows EXE, которое используется для отправки пакетов на сервер в открытом виде. Это приложение (давайте назовем его клиентским приложением) определенно близко к источнику, но некоторые умные хакеры отредактировали двоичный файл и заставили его посылать зашифрованные пакеты.

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

Для запуска шестнадцатеричного клиента потребовалась дополнительная библиотека DLL, чего не делал старый клиент. Я предполагаю, что каким-то образом шестнадцатеричный клиент сумел загрузить эту dll (давайте назовем ее client.dll), и функция этой dll состоит в том, чтобы реализовать шифрование / дешифрование, подключив некоторые окна API, которые перенаправили все пакеты, отправленные из процесс client.exe.

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

Я понятия не имею, какую информацию предоставить, но если что-то не хватает, просто ответьте, и я опубликую более подробную информацию, и если кто-то захочет получить двоичные файлы, я с удовольствием предоставлю ее.


бинарная загрузка для любых заинтересованных сторон:

http://dl.getdropbox.com/u/46623/client.dll

http://dl.getdropbox.com/u/46623/newClient.exe

http://dl.getdropbox.com/u/46623/originalClient.exe

Они не запустятся, потому что файлы ресурсов требуются - они составляют около 3 гигабайт, слишком велики для загрузки в любом месте. Имена были изменены, чтобы защитить виновных =), но это, вероятно, не защищает имя DLL ...

Ответы [ 2 ]

3 голосов
/ 13 февраля 2009

Я предполагаю, что человек, который кодировал этот хук , который добавляет шифрование к пакетному вводу-выводу для вышеупомянутой программы, либо перехватил соответствующие API сокетов Windows (WSASend, send и т. Д.) Или подключили внутренние функции программы, используемые для отправки / получения данных.

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

Что касается предмета изучения того, как это сделать, я не мог бы направить вас к одному учебнику, чтобы научить вас всему, но я настоятельно рекомендую вам взглянуть на Tuts4You сайт, на котором есть множество учебники, которые будут соответствовать всем вашим потребностям.

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

2 голосов
/ 13 февраля 2009

Вам нужно перехватить функции, экспортируемые дополнительной DLL, и изучить вызываемые функции и передаваемые им параметры. Это будет непросто, поскольку у вас нет информации о типе (например, сигнатуры функций для экспорта DLL).

Посмотрите здесь для получения некоторой информации о перехвате API. Вам также понадобится хорошая отладочная попытка Windbg от Microsoft.

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

               +--------------+
Input--------->| Original App |--------->Response1
               +--------------+

               +------------+
Input--------->| Modded App |--------->Response2
               +------------+

Теперь, когда вы выясните, как использовать функции из дополнительной библиотеки DLL, вы можете использовать ее самостоятельно так же, как это делает оригинальное приложение.

...