Сейчас на форуме: 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. Это как? Как понять значимый бит? ![]() |
|
Создано: 21 сентября 2006 08:33 · Личное сообщение · #2 |
|
Создано: 21 сентября 2006 08:34 · Личное сообщение · #3 |
|
Создано: 21 сентября 2006 08:35 · Личное сообщение · #4 |
|
Создано: 21 сентября 2006 08:38 · Личное сообщение · #5 |
|
Создано: 21 сентября 2006 09:36 · Личное сообщение · #6 Как обычно парни не поняли вопроса =) Для загрузчика важны эти два поля: Name1 dd ? FirstThunk dd ? А на остальные первые четыре можно вообще забить! sniperZ Вот аттач, там ответы, на все задаваемые тобой вопросы и описание примитивного внедрения кода в чужой процесс! ;) ![]() ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 21 сентября 2006 10:03 · Личное сообщение · #7 |
|
Создано: 21 сентября 2006 10:40 · Личное сообщение · #8 Asterix пишет: для начала Iczelion'а почитай чтоли Вобще-то цитаты вопроса из тутора Iczelion'а! ![]() Asterix пишет: че такое RVA "че такое RVA" я знаю. ![]() theCollision пишет: Написано же ASCIIZ(ero) А что ASCIIZ имеет длину? ![]() Я имею ввиду, если перейти по RVA Name1(так ведь), то какой длины читать строку. И что такое MSB? ![]() |
|
Создано: 21 сентября 2006 10:41 · Личное сообщение · #9 =TS= пишет: Ты не прав А ImportREC по-другому делает? ;) =TS= пишет: OriginalFirstThunk часто ипользуется загрузчиком при определенных услових Какие такие условия? =TS= пишет: чти Криса Криса не чту, хватила одной статьи, чтобы понять, что там половина мусора так сказать больше флуда, а по теме два слова и из них половина под вопросом. Какая имелась в виду статья в данном случае!? (У него их…) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 21 сентября 2006 10:53 · Личное сообщение · #10 |
|
Создано: 21 сентября 2006 11:15 · Личное сообщение · #11 |
|
Создано: 21 сентября 2006 11:33 · Личное сообщение · #12 |
|
Создано: 21 сентября 2006 11:53 · Личное сообщение · #13 |
|
Создано: 21 сентября 2006 12:14 · Поправил: Rascal · Личное сообщение · #14 Хватит юзать делфи. Если такого не знать, фу, стыдно. lstrcpy (dest, src) Demon666 пишет: Какие такие условия? Что компилятор сделает с тем и будешь разбираться. Читай Питрека, имена могут быть в 2 разных массивах. Я сам попалился, когда юзал только Name, как оказалось чаще имена встречаются в... мля, забыл уже. сорец мож даже потерял. жаль будет. я кста успешно сделал добавление новой библы и функции в импорт проги без пересройки импорта ![]() ![]() ![]() [ADDED] Упс, не заметил поста демона про lstrcpy ![]() ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 21 сентября 2006 12:18 · Личное сообщение · #15 sniperZ пишет: IMAGE_IMPORT_DESCRIPTOR.Name Ну бля, я же писал тебе , что ты сам написал asc2zero а че это в дельфи если не Pchar ? ( это ж бля элементароно! ) Я этот тип узнал, за 20 минут, а всего то надо было набрать ключевой запрос в яндексе и он привел меня к Королевству Дельфи. ВСЕ! Далее любимое MemoNah.lines.Add(Хули надо); ----- My love is very cool girl. ![]() |
|
Создано: 21 сентября 2006 13:02 · Личное сообщение · #16 В каждой стать есть недочеты прошлых лет, которые не дают спать спокойно кодерам! Может, хватит спотыкаться об баги авторов!? Rascal пишет: Что компилятор сделает с тем и будешь разбираться. Читай Питрека, имена могут быть в 2 разных массивах. Я не о компиляторах, а о таблице импорта и offset`ах (что в RVA лежат). Demon666 пишет: А ImportREC по-другому делает? ;) Посмотри привинченную секцию и там будет видно, о чем я!? Как, по-твоему, передаются распакованные проги и потом запускаются на других компах? Rascal пишет: я кста успешно сделал добавление новой библы и функции в импорт проги без пересройки импорта Дописывал в импорт. Если на TASM, MASM, FASM дай глянуть? ;) P. S. И желательно ссылки в студию полезнее тема для новичков будет! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 21 сентября 2006 14:00 · Личное сообщение · #17 |
|
Создано: 21 сентября 2006 14:56 · Личное сообщение · #18 =TS= Наверное, я просто думал вот об этом: IMAGE_IMPORT_DESCRIPTOR STRUCT union Characteristics dd 0 OriginalFirstThunk dd 0 ends TimeDateStamp dd 0 ForwarderChain dd 0 Name1 dd ? FirstThunk dd ? IMAGE_IMPORT_DESCRIPTOR ENDS Для меня проще глянуть на сам код загрузчика под отладчиком, чем читать такое =))) ИМХО - Уж тогда лучше уже он описал внутренности загрузчика, чем скудный пересказ официального описания PE-формата! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 21 сентября 2006 20:54 · Поправил: theCollision · Личное сообщение · #19 sniperZ [url=http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9 fde-d599bac8184a/pecoff_v8.doc ]http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde- d 599bac8184a/pecoff_v8.doc [/url] Самая последняя!!! Забыл сказать, что это: 1. www.microsoft.com/downloads/details.aspx?familyid=E15438AC-60BE-41BD-AA14-7F1E0F19CA0D&displaylang=en Просто необходимо ставить, ибо много нужного и полезного там есть! ----- My love is very cool girl. ![]() |
|
Создано: 22 сентября 2006 00:00 · Личное сообщение · #20 Demon666 пишет: Если на TASM, MASM, FASM дай глянуть? ;) C++ с асмовыми вставками. Вот, смотрите, тренируйтесь. Тока не пинайте сильно, писал давно и быстро. Бинарник вложен, чтобы им воспользоваться нужно его кинуть в папку и туда скопировать calc.exe. ![]() ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 22 сентября 2006 11:09 · Личное сообщение · #21 Rascal Запускаю *.exe он мне windows`кий наг, гружу в олю, запускаю она мне исключение. Смотрим и видим по адресу 004018C0 66:8B43 06 MOV AX,WORD PTR DS:[EBX+6] Где EBX == 0 выше 004018B7 894D FC MOV DWORD PTR SS:[EBP-4],ECX здесь, зачем ложится в стек? 004018BA 8B7D FC MOV EDI,DWORD PTR SS:[EBP-4] здесь снимается значение из стека 004018BD 8B5F 30 MOV EBX,DWORD PTR DS:[EDI+30] не проще ли MOV edi,ecx или push ecx pop edi Эта процедура находится в инициализации диалога и секция с данными, где условно эта процедура пытается какую-то структуру организовать (это я так называю данные разных типов) пустая, вообще для чего эта процедура нужна? (вернее их в том месте каскад (3)) 004012E4 mov ecx, offset 4083A0h 004012E9 call 4017D0h ;(1) 004012EE mov ecx, offset 4083A0h 004012F3 call 4018B0h ;(2) 004012F8 mov ecx, offset 4083A0h 004012FD call 401A70h ;(3) ЗЫ: дальше не смотрел, будет время на выходных, посмотрю подробнее. ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 22 сентября 2006 13:41 · Личное сообщение · #22 Ну ёпт: Rascal пишет: Бинарник вложен, чтобы им воспользоваться нужно его кинуть в папку и туда скопировать calc.exe. Это означает что или ты не положил файл с именем calc.exe в папку с программой, или он не открывается(calc.exe), или что-то ещё ![]() ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 22 сентября 2006 13:56 · Поправил: Rascal · Личное сообщение · #23 004012E2 |. 6A 00 PUSH 0 ; /Arg1 = 00000000
Это на счёт последних колов. 004018B7 . 894D FC MOV DWORD PTR SS:[EBP-4],ECX
Если ты не обратил внимания там много операций через регистр EDI идёт. Это как раз инлайн асм и ООП. То есть EDI - просто указатель на объект. Иначе инлайн асм не заработает. Итог - Коль не знаешь, не говори. Это особенности использования инлайн асма. ПОпробуй использовать, отладить, тогда всё как на ладони будет. Оптимизатор не использовал, иначе бы вообще них не понял. А если б ещё и в 2005 компилил и оптимизил, мосх бы сломал ;) Я так чуть не тронулся когда большую хук библу отлаживал, пока не допёрло, что студия за меня решила подумать. ЗЫЖ не надо учить меня оптимизации. ей здесь не место. Здесь должна быть лёгкость модификации и понимаемость. и асм-то юзать не надо было, ну да проста ради любопытства сделал на нём. И последнее: вот где имена могут хранится: cmp eax, [edi]this.Import_End; // Где хранятся имена функций. Если u1.AddressOfData указывает за пределы импорта,
----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 22 сентября 2006 23:56 · Личное сообщение · #24 |
|
Создано: 23 сентября 2006 12:32 · Поправил: Demon666 · Личное сообщение · #25 Rascal Да нет, тут было чуть по-другому calc.exe был открыт до запуска ImportAdd PETools`ом. ![]() Я же писал времени нет! (что, эти слова трудны для понимания!) ![]() PETools показывает Import Directory 00012B80 0000008C ImportAdd показывает IT RVA 00012B82 00011F81 0000008C theCollision Не ожидал, что тебе языки программирования высокого уровня стали больше нравиться. ![]() [Добавил] Rascal Сорс прикольный получился, только сейчас посмотрел, respect! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 23 сентября 2006 15:06 · Поправил: Rascal · Личное сообщение · #26 Demon666 пишет: Я же писал времени нет! (что, эти слова трудны для понимания!) Ладно. Просто у меня тоже времени не много. Demon666 пишет: PETools показывает Import Directory 00012B80 0000008C ImportAdd показывает IT RVA 00012B82 00011F81 0000008C Думаю пофиксить не проблема. Главным было найти последние записи и вписать новую импортируемую библу и функцию из неё. Вывод и прочие красивости вообще просто для интереса да отладки делал ![]() Demon666 пишет: Не ожидал, что тебе языки программирования высокого уровня стали больше нравиться. Всему свой язык. Ассемблер - не панацея. Так же как и делфи, с++, бэйсик. Это частая ошибка - буду писать на асме потому что это круто. ЗЫ: да, ничё так. самому нравится: комменты не влом было лепить. Асм творит с человеком чудеса ![]() ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 23 сентября 2006 23:03 · Личное сообщение · #27 theCollision пишет: theCollision Не ожидал, что тебе языки программирования высокого уровня стали больше нравиться. Ассемблер, крут! В том плане, что он учит думать и думать хорошо, но не в плане отладки, а в плане кода! и как что должно работать! Ты видишь напрямую твой же код, но только в окне дебагера, т.е. ты говоришь на одном языке с процессором! Но когда проект большой? и тебе его в лом писать! И тебе охота вообще побыстрее от него отмазаться? И тебе нехочется к нему возвращаться более! И тебе вообще пох на то что он большой по размеру и не оптимизирован! ![]() - У меня на работе часто стоит задача из одного файла одного формата раз в 3 минуты пе- реложить в БД Oracle Думаешь я буду писать проект на ассемблере чтобы зацепиться к Oracle, и кинуть туды данные? Нет уж, я набросаю ADO компонентов, настрою коннект строку, скажу ADO*.connected = true; и Все! ![]() ----- My love is very cool girl. ![]() |
|
Создано: 24 сентября 2006 00:53 · Личное сообщение · #28 Дык я не утверждаю что ASM лучше, я только указал на мусор который после себя оставляет компилятор C++(?) (и никого я не собирался учить оптимизации!) И вообще я непонимаю тех людей которые пишут на MASM и применяют метки для перехода, пример: InitTableLoop: xor eax, eax mov al, bl xor ecx,ecx entryLoop: test eax, 1 jz no_topbit shr eax, 1 xor eax,0EDB88320h jmp entrygoon no_topbit: shr eax, 1 entrygoon: inc ecx test ecx, 8 jz entryLoop mov dword ptr [ebx*4 + edx], eax inc ebx test ebx, 256 jz InitTableLoop Это какую голову надо иметь, чтобы придумывать их, когда есть альтернатива: .if .endif .repeat .until … Вот в данном случае (это я о сабже) считаю, что лучше использовать FASM (идеальная среда для разработки протекторов короче для PE-формата.) По моему мнению, легче перейти с TASM на FASM, чем с MASM на FASM. www.wasm.ru/forum/viewtopic.php?id=16145 Читаем до конца!!! Люди, которые переходят на ASM (рано или поздно) сталкиваются с проблемой создать первый рабочий *.exe. Для этого существуют IDE, которые настроены уже под определенный пакет, вот для примера RadASM, весь Интернет его хвалит, но сколько раз я на нем не пытался сделать хотя бы маленький проект, все сводилось на нет. Неудобный до ужаса, глючный (не знаю как сейчас) чего только стоит визуальный редактор ресурсов с его личным каким-то форматом. Другое дело менее популярный и медленно развивающийся WinAsm, очень удобный для больших проектов. И тем более сейчас, когда был написан плагин для FASM! Большой проект на ASM`е писать трудно, когда только начинаешь, но когда у тебя появляются *.inc, причем много и с грамотным кодом остается незначительно изменять и их соединять (короче типа конструктора) вот и все! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 24 сентября 2006 02:13 · Личное сообщение · #29 Demon666 пишет: Большой проект на ASM`е писать трудно, когда только начинаешь, но когда у тебя появляются *.inc, причем много и с грамотным кодом остается незначительно изменять и их соединять (короче типа конструктора) вот и все! Смотри, выбор асма как я зыка для большого проекта должен быть чем-то обоснован. Скорость работы например - с++ оптимазит гораздо лучше. Простота модификации - сомнительно. Понимания - там же. Знать работу процессора - ну написал на асме, знаю как проц работает. Но в проекте это до лампочки ;) А вот скорость разработки важна. Если размер нужен, то например в с++ пишешь: #pragma comment(linker,"/MERGE:.rdata=.text")
И вперёд юзать VirtualAlloc да HeapAlloc. Размер получишь асмовый, но синтаксис с++. ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 24 сентября 2006 04:26 · Поправил: Demon666 · Личное сообщение · #30 Ну, хорошо чуть обосную (если неправ, то буду рад выслушать того, кто больше меня знает!?) Отталкиваться надо от самой темы, возьмем для примера CODE-RIP и предположим, нам нужна готовая процедура CRC32, в крипто мы несильны, да и времени нет с этим разбираться! (это я так легкий пример привожу) Берем прогу Total Commander последней версии, распакуем (UPX –d ) и запустим через некоторое время появиться, наг, значит, там есть какая-то проверка, ищем находим: О да! То, что нам нужно! =) (выбор: потратили две минуты + десять, для того чтобы вставить в нашу программу или сидеть втыкать в бесконечные алгоритмы “хеша”!?) CODE:0058FCE8 sub_58FCE8 proc near CODE:0058FCE8 push ebx CODE:0058FCE9 mov ds:dword_5DC80C, offset dword_5DC40C CODE:0058FCF3 xor ecx, ecx CODE:0058FCF5 CODE:0058FCF5 loc_58FCF5: CODE:0058FCF5 movzx eax, cx CODE:0058FCF8 mov dx, 0FFF8h CODE:0058FCFC CODE:0058FCFC loc_58FCFC: CODE:0058FCFC test al, 1 CODE:0058FCFE jz short loc_58FD09 CODE:0058FD00 shr eax, 1 CODE:0058FD02 xor eax, 0EDB88320h CODE:0058FD07 jmp short loc_58FD0B CODE:0058FD09 ; ---------------------------------------------------------------------- ----- CODE:0058FD09 CODE:0058FD09 loc_58FD09: CODE:0058FD09 shr eax, 1 CODE:0058FD0B CODE:0058FD0B loc_58FD0B: CODE:0058FD0B inc dx CODE:0058FD0E jnz short loc_58FCFC CODE:0058FD10 movzx edx, cx CODE:0058FD13 mov ebx, ds:dword_5DC80C CODE:0058FD19 mov [ebx+edx*4], eax CODE:0058FD1C inc ecx CODE:0058FD1D cmp cx, 100h CODE:0058FD22 jnz short loc_58FCF5 CODE:0058FD24 pop ebx CODE:0058FD25 retn CODE:0058FD25 sub_58FCE8 endp Вопрос есть желание переводить этот код на язык высокого уровня!? (когда в ASM`е знания никакие) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
. 1 . 2 . >> |
![]() |
eXeL@B —› Программирование —› Таблица импорта в PE |