• XSS.stack #1 – первый литературный журнал от юзеров форума

Вкат в С, С+

Почему бы не использовать классику C\C++ где вообще нет никаких танцев с бубнами для вызова винапи?
Да надо с начала читать, что бы суть уловить)) В топике интонация такая: другие ЯП не нужны и говно, когда есть C. Собственно есть те, кто с этим категорически не согласен.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Кстати ответь на вопрос, если знаешь, сильно поможешь мне - https://xss.pro/threads/70526/post-498074
Не пользуюсь MSVC, не знаю. Обычно это можно решить с помощью def-файла, погугли на эту тему.

Чем эти языки плохи ?
Много раз обсуждалось, многим плохи. Вкратце undefined behavior, отсутствие модулей, всратые исключения (с++), слабая статическая типизация (с), отсутствие нормального метапрограммирования, и многое другое.

Мне синтаксис нима не понравился, петухон напоминает. Брр
Это субъективная оценка, мне синтаксис Петухона и Нима нравится куда больше, чем Си-подобный.
 
Потому что у си/++ есть много проблем. Эти языки проблемные. Да и синтаксис бесячий. Ух надоело с 14 лет на это говно смотреть. Пора вдыхать что-то новое мне.
Находятся те, кто смотрит на этот синтаксис 16 часов в сутки и зарабатывают миллионы, вопрос выдержки.

Вообще DildoFagins спасибо за D, это в какой то степени помесь и шарпа, и си насколько я по первым примерам понял. Жаль не особо популярен да и в VS Code у плагина 50к загрузок...
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вообще DildoFagins спасибо за D, это в какой то степени помесь и шарпа, и си насколько я по первым примерам понял. Жаль не особо популярен да и в VS Code у плагина 50к загрузок.
Да, у Дэ еще есть флаг -betterC, который вырубает GC, RTTI и всякую такую шнягу, ощущается как Си с несколькими улучшениями качества жизни, типа передачи массивов вместе с длиной, RAII, лучшего в сравнении с С++ метапрограммированием и тд.
 
Выкат
 
Ц и Ц++ для малвары как таковые не подходят вообще. Для современной. Вообще подходящего языка для нее нет, _как я думаю_. Что бы спрятать код в памяти от анализа - этот код должен представлять собой данные R/RW, вся соль в том что что бы сделать годный интерпритатор которрый можно будет без проблем прятать =). Вкратце пишем малвару скорее всего на плюсах, потом уже _асм_ код переводим в вм код который будет исполнять интерпритатор, для последнего есть несколько правил. Апи, шампи, ц\раст.....фигня это все комрады.
 
Потому что у си/++ есть много проблем. Эти языки проблемные. Да и синтаксис бесячий. Ух надоело с 14 лет на это говно смотреть. Пора вдыхать что-то новое мне.


Мне синтаксис нима не понравился, петухон напоминает. Брр. Выбрал Rust. Пожалуй неплохо. Да, моя душонка требовала что-то новое.
Можешь попробовать Nim
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ой. А D кажется какой-то слишком привлекательный. Спасибо DildoFagins . Это кажется то что мне и необходимо было. Тот же самый СИ, только не бесячий.
D не выпендришься, нужно учить Rust!
 
Раз в тыщу лет сюда приходишь и тут тред где Квака такой:
"Учите только C, раньше много умных кодеров было, не то что сейчас, раньше вообще всё лучше было, а какое мороженое в СССР было... Ух!".
Стабильность – признак мастерства.
 
