Пожалуйста, обратите внимание, что пользователь заблокирован
del
Последнее редактирование:
Привет, да там всё просто как табуретка, речь идет о IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG и структуры, которая под ним лежит. =)А можно тут поподробнее?
Нет, насчет SEHandlerTable не знаю, я никогда его не хандлил, но ты можешь сам поковырять в этом направлении, если тебе это интересно, насколько я помню под x32 вообще ничего не нужно для корректной работы эксепшенов делать? Знатоки 32-битной малвари могут меня поправить. Что касается битмапов, они как раз и нужны для работы __guard функций, при каждом обращении к ним идёт обращение в ntdll и там чекается, что функция, к которой происходит обращение, валидна. Как я сказал, я не помню подробностей, потому что уже давно не пользуюсь виндой и не пишу малварь под неё, тебе нужно глянуть в LdrpValidateUserCallTarget в иде, ну или можешь сам поискать в интернете разбор CFG, вот например.А что это? Впервые слышу
Про security cookie знаю, видел даже где то реализацию их обработки, но вот про "битмапу в ntdll" слышу впервые
А что насчёт SEHandlerTable знаешь? (х32 офк)
Лучше цитируйте мои сообщения, на которые отвечаете, от прямых упоминаний мне не приходят уведомления. =)
Почему глупо? Потому, что вы не разобрались, как работает malloc...? В любом случае, вся ваша дальнейшая аргументация строится именно на этом, если что, код crt открыт, как и код самого malloc:Никто ничего не боится юзать, просто это глупо при разработке, как Вы говорите не "легитного" софта. На счет того что под капотом malloc сидит RtlAllocateHeap, которая выделяет память в CRT-шном хипе, непонятно как созданном RtlAllocateHeap, плюс добавление CRT- шной структуры с размером блока.
//
// malloc_base.cpp
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Implementation of _malloc_base(). This is defined in a different source file
// from the malloc() function to allow malloc() to be replaced by the user.
//
#include <corecrt_internal.h>
#include <malloc.h>
#include <new.h>
// This function implements the logic of malloc(). It is called directly by the
// malloc() function in the Release CRT and is called by the debug heap in the
// Debug CRT.
//
// This function must be marked noinline, otherwise malloc and
// _malloc_base will have identical COMDATs, and the linker will fold
// them when calling one from the CRT. This is necessary because malloc
// needs to support users patching in custom implementations.
extern "C" __declspec(noinline) _CRTRESTRICT void* __cdecl _malloc_base(size_t const size)
{
// Ensure that the requested size is not too large:
_VALIDATE_RETURN_NOEXC(_HEAP_MAXREQ >= size, ENOMEM, nullptr);
// Ensure we request an allocation of at least one byte:
size_t const actual_size = size == 0 ? 1 : size;
for (;;)
{
void* const block = HeapAlloc(__acrt_heap, 0, actual_size);
if (block)
return block;
// Otherwise, see if we need to call the new handler, and if so call it.
// If the new handler fails, just return nullptr:
if (_query_new_mode() == 0 || !_callnewh(actual_size))
{
errno = ENOMEM;
return nullptr;
}
// The new handler was successful; try to allocate again...
}
}
Сразу стало интересно, что это за термин. Наверное, имеются ввиду те самые легендарные брутеры/чекеры с 4096 потоками, из-за которых уже был срач не так давно. Хотя мне так никто и не пояснил доходчиво, почему это лучше асинка с пулом по одному потоку на ядро, но окей."ультра многопоточных"
Вы все пишете верно, но к сожалению, с крипторами в продаже все весьма грустно. Уже как-то писал, кто умеет - тот в привате, а в паблике в 99% копипаст. Там люди даже РЕ формат не знают, какой уж seh или tls, то человек, который занимается криптом, уж тем более должен их знать и учитывать
Хз о каком сраче речь, но те, кого я видел (кто кодит 1000 потоков локеры или брутеры) просто не могут осилить асинхрощину, вот и.Хотя мне так никто и не пояснил доходчиво, почему это лучше асинка с пулом по одному потоку на ядро, но окей.
//Не экспортируется.
__int64 __fastcall heap_init(int a1)
{
__int64 result; // rax
int HeapInformation;
HeapInformation = a1; // не понятный маневр
result = (__int64)HeapCreate(0, 0x1000ui64, 0i64); //Без флагов
crtheap = (HANDLE)result;
if ( result )
{
//Писался код мелкософтом явно не по своей же документации:
//HeapCompatibilityInformation
//Включает функции кучи. Поддерживается только куча с низким уровнем фрагментации (LFH).
//Однако для приложений нет необходимости включать LFH, так как система использует LFH по мере необходимости для обслуживания запросов на выделение памяти.
//Т.е. нахера он тут не нужен в либе из Windows 11 23H2
//Windows XP и Windows Server 2003: По умолчанию LFH не включен. Чтобы включить LFH для указанной кучи, задайте для переменной, на которую указывает параметр HeapInformation , значение 2. После включения LFH для кучи ее нельзя отключить.
//Не понятно зачем это нужно, еще и 2 раза
HeapInformation = 2; // вкл LFH, хотя этого не нужно в Win11
HeapSetInformation((HANDLE)result, HeapCompatibilityInformation, &HeapInformation, 4ui64);
HeapInformation = 2; // вкл LFH, хотя этого не нужно в Win11
HeapSetInformation(crtheap, HeapCompatibilityInformation, &HeapInformation, 4ui64);
return 1i64;
}
return result;
}