нет исходников вставить в определнное место кусок кода, который будет запускать другой exe файл, который будет лежать в папке с основным. я нашел место куда это нужно вставить, и даже ничего не поломал, но так как я нуб в ассемблере, то похоже написать такую вставку в hex кодах для меня тяжелая задача( Насколько реальный вариант написать нужный код на С, скомпилить, и с помощью отладчика передрать оттуда нужный кусок? Или это бесполезно и все-таки лучше кого-то попросить помочь, кто шарит?)
не "передерешь" )
Реальный, но так делать не стоит. И, насколько я знаю, тут обсуждение вирусов запрещено
не передерет он, там адреса будут другие
и каким образом он там например адреса winapi генерирует в pic ? например WinExec ?
Ну почитай, я откуда знаю)) Я просто загуглил - "pic code on C" И выдало куча результатов Это в принципе возможно, здесь ничего сложного нет. Но делать так лучше не стоит
А чего сразу вирусы-то? Я иногда так делаю патчи, когда пересобирать дольше.
Ну поневоле запускать программу левую по запуску это несправедливо к пользователю, я бы обиделся
Какой-нибудь древней игре оконный режим или запуск на дополнительном мониторе, или ещё какой конфиг пофиксить таким способом — самое то. Но я бы сделал так: добавляем в импорты целевого приложения свою длл, она грузится, а там уже можно извращаться как угодно. Может быть, и программу не придётся запускать, всё из длл делать.
можно проще даже, посмотреть какие в принципе грузит длл это приложение и сделать dll хайджекинг, если есть возможность рядом с софтом длл свою разместить, ну и если есть условия для хайджекинга
можно поподробнее или ссылки на мануал какой-нить толковый. через dll думаю тоже подошло бы
да, есть такая возможность
https://attack.mitre.org/techniques/T1574/001/
Ну или так, да. Но чаще всего они в KnownDLLs.
Одну кнопочку нажать, и твоя DLL в импорт-таблице CFF Explorer
так испортишь подпись
А что за подпись, кстати? Чексумма чтоль
ну на основе хешсуммы и сретификаты от доверенных центров в файл встраиваются, в детали сам не вникал
В export таблицу функцию свою добавь А то что ему импортировать? Нужна функция какая-то
я вроде бы понял - моя dll не экспортирует функций, поэтому надо в нее их добавить
Да Потом добавляешь в CFF Explorer свою DLL, выбираешь свою функцию, и нажимаешь "Rebuilt import-table" Насколько я знаю, не важно - вызывается функция, или нет. Всё равно твою DLL подгрузят, и ты сможешь выполнить свой DllMain
если нужная мне dll не имеет экспортных функций, то я так понимаю опять же мне придется написать свою dll, в которой будет экспортная функция, которая будет вызывать нужную мне dll или даже тупо нужный exe
Тебе легче уже внедрить вызов LoadLibraryA Это легче лёгкого
push 0xDEADBEEF ; address of library name mov eax, 0xDEADBEEF ; address of LoadLibraryA call eax ; call LoadLibraryA такого типа?
В общем, если без заморочек, максимально быстро, и если ты не пишешь вирус, а чисто для себя хочешь тогда вот: 1. Открываешь у себя свою программу в x64dbg. Заходишь в отладочные символы, находишь kernel32.dll слева, тыкаешь, в поиске справа пишешь "LoadLibraryA", и находишь адрес. Копируешь его. 2. Доходишь до точки останова на точке входа (Entrypoint). Листаешь вниз, и ищешь code cave (много нулей), далеко лучше не листай, много места не нужно. Когда нашёл - выделяешь некоторую область, и нажимаешь Ctrl + E. Далее в окошке сверху "ASCII" пишешь название своей DLL. К примеру, "kernel32", .dll не нужно, LoadLibraryA этого не требует, а ты места сэкономишь Потом копируешь адрес начала названия твоей DLL, и ещё пропустив пару нулей, пишешь код: push eax push 0xАдресНазванияТвоейDll call 0xСтатическийАдресLoadLibraryA pop eax Далее переходишь на точку входа, и и копируешь оттуда инструкцию (или несколько), чтобы вместо этих инструкций всунуть хук на свой внедрённый код: call 0xАдресНаВнедрённыйКод ; Это должно стоять ровно на точке входа ... Потом в конце своего шеллкода вставляешь затёртые инструкции: push eax push 0xАдресНазванияТвоейDll call 0xСтатическийАдресLoadLibraryA pop eax ; тут затёртые инструкции ret Этот способ привязан к версии сборки Windows, потому что с каждым релизом адрес в kernel32.dll может сдвинутся, если туда что-то добавят. Чтобы сделать независимо от версии сборки нужно дописать больше кода, где тебе нужно будет брать адрес на kernel32.dll из PEB, и по пройтись по его PE export-table в поисках VA на LoadLibraryA Могу тоже это скинуть, если тебе нужен такой вариант
Ой, всё мне лень переписывать)) Тебе легче найти где-нибудь статейку по PIC
вроде бы все понятно, я завтра буду пробовать. спасибо) я чтото подобное сделал, правда через добавление новой секции. но зашел немного в тупик а что же дальше делать. но с загрузкой dll это реально крутая идея - ее можно запилить на языке высокого уровня и прописать в ней вообще любуюлогику нужную
Давненько я шеллкоды не писал... Короче, вот тебе шеллкод на FASM. Делаешь тоже самое, что я писал до этого (в удалённых сообщениях): Останавливаешься на точке входа, копируешь инструкцию, прописываешь в шеллкоде в конце её, компилируешь шеллкод, вставляешь его куда-то далеко, где есть code cave (область памяти с нулями) (вставить можно, скопировав байты из бинарника, и потом CTRL + E, и вставляешь шеллкод), потом вместо инструкции на точке входа пишешь call 0xАдресГдеТвойШеллкод После этого, когда ты будешь запускать программу - с ней автоматически будет подгружаться .dll. Но это способ, если у тебя нет экспорт-таблице в .dll В имени dll дописывать .dll не нужно. Сэкономишь байты. Пытался оптимизировать под размер
Кстати, можно тоже самое сделать и с запуском программ (чтоб при запуске одной, запускалась другая). Там даже менять много не нужно - пару строчек
спасибо) сейчас буду пробовать 👍🏻
Обсуждают сегодня