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 Code review #1

Воскресенье, 5. Август 2012
Раздел: Code Review, автор:


Вот и наступило время для первого обзора исходников от Kaimi и dx. Не все исходники попали в этот пост, потому что прислано их было немало. Не огорчайтесь, если не увидели своего творения, мы постараемся включить его в следующие выпуски!
Читать дальше »

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 Дорабатываем DLL для LastFM

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

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

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

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

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

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


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

Но потом...


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

Print This Post MASM32: Немного основ ассемблера

Суббота, 21. Август 2010
Раздел: Assembler, Windows, Для новичков, автор:

Эта статья идет прямиком в дополнение к предыдущей. Я не рассказал про самые основы ассемблера. Хотя в интернете полно материала на эту тему, я все равно решил ее немного затронуть. Что же нужно знать для начала, чтобы понимать и писать несложные программы или ассемблерные вставки?
Читать дальше »

Print This Post MASM32: Начало

Суббота, 21. Август 2010
Раздел: Assembler, Windows, Для новичков, автор:

Решил начать цикл статей по ассемблеру, и, в частности, по MASM32. Пригодятся эти мануалы с примерами тем, кто хочет поднять свои навыки программирования и развить умение программировать на ассемблере. Пакет MASM32 - это не просто голый ассемблер. В нём есть огромное множество облегчающих разработку софта вещей - пользовательские макросы, встроенные функции и макросы, дебаггер и прочее, и обо всём этом я буду рассказывать. Конечно, читать такие статьи будет гораздо легче тем, кто уже умеет программировать на каком-нибудь языке. Если вы программируете на каком-нибудь говне вроде Visual Basic, или фанатеете от перетаскивания компонентов и кнопочек на формы в дельфи или Borland C++ - не расстраивайтесь, я расскажу, как можно перетаскивать кнопочки и в ассемблере. Разумеется, никаких стандартных облегчающих жизнь компонентов здесь не будет, но это побудит разобраться с WinAPI - огромной кладезью полезных функций, которые способны делать всё, начиная от чтения данных из сокета и заканчивая отображением окон.
Читать дальше »

Print This Post Создаем плагин на ассемблере для популярного плеера AIMP

Среда, 10. Март 2010
Раздел: Assembler, автор:

Очередная статья, посвященная задротству и извращенству. Почему? Да потому что плагины для AIMP гораздо проще создаются на Дельфи, и для этого автор написал SDK (хотя SDK, конечно, громко сказано - всё ограничилось единственным файлом с исходником на дельфи). Тем не менее, в практике ассемблера этот пример будет весьма полезен и необычен.
Читать дальше »

Print This Post Proxy Checker Lite 1.4

Суббота, 20. Февраль 2010
Раздел: Assembler, Windows, Софт, автор:

Написал простую программу для проверки HTTP-прокси и socks5-cерверов (MASM32). Характеристики:

[+] Проверка списка HTTP-прокси/SOCKS5 на валидность по отношению к заданному хосту (ищет в ответе прокси заданную строку)
[+] Многопоточный (до 100 потоков)
[+] Позволяет задать таймауты прокси по чтению и записи
[+] Позволяет задать, сколько байт считывать
[+] Любой разделитель адреса и порта прокси
[+] Продвинутые настройки - задание service_uri, http-referer, cookies, отправляемых данных, метода - GET/POST. С помощью правильного использования этих опций можно настроить чекер как простой кликер или программу для накрутки голосований.
[+] В версии 1.1 - проверка прокси на анонимность
[+] В версии 1.3 - сохранение/загрузка настроек в ini-файл
[+] В версии 1.3 - более удобная проверка на анонимность
[+] В версии 1.3 - актуализированы дефолтные настройки
[+] В версии 1.4 - теперь длинные адреса прокси-серверов не обрезаются и не разбиваются на две части

Скачать: ZIP
Update (версия 1.1): ZIP
Update (версия 1.2): ZIP
Update (версия 1.3, теперь банановый и с сорсами!): ZIP
Update (версия 1.4): ZIP

12