FASM und minifmod

Тема в разделе "Библиотеки и интерфейсы", создана пользователем Gloomy, 19 дек 2004.

  1. Gloomy

    Gloomy New Member

    Публикаций:
    0
    Регистрация:
    29 май 2003
    Сообщения:
    48
    Адрес:
    Екатеринбург
    Можно ли прикрутить minifmod к FASM? Перерыл форум WASM, форум FASM, форум win32asmcommunity, прогуглил но не нашел решения. Оно вообще есть?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Использовать FASM MSCOFF. А дальше по примеру Minimal by Asterix & Quantum
     
  3. Gloomy

    Gloomy New Member

    Публикаций:
    0
    Регистрация:
    29 май 2003
    Сообщения:
    48
    Адрес:
    Екатеринбург
    Сорри, не могу понять смысл такого приема: статическая библиотека уже есть! Как теперь подключить ее к FASM чтобы он взял нужный код и запихал его в ЕХЕшник?
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Никак, фасм не линкует, он может для внешнего линкера только объектник сделать, но тогда вся прелесть фасма теряется. Видимо единственный, более менее быстрый, вариант, это посидеть и выдрать код либы, С-шные сорцы minifmod есть, .obj есть, потом в IDA или оллидбг и обделать его скриптами (а там 3749 строк)

    [​IMG] _1919760511__xm.zip
     
  5. Gloomy

    Gloomy New Member

    Публикаций:
    0
    Регистрация:
    29 май 2003
    Сообщения:
    48
    Адрес:
    Екатеринбург
    bogrus

    Мда, весьма неудобный способ... Придется на досуге переписать mfmplayer - он поменьше minifmod и тоже достаточно неплохо играет.

    Спасибо за исходник, сразу стало понятно что как делать.
     
  6. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Можно совместить всё в одном файле если использовать консольный fasm

    [​IMG] _1890876683__XM_play.bat
     
  7. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Есть ещё один вариант, переделать на фасм исходники XM Player



    "XM Player is a small utility that is capable of playing XM modules. The included program is meant only as an example (it has serious problems under WinNT and Win2K). The linkable OBJ module can be used in your program for playing music in XM format. It is one of the most compact XM module players available."



    Там их немного (73 Кб листинг TASM), звук вроде нормальный (послушайте кто-то ещё), выход через DirectSound, а не Winmm (что лучше я не знаю)



    Чтобы автор (Chris Dragan) не обижался, я скажу в чем баг плеера на NT :)
    Код (Text):
    1. 0040293D | C8 360500 | ENTER   536,0
    Там выравнивание стека сбивается через ENTER 536,0 , по-этому NTDLL.NtCreateFile всегда возвращает ошибку, можна заменить на 538 или поправить в исходнике Xmplayer.asm (ф-ция _LoadSong@24:)
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Я когда-то слушал этот плеер, глюкалово.. и звук такой же - корявый :derisive:
     
  9. Gloomy

    Gloomy New Member

    Публикаций:
    0
    Регистрация:
    29 май 2003
    Сообщения:
    48
    Адрес:
    Екатеринбург
    До 10.01 в универе каникули так что можно вплотную заняться плеером ;)





    Мда, звук действительно не очень, заикается сильно :dntknw:



    2 all:

    Подскажите пожалуйста может есть продвинутая методика реверсинга программ? Потому что я сделал очень тупо: скопировал из IDA листинг кода и сейчас стараюсь ухитриться сделать необходимое количество переменных и привязать их к коду. Главная проблема - привязка к стеку в функциях, нужно чтобы он четко заполнялся и восстанавливался.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Gloomy

    Новый вопрос — новая тема.
     
  11. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Gloomy



    IMHO проще скомпилировать с ключём /Fa и лопатить MASM'овский листинг.





    ЗЫ: сорри, но тема уже закрыта.
     
  12. Gloomy

    Gloomy New Member

    Публикаций:
    0
    Регистрация:
    29 май 2003
    Сообщения:
    48
    Адрес:
    Екатеринбург
    S_T_A_S_



    Выдает гору ошибок и несколько мегабайт цитат из windows.inc :dntknw:



    В принципе уже более-менее разбрался, непонятки с секцией данных. Например идет:
    Код (Text):
    1.  
    2. .data:00406844 dword_406844 dd ?
    3. .data:00406848                 db    ? ;
    4. .data:00406849                 db    ? ;
    5. ; вырезано
    6. .data:00406877                 db    ? ;
    7. .data:00406878 unk_406878      db    ? ;
    8.  


    А потом в коде:
    Код (Text):
    1.  
    2. mov eax, edi
    3. mov ecx, 1600h
    4. mov edi, offset dword_406844
    5. rep stosd
    6.  


    Куда помещается 1600h байт когда там всего 34h байта?! Что-то я затупил с IDA'ой :dntknw: Приаттачил файл который терзаю - может кто посмотрит?



    IceStudent

    ИМХО тема одна - соединение FASM и minifmod. Зачем создавать новую?

    [​IMG] _791571945__xm.test.zip
     
  13. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Gloomy

    1600h двойных слов, или 5800h байт. А помещаются они в секцию данных, ведь после .data:00406878 ещё много свободного места.
     
  14. Barracuda

    Barracuda New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2003
    Сообщения:
    19
    2all

    А не подскажите ли, как использовать этот xmplayer из MASM'а?
     
  15. bogrus

    bogrus Active Member

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




    У меня не заикался, странно... звук конечно не очень, но для кряков-кейгенов вполне хватило бы, тут он хуже в другом - этот DirectSound все-равно сводится к Winmm, т.ч. только лишнии модули



    S_T_A_S_




    Я от того листинга пришел в ужас, лучше из олли выдрать, предварительно накатив .obj, или ида



    Barracuda Там есть папка Example, тажело переделать?



    Gloomy Если уже и переделывать, то сперва надо в сишном исходнике избавится от ф-ций msvcrt, потом его перекомпилить. Можно ли как-то переопределить эти ф-ции на kernel32.Heap*, например ?
    Код (Text):
    1. // redefine here
    2. #define FSOUND_Memory_Free(_ptr)            free(_ptr)
    3. #define FSOUND_Memory_Alloc(_len)           calloc(_len, 1)
    4. #define FSOUND_Memory_Calloc(_len)          calloc(_len, 1)
    5. #define FSOUND_Memory_Realloc(_ptr, _len)   realloc(_ptr, _len)
    Там ещё _ftol,fabs,sin,abs нужно будет заменить на асмовые кусочки, но то уже мелочь
     
  16. Gloomy

    Gloomy New Member

    Публикаций:
    0
    Регистрация:
    29 май 2003
    Сообщения:
    48
    Адрес:
    Екатеринбург
    Quantum



    А как записать это на FASM? "dword_406844 rd 1600h"? Это явно что-то не то...



    bogrus



    В приведенном мной примере этих функций уже нет. Сейчас главное разобраться с переменными и их размером (см. выше).
     
  17. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    bogrus >




    Я переделывал подобным оброзом - довольно быстро получается (если нигде не ошибёшся :)



    >




    Ты имеешь ввиду компилировать с ключём /Zi? что бы имена меток попали? Да, тоже вариант..
     
  18. bogrus

    bogrus Active Member

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




    Почему не то? Можно вроде в конце секции, чтобы в сам файл не попали, но там ведь unk_406878 стоит, может надо так:
    Код (Text):
    1. dword_406844 rd 34h
    2. unk_406878   rd 1600h-34h
    Да, кажется нет, я просто смотрел на память процесса, msvctr все-равно подгружается, хотя в импорте winmm её нет
     
  19. Gloomy

    Gloomy New Member

    Публикаций:
    0
    Регистрация:
    29 май 2003
    Сообщения:
    48
    Адрес:
    Екатеринбург
    bogrus



    Может есть толковое руководство по IDA (кроме книги Касперского пока ничего не встречал. а в ней написано про очень древнюю версию.) чтобы выяснить чего она показывает и какого оно размера? В принципе для пущей надежности можно сделать размер каждой переменной размером со всю секцию данных но это ИМХО чрезчур.
     
  20. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Ида показывает метками только те адреса, к которым есть обращения в программе, а объем-размер массивов по этим адресам нужно прикидывать самому. Чтобы убрать db,db,db..., можно на dword_406844 нажать кнопу умножить * (на правой цифровой части клавы), она предложит преобразовать в массив, т.е. будет типа "dword_406844 dd 34h dup(0)", тоже надо сделать с unk_406878, тогда эти длинные страницы с db не будут мозолить глаза