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

Есть ли смысл писать без CRT в 2022

Пожалуйста, обратите внимание, что пользователь заблокирован
это писать без црт
Один стиллер (не буду называть кто) в своей комерц теме написал, что у него софт "без црт". Потом кто-то глянул софт, а там в импорте msvcrt.dll. На что автор стилера заявил, что это не црт, ибо под црт имеется ввиду VCRUNTIMEXXX.DLL, а не это.

Потому и уточняю - что в твоем понимании "писать без црт"? просто, чтобы ехе не тянул никаких зависимостей, или чтобы не было црт, а сугубо чистый код + винапи?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Индия на вас нет, он бы вам всем объяснил, что писать на чистом WinAPI нельзя, можно только на чистом NTAPI, поскольку NTSTATUS в отличии от GetLastError всегда корректно отображает состояние ошибки сервисного вызова операционной системы))

Вообще, конечно, называть код без црт чистым, а код с црт не чистым - это уже какой-то новый уровень нацизма))
 
Пожалуйста, обратите внимание, что пользователь заблокирован
поскольку NTSTATUS в отличии от GetLastError всегда корректно отображает состояние ошибки сервисного вызова операционной системы))
Мб он и по делу говорит, но только в теории ; на практике когда спрашивал по нативу (см. васм, вопросы по секьюрити винды и самоудалению), ничего внятного так и не добился.
Кстати, а где он есть? Тут пропал, на васме пропал. Как бы не случилось чего.

называть код без црт чистым, а код с црт не чистым
ты понимаешь же, что имеется ввиду. Что нет никакой левой фигни, типа стековых кук, проверки чего-то там , вызовов хрен пойми каких. Только тот код, что писал программист, как на Асме, что написал то и получил. Допустим, для ШК именно так и надо..
 
Cмысл есть всегда.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Сейчас век технологий, и для решения любой задачи есть определенные инструменты и технологии и их нужно использовать. А вот измерение членов, и кого "меньше" только затягивает проекты. Да нужно просто уметь это делать как писали выше. Это хороший навык.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Кстати, а где он есть? Тут пропал, на васме пропал. Как бы не случилось чего.
Без понятия, лучше у какого-то его реверсерского бро спросить, типа гейолога. Он от него весточку уже передавал как-то. Я делал предположения, что он упоролся молочкой с грибами и его никак приход не отпускает. Ну или шифруется от аверов и ментов, такая уж жизнь у неуловимых Джо.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Меня больше интересует куда Haunt пропал, я его давно не видел
За Ханта я, конечно, переживаю, так как мне всегда почему-то казалось, что он с украины, надеюсь, что с ним все в порядке.
 
Индия на вас нет, он бы вам всем объяснил, что писать на чистом WinAPI нельзя, можно только на чистом NTAPI, поскольку NTSTATUS в отличии от GetLastError всегда корректно отображает состояние ошибки сервисного вызова операционной системы))

Вообще, конечно, называть код без црт чистым, а код с црт не чистым - это уже какой-то новый уровень нацизма))
В таком случае я нацист и меня это устраивает.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Один стиллер (не буду называть кто) в своей комерц теме написал, что у него софт "без црт". Потом кто-то глянул софт, а там в импорте msvcrt.dll. На что автор стилера заявил, что это не црт, ибо под црт имеется ввиду VCRUNTIMEXXX.DLL, а не это.

Потому и уточняю - что в твоем понимании "писать без црт"? просто, чтобы ехе не тянул никаких зависимостей, или чтобы не было црт, а сугубо чистый код + винапи?
чтобы не тянул никаких зависимостей.
Ого тред набирает обороты)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Пожалуйста, обратите внимание, что пользователь заблокирован
чтобы не тянул никаких зависимостей.
В общем, проблему можно решить несколькими способами. Все настройки буду приводить для Visual Studio 2015 английская версия, впрочем в других должно быть почти также.

0. Слинковать ехе с актуальной версией CRT.
Настройки проекта - C/C++ - Code Generation - Runtime library установить как /МТ . Файл существенно увеличится в размерах, но , как показывают дебаты по форуму, на размер всем сейчас пофиг.

1. Прилинковать кастомный CRT , вида http://wcrt.sourceforge.net/ или что-то подобное. Файл также увеличится в размерах, но не настолько как в предыдущем варианте.

2. Прилинковать MSVCRT.LIB (его можно найти в инете или взять с WDK/SDK), тогда софт будет юзать системную msvcrt.dll . Linker - input - указать путь к либ файлу.

3. Прилинковать NTDLL.LIB - решение аналогично пред. варианту, только в импорте будет не msvcrt, а ntdll.

Все эти варианты предполагают использование CRT в том или ином виде. Конечно, многие новые возможности плюсов (64 битные числа, мб какие-то исключения и т.д.) со старым црт будут недоступны. Возможно, в настройках проекта придется что-то отключить - все зависит от версии студии, что именно и куда она подставляет.

4. Если стоит цель отказаться от CRT полностью, т.е. получить файл примерно как на Ассемблере (что написал, то и вышло), нужно немного больше работы:
С++ - code generation - Enable C++ exceptions - установить NO
там же Security check - Disable Security check
В настройках линкера указать свою точку входа (advanced-entry point). Не забыть отключить отладочную инфу - к црт это никак не относится, а к безопасности.

Если все сделано верно, то CRT не будет, но можно получить ошибку что не найден _memset / _memcpy. Потому что конструкции вида char a[256] = {0} неявно вызывает эту функцию. Решить проблему можно несколькими способами:
- С++ - Optimization - Enable Intrinsic Functions - YES. Тогда все эти memcpy заменяться на rep stosb и т.п. инструкции ассемблера.
- объявить свои функции.
C++:
#pragma function(memcpy, memset)

void* memcpy(void* dst, const void* src, size_t count)
{
    void* ret = dst;

    while (count--) {
        *(char*)dst = *(char*)src;
        dst = (char*)dst + 1;
        src = (char*)src + 1;
    }

    return ret;
}


void* memset(void* dst, int val, size_t count)
{
    void* start = dst;

    while (count--) {
        *(char*)dst = (char)val;
        dst = (char*)dst + 1;
    }

    return start;
}

В общем, как-то так.
 


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