• Добро пожаловать на WYLEK.ru. Пожалуйста, войдите или зарегистрируйтесь.
 
98 гостей, 3 пользователей

avatar_gazon01

SuperAntiSpyware Pro 6.0.1236 RUS

Автор gazon01, 18 января 2017, 13:43:00

« предыдущая - следующая »

gazon01Автор темы


SUPERAntiSpyware Pro - программа, которая обнаруживает и удаляет разнообразное вредоносное ПО: spyware, adware, malware, trojans, dialers, worms, keyLoggers, HiJackers и т.д. и т.п.
Программа может работать в режиме мониторинга системы в режиме реального времени, "по требованию" или по расписанию.
Поддерживается автоматическое обновление базы данных через интернет.

Основные характеристики :

-- Быстрое, полное и настраиваемое сканирование жестких дисков, переносных накопителей информации, оперативной памяти, регистра и т.д.
 -- Обнаружение и удаление шпионов, адваре, малваре, троянов, автодозвонщиков, червей, кейлоггеров и множества других угроз.
 -- Возможность исключения сканирования отдельных файлов и выбора отдельных папок для проверки на наличие вредоносных программ.
 -- SUPERAntiSpyware Free не нагружает систему в отличии от многих других антишпионов и не создает конфликтов с другими анишпионскими или антивирусными программами.
 -- Исправляет разорванное соединение с Интернетом, изменения на рабочем столе, редактирование реестра Windows и т.д.
 -- Ручное обновление базы данных и программы.

Русифицированный файл 6.0.1236 только для версии х32, скачать можно Войдите на сайт для перехода по ссылке
В архиве исполняемый файл, keygen (пароль 123, антивирусы его не любят), текстовик с рабочими на сегодня ключами, и маленький readme

Сама программа Войдите на сайт для перехода по ссылке


Русифицированные файлы для SuperAntiSpyware Pro 6.0.1236 версий х32 и х64, скачать можно здесь
В архиве исполняемые файлы, keygen (пароль 123, антивирусы его не любят), текстовик с рабочими на 21.01.17 ключами, и маленький readme

Leserg, спасибо за помощь
Возможно всё! На невозможное просто требуется больше времени.
 Мудрец из Шангри Ла

gazon01Автор темы

Ответ #1 : 18 января 2017, 14:43:00 #1
Цитата: LesergЧем больше будешь разбирать такие случае, тем лучше будет понимание.
сижу курю, но пока только один дым, может надо с табака на махорку перейти?
попробую  
Возможно всё! На невозможное просто требуется больше времени.
 Мудрец из Шангри Ла

Leserg

Ответ #2 : 18 января 2017, 15:43:00 #2
Цитата: gazon01 (26.01.2017, 08:27)сижу курю, но пока только один дым, может надо с табака на махорку перейти?
Программа 64-бит, поэтому используем отладчик x64Dbg соответствующей разрядности.

Установка набора символов выполняется инструкцией mov dword ptr [rsp + 0x40], r12d

Рис. 1


Здесь содержимое регистра r12d переносится (копируется) в выделенную область, относительно содержимого регистра rsp (указатель стека) плюс определенное смещение в виде значения 40h. Аналогичная картина для других параметров шрифта, меняется только величина смещения. Когда выделенная структура будет заполнена указанными данными, то вызывается функция создания шрифта CreateFont. Почему именно эта инструкция определяет набор символов? Это можно узнать, заглянув в спецификации CreateFont (или см. статью "[leech=https://wylek.ru/forum/54/topic-914.html]Логический шрифт[/leech]") Все параметры идут по порядку, только в дизассемблированном коде они стоят наоборот.

Запустив программу под отлачиком вы увидите, что в регистре r12d находится 0 (ноль), а нам нужно значение CCh - RUSSIAN_CHARSET (на крайний случай 01h - DEFAULT_CHARSET). Как этот можно сделать?

== ВАРИАНТ I ==

В данной инструкции вместо регистра r12d необходимо записать CCh, т.е. инструкция должна стать такой:

mov dword ptr [rsp + 0x40], CC

