![]() |
![]() |
![]() |
Полномерно используя стэк вы можете сократить размер вируса на хуеву тучу байт. Размер стэка по умолчанию примерно равен 4м килобайтам. Если учесть что вызовы процедур используют за всю работу максимум 3-4% от всего стэка, то не сложно догадаться что остальное место можно потратить на собственные нужды. Вот дешевенький примерчик: Вы когда-нибудь задумывались сколько байт занимает всего лишь один вызов api из переменной. call [ebp+offset ThisIsAPI1RVA] вот такого типа вызов равняется 6!ти байтам! Сделаете 10 вызовов - будет 60 байт! Не экономно это. Если у вас стэк будет выглядеть вот типа этого: [API1],[API2],[API3],[API4],[APIX] <------------------------------- возрастание адреса стэка то вы можете очень нихреново сократить размер вируса. Пусть в EDI адрес стэка APIX. Тогда call [edi+4*api_n-1] ; это если начинать считать с 1цы такой вызов занимает 3 байта! + то, что вам не придется выделять место для адресов внутри вируса(если нихрена не понятно, см. исходник) хах! 20 адресов - 20 DWORD`ов - 20*4 = 80 байтам!! Но это еще далеко не все приколы. 4 килобайта даны не зря. Вы можете их использовать под структуры и какое-либо другое дерьмо. Вообщем, хороший кодер должен выжимать из стэка все, что можно и чего нельзя. Если вы думаете типа "да похую на оптимизацию, я же не на Си пишу" а вот и хуй. Неоптимизированный вирус - признак вирмэйкерского непрофессионализма. Такие вирусы часто встерчаются у людей из 29a, вы же не хотите быть такими-же ;) Вирус и огромный размер - вещи несовместимые, не пытайтесь доказывать обратное. Возникает заморочка как бы не потерять ту базу, с которой в стэке идут API адреса.. а не сложно. держите этот адрес в EDI, и сохраняйте его в стэк в тех местах, где его будут херить API или другое дерьмо. Это конечно не все, что можно предпринять в целях оптимизации. Но при использования такого подхода к делу эффект получается вполне ощутимый. |
||
![]() |
![]() |
![]() |