Реверсинг. Задай вопрос - получи ответ

Discussion in 'Реверсинг' started by 0x0c0de, 2 Sep 2007.

  1. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,061
    Likes Received:
    7,893
    Reputations:
    24
    * Может указатели дублируются т.к. протектор не хавает указатели из оригинала и добавляет свои в таблицу импорта ?

    * А почему импорт не чинится так как есть ? ImpRec ошибку выдает какую-то или что ? (не могу проверить, нет под рукой рабочего маздая).
    Можно попробовать самому руками починить. Насчет готовой тулзы х/з. Это надо на кряклабе бы спросить. У них там вроде серьезные траблы с оригиналом - но некоторые вроде-как поселились по этому адресу: (https://cracklab.team/index.php)
     
    1. mirvirusov

      mirvirusov New Member

      Joined:
      11 Jun 2021
      Messages:
      29
      Likes Received:
      3
      Reputations:
      0
      Протектор нормально хавает все адреса, он всю таблицу импорта поочередно для каждой функции заполняет и делает передресацию на свою таблицу - правильную, а там где должны быть адреса функций лежат указатели на переадресованые элементы в секцию созданную протектором, я нахожу переход где определяется оставлять ли функцию как есть или же переадресовывать, забиваю его нопами и в итоге все адреса в нормальном виде все на своем месте, и после запуска программы она нормально работает с этой таблицей, но когда снимается дамп, то обнаруживается, что в IAT дублируются адреса, в памяти оно нормально все работет, но вот когда восстанавливается таблица для дампа то возникает вопрос, куда пихать вторые элементы, я вроде знаю как работает загрузка функций по IT и IAT и там не должно быть повторяющихся имен, нельзя загрузить одну и ту же библиотеку 2 раза, с функциями думаю можно, но компиляторы так не делают, в стандартной реализации в IT на каждую библиотеку каждая функция имеет только одну ячейку.
       
      1. DartPhoenix

        DartPhoenix Elder - Старейшина

        Joined:
        15 Sep 2013
        Messages:
        1,061
        Likes Received:
        7,893
        Reputations:
        24
        На словах честно говоря я плохо себе картину представляю... а просить файлик смысла нет, мне посмотреть нечем.
        Но лучше, его-бы выложить наверное.
         
        1. #colorblind

          #colorblind Moderator

          Joined:
          31 Jan 2014
          Messages:
          631
          Likes Received:
          249
          Reputations:
          42
          По поведению похоже на обсидиум. Но как говорится нет тела - нет дела
           
          1. mirvirusov

            mirvirusov New Member

            Joined:
            11 Jun 2021
            Messages:
            29
            Likes Received:
            3
            Reputations:
            0
            [​IMG]
            Что нужно писать в окошке подчеркнутом зеленой линией, что бы логгировать сразу 2 значения, одно это адрес возврата, другое это ссылка на строку в параметре функции. Если убрать ESP вначале, то просто отдельно строку в лог пишет, и второй вопрос, как получить доступ к счетчику срабатываний остановок, залоггировать это значение и потом получить доступ к нему для установления условия остановки, какая переменная использутся для счетчика ?
            http://radikal.ru][​IMG]
             
            1. DartPhoenix

              DartPhoenix Elder - Старейшина

              Joined:
              15 Sep 2013
              Messages:
              1,061
              Likes Received:
              7,893
              Reputations:
              24
              Чем тебе поможет условная бряка лучше скажи...
              Не зарывайся в эту хрень. Если в самом деле это Обсидиум - он не совсем для новичков, но тогда надо искать паттерны как он ломится гуглить стандартные вызовы.
              Тоесть полюбому там какой-то rep должен быть.

              В любом случае твой лог тебе выдаст кучу непонятных данных.
              Для начала скажи, почему это ты решил что в импортах не может быть дублей ? Там может быть что угодно вообще говоря. Почему не дубли ?
               
              1. mirvirusov

                mirvirusov New Member

                Joined:
                11 Jun 2021
                Messages:
                29
                Likes Received:
                3
                Reputations:
                0
                В протекторе нет исключений, что бы подобраться максимально близко к OEP я подбираюсь к ней используя бряк на GetProcAddress которую используют все упаковщики, что бы заполнить таблицу импорта, смотрю по адресу возврата когда последний раз эта функция вызывалась из секции протектора и смотрю какую функцию она подгружала, после этого ставлю условие остановки что бы бряк сработал на загрузке именно последней функции и при выходе мы имеем почти заполненую таблицу импорта за исключением последнего элемента и перед нами где то впереди переход либо на OEP либо на украденые байты. Это все нужно, когда нет других методов подобраться к точке входа максимально близко, а трассировать вручную тонны асмокода это само#бство. Вот зачем я использую логирование, но до этого я логировал по отдельности адреса возврата и считал, какой пункт по счету мне нужен, потом логировал отдельно имена функций из параметра и смотрел уже по индексу какая мне подходит, вот что бы эту двофную работу не делать, мне нужно в лог писать сразу 2 значения - адрес возврата + Имя Функции
                 
                1. DartPhoenix

                  DartPhoenix Elder - Старейшина

                  Joined:
                  15 Sep 2013
                  Messages:
                  1,061
                  Likes Received:
                  7,893
                  Reputations:
                  24
                  OEP - есть у самых банальных и тупых протекторов. Что может быть проще. Найти оеп, скинуть дамп, пофиксить импорты - и поехали.
                  Но у тебя, как ты видишь, что-то уже нестандартное.

                  И реально никак нельзя сказать что, если не посмотреть на сам PE-шник. Пусть я не могу (хотя ида у меня есть в принципе... :) ). Но
                  если ты хочешь получить ответ на свой вопрос - нужен поциент. Описанием не отмажешься. ИМХО конечно же.
                   
                  1. DartPhoenix

                    DartPhoenix Elder - Старейшина

                    Joined:
                    15 Sep 2013
                    Messages:
                    1,061
                    Likes Received:
                    7,893
                    Reputations:
                    24
                    Ну вот самое простое. Что значит импортов не может быть несколько ?
                    Это в таблице имен или в таблице адресов не может быть несколько ?

                    В таблице имен - сколько угодно вроде... Да и в таблице адресов.
                    Ну тоесть... надо бы желательно это увидеть. Я х/з что ты имеешь ввиду что не может быть.
                    Спецификация позволяет, лодырь грузит....
                     
                    1. mirvirusov

                      mirvirusov New Member

                      Joined:
                      11 Jun 2021
                      Messages:
                      29
                      Likes Received:
                      3
                      Reputations:
                      0
                      Я скину сюда чуть позже файлик с такой же проблемой накрытый FSG 1.3 там точно такое же дубли появляются, а по поводу условий ответите ? Как записать в лог сразу 2 значения в одну строку ? Например [esp] и STRING [[esp+4]]
                      что бы выдало мне примерно такой лог - 00475674 MessageBoxA
                       
                      DartPhoenix likes this.
                      1. DartPhoenix

                        DartPhoenix Elder - Старейшина

                        Joined:
                        15 Sep 2013
                        Messages:
                        1,061
                        Likes Received:
                        7,893
                        Reputations:
                        24
                        Не. Я одно время юзал е109 кажется... для разбора файликов - потом вручную разбирал. Не могу так сказать...
                        Но я и не профессиональный крякер. На кряклабе я могу только порекомендовать спросить. Эти перцы живут кряком. Они по внешнему виду определят что это, если оно стандартное.
                         
                        1. mirvirusov

                          mirvirusov New Member

                          Joined:
                          11 Jun 2021
                          Messages:
                          29
                          Likes Received:
                          3
                          Reputations:
                          0
                          Я говорю о таблице символов, ладно еще если человек пишет малварь и может вручную специально накидать всякого говна в таблицу что бы запутать реверсера когда это все дело пишется а ассемблере, но в нормальной программе обычно все собирается обычным компилятором, касательно языков высокого уровня, никакой нормальный компилятор не станет 2 раза упоминать символьное название функции.я к тому что пакер накрывает нормальную программу, и по идее при реконструкции импорта не должно быть повторов
                           
                          1. DartPhoenix

                            DartPhoenix Elder - Старейшина

                            Joined:
                            15 Sep 2013
                            Messages:
                            1,061
                            Likes Received:
                            7,893
                            Reputations:
                            24
                            Ну так можно предположить что это не компилятор.
                            Или ты забыл флаги. Может это форвардинг. Тоесть указывается что данная функция импортируется и экспортируется одновременно. Тогда такое может быть.
                            Может быть такое что эти импорты вообще декодируют код ! Как править код ? Пусть его правит лодырь ! Ты кидаешь ему оффсет на ноп,джампхуйзнаеткуда,ксор_rax-dword_pointer_жопа мира - а он превращает это в pop ebp, add eax,4 jmp LoadLibrary (условно).

                            И это делалось с древних времен пока новые ВайтиВАйти не завалили на сцену.
                            ======================
                            Если оно выглядит как код на c++, пахнет как код на c++, и по цвету похоже - это не обязательно оно и есть :)
                             
                            1. mirvirusov

                              mirvirusov New Member

                              Joined:
                              11 Jun 2021
                              Messages:
                              29
                              Likes Received:
                              3
                              Reputations:
                              0
                              Почему же у самых банальных, та же фемида и вмпрот со всеми своими виртуальными машинами "виртуализируют" только точку входа помоему до первого call, по сути те же украденые байты, вся эта VM это не более чем морфленые инструкции с оригинальной точки входа вперемешку с мусором. После отработки которых передается управление дальше на код оригинальной программы. Тут два пути, либо просто прицепить полностью секцию с VM к файлу и передавать управление на нее, а после ее отработки делать джамп на продолжение оригинального кода, либо сидеть копать ВМ и отделять мусор от реально нужного кода, а потом подбирать инструкции, которые будут делать то же самое, только что бы они нормально улеглись в место откуда их украли. К чему это я, а к тому, что и в сложных и простых пакерах существует и понятие OEP и фальшивая EP, только реализация разная, где-то это просто тупо скопированный код в другое место, а где то "VM"
                               
                              1. DartPhoenix

                                DartPhoenix Elder - Старейшина

                                Joined:
                                15 Sep 2013
                                Messages:
                                1,061
                                Likes Received:
                                7,893
                                Reputations:
                                24
                                Слова банальных и фемида - плохо сочетаются.

                                Фемида, при правильном подходе, может виртуализовать твои функции.
                                =======================
                                И вот в данном случае - тот вызов что кажется тебе двойным - на самом деле может служить делу расшифровки ключа, получения заранее предсказанного значения. И хрен его знает чего еще.
                                Тут проблема кстати больше не у дешифровщика а у шифровщика. Как говорицо попробуй написать криптор который ты сочтешь вершиной мастерства.

                                Написать то, что сам не сможешь сломать.
                                 
                                1. mirvirusov

                                  mirvirusov New Member

                                  Joined:
                                  11 Jun 2021
                                  Messages:
                                  29
                                  Likes Received:
                                  3
                                  Reputations:
                                  0
                                  Я не фемиду банальной назвал, имел ввиду что не только к простеньким протам применяется понятие OEP
                                   
                                  1. DartPhoenix

                                    DartPhoenix Elder - Старейшина

                                    Joined:
                                    15 Sep 2013
                                    Messages:
                                    1,061
                                    Likes Received:
                                    7,893
                                    Reputations:
                                    24
                                    Ну да. А у тебя похоже не простенький прот. Поэтому просто так на словах... не думаю что кто-то даст тебе более или менее полезный ответ.
                                     
                                    1. mirvirusov

                                      mirvirusov New Member

                                      Joined:
                                      11 Jun 2021
                                      Messages:
                                      29
                                      Likes Received:
                                      3
                                      Reputations:
                                      0
                                      Вопрос решен, протектор записывал либо ложную, либо свою таблицу импорта вплотную к нормальной таблице, от этого казалось что все это одна таблица, так как выглядела она в принципе нормально и логично, а при попытке почининить в реконструкторе он видимо чужую таблицу импорта еще приделывать пытался, нашел начало оригинальной и дело в шляпе, плюс реконструктор некоторые функции неправильно распознал, после перепроверки вызовов вручную и правки все заработало.
                                       
                                      DartPhoenix likes this.
                                      1. mirvirusov

                                        mirvirusov New Member

                                        Joined:
                                        11 Jun 2021
                                        Messages:
                                        29
                                        Likes Received:
                                        3
                                        Reputations:
                                        0
                                        Вопрос о поводу того как мне вывести в лог сразу 2 разных выражения остается открытым
                                        Что писать в expression, что бы при CondLogBp на функцию GetProcAddress вывести [esp] и STRING [[esp+4]] => адрес возврата из функции и текстовый параметр передаваемый функции
                                        Что бы получить в логах отчет вида
                                        0044570 GetVersion
                                        0044860 GetModuleHandleA
                                        ...
                                        0047340 LoadLibraryA
                                        http://radikal.ru][​IMG]
                                         
                                        1. DartPhoenix

                                          DartPhoenix Elder - Старейшина

                                          Joined:
                                          15 Sep 2013
                                          Messages:
                                          1,061
                                          Likes Received:
                                          7,893
                                          Reputations:
                                          24
                                          Странное у тебя окно... Насколько я помню - там было одно поле Expression и там можно было писать name=expr, name=expr...
                                          Посмотри, может в настройках где это есть. Нет - можно и скриптом сделать, но вообще должно где-то быть.

                                          UPD: По идее это было где-то в старой версии Ольги, когда можно было только одно выражение получать но им вообще не особо пользовались. Был всегда OllyScript и там все гораздо веселее.

                                          Можно погуглить, где-то должны быть скрипты для этих задач.
                                          Что-то типа такого: http://www.openrce.org/blog/view/261/conditional_logging_of_multiple_expressions_in_ollydbg
                                           
                                          #1260 DartPhoenix, 13 Jun 2021
                                          Last edited: 13 Jun 2021