Но сделать это напрямую в коде нам не позволяет место. Новая команда будет длиннее на три байта. Если выполнить ввод такой инструкции на месте текущей, то следующая инструкция будет испорчена, а работа программы завершится аварийной ошибкой. Поэтому самый простой способ решения такой проблемы, это найти в коде "дырку" (пустое место), ввести там инструкцию и сделать на неё перенаправление. Затем сделать переход обратно в основной код.

Обычно пустое место всегда есть в конце первой секции. Пролистайте дизассемблированный код программы в самый конец, пока не увидите инструкции вида add byte ptr [rax], al, после которых не будет никаких других инструкций. Это и есть "дырка", обратите внимание, что там находятся одни нулевые байты (0х00).

Рис. 2


После последней команды ret вводим нашу инструкцию mov dword ptr [rsp + 0x40], CC:

Рис. 3


Получится вот так:

Рис. 4


Теперь сюда нужно сделать перенаправление из основного кода программы. Это можно организовать при помощи команды jmp. Копируем адрес, по которому мы ввели новую инструкцию, и возвращаемся в место, где нам нужно изменить код. Здесь, на месте инструкции mov dword ptr [rsp + 0x40], r12d, вводим инструкцию перехода:

Рис. 5


Получится вот так:

Рис. 6


Теперь нужно сделать возврат на основной участок кода, на инструкцию, которая идет следом после инструкции перехода (см. рис. 6). Для этого также используется команда jmp. Копируем адрес инструкции mov dword ptr [rsp + 0x38], r12d и переходим на добавленную инструкцию в конец дизассемблированного кода. Здесь следующей инструкцией вводим команду jmp с адресом возврата.

Рис. 7


Получится в итоге вот так:

Рис. 8


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


== ВАРИАНТ II ==

Если в инструкции mov dword ptr [rsp + 0x40], CC изменить тип передаваемых данных с dword на byte, то тогда добавление новой инструкции и тем более организацию переходов выполнять не нужно. Размер такой инструкции будет соответствовать размеру оригинальной, т.е. 5 байт. Но прежде чем делать такие изменения, необходимо удостовериться, что в выделенной области памяти, где формируется свойства шрифта, нет других данных, кроме нулей. В нашем случае это будет по адресу [rsp + 0x40]. При типе данных dword (двойное слово) в память будет записано 4 байта. Со значением CCh будут записаны байты CC000000, и если там находились какие-либо данные, то они будут затертые новым значением. Если же мы изменим тип данных на byte, то будет записан только один байт со значением CCh. Остальные байты (3) в памяти останутся без изменений. Это может внести в работу функции ошибку или неточность. Как это можно проверить?

Установите точку прерывания на инструкцию mov dword ptr [rsp + 0x40], r12d и запустите программу под отладчиком. Когда работа программы прервется, перейдите в панель дампа памяти по адресу [rsp + 0x40] (адрес в регистре RSP плюс смещение 40h).

Рис. 9


А вот, что мы увидим в дампе памяти по указанному адресу:

Рис. 10


Обратите внимание, последующие три байта нулевые. Это значит, что мы можем использовать тип данных byte вместо dword. Пока мы находимся на точке останова, на инструкции mov dword ptr [rsp + 0x40], r12d, вызовите окно ввода ассемблерных инструкций и измените текущую инструкцию на mov byte ptr [rsp + 0x40], CC.

Рис. 11


Получится вот так:

Рис. 12


Теперь выполните эту команду, нажав клавишу F7, и посмотрите в панель дампа памяти. По указанному адресу будет записано значение параметра "fdwCharSet" - CCh.

Рис. 13


Как видите, ничего сложного. Таким образом вносите изменения в код, где это необходимо.


== ВАРИАНТ III ==

Если вы внимательно изучите инструкции формирования структуры с параметрами шрифта для последующих функций CreateFont (с адреса 0000000140210AFF по 0000000140210DE5 -- всего 7 функций), то увидите, что они одинаковы. Используются одни и те же регистры, одни и те же смещения. Отличаются только значения параметров качества шрифта и толщины (вес). А в частности, т.к. нас интересует параметр набора символов, то инструкция mov dword ptr [rsp + 0x40], r12d одна и та же для всех семи функций CreateFont.

Рис. 14


