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

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

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

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

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

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

Print This Post Все новое — хорошо забытое старое

Среда, 11. Июль 2012
Раздел: .NET, Assembler, PHP, Windows, Софт, Социальные сети, автор:


Мы с Kaimi решили привести информацию на блоге в более актуальный вид, в связи с этим:

[+] Обновлен до версии 1.3 Proxy Checker Lite (теперь сорсы прилагаются).
[+] Обновлен и ускорен KWM-брутфорс
[+] Перезалита База ВКонтакте
[+] Приведен в рабочее состояние VK Link Checker
[+] Обновлен + выложен новый сорс скрипта People Search (база данных не пополнялась, просто скрипт сохранен в рабочем состоянии)
[+] Блог доступен по протоколу https (пока не очень удачная навигация)
[+] Страница 404 стала более разнообразной (F5)

Надеемся, каждый найдет для себя что-то интересное среди этих апдейтов.

Print This Post Quest 3 — Return to Classics — Полное прохождение

Четверг, 8. Март 2012
Раздел: Assembler, C/C++, C#, PHP, Windows, Для новичков, Это интересно, автор:


В этой статье я опишу полное прохождение нашего третьего квеста.

Напоминаю его адреса:

Русская версия
Английская версия

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

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

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

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

Print This Post Упаковщик PE-файлов (exe, dll)

Вторник, 27. Декабрь 2011
Раздел: Assembler, C/C++, Windows, автор:

На днях завершил крупный коммерческий проект, только собирался потратить вырученные средства на покупку очередного ноутбука Alienware и поездку на Гавайи, как ко мне в гости зашел Каями (с нехарактерно расширенными зрачками) и сказал, чтобы я что-нибудь написал в блог, дескать не солидно как-то ничего не запостить перед Новым Годом. Сам-то он якобы занят, но я подозреваю, чем он на самом деле занимается. В общем, его просьбу я выполнил. Каями, судя по всему, остался доволен и в ответ на ссылку на пост скинул мне в аську скриншот статы какой-то партнерки. Так что он тоже едет на Гавайи! Поэтому в ближайшие пару недель новых постов можно, пожалуй, не ждать.

Итак, выкладываю упаковщик PE-файлов собственного производства. Исходники самого упаковщика на C++ и стаба распаковщика на MASM32 в комплекте. Все с комментариями на английском языке. Привереды и не умеющие переводить технические тексты идут вон из комментариев к посту! Про PE-формат я цикл статей завершу когда-нибудь, а пока ловите хотя бы это, на остальное времени нет. Самое основное в упаковщике - это файл main.cpp размером 51 кб (лень было разбивать) и unpacker.asm. unpacker.cpp - это стаб распаковщика в скомпилированном виде (его исходник, соответственно, в unpacker.asm). Используется немного библиотек из boost.

Возможности упаковщика:
[+] Поддержка exe, dll-файлов. Драйвера (sys-файлы) не упаковываются.
[+] Дерьмовая степень сжатия, так как используются RtlCompressBuffer / RtlDecompressBuffer - чисто ради примера. Кроме того, упаковывается каждая секция отдельно, не слепляются вместе, как это делает UPX, это тоже влияет на степень сжатия.
[+] Поддержка экспортов (по ординалу, по имени, а также форвардов в другие dll).
[+] Само собой, поддержка импортов (по ординалу и по имени).
[+] Поддержка и умение упаковывать секцию ресурсов (из нее перемещаются иконки, информация о версии и манифест, так что упакованный файл внешне ничем не отличается от оригинала).
[+] Поддержка релокаций (фиксапов / перемещаемых элементов / назовите их как хотите).
[+] Изменение выравнивания файла.
[+] Возможность упаковки только конкретных секций
[+] Поддержка TLS (локальная память потока) (кроме TLS callbacks, которые ни один компилятор не умеет делать, насколько мне известно).
[+] Удаление rich overlay'а от Visual C++.
[+] Возможность упаковки PE-заголовка в DOS-заголовок.
[+] Поддержка бинарников Visual C++, Borland C++/Delphi, MinGW, MASM32 (другое не проверялось, но, скорее всего, тоже заработает).

