1. Куча / Говнокод #25125

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    Как перенести секцию ресурсов из одного филе в другое? Не корысти ради. Я - преемник робин-гуда.
    Я не вор - я всего лишь нищий аристократ.
    
    Ну да-да, заебали, вирь пишу.

    Примерчик на пасцале, плз. Других языков я уже не знаю.

    Запостил: Goh, 28 Ноября 2018

    Комментарии (33) RSS

    • Не пизди, ты знаешь "PHP".
      Ответить
      • Верно, я в совершенстве знаю PHP. А так как большинство местных жигол чревовещает на моём сайте, я знаю ещё и Ваши IP.
        Ответить
    • Возможно, в какой-нибудь библиотеке есть функция для этого. Но мы ведь пишем вирус, поэтому не должны импортировать ничего лишнего, так? Значит, будем читать своими силами.

      Ресурсы — это всего лишь одна из секций PE-файла (типа как .text, .data, .bss). Чтобы её было проще искать, не сканируя подряд все секции, на неё указывает поле Resource Table заголовка:
      https://docs.microsoft.com/en-us/windows/desktop/debug/pe-format#optional-header-image-only
      Обычно эта секция называется .rsrc, но в реальности она может быть подписана любым именем (хоть GGURDA).

      По нелепой случайности строчка с текстовым описанием назначения экзешника может присутствовать не только в ресурсах, но ещё и в отдельной секции. В новой документации это поле заголовка обозначено как Architecture (Reserved, must be 0).

      Ещё нужно обратить внимание на поле CheckSum: либо выставлять его в ноль (это значит, что контрольная сумма экзешника не посчитана), либо честно считать её. Описание этого поля: «The image file checksum. The algorithm for computing the checksum is incorporated into IMAGHELP.DLL. The following are checked for validation at load time: all drivers, any DLL loaded at boot time, and any DLL that is loaded into a critical Windows process».
      Ответить
      • > секций
        Имхо, правильней через data directory искать.
        Ответить
        • Resource Table –— это одно из полей Optional Header Data Directories.
          Ответить
          • А, невнимательно читал твой коммент. Думал ты предлагаешь секцию по имени искать.
            Ответить
        • Офтопик.

          The COFF file header stores the date and time that the object file was created as a 32-bit binary integer, representing the number of seconds since the epoch, 1 January 1970 00:00:00 UTC. Dates occurring after 19 January 2038 cannot be stored in this format.

          Через двадцать лет вендекапец.
          Ответить
      • Секцию найти не проблема... Как выдрать ее и поместить в другой файл, не запоров других заголовков? На ум приходит только буфероблядство, и то я не знаю, сколько байт читать.
        Ответить
        • Позвать линкер.
          Ответить
          • Это долго.
            Ответить
            • Эй, линкер!
              Иду-иду...
                        _____
                       / -,- \
                       \_---_/
                 ___---``   ``---__
                /     ___----___   \
               / /|  |  LINKER  | | \
              / / |   ```----```  |\ \
              |||  \_           _/ |||
                     \   ||   /
                     _|  ||  |_
                    /____||____\
              Ответить
        • > сколько байт читать
          typedef struct _IMAGE_DATA_DIRECTORY {
              DWORD   VirtualAddress;
              DWORD   Size;    // <================3
          } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
          Ответить
          • Хуй указующий.
            Ответить
          • Там нужно править VirtualSize и OffsettoData, я хз как это делается.
            Но узнаю рано или поздно. Я терпеливый.
            Ответить
            • В смысле «как это делается»?
              SomeDataDirectory->Size = 12345;
              Ответить
        • Короче, Склихософский: куришь https://docs.microsoft.com/en-us/windows/desktop/debug/pe-format#the-rsrc-section до тех пор, пока это дерево не будет тебе по ночам сниться. Потом читаешь размер секции ресурсов и выделяешь у себя буфер. А потом — просто аккуратно копируешь всё дерево ресурсов, попутно исправляя все RVA. Вуаля!
          Ответить
          • RVA всех объектов приходится исправлять при любой манипуляции с экзешником.
            Ответить
          • На паскаль переведите, плз.
            Ответить
            • Если там есть примеры на сишке, заменяешь = на :=, == на =, фигурные скобки на begin и end, меняешь местами идентификатор переменной и типа. Дальше сам догадаешься.
              Ответить
              • > заменяешь...
                Переведи на регулярки.
                Ответить
                • Консольни гуйца, Борманд...
                  Гости развели тут анальный балаган, но ты конечно к этому не имеешь отношения.
                  Ответить
                  • Возможно, это Стертор заразился ворециями и написал balagan.exe.
                    Ответить
                    • Возможно что Стертор заразился от ослика венерической болезньбю
                      Ответить
    • Хотя с другой стороны, я даже рад, что никто не помог. Ведь тогда это будет уже не мой вирус, а это больной удар по самолюбию.
      Ответить

    Добавить комментарий