Ц и Ц++ для малвары как таковые не подходят вообще. Для современной. Вообще подходящего языка для нее нет, _как я думаю_. Что бы спрятать код в памяти от анализа - этот код должен представлять собой данные R/RW, вся соль в том что что бы сделать годный интерпритатор которрый можно будет без проблем прятать =). Вкратце пишем малвару скорее всего на плюсах, потом уже _асм_ код переводим в вм код который будет исполнять интерпритатор, для последнего есть несколько правил. Апи, шампи, ц\раст.....фигня это все комрады.
Чувак, почти вся крутая малварь начиная с бородатых годов и заканчивая примерно 2015 написана исключительно на Си+ASM, и только потом непонятно зачем начали прикручивать расты/чепушасты и прочие новые языки (это скорее погоня за волшебной кнопкой "сделать FUD", раз не получилось у меня на Си может на N-языке получится), причем асм использовался только там, где в этом реально была необходимость, потому что писать допустим целый RAT на чистом асме - ебля с бубном, ничем не оправданная, есть конечно экземпляры, но это скорее исключение из правил. В основном писалось все на Си, большая часть кода. И да, я заметил твое уточнение про "для современной". А теперь скажи мне, что поменялось с тех времен ? Приведи мне железный аргумент, почему я должен перестать использовать Си, потому что он якобы не подходит для современной малвары. Я более чем уверен, что ты не приведешь его мне.
Теперь пройдемся далее по твоему сообщению. Ты предлагаешь использовать VM, которая будет интерпретировать команды. Хорошо, даже если VM будет достаточно неплохая и будет уметь генерировать разный v-байткод для одинакового входного кода, знаешь что может случиться ? Наверное ты такого не ожидал, но будет детект на твою VM, на сам интерпретатор. Его надо морфить и постоянно видоизменять, что бы на него не навесили сигнатуру. А теперь спрашивается, нахрена долбиться с VM, если у тебя есть возможность морфить код, морфи и запутывай тогда исходный байткод малвари на уровне ассемблерных команд, будет тот же результат, ты уйдешь от сигнатурного детекта, и скантайм и в памяти.
Только не стоит забывать, что детект не ограничивается одними только сигнатурами, как в файле так и в памяти, от скантайма уйти проще пареной репы, есть еще такие штуки как эвристика и поведенческий анализ, эвристика вообще бабуйня, которая может дать и ложный детект, основывается на куче факторов в том числе и на поведении, обход эвристики это тема отдельная, так что сейчас не затрагиваем ее, а вот если рассмотреть твою идею с интерпретатором VM в контексте поведенческого анализа, то никакого профита это не дает даже в сравнении с обычным вредоносным кодом, который никак не скрыт от посторонних глаз.
Объясняю подробнее, взять обычный RunPE, в 99% случаев он палится по поведению, а именно по цепочке вызовов
1)CreateProcess(SUSPENDED)
2)GetThreadContext
3)NtUnmapWievOfSection
4)Read\WriteProcessMemory
5) SetThreadCOntext
6) ResumeThread
Большинство вызовов WinAPI, особенно опасных с точки зрения АВ, перехватывается, именно что бы следить за тем, что делает то или иное приложение в системе, и если твое приложение делает подозрительные вызовы, да еще в подозрительном порядке, да в добавок еще с подозрительными параметрами, то это неминуемо приводит к детекту, и твоя VM тут никак не поможет, потому что если код виртуализовать, он все равно будет вызывать все те же апишки какие вызывались в оригинале, в том же порядке и с теми же аргументами

