| Сейчас на форуме: morgot, sashalogout, -Sanchez- (+3 невидимых) |
| eXeL@B —› Софт, инструменты —› Восстановление hints после распаковки |
| << . 1 . 2 . 3 . 4 . 5 . 6 . >> |
| Посл.ответ | Сообщение |
|
|
Создано: 01 марта 2016 10:01 · Поправил: FalseMaster · Личное сообщение · #1 Некоторое время назад открыл для себя ручную распаковку исполняемых файлов. В процессе ковыряния столкнулся с тем, что некоторые пакеры заменяют адреса API'шек в IAT на переходники, и в этом случае приходится соответствующим образом редактировать файл, создаваемый тулзой "Import Reconstructor". Восстановление так называемых подсказок для загрузчика показалось мне зело муторным занятием, и после нескольких распаковок я не выдержал и накатал прожку, делающую это автоматически. Вот , может кому пригодится. ![]() |
|
|
Создано: 10 апреля 2017 23:05 · Личное сообщение · #2 dosprog пишет: А было бы уместно глянуть. Кроме пиздежа ничего. Ноль. Так выкладывай свой убер код и увидишь, даже на нескольких языках. На этом форуме я принципиально не буду ничего выкладывать из за тотальной неадекватности существенной части комьюнити, некоторым ранг на мозг давит и им взгрустнулость, что они из себя что то представляют. ![]() Но специально для тебя сделаю эксклюзивное исключение.
![]() |
|
|
Создано: 10 апреля 2017 23:12 · Поправил: dosprog · Личное сообщение · #3 |
|
|
Создано: 10 апреля 2017 23:16 · Личное сообщение · #4 |
|
|
Создано: 11 апреля 2017 00:42 · Поправил: dosprog · Личное сообщение · #5 |
|
|
Создано: 11 апреля 2017 01:00 · Личное сообщение · #6 dosprog пишет:А нахуй ты тогда тут нужен, чуваг? И этот вопрос задай себе. ![]() 1. нативная реализация всегда быстрее jit компиляции? 2. оптимизации cl\lcc\gcc хуже делфи? 3. действительно считаешь говнокод который выкладывался в треде нормальным кодом? И тут начинает доходить, что независимо от ответов выставишь себя вниманиебл*ядью или нубом. ![]() Даже по клавишам стучать нужно обдумано. ![]() |
|
|
Создано: 11 апреля 2017 01:01 · Поправил: dosprog · Личное сообщение · #7 |
|
|
Создано: 11 апреля 2017 01:05 · Личное сообщение · #8 |
|
|
Создано: 11 апреля 2017 01:13 · Поправил: dosprog · Личное сообщение · #9 |
|
|
Создано: 11 апреля 2017 02:03 · Поправил: -=AkaBOSS=- · Личное сообщение · #10 FalseMaster пишет: Правильно ли я разумею, что если контрольная сумма "связанной" DLL'ки окажется обнулённой или неверной, то заполнение IAT будет втихаха произведено по стандартной схеме? Насколько я знаю, црц хидера на этот механизм не влияет. Проверка идёт по таймштампу компиляции. Про проверку целостности я упомянул чисто так, к слову. Имелось в виду что будет неприятно использовать подобные механизмы оптимизации, и нарваться на самописную/протекторную проверку целостности. Я видел случаи, когда авторы подобного западла не удосуживались дописывать вывод соответствующих сообщений, а просто устраивали различные ошибки в расчётах. FalseMaster пишет: разве что EditBin не сможет найти свободное место для размещения данных bound-импорта Ну если он не сможет, тогда уже и отдельную утилиту наваять можно. Кстати, CFF Explorer вроде как тоже умеет импорт связывать. Но я не уверен, что он делает это самостоятельно, а не посредством вышеупомянутого editbin ![]() |
|
|
Создано: 11 апреля 2017 03:53 · Личное сообщение · #11 FalseMaster >>Помнится, дохренища лет назад, когда ещё только начинал >>"познавать толк в извращениях", наткнулся на твой неистовый >>срач с ламерьём на тему дров на делфи Да уж.. Конечно, со временем пришло действительное "просветление", а собстно что в этом такого? так, дополнение, в отборную копилку, набора инструментальных средств.. Как по мне, главное чтоб это кайф доставляло (а то и адриналинчик), а не выходило в какуюто там рутину... shellstorm >>напишу скрипт делающий это же самое и который будет работать быстрее. очень интересно на чем напишете? Окей, вот для примера проджект. Автор сделал потрясающую работу по репроцессу 3д вершин, из за чего тачки в NFS5-Porche, не выглядят приплющеными на недобуке с разрешением 1024х600. Там представлен код на пилюсах и релиз бинарь, компиленый на VS2013... С дистрибутивом рантайма msvcr120.dll (который даже пришлось хачить чтоб стартанул на XP-SP2).. Однако вследствии конченой испоганености MS$ компилера, все это дико тормозило, на нетбуке с атом N435. Пришлось подключать похаченый в доль и поперек IntelC++ к дельфи (удалось отжать из него 3регистровую передачу параметров на fastcall)... Кстати, посмотрел, на нетбуке оказалась финальная реализация, с рипнутым выхопом intel C++ (c SSE оптимайзом) Вы осилите _это_ хотябы собрать? и сделать еще шустрее processVertices: shellstorm, или вы всеже твинки? ![]() |
|
|
Создано: 12 апреля 2017 07:53 · Личное сообщение · #12 FalseMaster >А вот о причине её привиредливости было бы неплохо узнать для общего развития. Выяснил два (пока что) условия, при которых EditBin не хочет биндить: 1) Обнулённое поле OriginalFirstThunk (адрес lookup table) в дескрипторе импорта. Но это и ежу понятно, просто я заторопился и не заметил поначалу. Насколько мне известно, дубликат IAT "забывают" создавать старые линкеры, как багландские так и мелкософтские. Кстати, очень подло ведёт себя системный загрузчик с драйвером без lookup table – в память пихает, а IAT не заполняет, сцуко. 2) Наличие цифровой подписи, точнее запись в соответствующей data directory. В общем, всё не так уж плохо, как минимум в половине случаев биндинг возможен. dosprog >подождём значит от тебя красивой реализации Вот так просто – подождём? dosprog, тут не все бессмертные ![]() -=AkaBOSS=- >…и нарваться на самописную/протекторную проверку целостности. Ага, теперь понятно. Но это редкость, один раз только с таким сталкивался. microxa >главное чтоб это кайф доставляло Вооот, в этом-то вся и соль. К сожалению большинство программерского люда наотрез отказывается понимать, что "академический" подход не всем удобен и, соответственно, недоставляющ. Мне, к примеру, жизненно необходим простор для байто**ства и высокая скорость компиляции, т.к. проект иногда пересобирается десятки раз в час, и не из-за какой-то там патологической склонности к синтаксическим ашыпкам (хотя куда ж без них), а просто потому, что в "прихожей" толкутся несколько вариантов и хоцца их поскорее опробовать, дабы выбрать наилучший (а когда он наконец выбран и находится на стадии доводки, из глубин сознания неожиданно всплывает новый концепт и всё начинается с начала ).
| Сообщение посчитали полезным: dosprog |
|
|
Создано: 12 апреля 2017 15:37 · Поправил: microxa · Личное сообщение · #13 FalseMaster По поводу проекта, некоторая критика, все-же не лишена оснований. Тут, можно разве что пожелать, практиковать парадигму нежели класс обьектниг c фичами ХЕ3 Полученый размер крут, но вот кодес скорей напоминает .NET&KOL передрать который на D7 (а семерочка этож форева, как и хп, ), хоть и представляется возможным.. но какбы.. не слишком того стоящим мероприятием (выпил класс функций из рекордов, переделка под стандартные модули и т.п.). Хотя в этой связи скорей припомнились грабли со снятием аспра с dll, но тогда всё решила волшебная программа от PE-Kill (сильно тогда офигел, от настолько чисто снятой гадской паковки) После чего уже избегал подобных схваток с PE бинарьем... хинты вроде тоже что и релоки? p.s shellstorm извиняюсь что влез в скандал, но цель была, всеголишь напомнить, что дельфе это всетаки asm.. а в руках программирующего ![]() |
|
|
Создано: 13 апреля 2017 10:28 · Личное сообщение · #14 |
|
|
Создано: 13 апреля 2017 12:01 · Поправил: dosprog · Личное сообщение · #15 ) Каникулы да Хинт это индекс имени импортируемой функции в таблице экспорта DLL, которая экспортирует эту функцию. Тогда, зная этот индекс, загрузчику "при динамическом связывании по именам" не нужно перебирать последовательно все имена функций,экспортируемых библиотекой, - он быстро находит имя нужного экспорта по этом индексу, сравнивает строку с именем запрашиваемой функции и, если они совпадают, то импорт найден. Если хинт ошибочный (для линковки с другой версией библиотеки), тогда имя запрашиваемой функции не совпадёт с нйденным в таблице экспорта DLL по индексу-хинту, и загрузчик станет перебирать все имена в экспорте DLL, пока не найдёт запрашиваемую строку-имя функции. Или пока не закончатся эти строки - тогда он выведет сообщение "..linked to missing service ИмяБиблиотеки.dll: ИмяФункции.." и программа не старует. ![]() |
|
|
Создано: 13 апреля 2017 22:27 · Поправил: FalseMaster · Личное сообщение · #16 microxa >некоторая критика, все-же не лишена оснований Дело в том, что утиль весьма примитивна и вдобавок, как выяснилось по ходу обсуждения, малополезна, чтобы говорить о каком бы то ни было её развитии/поддержке. К тому же, несмотря на нападки злопыхателей, никакого индуизЬма в сурсах нет, и dosprog, которому вынь да положь логирование в файл (на мой взгляд совершенно бессмысленное), ничтоже напрягшися перепилил на свой лад. >передрать который на D7 Передирать ничего не требуется, весь стафф для компиляции . >семерочка этож форева Очень не рекомендую пользоваться багландскими компилями до XE включительно. Выше ты кидал семплы с задействованием SSE. Так вот, при линковке объектника с проектом на делфях старые компили кладут болт на выравнивание сегментов, заданное при трансляции, и принудительно равняют на DWORD. К чему ведёт подсовывание SIMD инструкциями невыравненных адресов, думаю, напоминать не надо (да-да, к лишнему поводу обвинить "клятых паскальщиков" в говнокоденье). Алсо начиная с XE 8/10-байтные данные стали выравниваться правильно и появилась возможность задавать выравнивание структурам и внутри асм-блоков. Но с XE вышла крайне неприятная . Вот такие пироги. ![]() |
|
|
Создано: 14 апреля 2017 02:04 · Личное сообщение · #17 FalseMaster я толком не вьехал (и чота врядли хочу) что там с джампами было попутано, но "проблемы" невыравненых SSE, особо и небыло, а если и было- лехко можно в ручную решить, ну как пример for-переборщик волшебных значений в инструкции shufps, (можно пошаманить a1/a2) так что не надо ляля.. А вот после того как на D7 (простым жмаком энера в фаре -> dcc.exe) собрался вот этот вот шедевр сплоита(в очень хорошем смысле) по захвату удаленного управления рабочим столом win10 (хомки), c нетбука на хп... то теперь и вобще нафик чота другое вот это, даже не кулхак.. это нечто илитарное.. p.s благоговею пред автором кодеса, но чота не горю желанием знать шо там за фигня происходит, при помощи WriteProcessMemory в раковую slc.dll ![]() |
|
|
Создано: 14 апреля 2017 06:04 · Поправил: FalseMaster · Личное сообщение · #18 microxa >"проблемы" невыравненых SSE, особо и небыло >кулкаковый for-переборщик Ну вот, пожалуйста, о чём я и говорил (без подгонки посредством переменных-пустышек, т.к. в реальном проекте с сотнями 16-байтных переменных, раскиданных по юнитам, за**ёшься ляжкой дрыгать с такими финтами): ![]() А теперь меняем Code:
на Code:
и всё в ажуре: ![]() Только на старых делфях такой номер не прокатит и любой сишный компиль тебя уделает, да не просто уделает, а порвёт на мельчайшие кусочки, ибо MOVAPS в отличие от MOVUPS генерит исключение от корявых адресов. ![]() |
|
|
Создано: 14 апреля 2017 12:22 · Поправил: microxa · Личное сообщение · #19 ой ну прям пиcец с этим алигном: помню после распаковки delphi7.zip вдруг оказалось что там нету маленькой програмулины, с веселой такой трекерской музычкой. пришлось дорабатать, чтоб не парил меня этот регистри.асалям Code:
другой биг траблой, при локализациях форм, оказался не нужный ни разу вобще, кракозябровый utf8 в строках. тоже пришлось решить, чтоб в нормальном ascii win1251 оно было (как у D4, ага) Code:
так то ide мелкая, инсталла не просит. 64метра хватает на всё(с).. чтоб менять на какоето ояебушеще.. а тут да... на {$ALIGN 16} >>test.dpr(3) Error: Invalid compiler directive: 'ALIGN' ну шож, занесем в список тодо всех этих крякми ![]() |
|
|
Создано: 15 апреля 2017 11:32 · Поправил: FalseMaster · Личное сообщение · #20 >ой ну прям пиcец с этим алигном: >--> DELPHI+SSE - большая проблема <-- Да не, ну понятно, что эта недостающая фича легко обходится самостоятельным выделением памяти через VirtualAlloc (ни в коем случае не HeapAlloc'ом), но ведь как ни крути, это существенная прореха в функционале. >помню после распаковки delphi7.zip вдруг оказалось… А я уж и не помню. Так давно это было. >не нужный ни разу вобще, кракозябровый utf8 ![]() ![]() >так то ide мелкая, инсталла не просит. 64метра У меня она почему-то за сотню весит, но это с хелпом. >какоето ояебушеще.. Ну зря ты так. Всё чинно, благородно. ![]()
![]() |
|
|
Создано: 15 апреля 2017 12:29 · Поправил: microxa · Личное сообщение · #21 >>Да не, ну понятно, что эта недостающая фича легко обходится самостоятельным >>выделением памяти через VirtualAlloc (ни в коем случае не HeapAlloc'ом), >>но ведь как ни крути, это существенная прореха в функционале. ой мляяя... ну вот что ты опять гонишь а? и кому... В этой связи мне припоминается одно ресурсоемкое приложение FL-Studio, хаченое/паченое не то что вдоль и поперек. а даже пересобраное в exe, (по крайней мере 6-рка, нормально перегонялась в OBJ через dll2lib), и переделаные из dll в exe тоже.. (ну фан. всетоки лампочки светодиодики там, синтезаторы, крутилочки... циферки зеленые, бубны, ситары и таблами для медитаций). Да и в общем представляет собой шедевр коденый на дельфи.. (как техно-маг, черпаю вдохновение на новые техники, не ток в программайзе но и по электронным артефактам). И как то да, хучу в целях оптимайза и кастоминга, аццкий кусок функционалити редирекчу->GetMem на свою прикладуху с консольным writeln мониторингом (не хватило меня на цвета, да). И прикладуха то тормозит то валицо. как оказалось из за того что движок юзал FastMM... Ну и какие проблемы то? запилил на семерку, (getmem, перепилил от D2007 -ой чтоли, даже идут неспешные переработки и тесты, замены копирования через fpu/mmx/sse/sse2).. С этим просто отлично, поэтому про этот алигн чота даже не загонялся... тем более в старенький фрютилупс, вполне полным ходом шёл внедреж оптимайзеных фунок (замест fpu-шных) из новых жиртрестовых студий както так, да: ![]() зы какое то время, сидел на 'более-новом' dcc32 от d2007 (version 18.5), ну да, казалось вау фичи, перегрузка операторов, инлайны .. казалось то казалось, да только не слишком полезным оказалось... точней слишком бесполезным.. ![]() |
|
|
Создано: 16 апреля 2017 04:32 · Поправил: FalseMaster · Личное сообщение · #22 >getmem, перепилил от D2007 -ой чтоли, >С этим просто отлично, поэтому про этот алигн чота даже не загонялся… Так за тебя в Борланде "загнались" (строки из System.pas от Delphi 2006): Code:
Хотя конечно такой "загон" напоминает русскую рулетку. >както так, да: А если функа вызывается по условию и вершина стёка имеет зависимость от выполненного кода? Да что мы зациклились на выравнивании? Ведь помимо него появились и другие плюшки. Например юникодные строки теперь можно оформлять как обычные, а не в виде массива символов. Алиасы применимы не только для импортируемых из внешних либ апишек, но и для функций в подключаемых объектниках. Ешё говорят, что DCC подружился с COFF, правда я сам пока не пробовал, всё руки никак не дойдут. >какое то время, сидел на 'более-новом' dcc32 от d2007 (version 18.5) Я как раз эту версию эксплуатировал долгие годы… собственно на XE'шную-то не так давно переполз. Очень не хотелось расставаться, да и патчить заново жуть как ломало, но таки не устоял перед соблазном, о чём нисколько не жалею. ![]() |
|
|
Создано: 17 апреля 2017 01:36 · Поправил: dosprog · Личное сообщение · #23 |
|
|
Создано: 17 апреля 2017 20:00 · Личное сообщение · #24 |
|
|
Создано: 17 апреля 2017 22:51 · Поправил: dosprog · Личное сообщение · #25 |
|
|
Создано: 19 апреля 2017 17:55 · Поправил: FalseMaster · Личное сообщение · #26 |
|
|
Создано: 22 апреля 2017 15:47 · Личное сообщение · #27 |
|
|
Создано: 22 апреля 2017 16:43 · Поправил: dosprog · Личное сообщение · #28 |
|
|
Создано: 22 апреля 2017 16:47 · Личное сообщение · #29 |
|
|
Создано: 22 апреля 2017 17:21 · Личное сообщение · #30 |
|
|
Создано: 22 апреля 2017 17:27 · Личное сообщение · #31 |
| << . 1 . 2 . 3 . 4 . 5 . 6 . >> |
| eXeL@B —› Софт, инструменты —› Восстановление hints после распаковки |
















Для печати