туплю с загрузчиком

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DooD, 4 Jan 2013.

  1. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    что то вот не получается запустить,где туплю не понимаю.
    суть такова:я копирую сам себя с адреса 7с00 до 0600
    ок.
    дальше я читаю сектор,допустим второй.из 0-го сектора я скопировал 512 байт то есть по идее я скопировал mbr венды,скопировал я его в этот второй сектор,его пытаюсь читать через 02h int 13h таким вот макаром
    Code:
            xor ax,ax
    ; тут у нас адрес будет в виде сегмент:смещение 0000:7с00
               mov es, ax          
               mov bx, 7C00h           
               mov al, 1           
               mov ch, 0           
               mov cl, 3 ; сектор 2 тк отсчет от 0          
               mov dh, 0          
               mov dl, 80h        
               int 13h 
    после этого я джампаю на 7C00. записал boot сектор на вм- при включении тупо виснет.
    в чем собсно может быть проблема?
     
  2. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Если отсчет начинается от нуля, то второй элемент будет иметь индекс 1, а не 3.
     
    #2 herfleisch, 4 Jan 2013
    Last edited: 4 Jan 2013
  3. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    0-й сектор =1 в младшем байте,следовательно:
    1-й сектор =2
    2-й сектор =3
    а вообще даже не в том дело,я и так и эдак извращался с положением оригинального mbr, но все равно не пахало.
     
  4. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    Зачем удалять? Лучше распиши здесь что у вас вышло, может кому-нибудь будет полезно.
     
    _________________________
  5. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,148
    Reputations:
    236
    зачем удалил мой пост о загрузчике?
    если лично для тебя не интересен/сложен, то кому-то может быть и нужным.
     
  6. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    так во первых я не модер,и посты удалять я не могу в этом разделе,видимо модер посчитал нужным удалить посты.
    во вторых со слешем мы где то натупили.понимаете отлаживать эту херню крайне неудобно,я понял пока что когда мы джампаем то попадаем в адрес без кода,а так не должно быть,почему пока разбираюсь
     
  7. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    2 DooD, копирни оригинальный загрузчик - прогони в IDA. И погляди как там и чего.
    Вот тебе FASM версия winXP boot

    2 altblitz, ты не понимаешь о чем идет речь. почитай http://goo.gl/k4lOI
     
    _________________________
  8. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    за ссылку спс,посмотрю.а ида что то выеб*ется,открывает как бинарь с одними db инструкциями:(. у меня подозрение что в каком то моменте я затираю сам свой код,а где ток не понятно.
     
  9. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    блина уже вроде все правильно делаю,кто может проверьте у себя,мне варя говорит что я запускаю не запускаемую память мля((
    mbr должен быть во втором секторе.
    и если кто знает как привинтить виртуальную машину к дебаггеру в ида?.
     

    Attached Files:

    • sec.rar
      File size:
      184 bytes
      Views:
      235
  10. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Боюсь что altblitz прав, скорее всего загружаемый код уже ожидает что процессор уже переведен в 32-битный режим.
     
  11. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    ребятушки-котятушки, мой mbr не должен переводить проц в ЗР,потому что он должен всего лишь передать управление на код в памяти,этот код будет mbr венды который сам преркасно все должен загрузить.
     
  12. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Выведи в своем загрузчике начало кода, который ты загрузил в память, и выведи его на экран. Потом сравни его с реальным кодом MBR, совпадают ли они. Может ты вообще что-то не то загружаешь. Таким образом ты хотя бы на сто процентов убедишься что код стороннего MBR не битый после загрузки в память.

    К сожалению, у меня нет под рукой винды. Но если сам не решишь проблемы - могу помочь, пока время есть (пара дней).
     
    #12 herfleisch, 5 Jan 2013
    Last edited: 5 Jan 2013
  13. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,148
    Reputations:
    236
    не будет Win загружать такой код.
    потому что твой метод записи MBR - капец компам органам безопасности и быстрого реагирования.

    это изначально заложено в ОСь, чтобы мальчики-шалуны не баловались с опасным в их руках.
     
    #13 altblitz, 5 Jan 2013
    Last edited by a moderator: 6 Jan 2013
  14. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Есть такой вариант: ты загружаешь MBR в какую-то область памяти, а этот MBR когда запускается, думает что эта самая область памяти свободна и записывает что-то в нее, таким образом затирая сам себя.
     
  15. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    смотри в пм.тоже так думаю,но продебажить не-как.да походу что так и есть
     
  16. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Можно успешно посмотреть код этого лодыря и посмотреть что и куда он пишет. И использовать доступную область памяти для загрузки MBR.

    По идее, цель первого лодыря - загрузка второго лодыря, для которого уже нет ограничений, и который уже может полноценно перевести процессор в 32-битный режим, загрузить ядро и т.д. Поэтому не исключено что первый лодырь загружает второй сразу же после себя, то есть в твоем случае - вместо себя.
     
    #16 herfleisch, 5 Jan 2013
    Last edited: 5 Jan 2013
    1 person likes this.
  17. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,148
    Reputations:
    236
    весомо и по делу, herfleisch!
    так и делают кей-гены, раскодируя себя в разрешённую область памяти - stack,
    записывая себя в область памяти .code, и запускаясь из неё.

    сложно, но пусть DooD проведёт два дня за анализом такого кода. комп не поломается и данные не сотрутся.
     
  18. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    altblitz, причем тут кей-гены? кей-ген программа генерирующая последовательности по заданному алгоритму. То что ты описал "раскодируя себя в разрешённую область памяти", похоже на алгоритм работы упаковщика.

    Какая нафиг область памяти .code?

    BIOS считывает первый сектор диска и передает управление на него, в твоем распоряжении лишь прерывания BIOS и команды процессора.
    Есть разделение на сегменты и да существует кодовый сегмент (CS), но это никак не область памяти (P.S: может я не так тебя понял).

    Для справки скажу, что в системе windows при создании процесса ему выделяется виртуальная память, которая СИСТЕМОЙ разбивается на разделы, далее система разбирает PE заголовок исполняемого файла и загружает программу в соответствии с таблицей секций (которая описана в PE заголовке). Соответственно в секции кода и расположен код программы, о котором как я полагаю и рассуждает altblitz.

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

    Ссылки по теме:
    http://www.insidepro.com/kk/065/065r.shtml
    http://www.wasm.ru/article.php?article=1002001
    http://wm-help.net/books-online/book/59464/59464-6.html
     
    _________________________
  19. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    короче пока я пришел к тому что выводится такое:
    could not open drive multi(0)disk(0)rdisk(0)partition(1)
    значит по идее что то грузится,решил сделать так:
    запишу код в boot дискеты и попробую загрузить mbr ведны на реальном железе.потом отпишу что как.
     
  20. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,148
    Reputations:
    236
    толково и технично изложил, Gar|k, понял тебя.

    из своего личного опыта - подтверждаю,
    работа с MBR требует знания команд процессора и прерываний на низком уровне.

    >> записал boot сектор на вм
    программа записала.
    и далее - не смогла переписать boot сектор. ограничения ВМ.