Поддерживает ли IDA формат NE (Win16)?

Тема в разделе "WASM.BEGINNERS", создана пользователем DOSAsm386, 27 янв 2022.

  1. DOSAsm386

    DOSAsm386 Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    64
    Адрес:
    Россия
    Подскажите, пожалуйста, поддерживает ли дизассемблер IDA формат исполняемых файлов Win16 (NE - вроде New Exetutable)?
    IDA Free не поддерживает - проверял.
    Нужно чтобы покопаться в коде одной старой версии Тетриса под Вынь16.
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    LE поддерживает точно (ну или типа того, возможность корректно загрузить есть)
    Касательно NE:
    (ida64.dll)
    Код (Text):
    1. 26F730h 4E 65 77 20 45 78 65 63 75 74 61 62 6C 65 20 28  New Executable (
    2. 26F740h 4E 45 29 00 00 00 00 00 49 6E 74 65 6C 20 48 65  NE).....Intel He
    3. 26F750h 78 20 4F 62 6A 65 63 74 20 46 69 6C 65 00 00 00  x Object File...
    4. 26F760h 4D 4F 53 20 54 65 63 68 6E 6F 6C 6F 67 79 20 48  MOS Technology H
    5. 26F770h 65 78 20 4F 62 6A 65 63 74 20 46 69 6C 65 00 00  ex Object File..
    6. 26F780h 4C 69 6E 65 61 72 20 45 78 65 63 75 74 61 62 6C  Linear Executabl
    7. 26F790h 65 20 28 4C 58 29 00 00 4C 69 6E 65 61 72 20 45  e (LX)..Linear E
    8. 26F7A0h 78 65 63 75 74 61 62 6C 65 20 28 4C 45 29 00 00  xecutable (LE)..
     
  3. DOSAsm386

    DOSAsm386 Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    64
    Адрес:
    Россия
    Спасибо. Попробую какую нибудь версию, отличную от Free. Когда попробую отпишусь
     
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    Как запасной вариант.
    ghidra-master\Ghidra\Features\Base\src\main\java\ghidra\app\util\opinion\NeLoader.java
    Код (Text):
    1. public class NeLoader extends AbstractLibrarySupportLoader {
    2.     public final static String NE_NAME = "New Executable (NE)";
    3.  
    4.     private static final String TAB = "    ";
    5.     private static final long MIN_BYTE_LENGTH = 4;
    6.     private static final int SEGMENT_START = 0x1000;
    7.  
    8.     private ArrayList<Address> entryPointList = new ArrayList<>();
    9.     private Comparator<String> comparator = new CallNameComparator();
    10.  
    11.     public NeLoader() {
    12.     }
    13. ...
     
  5. DOSAsm386

    DOSAsm386 Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    64
    Адрес:
    Россия
    А Ghidra - это тоже дизассемблер?
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    Основной конкурент иды. В некотором смысле даже не конкурент, просто на иду сила привычки пока работает.
     
    DOSAsm386 нравится это.
  7. Artem_N

    Artem_N Artem N

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    74
    Инфа сотка, что поддерживает. Она и DOS поддерживает. Но только на уровне дизассемблера, не декомпилятора. Что, конечно же, огорчает.
     
    DOSAsm386 нравится это.
  8. DOSAsm386

    DOSAsm386 Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    64
    Адрес:
    Россия
    Вот собственно архив с игрой (файл TETRIS.EXE)
    https://disk.yandex.ru/d/m7RyDEq8v9fmYg
    Скачал с рутрекера IDA версии 6.1
    Ищу как можно вызвать пасхальное яйцо (если это вообще возможно).
    Интересуют обведенные строки на картинке.
    Только непонятно как определить обращается ли программа к этим строкам.
    Опыт работы с IDA можно сказать на уровне получения листинга на ассемблере.
    Знание ассемблера тоже достаточно слабое.
    [​IMG]
     

    Вложения:

    • IDA_Tetris.jpg
      IDA_Tetris.jpg
      Размер файла:
      506,6 КБ
      Просмотров:
      298
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    16 бит обязывают к такому геморрою как жонглирование значениями сегментных регистров. А дизассемблер видит только те референсы, где относительно значения DS он уверен. Если со строчками, идущими перед искомыми, все очевидно:
    Код (Text):
    1. 1008:07a8 "TETRIS.INI" ;1000:44a2 MOV AX,0x7a8
    2. 1008:07b3 "TETRIS.HST" ;1000:44da MOV AX,0x7b3
    3. 1008:07be "TETRIS.HST" ;1000:44f1 MOV AX,0x7be
    4. 1008:07c9 "TETRIS.HST" ;1000:4546 MOV AX,0x7c9
    5. 1008:07d4 "TETRIS.HST" ;1000:455d MOV AX,0x7d4
    6. 1008:07df "TETRIS.HST" ;1000:456e MOV AX,0x7df
    Их смещения относительно начала сегмента - аргументы функции, летят в стек перед значением DS. А оффсетов для этих двух строчек в программе совсем нету. Никогда нельзя исключать, что адрес формируется динамически, но если не знать базу, можно очень долго искать где и как они адресуются. Я бы поставил на то, что они не используются вообще, слишком уж хорошо всё получается с любой другой строчкой в программе.
     
    DOSAsm386 нравится это.
  10. DOSAsm386

    DOSAsm386 Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    64
    Адрес:
    Россия
    Ладно, главное что автор программы оставил эти строчки. Я их нашел, просматривая екзешник в Тотал Коммандере. Это без сомнения Пасхальное Яйцо, но может оно никак не вызывается в программе. По крайней мере интересно, что программист оставил какие то личные сообщения.
     
  11. Artem_N

    Artem_N Artem N

    Публикаций:
    0
    Регистрация:
    1 мар 2009
    Сообщения:
    74
    16-битный асм относительно прост. Тут не пасхальное яйцо скорее всего, а просто автор на волне влюблённости вставил эти строки в код. Компилятор не удалил их (хотя должен был, если оптимизации всякие включены).

    Искать оффсеты очень просто: смотрим адрес строки: "dseg02:07EA". Далее в IDA ищем текст (Alt+T в начале, далее Ctrl+T для продолжения) "7EA" и ничего путного не находим. Потом ищем текст "810" (следующая интересующаяся строка) - и снова ничего путного. Для чистоты эксперимента ищем байты (Alt+B) "EA 07" и "10 08" - снова пусто. С высокой долей вероятности код не обращается к этим строкам. Само собой, в ассемблере есть 1000 и 1 способ получить адрес интересующей переменной. Но тут код создан компилятором, а они этим не занимаются.

    Юнит-тест: смотрим адрес "dseg02:0665" - на него тоже нет ссылок (Ctrl+X). Но ищем текст "665" - и оппа! - находим ссылку на него по адресу "cseg01:30A8". Аналогично с "dseg02:0681".
     
    DOSAsm386 нравится это.
  12. DOSAsm386

    DOSAsm386 Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    64
    Адрес:
    Россия
    Да, скорее всего.
    [​IMG]
    Автора по ходу зовут Dave Edson
    Строки, которые он оставил:
    Dave loves Kate more than Chocolate!!
    Omar sez: Kappa Sigs Rock!!!

    Первая строка - то что он любит свою подругу Kate, а вторая не очень понятна, какой то слэнг. Может что то про музыку. "sez" возможно это "says" ("говорит"), по крайней мере созвучно.
     

    Вложения:

    • Tetris_Dave.jpg
      Tetris_Dave.jpg
      Размер файла:
      626,1 КБ
      Просмотров:
      265