Вопрос о 'печати Баала'...

Тема в разделе "WASM.ASSEMBLER", создана пользователем Xanasu, 7 сен 2004.

  1. Xanasu

    Xanasu New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2004
    Сообщения:
    2
    Кто-нибудь может объяснить поподробнее, какую конкретно информацию MS link записывает между DOS stub'ом и собственно PE-заголовком и какими ключами ее XORит?



    На http://board.win32asmcommunity.net поиском по lingo12 я что-то не нашел подробного описания этой неприятности, только то, как ее убрать (хотя это тоже ценно), и пару битых линков, видимо на старые посты.



    Google и Yandex дали такие же результаты.



    В содержимом .../tools/7/Rich.zip тоже не объясняется подробно, какую содержательную информацию пишет MS link в этой "печати Баала".
     
  2. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Вроде как, никому не удавалось это расшифровать.. Так что, скорее всего, разработчики унесут эту тайну в могилу. ИМХО, это просто левая сигнатура или просто цифры какие-то. Вряд ли это текст.. Хотя кто их знает, этих маленьких плюшевых извращенцев.. :)
     
  3. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Вроде как, никому не удавалось это расшифровать..



    Ты б хоть не позорился. Там обычный XOR. А поксорен compid.
     
  4. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Эхх.. Голова-капуста.. :)

    Ладно, буду книжки умные читать, а то так дурнем и останусь.. :dntknw:
     
  5. Xanasu

    Xanasu New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2004
    Сообщения:
    2
    Прошу прощения за глупый вопрос, а что такое compid?

    Или просто поксорена сама строка "compid"? Но в этом случае ключи, которыми она ксорилась, у меня какими-то странными получились... :dntknw:
     
  6. dragon

    dragon New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2002
    Сообщения:
    84
    Адрес:
    Питер
    Поксорен идентификатор железок, которые в компе стоят. Хотя там наверняка хэши используются, и вряд ли узнаешь, на каком компе PE слинкован, хотя это бы интересно было.
     
  7. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    А на что поксорено то? И каких железок ID?
     
  8. Nothing

    Nothing New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2003
    Сообщения:
    139
    Адрес:
    Russia
    Сразу после слова "Rich" идет 32 бита - код для xor.

    Если начать xor'ить этим числом с начала печати Баала, то первым всегда пойдет идентификатор 536e6144h - это метка. Далее 12 байт не совсем понятного назначения (причем часто это вообще нули). Далее структурки по 8 байт (их может быть несколько) - это и есть идентификаторы "железок".
     
  9. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Спасибо, а каких железок?
     
  10. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Да нету там никаких железок , даже compid никаким боком не лежит , хотя строку "@comp.id" иногда встречал , проскакивала там по хипу . Три часа просидел в отладчике Ж)



    Короче первое , что будет играть роль при формировании печати , так это результат возвращаемый ф-цией VirtualAlloc :) . Потом к этому адресу прибавляеться количество байт он начала .obj файла до первого имени секции в нём (.text к примеру) . Ещё кое-какие подробности я пропускаю , они особой роли не играют . В общем назовём это числом A (оно не определённое) .



    Второй т.н. ключ будет число 00789DEAh (там зашит) , обозвём его B .



    Далее играет роль вшитый в линковщике дефолтный MZ+DOS заголовок размером 128 байт . Который в цикле ролиться (ROL) и суммируеться (ADD) в одно число . Весь этот алгоритм приводить думаю смысла нет , таким способом всегда получаеться одно число , это 884F3421h , обозвём его С .



    Число A ролиться несколько (зависящих от него) раз и потом суммируеться с числом C . Его надо обозвать D .



    Число D ксориться (XOR) с числом 536E6144h и получеться E .



    Вот это число E есть первый дворд печати .

    Три следующие дворда печати - это число D .

    Пятый дворд обьяснять долго , просто скажу , что это немного изменённое число A и потом поксореное с числом D .

    Шестой дворд это количество "циклов" изменения числа A для пятого дворда поксореное с числом D .

    Седьмой - число B XOR D .

    Восьмой - количество "циклов" (у меня на минимальной проге получилось - 1) XOR D .

    Девятый - Rich (68636952h)

    Десятый - число D .



    Вышесказанное справедливо для link.exe версии 8.0.40426.16

    Спрашиваеться - нафига это всё ?
     
  11. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Чтобы вот такие извращенцы ковырялись! :)
     
  12. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Ха , уж больно я сомневаюсь , что мелкософтовцы сделали эту печать просто так , для фонаря .



    В конце концов они ведь могли хоть CRC файла , хоть entrypoint дублировать (прятать) таким образом . Да много чего можно . От этого хоть кому-то могла быть польза . А так , я не понимаю .
     
  13. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Разобрался с этим числом . В общем ml.exe версии 6.12.7164 к .obj файлу никакой лабуды не добавлял . А ml.exe версии 6.14.8444 уже добавляет строку "@comp.id" и один дворд 001220FC (зашит в нём) . Вот этот дворд и есть как я говорил "немного изменённое число А" .



    Старшие версии ml.exe тоже добавляют такую фигню , только числа попадаються разные (все они определённые и зашиты туда) . Например в ml.exe версии 8.0.40426.16 это число - 007D9DEA . Интересно то , что оно странно похоже с числом B (вшитом в link.exe той же версии) - 00789DEA .



    Есть ещё маленькие различия между старым link.exe и новым , например в том , что раньше эти извращенцы прятали слово "Rich" , т.е. вместо него было вшито число C236F034 , которое при формировании печати ксорилось с AA559966 и так получалось 68636952 (Rich) :)



    Узнал немного истории :) В ml.exe 6.11 версии , сразу за MZ строка : "Copyright (C) 1986-1991 Phar Lap Software, Inc. C5S2S2PM"
     
  14. 90210

    90210 New Member

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    16
    Адрес:
    somewhere from Russia




    И метку 'DanS' тоже прятали:
    Код (Text):
    1.  
    2.         mov     eax, const1       ; 0F93BF822h
    3.         xor     eax, edi          ; edi==дворд после Rich
    4.         mov     [esi+4], edi
    5.         xor     eax, 0AA559966h
    6.         mov     [esi], eax
    7.  




    А "прячущую" константу 0AA559966h они явно с юмором написали: AA55 - это ж последние два байта mbr :)
     
  15. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Да , встречал такое в старых версиях :)







    Пытался проанализировать эти константы , даже наклепал по шустрому прогу (в аттаче) , была мысль , что микрософт использует свои ID компиляторов ("@comp.id") , но правда ли и для чего ? Я дальше не разбирался .

    [​IMG] 1925930365__derich.zip
     
  16. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Ёперный театр ! А я мучался ...

    Это называеться "The compiler decorates an identifier when it creates the .OBJ file" , а расшифровываеться просто : dumpbin.exe /symbols %filename% .



    Читать можно ещё тут , тут , можно ещё гуглить по словам "COMDAT","COMDEF" .
     
  17. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    К сожалению это работает только с /DEBUG.

    А вот у меня "замангленные" имена для

    DLL не выдает. А попробовать их разманглить

    в IDA руки не доходят. Да и собственно

    не нужны мне они - разве число параметров посмотреть.
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Кстати, а в исходниках утилит из "winnt src" лежат masm & link. Кто-нибудь смотрел, что там за механизм создания "печати" и есть ли он?



    WinNT4\sdktools\masm

    WinNT4\sdktools\vctools\link
     
  19. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615


    В XP и выше есть утилитка undname.exe, и вроде можно скачать отдельно.
    Код (Text):
    1. E:\>undname -f ?func1@a@@AAEXH@Z
    2. Microsoft(R) Windows NT(R) Operating System
    3. UNDNAME Version 5.00.1768.1Copyright (C) Microsoft Corp. 1981-1998
    4.  
    5. >> ?func1@a@@AAEXH@Z == private: void __thiscall a::func1(int)
     
  20. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615


    Нету. Похоже, нужны исходники посвежее.