Всем привет. В общем что и зачем - особо вдаваться в подробности не буду. И так ясно зачем. Задача: Есть файл с нестандартной базой. К примеру 0x11220000. Нужно накрыть файл пакером и сдвинуть базу на нормальную, чтобы убрать лишний критерий для детекта. Сделать VirtualAlloc как оказалось - недостаточно. GetModuleHandle(0) возвращает не то значение. Перехватил. Вроде все нормуль, но... Файл почему-то на системах Виста и выше некорректно начинает работать с ресурсами и появляются непонятные баги. В общем объясните мне пожалуйста, кто разбирается в системных структурах, где хранится база образа процесса, кроме хидера и пеба, как до нее добраться и перебить, чтобы все апи функции возвращали "правильный" результат и система не заподозрился, что изначально процесс прогрузился на другой базе.
GetModuleHandle считывает значение ImageBase из PEB, там и модифицировать придется. Насчет висты и выше не знаю.
7D4E3EF9 64:A1 18000000 MOV EAX,DWORD PTR FS:[18] 7D4E3EFF 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30] 7D4E3F02 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8] -------------- C Пебом уже разобрался. С ресурсами по прежнему хня какая-то. Апи для работы с ресурсами не отрабатывают. Не находят ресурсов. Если базу не трогать, а строго распаковывать на старую - тогда все ок. С чем может быть связано?
вверху GetModuleHandleW отреверсил и нашел участок кода. В общем пеб пропатчил. GetModuleHandle(0) отрабатывает теперь нормуль. А вот ресурсы - увы.
Ну поменяли это значение в PEB. Данные в памяти остались по старым адресам лежать. Таким образом, если у нас была база 0x11220000 а стала, допустим, 0x00400000, тогда функции, использующие значение из PEB, будут пролетать. Можно отреверсить ресурсные функции, посмотреть, может так и есть там.
Mankubus Ну фокус же в чем. Пакер оставляет только 3 секции. Ресурсы он прячет. Т.е. сперва распаковываются и размещаются секции, в т.ч. ресурсы, потом биндится импорт, чекается ПЕБ а потом уже передается управление на ОЕП. Т.е. никаких данных в памяти после загрузки, касательно ресурсов, теоретически быть не может
уже реверсю кстати. Неприятные такие функции с кучей всего. Но пока что ничего такого, что привязывалось бы к базе не вижу.
Да, так и есть, например LoadResource Код (Text): 753F1F00 75 0E JNE SHORT 753F1F10 753F1F02 64:A1 18000000 MOV EAX,DWORD PTR FS:[18] 753F1F08 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30] 753F1F0B 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8] 753F1F0E EB 28 JMP SHORT 753F1F38
Все. разобрался. Все-таки трабла была именно в пеб-е. После правки пеба - и небольшой модификации софта - все заработало. Mankubus Спасибо. Респект!
Там еще в LdrAccessResource вот такая штука есть Код (Text): 64:A1 18000000 MOV EAX,DWORD PTR FS:[18] 8B80 E00F0000 MOV EAX,DWORD PTR DS:[EAX+0FE0] в результате eax будет показывать на ImageBase.