Чем можно аккуратно "разобрать" PE файл, и чем его "собрать"

Тема в разделе "WASM.BEGINNERS", создана пользователем teacher10, 3 июл 2006.

Статус темы:
Закрыта.
  1. teacher10

    teacher10 New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    8
    Дано: DLL файл из состава Microsoft Visual Studio 2005 Express.
    PeID 0.94 определяет его как PE Win32 DLL (0 EntryPoint) в режиме Normal Scan.
    В режиме External Scan выдаёт UPolyX v0.5 *.
    Вообще-то библиотека создана при помощи C++ (на 100% не уверен).
    Microsoft Visual Studio 2005 Express имеется.
    Вопрос новичка, не знакомого совершенно с C++. Чем его(её) можно аккуратно "разобрать", и чем "собрать" в исходное состояние?
    "Хакать" библиотеку не нужно. Хочу всего-лишь перевести текстовые ресурсы на русский язык.
    Заранее спасибо за помощь.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Редакторы ресурсов в помощь.
     
  3. teacher10

    teacher10 New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    8
    Редакторы ресурсов не берут, текстовые строки "зашиты" в код. При попытке редактирования Hex-редактором вместо русских букв отображаются либо прямоугольнички (мало случаев), либо вообще ничего не отображается (большинство случаев).
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ссылка на dll?
     
  5. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    А в какой кодировке русский прописываешь?
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Возможно, прога задаёт кодировку при создании шрифтов, что исключает возможность правильного отображения кириллицы. Поищите в ней такие функции как CreateFont, CreateFontIndirect.
     
  7. teacher10

    teacher10 New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    8
    Всем спасибо, но мне надо знать, каким штатным дизассемблером (декомпилятором) можно "разобрать" DLL, и каким штатным ассемблером (компилятором) можно её собрать обратно. Штатный - это значит из состава пакета Microsoft Visual С++. Желательно в подробностях.
    Два примера подобных DLL, если у Вас есть Microsoft Visual Studio 2005 Express.
    C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\1033\vsmsoui.dll
    и
    C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Windows.Forms\c440ef992d24e947937ec66a72504f5d\System.Windows.Forms.ni.dll - сборка Native, с ней вообще проблем в два раза больше, т.к. не знаю, чем к ней подступиться

    Кодировка русского ASCII.
     
  8. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    Первую из dll-ек я посмотрел, кода в ней нет вообще. Поэтому заявление, что все строки зашиты в код, действительности не соответствует. Все строки находятся в самых распронаиобычнейших ресурсах Эта dll-ка, собственно говоря, из одних ресурсов - то и состоит. Отсюда мораль - можно и нужно использовать только редакторы ресурсов, как и было сказано выше IceStudent'ом. В данном конкретном случае использование других инструментов не требуется.
    Странно, что редакторы ресурсов "не берут", у меня старый добрый ResourceHacker "взял" эту dll-ку моментально и без каких-либо проблем.

    Если же в программе, которая использует эту dll-ку, что-то получается не так, так это уже проблема не dll-ки, а вызывающей программы.

    Ну, и в связи с вопросом о кодировке. Насколько мне помнится, строки в ресурсах хранятся всё же не в "русском ASCII", а в Unicode, разве не так? Так что, возможно, проблема всё же в кодировках, а?

    Ну, а если и "игра" с кодировками не поможет, то, возможно, имеет смысл поиграться с настройками вызывающей программы.

    Со второй dll-кой сложнее. У неё нет никаких unmanaged ресурсов, кроме версии. Managed ресурсов в обычном их понимании у неё тоже нет, так что здесь редакторы ресурсов не помогут. Тем не менее, и в этом случае говорить о том, что строки "зашиты" в код, нельзя. Они находятся в т.н. сегменте "#Strings" или "#UserStrings" (пока не смог проверить). Но редактирование ЭТИХ сегментов - задача далеко не тривиальная, так как они связаны с кодом, точнее, из кода к ним идут обращения по по т.н. токенам, которые в данном случае можно рассматривать как аналог абсолютного смещения.

    Тем не менее, я хотел бы поблагодарить за ссылку на вторую dll-ку. Кое-что новое я для себя в ней почерпнул.

    С уважением.
     
  9. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    Дополню, что вторая dll-ка - это многомодульная сборка. Такие встречаются достаточно редко, так как из MS VS их собрать нельзя, они собираются только из командной строки. Однако, всё, сказанное выше, остаётся в силе.

    С уважением.
     
  10. teacher10

    teacher10 New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    8
    Для OldDino:
    Спасибо за ответ. Первую DLL я уже перевёл при помощи Resource Hacker. Им я и пользуюсь почти всегда. Но в ней кроме обычных ресурсов есть ещё и ресурсы, которые видно только при помощи HEX-редактора. Это я так поначалу определяюсь, следует ли переводить строки. Вот эта то часть ресурсов мне не доступна.
    Как я поступил:
    При помощи dumpbin.exe из состава С++ я сохранил на диск бинарный дамп, перевёл в нём при помощи OgreGUI одну строку - для пробы. А дальше не знаю что делать. Чем мне собрать бинарный дамп обратно в DLL и проверить её на работоспособность?
    Вот пока в чём загвоздка. Или я пошёл не тем путём?
    Если я разберусь с первой DLL, то с нативной сборкой тоже, бог даст, разберусь.
    Какие инструменты - штатные С++ или не штатные мне использовать, чтобы собрать DLL?
    Я тоже к Вам с уважением.
     
  11. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    Меня заинтересовала фраза "в ней кроме обычных ресурсов есть ещё и ресурсы, которые видно только при помощи HEX-редактора". О чём идёт речь? Я ничего, кроме совершенно обычных ресурсов, не увидел. Другое дело, что там есть НЕСТАНДАРТНЫЕ ресурсы (не меню, не диалоговые окна и т.д.), но они к строковым ресурсам не имеют НИКАКОГО отношения. По какому смещению относительно начала файла находятся те ресурсы, "которые видно только при помощи HEX-редактора"? Если мне станет известно смещение, я скажу, что это такое.

    Может, я чего-то не понимаю, но я редактировал строки именно ВНУТРИ ResourceHacker'а. В правой части окна перевёл строку, потом нажал "CompileScript", потом "сказал" "Save" - и всё Ок. Не вижу никаких проблем. И зачем использовать dumpbin?

    Со второй dll-кой, как я уже сказал, гораздо сложнее. Во-первых, она всё же managed, а не native, как ни странно это звучит. Соответственно, и ресурсы у неё тоже managed. А это - особая песня, их формат АБСОЛЮТНО НЕ ПОХОЖ на формат managed ресурсов. Кроме того, известный мне редактор managed ресурсов рассчитан только на одномодульные сборки, поэтому проблема остаётся, к сожалению, нерешённой.
    С другой стороны, формат managed ресурсов хорошо известен, следовательно, можно накропать простой редактор самостоятельно. Но это уже, разумеется, тема для другого разговора.

    С уважением.
     
  12. teacher10

    teacher10 New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    8
    Для OldDino:
    В vsmsoui.dll содержится фраза "&Rearrange Commands...". Она отображается на кнопке в панели "Customize" меню Tools - Customize. Если это нестандартный ресурс, то чем его "брать"?
    В WinHex Offset 00487744 - decimal (00077140 - hexadecimal).
     
  13. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    Посмотрел. Увидел. Что сказать? Н-да... Скажем так, тяжело. Ресурс- совершенно обычный, но нестандартного типа.
    Вкратце - есть возможность вставлять в ресурсы какие-то данные, не являющиеся стандартными (не меню, не диалог и т.д.). О формате этих ресурсов Windows, естественно, ничего не знает, их формат "понимает" только та программа, которая с ними работает. Следовательно, и изменять их можно только с учётом требований, предъявляемых этой программой. Разумеется, ни ResourceHacker, ни какая-либо другая программа не могут ничего знать об этих требованиях. Поэтому, разумеется, они и отказываются редактировать подобные ресурсы. Это и есть тот самый случай.
    Кстати, ResourceHacker "берёт" этот ресурс (тип ресурса 221, идентификатор - 12). Смещение строки - 3d960. Но по причинам, изложенным выше, редактировать его не позволяет. Редактировать подобные ресурсы можно только на свой страх и риск.

    С уважением.
     
  14. teacher10

    teacher10 New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    8
    Так вот я и начал "извращаться" - делать дамп. Всё таки, можно ли эту библиотеку декомпилировать (дизассемблировать), а затем скомпилировать (или там ассемблером "собрать", что ли, как правильно выразиться?)?
     
  15. teacher10

    teacher10 New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    8
    Для OldDino:
    Мне накладно находиться в он-лайн на форуме. Если что-то у Вас есть, напишите:
    teacher10 Собака front.ru
    И я Вам тоже напишу, если укажете свою электропочту.
    С уважением.
     
  16. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    Я, наверное, непонятно объяснил. Формат ресурсов определяется именно логикой работы программы. Следовательно, дизассемблировав программу, можно выяснить логику её работы и определить формат её ресурсов. После этого останется только заново ассемблировать дизассемблированный листинг (кстати, далеко не всегда дизассемблированный листинг компилируется без ошибок), подготовить двоичный файл, содержащий эти самые ресурсы, и прилинковать его к сборке. То есть никаких проблем вроде бы нет. Но, как говорится, гладко было на бумаге, да забыли про овраги. В связи с этим у меня есть рад вопросов.
    1. Какая программа использует эти ресурсы?
    2. Сколько времени займёт разбор логики того участка, который отвечает за работу с этими ресурсами?
    3. Есть ли уверенность в том, что изменение, произведённое в дизассемблированном модуле, не приведёт к неработоспособности программы?

    Я, наверное, не стал бы делать такие вещи. Но это только моё личное мнение, не более.

    С уважением.
     
  17. teacher10

    teacher10 New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    8
    Господин администратор!
    Закройте, пожалуйста, тему.
    teacher10
     
Статус темы:
Закрыта.