Есть программа, вернее секция с кодом. Все winapi функции в ней заменены на call [мусор]. Есть также смещения на эти функции(rva) и имена функций. Проблема в том, что имена функций хранятся в порядке их вызова в программе. Как восстановить таблицу импорта. (подозреваю, что вопрос элементарный, но до меня что-то не доходит )
что-то я плохо понял вопрос.. [мусор] это что такое ? совсем мусор ? 0xABCDEFGH ? и имена ф-ций и rva - это про API ?
мусор - абсолютно произвольные байты. протектор по смещениям забивает их переходниками. Т. е. было call [D15B1213], стало call [00B61234], на 00B61234 лежит частично эмулируемая winapi функция. Собственно вопрос - как, зная смещения на call [мусор] и имена winapi функций восстановить IAT, чтобы потом скормить её imprek'у.
ozzman Лучше попросить протектор забивать корректные адреса API функций вместо "мусора" ЗЫ: О каком протекторе идёт речь?
ozzman > толку то от этого, прога будет работать только на моей машине. Толк в этом определенно есть ImpRec'у приятней кушать целую таблицу импорта, без мусора, ну там не определятся лишь нескольких функций, их тебе придётся указать ImpRec'у вручную.
> толку то от этого, прога будет работать только на моей машине Почему ? там же нужно заставить аспр создавать иат и записывать jmp/call [iat]. потом скормить эту иат импреку и всё будет работать на любом компе...
Asterix >Лучше попросить протектор забивать корректные адреса API функций вместо "мусора" То есть было call [01234567] станет call [77b31234] - это будет работать только на моей машине(или на другой с winxp sp2). >Толк в этом определенно есть ImpRec'у приятней кушать целую таблицу импорта, без мусора, ну там не определятся лишь нескольких функций, их тебе придётся указать ImpRec'у вручную. Последовательность действий мне известна. Вопрос именно в создании IAT. Повторяю вопрос: как, зная смещения на call [мусор] и имена winapi функций восстановить IAT, чтобы потом скормить её imprek'у. Вобщем, в IAT вроде итак адреса функций идут в порядке их вызова в проге, а в зааспротекченной проге нескольно адресов идут в порядке их вызова, а следующий адрес оказывается совсем не там, где должен быть. Вобщем, объяснение довольно нутаное получилось. Неплохо было бы, если бы ответил человек, работавший с восстановлением импорта в аспре 1.31