Print This Post Снимаем пароль с тестов MyTestXPro

Вторник, 15. Сентябрь 2015
Раздел: .NET, Assembler, Для новичков, автор:

Год назад в своей старой статье я рассматривал процесс открытия защищенных паролем тестов MyTestX, а также процесс получения .mtf-файлов из .exe-файлов автономных тестов.
Прогресс не стоит на месте, и в последнее время все чаще встречаются просьбы открытия запароленных .mtx-файлов и их извлечения. Для справки: .mtf-файлы создаются в программе MyTestX (последняя версия 10.2.0.3 от 31.08.2012), .mtx-файлы создаются в программе MyTestXPro (последняя версия 11.0.0.37 от 30.08.2015), то есть MyTestX давно не обновляется, а MyTestXPro является платной программой и имеет свой, отличный от бесплатной версии, формат файлов. Таким образом, процесс, который я описывал в своей старой статье, не подходит для MyTestXPro. Давайте разберемся, что с этим делать.
Читать дальше »

Print This Post Снимаем пароль с тестов MyTestX и easyQuizzy

Среда, 25. Июнь 2014
Раздел: Assembler, Для новичков, автор:

Время от времени сталкиваюсь с просьбами, касающимися программ для проведения компьютерного тестирования (MyTestX и easyQuizzy), которые заключаются либо в извлечении файла теста из .exe-файла (в случае с MyTestX), либо в открытии защищенного паролем теста.
Набросал "деревянный" последовательный мануал для тех, кому необходимо самостоятельно извлечь тест или сделать, чтобы редактор позволял открыть тест при вводе любого пароля.

Нам понадобится отладчик, например, OllyDbg и программа для упрощенной работы со структурой PE-файла, например, CFF Explorer, также нам понадобится редактор тестов (элементарно ищется в Google), который мы будем "исправлять", и файл, содержащий тест, который необходимо открыть.
Читать дальше »

Print This Post Пишем тривиальный стилер биткоинов

Суббота, 23. Ноябрь 2013
Раздел: Assembler, Windows, автор:

bitcoin
Давным-давно для WebMoney (и не только) был популярен крайне простой способ получить чужие финансы: подменить содержимое буфера обмена Windows, если в нём находится номер кошелька на свой номер. С введением множества степеней защит данный метод перестали использовать, да и эффективность была под вопросом, не говоря уже о необходимости заставить пользователя запустить стороннее ПО, которое будет осуществлять подмену.
Случай с Bitcoin отличается: подтверждения, по сути, отсутствуют, номера кошельков ещё более длинные, на конкретного пользователя не пожалуешься...
В общем, давайте реализуем простой софт, который будет анализировать содержимое буфера обмена и подменять его, если обнаружит там корректный адрес Bitcoin кошелька. Писать будем на MASM, чтобы было веселее.
Читать дальше »

Print This Post Flash Info Changer

Среда, 23. Январь 2013
Раздел: .NET, Assembler, C/C++, Софт, автор:

Небольшая утилита, позволяющая менять некоторые данные, выдаваемые Flash-плагином под Windows.

flash_info_changer

Позволяет менять версию ОС, язык, разрешение, версию Flash.
Например, так:

info_example

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

Проверялось в Mozilla Firefox на Windows XP x86/Windows 7 x64.
Google Chrome не поддерживает, так как процесс, содержащий Pepper Flash, защищен от инжекта (можно убедиться, посмотрев вкладку Security в свойствах процесса с помощью утилиты Process Explorer).

Для работы необходим .NET Framework 2.0.

Скачать: flash-info-changer
Исходный код: flash-info-src
GitHub: flash-info-changer

Print This Post Защищаем пароль в TeamViewer

Суббота, 27. Октябрь 2012
Раздел: Assembler, C/C++, Windows, автор:

TeamViewer, как и большинство программных продуктов, обладает опцией сохранения пароля от своего профиля (профиль используется для упорядоченного хранения перечня идентификаторов удаленных компьютеров с реквизитами доступа к ним). При включенной опции сохранения, пароль прозаично сохраняется в реестре по адресу HKCU\Software\TeamViewer\Version* в переменной BuddyLoginPWAES.


Как видно из названия переменной, да и непосредственно из реестра, перед сохранением пароль шифруется, однако это не является проблемой, т.к. ключи шифрования легко получить, а также никто не мешает просто скопировать содержимое переменной из реестра, перенести на другой компьютер и там успешно авторизоваться. Отсюда возникает некоторое опасение, так как всегда существует вероятность запустить очередной password stealer, который всё благополучно утащит.
Попробуем решить эту проблему костыльно-велосипедным способом. Для этого напишем небольшую библиотеку, которая будет перехватывать обращения к реестру и осуществлять дополнительное шифрование пароля, а также лаунчер для тимвьювера, который будет запускать его и заодно подгружать нашу библиотеку.
Читать дальше »

Print This Post Пишем упаковщик по шагам. Шаг восьмой. DLL и экспорты.

Среда, 26. Сентябрь 2012
Раздел: Assembler, C/C++, Windows, Для новичков, автор:

Предыдущий шаг здесь.

Наш упаковщик уже умеет все, кроме одной вещи - упаковки бинарников, имеющих экспорты. Это, в частности, абсолютное большинство DLL-файлов и OCX-компоненты. Некоторые exe-файлы также имеют экспорты. Наш упаковщик должен пересобрать таблицу экспортов и расположить ее в доступном месте, чтобы загрузчик мог ею воспользоваться.

Пока что можно немного расслабиться - в упаковщике кода добавится совсем немного (в распаковщике, в общем-то, тоже, но он будет на ассемблере).

Читать дальше »