Теперь объясню тебе как сейчас пишут UserMode FUD малварь, это было актуально раньше и будет актуально еще очень долго
Все пишется на чистом Си, в принципе можно и на любом другом удобном языке, который позволит проделать описанные далее действия, но путем проб и ошибок все сошлось к Си
Для начала тебе надо писать без использования прямых вызовов к WinAPI и даже NativeAPI, но как можно не использовать апишки спросишь ты ? Ведь нам банально может потребоваться динамично выделить память и у начинающих малварщиков руки сразу тянутся к VirtualAlloc\HeapAlloc
А этого делать категорически нельзя, особенно касается это WinAPI\NtApi на которые у АВ стойкая эрекция, и выход тут есть - имя ему syscall
Твой код должен динамично получать номера системных вызовов и делать вызовы напрямую в ядро, минуя ntdll который так же хукается в юзермоде
Вот ты написал сие чудо, у которого пустая таблица импорта и есть одна лишь голая секция кода, которая полностью без участия UserMode системных dll оберток может выполнять свой функционал взывая к силам ядра, и кажется что это произведение искусства может захватить мир ? Ан-нет. Возможно, если полученный код не имеет уже старых сигнатур по счастливой случайности, он проработает некоторое время, а потом на него навесят сигнатуры, на секцию кода. Вдобавок файл будет подозрителен по другому ряду причин - отсутствие таблицы импорта, ресурсов и других секций, которые должны быть в нормальном файле. Даже обойдя UserMode поведенческий анализ ты снова упираешься в банальный сигнатурный детект и общее представление файла. И как его избежать ? Правильно - морфить твой код. Делать это можно как на уровне исходников Си (обфускация), так и морфить уже компилированный байткод на уровне ассемблера, тут тоже два выхода, либо морфинг нативный - напрямую морфится байткод и бинарь пересобирается, либо выдирается дизасм написанного тобой на Си кода и морфится на уровне исходного кода на ассемблере, затем компилируется в FASM\MASM\HUYASM и тд. Ресурсы так же генерируются по ряду правил, с импортом та же история, он должен быть хоть какой-то, желательно, что бы там были функции и библиотеки которые используются в 80% легитимного софта. И только после этого можно уже говорить, что-то про современную малварь и эффективные способы ее написания. А идея с VM - шляпа, подойдет только для "защиты" софта от злых ручек крекеров, но в плане скрытия от АВ это вещица бесполезная, погляди на VMProtect и Themida, у них очень крутые виртуальные машины, но если залить файл на скан, то тебе придется надеть сварочную маску, что бы не ослепнуть от количества детектов
Пора блин начинать писать книгу "Для начинабщих малващиков и не только"
 
Последнее редактирование:
Да, у Дэ еще есть флаг -betterC, который вырубает GC, RTTI и всякую такую шнягу, ощущается как Си с несколькими улучшениями качества жизни, типа передачи массивов вместе с длиной, RAII, лучшего в сравнении с С++ метапрограммированием и тд.
Установил D, ознакомился с основами, написал простой хеллоу ворлд с использованием MessageBox и компилятор ответил: ссылка на неразрешенный внешний символ _MessageBoxW@16.
Что делать?

C:
import core.runtime;
import std.stdio;
import std.string;
import core.sys.windows.windows;

extern(Windows)
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int nCmdShow) {
    int result;

    try {
        Runtime.initialize();
        result = myWinMain(hInstance, hPrevInstance, cmdLine, nCmdShow);
        Runtime.terminate();
    } catch (Throwable e) {
        result = 0;
    }

    return result;
}

int myWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int nCmdShow) {
    MessageBox(NULL, "Привет!", "D", MB_OK);

    return 0;
}
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Что бы спрятать код в памяти от анализа - этот код должен представлять собой данные R/RW
И совершенно внезапно, когда грузишь шарпы из памяти в память создается RW регион. Только никому не говори, это - секрет.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Что делать?
Спросить на форуме языка Дэ или в телеграм чате. MessageBoxW в user32.dll, добавь соответствующий lib/a в параметры линкера. Вообще, не совсем понятно зачем WinMain тебе нужен в принципе, скорее всего можно просто графическую подсистему вместо консольной поставить.
 
Последнее редактирование:
Спросить на форуме языка Дэ или в телеграм чате. MessageBoxW в user32.dll, добавь соответствующий lib/a в параметры линкера. Вообще, не совсем понятно зачем WinMain тебе нужен в принципе, скорее всего можно просто графическую подсистему вместо консольной поставить.
Спасибо, сенсей. Там спросил и мне ответили. Подключить либу можно легко. Просто пишем: dmd script.d user32.lib
 
Да, у Дэ еще есть флаг -betterC, который вырубает GC, RTTI и всякую такую шнягу
Закомпилил с этим флагом и винда сразу триганулась.

Это СИ мазафака!
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    2.2 КБ · Просмотры: 45
Товарищи, а как мне получить ip хоста подключенного к серверу по winapi сокетам?
Ну так клиент и сервер, сокеты, очевидно же на сервере айпи клиента взять.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх