MSoft: Если про "Slon - Построение простого EPO мотора", то мне не охота разбираться с этим, да и цель чуть другая: просто сделать точку входа такой чтоб не ругался антивирь. Подскажтие как определить в какую секцию указывает точка входа чтобы сделать секцию PAGE_EXECUTE_READWRITE? Думаю всё же поменять первые байты программы...
берешь точку входа и сравниваешь ее с вирт. адресом секции и вирт.адр.+вирт.размер.. Если точка входа лежит в этих пределах, то это нужная секция. эвристики и декрипторы раскручивать умеют, а ты их безусловным переходом запутать хочешь. хотя, возможно, и сработает, но мне не верится. нууу... какие-то взаимоисключающие понятия П.С.: не факт, что антивирь ругается на точку входа в последней секции. Пакеры тоже прописывают себя в последнюю секцию. Не ругаться же на них за это. Скорее всего, есть куча других признаков, по которым определяют начилие вируса.
Еще один, возможно тупой вопрос: Не могу понять каким образом в конце кода сделать команды на восстановление первых байт программы и на прыжок туда? У меня всё почему - то перепутывается с заражаемой программой. То есть вирус получил управление, выполнил свои дела и ему нужно восстановить первые байты программы, в которой он находится и туда перейти. Так вот - где ему брать эти данные?? Дайте наглядный пример
KondraT в справочнике виндовс! где же еще а если без шуток, то при заражении необходимо сохранять адрес оригинальной точки входа и первые байты, а потом просто восстановить и прыгнуть туда. А в чем сложность?
Сформулирую этот глупый вопрос так: Есть 1-ое поколение. Оно меняет первые байты заражаемой программы на jmp vir. Второму поколоению передается управление через этот jmp, оно выполняется и ему нужно восстановить исходные байты вместо jmp vir. Т.е. 1-ое поколение кладет ОЕР заражаемого файла в переменную и потом делаем jmp 'переменная с ОЕР'. Но ведь во 2-ом поколении этот же jmp будет с ОЕР найденного второго файла, а не того что положило туда 1-ое.
вот скажи, как ты первым поколением писал jmp vir??? что мешает тебе сохранить перед записью первые байты внутри второго поколения??? сохрани байты через обычный movds/movsb. А когда второе поколение отработает, помести в esi указатель на на сохраненные байты, а в edi - на OEP и сделай movsd/movsb. Потом вычти из EDI 5 и сделай jmp edi. В чем сложность??? В копировании байтов?