Упаковщик поддерживает только PE32.

Пример использования:
pack.exe test_exe.exe

Дополнительные опции командной строки:

-o - позволяет задать имя запакованного файла. По умолчанию оно собирается из имени оригинального файла и слова "packed".
-i - если задана эта опция, в запакованный бинарник будет добавлена директория импорта, состоящая из одного импорта. Дело в том, что старым версиям Windows (например, XP) иногда может не нравиться отсутствие импортов у исполняемого файла. По умолчанию запакованный файл директории импорта не имеет.
-s - позволяет задать список имен секций, которые должны быть упакованы. По умолчанию пакуются все секции файла. Использование: -s .text .data
-r - позволяет включить/отключить упаковку секции ресурсов. Если у бинарника много места занимают иконки, то иногда выгоднее ее не паковать. Использование: -r 0 или -r 1.
-a - позволяет задать файловое выравнивание запакованного бинарника. Использование: -a 1024. По умолчанию это 512 (минимальное).
-d - позволяет включить опцию обрезки DOS-заголовков (поверх их будет записан PE-заголовок). По умолчанию выключена, так как на результирующий размер не влияет. Использование: -d 0 или -d 1.
-f - если задана данная опция, будет паковаться любое говно, которое вы подсунете упаковщику (дрова, .NET-бинарники, уже запакованные ранее файлы и т.д.), но результат, скорее всего, будет неработоспособным.
-m - опция включает/отключает перемещение иконок из директории ресурсов (если она пакуется) в секцию ресурсов упаковщика. По умолчанию включено, но можно отключать для файлов DLL, имеющих в ресурсах какие-то иконки - размер будет меньше. Использование: -m 0 или -m 1.

Любители няшных графических свистелок и перделок идут в лес за грибами.

Если вы дочитали до этого места, в комментариях отвечу на любые вопросы о работе упаковщика.

А вот и сам пакер с исходниками: Скачать!

UPDATE от 27.12.2011: Добавлена опция командной строки -i, добавлен вывод предупреждения, если файл имеет оверлей.
UPDATE от 28.12.2011: Добавлена опция командной строки -m.

Print This Post Обходим все популярные антивирусы, или лажовая защита в действии

Вторник, 22. Ноябрь 2011
Раздел: Assembler, Windows, Это интересно, автор:

На днях лень было заниматься чем-то сложным, поэтому решил заняться трендовым нынче направлением - обманом антивирусов. Сейчас статей типа "апходим мегакрутой онтевирус" в том же журнале "Хакер" развелось немеряно, причем способы обхода антивирусов авторы выбирают наиприметивнейшие: банальное шифрование строк статическим ключом, добавление формальных задержек (Sleep) и прочие вещи, вводящие в заблуждение только самые недалекие антивирусы. Представьте: автор пишет херню на 3-4 страницы, размазывая на них анализ своего мегавируса тремя антивирусами, и в итоге даже не способен обойти все из выбранных антивирей, а получает за это 5000 рублей. Несправедливо, тем более времени на написание такой статьи необходимо совсем немного, часа два!

Итак, я потратил около часа на то, чтобы написать программу, скачивающую из интернета exe-файл и сразу запускающую ее. Удалось обойти антивирусы Kaspersky Internet Security 2011, NOD32, Dr. Web, Microsoft Security Essentials и Avast. Скорее всего, и другие бы ничего не заметили, просто не проверял. А антивирусы из списка выше даже не пикнули, когда запускался файл, скачанный только что из интернета.

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

Print This Post Вызов функции без импорта

Суббота, 5. Ноябрь 2011
Раздел: Assembler, Windows, Сниппеты, автор:

Сегодня посмотрел очередную свежую серию MLP:FiM и понял, что мне нечем себя занять. В связи с этим решил включить трек моей любимой группы (как вы, наверное, догадались - это Ранетки :D) и написать что-нибудь эдакое на ассемблере.
По совету друзей, которые маются всякой фигней, вместо того, чтобы заняться чем-нибудь полезным и написать нормальную статью в блог, выбор пал на написание нескольких макросов, которые позволяют вызывать библиотечные функции без использования таблицы импорта.
Минусы: макросы базозависимые.
Плюсы: макросы потокобезопасные.
Anyway: на базе этих макросов можно достаточно быстро построить новые, удобные вам.