Более того, если вы протрассируете этот участок кода по каждой функции CreateFont, то увидите, что для формирования параметров шрифтов выделяется один и тот же участок памяти, т.к. значение адреса в регистре RSP остается постоянным. Таким образом, имеет смысл оформить запись нужного нам значения для параметра набора символов в виде подпрограммы. После чего, где это нужно (или же всех функций CreateFont на текущем участке) вместо инструкции mov dword ptr [rsp + 0x40], r12d выполнять к ней обращение.

Тело нашей подпрограммы, можно записать в пустом месте (в конце первой секции -- вы уже знаете где).

Код подпрограммы следующий:
 mov dword ptr [rsp + 0x48], CC
 ret

Примечание: почему вместо смещения 40h записано 48h, рассказано ниже.

Рис. 15


Первая инструкция выполняет запись значения CCh в память по адресу [rsp + 0x48]. Вторая инструкция выполняет возврат из подпрограммы в место, откуда был сделан вызов. Теперь просто вместо инструкции mov dword ptr [rsp + 0x40], r12d укажем обращение к нашей подпрограмме: call 0000000140275D04. Здесь 0000000140275D04 -- это адрес, по которому находится начало нашей подпрограммы (см. рис. 15). Это можно сделать или для всех функций CreateFont, или только для тех, которые являются проблемными в плане кракозябр.

Рис. 16


Смещение 48h в коде подпрограммы не опечатка и не ошибка! Дело в том, что после обращения к инструкции CALL в стек будет записан адрес возврата, который будет использован инструкцией RET. За стек отвечает регистр RSP, значение (адрес) в котором, как мы видели, задействовано для выделения области памяти под параметры шрифта. Изменение адреса в регистре RSP нужно учитывать при работе нашей подпрограммы.

Установите точку прерывания на инструкции вызова нашей подпрограммы и запустите программу на выполнение. Когда работа программы прервется, посмотрите в панель регистров и сделайте себе где-нибудь пометку со значением в регистре RSP.

Рис. 17


У меня текущее значение равно 00000000020383B0. Относительно этого адреса выполняется запись параметров шрифта. Теперь нажмите F7, выполнив заход в нашу подпрограмму. Вы окажетесь на первой инструкции -- mov byte ptr [rsp + 0x48], CC. Посмотрите теперь значение регистра. Оно изменилось на 00000000020383A8.

Рис. 18


Значение адреса изменилось ровно на 00000000020383B0 -- 00000000020383A8 = 8 (байт). Эту разницу нужно учесть, чтобы параметр набора символа был записан в правильную позицию. Поэтому смещение для инструкции будет уже другое: 40h + 8h = 48h. Это значение и попало в инструкцию вместо 40h. После завершения нашей подпрограммы в регистре RSP снова будет адрес 00000000020383B0.

--
Для решения проблем с кракозябрами в данной программе можете выбрать любой из вариантов. После того, как сделаете все модификации, сохраните изменения в файл. Для этого откройте окно сохранения изменений ("Patches" на панели инструментов, или горячие клавиши Ctrl+P) и укажите имя файла.

Рис. 19


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

Рис. 20
Кто ищет, тот всегда найдет!

gazon01Автор темы

Ответ #3 : 18 января 2017, 16:43:00 #3
Цитата: LesergLeserg
спасибо
Возможно всё! На невозможное просто требуется больше времени.
 Мудрец из Шангри Ла

WYLEK

Ответ #4 : 18 декабря 2019, 11:19:03 #4
Восстановил мануал Leserg :kap:

* Ваши права на сайте

    TinyPortal

  • Вы не можете создавать статьи.
  • Вы не можете изменять свои статьи.
  • Вы не можете писать комментарии.
  • Вы не можете управлять статьями.
  • Вы не можете загружать файлы в TPdownloads.
  • Вы не можете управлять TPlistimages.

    Simple Machines

  • Вы не можете удалять темы.
  • Вы не можете создавать темы.
  • Вы не можете отвечать на сообщения.
  • Вы не можете прикреплять файлы.
  • Вы не можете изменять свои сообщения.
  • Вы не можете удалять свои сообщения.

 аталог@MAIL.RU - каталог ресурсов интернет Яндекс.Метрика