Пробывал освободить там регион памяти,после запуска любой user32 фунции вылетает с ошибкой где то в ntdll,интересно вот,что туда сует user32??
сует какуюто свою секцею. так что есле нужен кусок памяти за ImageBase+ImageSize лучше выделить его до загрузки user32
PEB.ReadOnlySharedMemoryBase ? Это csrss проецирует секцию при коннекте на порт. IsBadReadPtr, HeapCreate, GetLocalTime etc используют эту проекцию. Зачем его освобождать ?
Так я и думал, гуанокриптор. Как и поступают в подобном случае - освободить всё адресное пространство и загрузить модуль. Совет - перед тем, как создавать какойлибо подобный код, должно изучить матчасть. У вас иначе - это стоит дорого, можно попытаться. Так не делается. Релоки по любому настраивать придётся.
нафига? ImageSize ставим с запасом, декодер - PIC, копируем его куда-нить, он расшифрует, и на место закриптованого образа в память запишет исходный.
n0name это подход любителя, а если требуется сделать декодер, который препятствует дампингу памяти, путем частичной расшифровки требуемого куска и обратной шифровки, но с другим ключом ненужного. при этом постоянно осуществляет оптимизацию использования памяти вследствии чего один и тотже код может оказаться в разных блоках памяти в разное время. т.е. не разобравшись с релоками не получится перемещать код достаточно свободно, а такая программа уже есть (я ее как-то написал). алгоритм шифрования может и так себе, но придется попотеть, чтобы собрать весь код воедино, но самое смешное, она может делать это с уже собранными образами. к тому же ОС может случайно загрузить даже exe файл не по тому адресу для которого он откомпилирован или вам не удастся получить из-за каких-либо особенностей системы требуемый буфер по требуемому адресу. тут, извините, проще с релоками.
я о подходе n0name.. есле меняешь ImageSize (увеличиваешь на тот размер, который нужен последнюю секцию, напремер), то винда выделяет место под образ до загрузки юзер32, сталобыть на энтрипоинт тупо перенести стаб и покриптованный файл в другое место и сделать UnmapView образа
Freeman Понятно. Кстати можно ведь секцию ту проекцию перенести, исходя из того, что в ней данные статические(не меняются). В CsrClientConnectToServer() проверяетсся выполнен ли коннект на порт сервера, ели не выполнен то вызывается CsrpConnectToServer(), последняя создаёт секцию и передаёт её хэндл на порт, после чего csrss проецирует секцию, возвращая адрес проекции. Он загружается в PEB, поля [0x4C % 0x54]. За этой проекцией идёт кодовая страница, которую также проецирует csrss, но адрес её задаётся в реестре, так что лучше её не трогать. Выше лезть смысла нет, так как TEB/PEB которые невозможно из юзермода освободить, да и делать это нельзя. Но также не гарантировано что выше user32 не будет ничего спроецировано, ибо память это равный для всех ресурс. Тоесть можно скопировать блок с текущей проекции в свой и изменить те три поля в PEB, после чего освободить проекцию. Это не должно не на что повлиять.
vzlomshek Не пойму про что это ты. Я ведь вопрос не задал, в таком случае больше тебе отвечать не буду. А вобще надоели эти дурацкие вопросы, где без преминения функций гадалки не решить. Наверно щас создам топик про то, как разбирать ошибки. Большая часть вопросов тут сводится к неспособности автора анализировать исключение.