Пример использования получившихся макросов:

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

Print This Post Дорабатываем DLL для LastFM

Понедельник, 3. Октябрь 2011
Раздел: Assembler, C/C++, Windows, автор:

Как оказалось, библиотека для LastFM из статьи от 31.08.11 оказалась не особо юзабельной из-за нескольких досадных недоработок:
1. Клавиши управления не работали, если окно свернуто (связано с тем, что управление производилось с помощью SendMessage, но в свернутом состоянии окно не обрабатывает оконные сообщения, поэтому они переставали реагировать). (Спасибо Artik'у за наводку)
2. При сворачивании окна в трей и последующем восстановлении пропадали элементы управления, так как окно "уничтожалось".

Чтобы исправить эти моменты, я решил переписать библиотеку. В этой статье я опишу изменившиеся методы (к слову, CreateThumbnailToolbar и EnumWindowsProc остались без изменений).
Читать дальше »

Print This Post Тащим пароли от Steam

Вторник, 21. Сентябрь 2010
Раздел: Assembler, автор:

В связи с огромной популярностью сервиса Steam, решил написать простой пример осуществления перехвата вводимых данных при авторизации (логин и пароль) с дальнейшей отправкой на гейт.
Беглый поиск в интернете показал, что подобные примеры существуют, однако, зачастую громоздки, либо уже устарели.
Итак, для осуществления перехвата необходимо определить, куда передается управление при попытке авторизации в Стиме. Основой для взаимодействия с сервисом Steam является Steam.dll, которая экспортирует множество функций, в том числе и функцию SteamLogin, которая как раз и вызывается при попытке авторизации.
Таким образом необходимо реализовать "прослойку", которая будет выполняется перед вызовом этой функции и передавать введенные данные на наш гейт. Для начала нужно определить, возможно ли заставить Steam подгрузить нашу библиотеку без внесения изменения в оригинальные файлы.
Если запустить Steam и посмотреть, какие dll'ки и откуда пытается подгрузить исполняемый файл, то мы увидим примерно следующее (я смотрел с помощью FileMon, но уже давно существует более продвинутый Process Monitor):

Как мы видим, подгружается множество библиотек, причем красным выделены неудачные попытки загрузки библиотек. При вызове LoadLibrary производится попытка найти некоторые системные библиотеки сначала в директории с исполняемым файлом, а уже потом в System32. Это позволяет сделать следующую вещь: выбрать какую-нибудь редкоиспользуемую системную библиотеку из тех, которые исполняемый файл сначала ищет в своей директории (например, rasadhlp.dll), создать свою библиотеку с таким же именем (которая будет сплайсить функцию SteamLogin) с пробросом экспортов в оригинальную библиотеку.
Читать дальше »

Print This Post MASM32: Часть 3 — Брутальная бессердечность

Суббота, 11. Сентябрь 2010
Раздел: Assembler, Windows, автор:

Давно не писал новых статей по MASM, решил наконец-то продолжить цикл. Думаю, вы уже прочитали первые две статьи (эту и эту тоже) и разобрали их содержание. Пришло время поговорить о других возможностях MASM32. Возьмите исходный код из самой первой статьи, из той, в которой мы делали самое первое GUI-приложение, будем его использовать как базу для нового проекта.


В общем, сначала идея была проста... [click]

Но потом...


Программка будет сканировать все порты из указанного диапазона на заданном ip-адресе и выводить информацию в лог. Многопоточность делать не будем, но один поток всё равно создадим, чтобы при сканировании форма не висела.
Читать дальше »

Print This Post LastFM broadcast add-on

Воскресенье, 5. Сентябрь 2010
Раздел: Assembler, автор:

По жизни я довольно часто слушаю музыку и, в частности, интернет-радио Last.fm (благо, в США оно бесплатное). Однако, постоянно сидеть за компьютером утомляет, и возникает желание послушать радио в другой комнате, развалившись в кресле.
Читать дальше »