Print This Post Пишем упаковщик по шагам. Шаг шестой. TLS.

Пятница, 21. Сентябрь 2012
Раздел: Assembler, C/C++, Windows, Для новичков, автор:

Предыдущий шаг здесь.

Появилась новая версия библиотеки для работы с PE-файлами (0.1.5). Перекачайте и пересоберите ее.

Пришло время заняться обработкой такой важной вещи, как Thread Local Storage (TLS) - локальной памяти потока. Что она из себя представляет? Это небольшая структура, которая говорит загрузчику PE-файлов о том, где находятся данные, которые должны быть выделены в памяти для каждого потока. Загрузчиком также производится вызов функции TlsAlloc, и значение, возвращенное ей, записывается по адресу, также указанному в этой структуре (называется это индексом). Кроме того, эта же структура может содержать адрес массива, хранящего набор коллбэков (адресов функций), которые будут вызваны загрузчиком при загрузке файла в память или при создании нового потока в процессе.

С TLS, признаться честно, все будет несколько хардкорнее, чем с остальным, так что приготовьтесь и напрягите мозг. Мой прошлый упаковщик TLS-коллбэки не поддерживал, трусливо выдавая сообщение о том, что они есть, но не обрабатываются. В принципе, поведение разумное, так как TLS-коллбеки имеют в основном всякие странные файлы, использующие эту вещь как антиотладочный прием. Ни один штатный линкер, вроде линкера от Майкрософт или Борланд, не поддерживают создание TLS-коллбэков. Тем не менее, для создания годного упаковщика мы их поддержку запилим.

Читать дальше »

Print This Post Пишем упаковщик по шагам. Шаг третий. Распаковываем.

Понедельник, 17. Сентябрь 2012
Раздел: Assembler, C/C++, Windows, Для новичков, автор:

Предыдущий шаг здесь.

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

Начнем мы вот с чего. Для работы распаковщика нам стопроцентно потребуются две WinAPI-функции: LoadLibraryA и GetProcAddress. В своем старом упаковщике я писал стаб распаковщика на MASM32 и вообще не создавал таблицу импорта. Я искал адреса этих функций в ядре, что несколько сложно и хардкорно, кроме того, это может вызвать неиллюзорные подозрения у антивирусов. Давайте в этот раз создадим обычную таблицу импортов и сделаем так, чтобы загрузчик сам нам сообщил адреса этих функций! Разумеется, набор из двух этих функций в таблице импорта так же подозрителен, как и полное их отсутствие, но ничто нам не мешает в будущем добавить еще другие левые случайные импорты из различных DLL-файлов. Куда загрузчик будет записывать адреса этих двух функций? Пора расширить нашу структуру packed_file_info!
Читать дальше »

Print This Post Winamp QIP 2005 x-status plugin

Вторник, 11. Сентябрь 2012
Раздел: Assembler, Windows, Софт, автор:

Наконец-то доделал плагин для популярного плеера Winamp, который был мною задуман еще несколько лет назад. Этот плагин позволяет устанавливать в вашем QIP Classic (2005) статус в зависимости от той композиции, которую вы прослушиваете в Winamp'е. Наверняка, уже достаточно малое количество людей используют этот ICQ-клиент, тем не менее, такие люди еще остались.

С момента создания в плагине имелась довольно неприятная ошибка, точнее, недоработка, которую мне лень было исправлять, поэтому он и лежал так долго без дела. А как известно, QIP 2005 в принципе не имел никакой системы (SDK) для создания плагинов, поэтому приходилось играться с оконными сообщениями (Kaimi предлагал читать и исполнять память процесса, но это еще хардкорнее). Однако, ошибка была исправлена, я добавил пару новых полезных функций, и теперь плагин полностью работоспособен. Выкладываю его вместе с исходниками на MASM32 (без комментариев, но если кому-то будет интересно...): Winamp QIP Classic X-Status Plugin

Ставится плагин так: распаковываем архив и копируем файл gen_qip.dll в папку плагинов Winamp (например, C:\Program Files\Winamp\Plugins), после чего перезапускаем Winamp, идем в настройки (Ctrl+P), заходим в пункт плагинов Plug-ins - General Purpose и видим там в списке плагинов имя QIP-плагина. Двойной клик на имени откроет окно настроек (как выше на скриншоте).

Если кому-то интересны детали работы и то, в чем была проблема...
Читать дальше »

Print This Post Небольшие новости

Понедельник, 30. Июль 2012
Раздел: Assembler, C/C++, Perl, PHP, автор:

Привет всем нашим читателям! Мы решили ради интереса на какое-то время попробовать себя в области ревьюинга чужоко кода.

Более простыми словами - вы присылаете нам на письмо с темой "Код на ревью", в которое вкладываете свой более-менее логически завершенный и отформатированный исходник размером не более 10 килобайтов и небольшое пояснение, что этот код призван делать. Мы ваши исходные коды детально изучаем и раз в одну-две недели создаем пост с ревью (обзорами) самых интересных присланных нам исходников. Также можете указать свой ник или еще какие-то данные в письме, если желаете, чтобы мы написали их в посте. E-mail адреса разглашать мы, разумеется, не будем. Пока что принимаются языки PHP, Perl, C++ (C), MASM32.

Хотите узнать, что у вас не очень хорошо написано и как бы сделать это получше и оптимальнее? Не постесняйтесь воспользоваться нашей помощью! Ну а совсем хорошие и красивые сорсы мы будем выкладывать как образец для подражания. А мы для себя отметим, приживется ли такая рубрика.

И еще: в комментариях к этому посту можете в свободной форме написать, о чем бы вы хотели еще почитать в нашем блоге.