Сейчас на форуме: hgdagon, asfa, bartolomeo (+5 невидимых) |
eXeL@B —› Программирование —› Таблица импорта в PE |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 21 сентября 2006 08:27 · Поправил: sniperZ · Личное сообщение · #1 Есть IMAGE_IMPORT_DESCRIPTOR STRUCT union Characteristics dd ? OriginalFirstThunk dd ? ends TimeDateStamp dd ? ForwarderChain dd ? Name1 dd ? FirstThunk dd ? IMAGE_IMPORT_DESCRIPTOR ENDS В ней есть Name1 - имя DLL. Написано: Name1 содержит имя импортируемой функции в формате ASCIIZ. Хотя этот параметр определен как байт, на самом деле он переменного размера. Так было сделано лишь потому, что нельзя представить в структуре поле переменного размера. Структура была определена для того, чтобы вы могли обращаться к данным через описательные имена. И ещё: Name1 отличается от других параметров тем, что оно содержит RVA имени DLL. Ето что, надо перейти по RVA имени и прочеть её? И какой длины имя читать(чёчо не въеду)? ...и ещё: Вместо этого, IMAGE_THUNK_DATA этой функции будет содержать ординал функции в нижнем слове и самый значимый бит (MSB) IMAGE_THUNK_DATA'ы будет установлен в 1. Это как? Как понять значимый бит? |
|
Создано: 24 сентября 2006 06:58 · Личное сообщение · #2 Тут другая тема - просто рипнуть. А вот напиши TotalCommander на асме, будешь и CRC писать на асме ;) Что удобнее, мож на ЯВУ (языке высокого уровня) написать ;)) А переписывать с асма я кста с радостью. Люлблю реверсить. ЗЫЖ вообще есть мелкомягкая библа, и функция crc32 есть ;) ----- Недостаточно только получить знания:надо найти им приложение |
|
Создано: 29 сентября 2006 00:58 · Личное сообщение · #3 Demon666 пишет: Ну, хорошо чуть обосную Так это никто не оспаривает. Но кто мешает в Си или Дельфи вызывать подпрограмму или DLL на ассемблере сделанную. Кроме того ассемблерные вставки тоже никто не отменял. Но зачем писать интерфейс на ассемблере - не пойму. Любое изменение требует лишних усилий. Вот и гуляют генераторы ключей, у которых элементы меню расползаются по экрану, как тараканы Хотя конечно у кого платный Интернет, то каждый килобайт на счету. |
|
Создано: 29 сентября 2006 09:09 · Личное сообщение · #4 Rascal пишет: ЗЫЖ вообще есть мелкомягкая библа, и функция crc32 есть ;) Ну и на ASM есть, только там я сейчас не помню, так на скидку все функции хеша даже нестандартные есть (приват!) tundra37 пишет: Хотя конечно у кого платный Интернет, то каждый килобайт на счету. Это не проблема пакер или на крайний случай *.zip, *.rar tundra37 пишет: Любое изменение требует лишних усилий Для начинающего да, но не для специалиста в этой области tundra37 пишет: Кроме того ассемблерные вставки тоже никто не отменял. Это мы уже здесь обсуждали (и с тобой в другой теме) разница кошмарный код, который засовывает компилятор… tundra37 пишет: Но кто мешает в Си или Дельфи вызывать подпрограмму или DLL на ассемблере сделанную. Ну, тогда у меня вопрос такой: Есть функция GetProcAddress, и есть *.dll c одной нужной экспортируемой функцией (назовем ее условно ExportFunction ). Файла *.lib нет, да и FASM в данном случае не хляет! Есть другая *.dll, которая пытается воспользоваться ExportFunction при помощи GetProcAddress, но трабл здесь в том что *.dll с ExportFunction грузится позже, чем та, которая ищет точку входа в ExportFunction при помощи GetProcAddress. Вот как сделать, не контролируя процесс загрузки в память обеих *.dll при помощи GetProcAddress узнать точку входа, просто функция GetProcAddress возвращает NULL, если *.dll с ExportFunction не загружена в память (не знаю, может это как-то не понятно будет написанное мной выше выглядеть) да я думаю, этот баг всех затрагивает по неволе, просто не все на это обращают внимание! Особенно… ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com |
|
Создано: 30 сентября 2006 02:51 · Личное сообщение · #5 |
|
Создано: 30 сентября 2006 04:51 · Личное сообщение · #6 tundra37 пишет: Наверно это не ответ Дык, это не ответ, а вопрос HMODULE hMod = GetModuleHandle("*.dll"); if(hMod) // Check … is present and loaded { // Get address of exported function int (*pFunc)(char*) = (int (*)(char*)) GetProcAddress(hMod, " ExportFunction"); if(pFunc) // Check … exports the correct function pFunc("*.txt"); // Execute exported function } Но автор не учел то, что я выше описал. (кроме проверок естественно) Тут даже не в этом дело, тело этой *.dll вшито в другую *.dll, но на экспорт идет идентичная функция с таким же именем, (сколько еще таких клонов будет, никто не знает и имена *.dll у них разные, отличие: функциональности гораздо больше) так вот помимо этой *.dll грузится еще десятка два других *.dll и адреса мэппинга у них, стало быть, разные. Короче твой вариант я учитывал, но тут придется прибавить offset этой функции, который мы предварительно вычисляем, как ты описал выше! Хотелось стандарта, но придется привязываться к именам *.dll раз другого выбора нет, может оно и к лучшему… ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com |
|
Создано: 08 октября 2006 08:12 · Поправил: Rascal · Личное сообщение · #7 Demon666 пишет: Ну и на ASM есть, только там я сейчас не помню, так на скидку все функции хеша даже нестандартные есть (приват!) Не смеши. Уже видел 2 пака крипто на асме. Приват, гыгыгы... Demon666 пишет: Для начинающего да, но не для специалиста в этой области Вопрос не в этом - ты каждый раз будешь тратить время на небольшое изменение. Если время для тебя не ценится - пожалуйста. Demon666 пишет: Это мы уже здесь обсуждали (и с тобой в другой теме) разница кошмарный код, который засовывает компилятор… Покажи-ка. Асм код вставки ровно такой, какой ты написал. ----- Недостаточно только получить знания:надо найти им приложение |
<< . 1 . 2 . |
eXeL@B —› Программирование —› Таблица импорта в PE |