[masm] Как вкомпилить файл?

Discussion in 'WASM.ASSEMBLER' started by alexparser, Feb 6, 2010.

  1. alexparser

    alexparser New Member

    Blog Posts:
    0
    Joined:
    Jun 13, 2009
    Messages:
    31
    Всем привет!

    Нужно сделать такую задачку, как контроль запуска исполняемых файлов.
    Я наметил два пути:
    1. Инжект моего окда в *.ехе
    2. Инкапсуляция чужого кода в мой

    Для первого варианта нашел пример, но он не рабочай, бъет РЕ (http://vxheavens.com/lib/vbp00.html) и решил с этим не париться
    Второй вариант гораздо проще - вкомпилировать в мою аппу другую апапу, потом выгрузить ее в мэп и запустить.

    Вопрос - как заставить MASM вкомпилить в секцию данных ехе-шник и отследить его начало и размер внутри секции данных?

    Спасибо!
     
  2. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    alexparser
    Снова пиши в комерс, иначе ничего не будет. Запуск из памяти походу нужен.
     
  3. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    преобразовать файл в массив данных, или прицепить в ресурсы
     
  4. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    в фасме это делается просто и элегантно директивой file
     
  5. alexparser

    alexparser New Member

    Blog Posts:
    0
    Joined:
    Jun 13, 2009
    Messages:
    31
    Как закинуть в ресурсы понятно, а вот как вкомпилить как дата-файл - вот это мне и нужно.
     
  6. alexparser

    alexparser New Member

    Blog Posts:
    0
    Joined:
    Jun 13, 2009
    Messages:
    31
    "Снова пиши в комерс" - ???
    апуск из памяти походу нужен - естественно
    вопрос был в том - как файл вкомпилить!?
     
  7. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    include директива вкомпилит бинарник, который будет сделан тулзой BlackParrot'a к примеру(я юзаю).
     
  8. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    alexparser
    #4
     
  9. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    можно еще сконвертить бинарь в массив байтов
     
  10. alexparser

    alexparser New Member

    Blog Posts:
    0
    Joined:
    Jun 13, 2009
    Messages:
    31
    Как определить начало бинарника и его размер?
     
  11. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Разность адресов конца и начала массива.
     
  12. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    утилита eff из пакета ufmod умеет конвертить любые бинари в массивы нескольких форматов,
    в том числе С, masm, delphi
     
  13. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Asterix
    В пакете масма есть тулза BinToDb, её достаточно.
     
  14. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    for(char* p = binBegin; p < binBegin + binLen; p++)
    printf(" 0x%.2X,", *p); // конкретный формат зависит от цели


    ?
    а как запускать из памяти пе-шку планируете? (это к ТС)
     
  15. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    qqwe
    например в масм массив должен состоять из строк определенной длины, иначе не компилит
    типа такого
    Code (Text):
    1. db  010h, 000h, 000h, 000h, 001h, 000h, 001h, 000h, 022h, 056h, 000h, 000h, 022h, 056h, 000h, 000h
    2.       db  001h, 000h, 008h, 000h, 064h, 061h, 074h, 061h, 086h, 09Dh, 000h, 000h, 080h, 080h, 080h, 080h
    3.       db  080h, 080h, 080h, 080h, 081h, 085h, 090h, 097h, 08Dh, 075h, 066h, 070h, 080h, 082h, 07Fh, 07Fh
    так что алгоритм слегка придется усложнить ;)
     
  16. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Asterix
    Длина строки не имеет значения. Всё компилится.
     
  17. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    Asterix
    for(char* p = binBegin; p < binBegin + binLen; p++)
       printf(
    (p - binBegin) % MAX_IN_LINE ?
    ", 0x%.2X" :
    "\n\tdb 0x%.2X",
    *p);   // конкретный формат зависит от цели


    курсы суперхэцккеров 5тый час. ходите на курсы суперхэцккеров! там вас научат правильно цвиркать ротом!

    (к ТС) главное решено. остались мелочи - запуск из памяти пе-бин-образа. ну, тут вы и сами одной левой
     
  18. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    Clerk
    ок, заинклудь и скомпили не меняя ничего в файле
     
  19. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    qqwe
    хотите поразить нас своим кодом?

    об этом написано на сайте в статье, если не ошибаюсь
     
  20. qqwe

    qqwe New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2009
    Messages:
    2,914
    Asterix
    в самое сердце! впрочем, лучше так

    for(char* p = 0; printf(p % MAX_IN_LINE ? ", 0x%.2X" : "\n\tdb 0x%.2X", *(char*)(p + binBegin)) && p < binLen; p++);

    чтото мне говорит, что стоило б еще чуть укоротить
    не читал, хотя видел такую статью на рсдн. возникали определенные но к ней. впрочем, для простого случая пойдет