Извлечение массива. Требуется помощь и советы.

Тема в разделе "WASM.BEGINNERS", создана пользователем uinor, 14 сен 2009.

  1. vsnaum

    vsnaum New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2009
    Сообщения:
    22
    leo, мне тоже нравится этот подход. Он минимизирует фальш-срабатывания простого binary search'a подкрепляя его небольшим анализом. Спасибо за пояснение про поиск переходника, я на самом деле думал что реализуемо несколько иначе (кстати, чтоб избежать фальш-срабатывание на этом моменте, можно проверить есть ли рядом хотя бы еще один переходник).

    Благодарю, берусь за работу. Если будут еще мысли / предложения - с радостью приму помощь.
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    vsnaum
    Эм... а не намекнёте, что это за специализация, где люди не знают, что такое binary search? :) А то как-то совсем не укладывается, где его тут применить можно. :)
    Вообще, судя по Вашим разъяснениям, там может быть вместо того же E8 не только абсолютный косвенный вызов, но и push+ret, и просто jmp, и цепочки переходов с мусорными командами. И мало того... потом ещё после нахождения этого пресловутого вызова, ищи-свищи, где там до этого вызова параметры зарыты непонятно какими инструкциями (от обыкновенных push до mov [reg32+offset], imm32, где reg32 - совсем не обязательно esp или ebp).
    Да и может вообще в коде вызовов именно этой функций именно с такими параметрами не один и не два. А выбирается вызов в зависимости от фазы луны. При таком раскладе, где никак не понятно, что будет постоянным, а что может меняться, Вам никакие дизассемблеры и никакие полные эмуляторы с претензиями называться ИИ не помогут.
    Так что просто возьмите все свои myApp0 до myApp150000 и посмотрите, что там постоянно. ИМХО пост 20 - простое решение (ну может кроме E8 ещё FF 15 искать) с максимальным выходом (ну а я собсно в посте 8 что предлагал? O_O).
     
  3. vsnaum

    vsnaum New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2009
    Сообщения:
    22
    l_inc, вы предложили в #8 абсолютно адекватный подход, который устаканился в течение ветки. Я не отрицаю вашей заслуги и благодарен за укрепление. Под binary search не имелся в виду известный алгоритм, приношу свои извинения за путаницу из-за написания на иностранном, имелся в виду просто сквозной поиск в binary без какого-либо парсинга и т.д.

    Никаких преград не будет. Я вроде уже писал, что подпрограмма-обертка тоже кодогенерируема и все зависит исключительно от компилятора (stack frames & etc). В коде только один вызов регистратора (myFunc из myLibrary). Я старался максимально фиксировать известные / неизвестные факты, все что осталось за рамками моего описания - априори известно мне (вероятно сказалась ветка "beginners", но это было правильное размещение, имхо, всем спасибо).

    У меня нет на руках myAppK :) Я скомпилил парочку (mingw, msvs), мне хватило.

    Никакого ИИ, лишь подкрепление неуверенности после поиска простейшими правилами.
     
  4. vsnaum

    vsnaum New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2009
    Сообщения:
    22
    Мне бы все-таки хотелось услышать еще мнение Clerk'а до конца, это тоже одна из авторитетных для меня позиций. Мне его стиль чем-то напоминает ntldr'a с кряклаба. Поэтому стараюсь держаться "рядом".
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    vsnaum
    Ну вот и меня похвалили. :) Напросился. :)
     
  6. vsnaum

    vsnaum New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2009
    Сообщения:
    22
    l_inc, давайте без иронии, я на самом деле благодарен всем.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    vsnaum
    А если статического импорта не будет, а экспорт динамически будет определён, тогда и процедурное ветвление на процедуру найдено не будет. На мой взгляд искать это плохой способ.
    Полноценный дизассемблер не нужен, достаточно дизассемблера длин, дабы пройтись по инструкциям. Используйте этот http://www.eof-project.net/sources/Malum/VirXasm32_v1.5adv/
    Не может быть, базовые поправки обязательны, иначе модуль загружен не будет, если память занята. В таком случае модуль должен быть написан в пикоде, где нет статического импорта.
     
  8. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    Массив вообще-то находится в exe, а не в dll. Поэтому через релоки (которых действительно нет) этот массив не найти. По указанным данным dll только экспортирует функцию, которая принимает от основного модуля (exe) указатель на массив.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    l_inc
    Я думал что он в длл. В таком случае IAT придётся разбирать как сказали.
     
  10. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Для чего хватило? Чтобы искать кошку в комнате, где ее нет. Алгоритм поиска call сильно зависит от компилятора, а их много...
    Не мучьте людей, соглашайтесь на вариант с olly, который я описал на краклабе:
    1) Ищем call вашей функции - это пункт в контекстном меню.
    2) Перескакиваем на call и поднимаемся к адресу массива
    3) Прыгаем прямо на массив, копипастим.
    ВСЕ. Думаю найдется добрый человек, который для реального, а не гипотетического myAppK напишет скрипт(ы). И глупый вопрос : если вы не имеете реального приложения, откуда уверенность, что массив статический ?
     
  11. uinor

    uinor New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2009
    Сообщения:
    14
    Черт побери.

    Clerk, массив в EXE. Буду разбирать IAT.

    valterg, повторюсь еще разок. Вытащить единоразово - я могу без проблем, первый пост собственно и появился только потому что все понятно и ясно в этом плане. Уверенность что массив статический потому что я уже говорил про его кодогенеративную сущность и, более того, с первого топа выложил фрагмент кода из автоматом сгенеренного модуля.
     
  12. uinor

    uinor New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2009
    Сообщения:
    14
    Новости с фронта

    Решение почти готово, лог обработки выкладываю (код пока грязноват, стыдно, но в конце решения задачи я его опубликую, может кому поможет [реализовано на delphi, чтоб побыстрее]).
    Код (Text):
    1. ...
    2. Name RVA = 0291D754, Library Name = myLibrary.dll
    3.   Function = Func1, Hint = 0000000B, RVA = 0291B514
    4.   Function = myFunc, Hint = 00000034, RVA = 0291B518
    5. [!] Founded myFunc @ [0041B518]
    6. Section Name = .text, Section VA = 00001000, Section Size = 00012C00
    7. [!] Jumper founded @ [00404C58]
    8. [!] JumperCall founded @ [0040424D]
    9. [!] SubRange [00404228 - 00404258]
    10. [C] 00404228: 55
    11. [C] 00404229: 89E5
    12. [C] 0040422B: 83EC18
    13. [C] 0040422E: C744240C80464100
    14. [C] 00404236: C7442408A0464100
    15. [C] 0040423E: C7442404E0464100
    16. [C] 00404246: C7042401000000
    17. [C] 0040424D: E8060A0000
    18. [C] 00404252: B801000000
    19. [C] 00404257: C9
    20. [C] 00404258: C3
    21. Section Name = .data, Section VA = 00014000, Section Size = 00001200
    22. Section Name = .bss, Section VA = 00016000, Section Size = 00000000
    23. Section Name = .idata, Section VA = 0001B000, Section Size = 00002A00
    24. Section Name = .rsrc, Section VA = 0001E000, Section Size = 00006C00
    25. Section Name = .stub1, Section VA = 00025000, Section Size = 00019200
    26. Section Name = .stub2, Section VA = 0003F000, Section Size = 00214A00
    27. ...
    (... = skipped)

    Огромное спасибо всем, кто приложился к этому делу. Остался последний момент - получить адрес массива, который передается в качестве одного из параметров. Очень понравился дизасм длин, предложенный Clerk'ом, работает на ура. У кого какие будут предложения / замечания по получению данных из параметра?
     
  13. uinor

    uinor New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2009
    Сообщения:
    14
    PS. Забыл уточнить, статика, маппится с SEC_IMAGE и пошло поехало.