LINUX.ORG.RU
решено ФорумTalks

Asm x86

 , , ,


3

1

Подскажите что почитать. Языками высокого уровня владею. Основная задача - кой чего править в современных UEFI, соответственно дизассембляция, IDA и так далее.


IDA

А денег у тебя хватит на неё?

IDA Pro - Base License - 1 computer - $1866.99

А не-Pro версия не умеет в x86_64, только 32 битные бинари.

DELIRIUM ☆☆☆☆☆ ()
Ответ на: комментарий от DELIRIUM

А uefi 32 бита азазазаза. А так для дела можно и купить, у меня есть вещи и подороже, да и торренты никто не отменял.

K22 ()
Ответ на: комментарий от DELIRIUM

А денег у тебя хватит на неё?

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

praseodim ★★★★★ ()
Ответ на: комментарий от K22

Про uefi ничего не скажу, про асм конкретно могу сказать, что надо читать доки на конкретный проц/семейство. Я вот специально асм не учил, просто смотрю, что выплюнул компилятор и оно как-то понятно.

DELIRIUM ☆☆☆☆☆ ()

Кстати, не пробовал radare2, вроде ведь свободное ПО? Американское AHБ опубликовало Ghidra как тоже спо.

Может окажется достаточно для твоих целей и IDA не потребуется. Ну и рутрекер да, никто не отменял, хотя как я уже сказал, по отзывам полноценных версий давно не утекало, те сливы что были они все чем-то ущербные.

praseodim ★★★★★ ()
Последнее исправление: praseodim (всего исправлений: 1)

IDA

radare2+retdec на 2 тыщи баксов дешевле будет

SR_team ★★★★★ ()
Ответ на: комментарий от intelfx

Поясни, пожалуйста. Выполняется оно по большей части процом, так что х86. ME регион пока не будем затрагивать, хотя по нему тоже послушать было бы интересно. А то интереснее основного. Есть пара идей.

K22 ()
Ответ на: комментарий от WitcherGeralt

Не будет в свободном доступе - куплю. Будет - нет. Если есть доступ за деньги, то они платятся, если бесплатно - то нет.

K22 ()
Ответ на: комментарий от intelfx

Просто ковыряю сейчас через uefitool пару прошивок, и понимаю что кое-где не хватает теории и знаний.

K22 ()
Ответ на: комментарий от intelfx

«asm x86» и реверс, тем более реверс фирмвари — это абсолютно разные вещи.

Плюсую. Самая труднозапоминаемая часть asm - аббревиатурные инструкции и порядок аргументов, и они особо не полезны при реверсе. Гораздо важнее и подезней - посмотреть на практике как используется стек для локальных переменных и аргументов, как выглядят calling convention, как используется регистр флагов.

С фирмварью главная проблема, что её в режиме отладки не запустить, только в режиме эмуляции отладки. И с такого начинать очень тяжко. На первую практику лучше что-то на С что можно отладить (может быть и с символами). Конкретно про uefi - есть хороший пример https://web.archive.org/web/20180403213026/https://puri.sm/posts/intel-fsp-reverse-engineering-finding-the-real-entry-point/

Я 15 лет назад реверсил по чистому asm’у загрузочный сектор DOS-дискеты, и процент времени на путаницу в именах инструкций был около 30-50%. Понял логику 512 байт за 2 дня. А недавно узнал что в radare2 есть режим «asm.pseudo» - и с ним потерь времени на путаницу уже не было. В нём

            0x08048100      31ed           xor ebp, ebp
            0x08048102      5e             pop esi
            0x08048103      89e1           mov ecx, esp
            0x08048105      83e4f0         and esp, 0xfffffff0
            0x08048108      50             push eax
            0x08048109      54             push esp
            0x0804810a      52             push edx
            0x0804810b      68c0252508     push 0x82525c0
            0x08048110      686c252508     push 0x825256c
            0x08048115      51             push ecx
            0x08048116      56             push esi
            0x08048117      6810660e08     push 0x80e6610              ; main ; "U\x89\xe5S\x83\xec\x18\xffu\f\x8d]\xe4\xffu\bS\xe8.3"
            0x0804811c      e88ba12000     call 0x82522ac              ;[1]
            0x08048121      f4             hlt
            0x08048122      90             nop
            0x08048123      90             nop
            0x08048124      55             push ebp
            0x08048125      89e5           mov ebp, esp
            0x08048127      53             push ebx
            0x08048128      50             push eax
            0x08048129      e800000000     call 0x804812e              ;[2]
            0x0804812e      5b             pop ebx
            0x0804812f      81c3ee913600   add ebx, 0x3691ee
            0x08048135      8b8364000000   mov eax, dword [ebx + 0x64]    ; [0x64:4]=-1 ; 'd' ; 100
            0x0804813b      85c0           test eax, eax
        ,=< 0x0804813d      7402           je 0x8048141                ;[3]
        |   0x0804813f      ffd0           call eax
        `-> 0x08048141      8b5dfc         mov ebx, dword [ebp - 4]
            0x08048144      c9             leave
            0x08048145      c3             ret
            0x08048146      90             nop
            0x08048147      90             nop
            0x08048148      90             nop
            0x08048149      90             nop
            0x0804814a      90             nop
            0x0804814b      90             nop
            0x0804814c      90             nop
            0x0804814d      90             nop
            0x0804814e      90             nop
            0x0804814f      90             nop
            0x08048150      55             push ebp
            0x08048151      89e5           mov ebp, esp
            0x08048153      83ec08         sub esp, 8
            0x08048156      803da0133b08.  cmp byte [0x83b13a0], 0
        ,=< 0x0804815d      740c           je 0x804816b                ;[4]
       ,==< 0x0804815f      eb31           jmp 0x8048192               ;[5]
      .---> 0x08048161      83c004         add eax, 4
      :||   0x08048164      a308703108     mov dword [0x8317008], eax    ; [0x8317008:4]=0x83b11e4
      :||   0x08048169      ffd2           call edx
      :|`-> 0x0804816b      a108703108     mov eax, dword [0x8317008]    ; [0x8317008:4]=0x83b11e4
      :|    0x08048170      8b10           mov edx, dword [eax]

превращается в

            0x08048100      31ed           ebp = 0
            0x08048102      5e             pop esi
            0x08048103      89e1           ecx = esp
            0x08048105      83e4f0         esp &= 0xfffffff0
            0x08048108      50             push eax
            0x08048109      54             push esp
            0x0804810a      52             push edx
            0x0804810b      68c0252508     push 0x82525c0
            0x08048110      686c252508     push 0x825256c
            0x08048115      51             push ecx
            0x08048116      56             push esi
            0x08048117      6810660e08     push 0x80e6610              ; main ; "U\x89\xe5S\x83\xec\x18\xffu\f\x8d]\xe4\xffu\bS\xe8.3"
            0x0804811c      e88ba12000     0x82522ac ()                ;[1]
            0x08048121      f4
            0x08048122      90
            0x08048123      90
            0x08048124      55             push ebp
            0x08048125      89e5           ebp = esp
            0x08048127      53             push ebx
            0x08048128      50             push eax
            0x08048129      e800000000     0x804812e ()                ;[2]
            0x0804812e      5b             pop ebx
            0x0804812f      81c3ee913600   ebx += 0x3691ee
            0x08048135      8b8364000000   eax = dword [ebx + 0x64]    ; [0x64:4]=-1 ; 'd' ; 100
            0x0804813b      85c0           var = eax & eax
        ,=< 0x0804813d      7402           if (!var) goto 0x8048141    ;[3]
        |   0x0804813f      ffd0           eax ()
        `-> 0x08048141      8b5dfc         ebx = dword [ebp - 4]
            0x08048144      c9
            0x08048145      c3
            0x08048146      90
            0x08048147      90
            0x08048148      90
            0x08048149      90
            0x0804814a      90
            0x0804814b      90
            0x0804814c      90
            0x0804814d      90
            0x0804814e      90
            0x0804814f      90
            0x08048150      55             push ebp
            0x08048151      89e5           ebp = esp
            0x08048153      83ec08         esp -= 8
            0x08048156      803da0133b08.  var = byte [0x83b13a0] - 0
        ,=< 0x0804815d      740c           if (!var) goto 0x804816b    ;[4]
       ,==< 0x0804815f      eb31           goto 0x8048192              ;[5]
      .---> 0x08048161      83c004         eax += 4
      :||   0x08048164      a308703108     dword [0x8317008] = eax     ; [0x8317008:4]=0x83b11e4
      :||   0x08048169      ffd2           edx ()
      :|`-> 0x0804816b      a108703108     eax = dword [0x8317008]     ; [0x8317008:4]=0x83b11e4
      :|    0x08048170      8b10           edx = dword [eax]

Интсрукции типа ret почему-то никак не показываются, это минус

Вероятно и в других тулзах что-то такое есть. Задрачивать аббревиатуры смысла нет.

При реверсе фирмвари аббревиатуры нужны только на том 1% инструкций, которые всякие специальные регистры cpu настраивают.

бОльшую часть UEFI вряд ли пишут на асме, скорее всего на С/С++ и потом компилируют так что calling convention и там такие же будут.

GPFault ★★ ()
Ответ на: комментарий от K22

Я просто к тому, что это как «хочу заниматься литературными переводами, посоветуйте букварь». Выучить десяток инструкций и порядок операндов — самая простая часть в этом деле, кмк. Хотя это может просто у меня мозги повёрнуты не в ту сторону.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Я хочу править оригиналы своим корявым языком, если уж лезть в такие аналогии. Утилиты для разбора uefi есть. Задача - понимать и модифицировать некоторые области. Остальное уже потом, а может и никогда.

K22 ()
Ответ на: комментарий от praseodim

Американское AHБ опубликовало Ghidra как тоже спо.

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

o- ()
Ответ на: комментарий от K22

Что интересно, для разбора бивисов у них даже специальный модуль есть.

K22 ()
Ответ на: комментарий от DELIRIUM

Всмысле? Тебе ссылку на контакты сейлзов дать, или сам нагуглишь?

Ты реально не понимаешь о чем тебе говорят. Даже если бы ТС был готов заплатить деньги за IDA, ему бы все равно не продали лицензию так как он никто и имя ему никак. Ее и особенно плагин для декомпиляции просто не продают неизвестным людям.

o- ()
Ответ на: комментарий от DELIRIUM

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

А если для хобби или мелкой халтурки, то одно дело заплатить в пределах 100 баксов и совсем другое - почти 2000, а тем более и десятки килобаксов. Кстати, 1800 - это только за базовую поставку. И как уже говорил, но ее еще не всякому продадут.

praseodim ★★★★★ ()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от K22

Между прочим, рекомендую разбираться, позаботившись, чтобы софтинка в интернет не могла вылезть.

praseodim ★★★★★ ()
Ответ на: комментарий от praseodim

Да ида-то вроде понятная, только непонятно нихрена что в коде к чему, обозначений-то никаких нет. Ладно, поменяю через AMIBCP что мне надо и дальше сравню результат, всё оказалось даже проще чем я думал.

K22 ()
Ответ на: комментарий от praseodim

Ну у ТС же сириоус бизнес, а для поиграться и radare2 хватит. А пиратить иду про, не зная ничего про принципы реверса и не зная ассемблера - это как пиратить Фотошоп, чтобы фоточки с телефона ресайзить и красные глаза убирать.

DELIRIUM ☆☆☆☆☆ ()

Короче сделал чо надо было. Hex-редактора достаточно, но ида помогла с пониманием что редактировать-то. Вопрос пока закрыт, потом Юрова с Касперски накачу.

K22 ()
Ответ на: комментарий от K22

Обрати внимание еще на Hiew. Если нужно просто хороший hex-редактор с дизассемблером. Причем лучше купить, так как продается совсем недорого (555 рублей за версию для физлица без обновлений) и россиянином.

praseodim ★★★★★ ()
Ответ на: комментарий от K22

Не быть тебе корректором UEFI. Не быть...
No way. :-D

Deleted ()
Ответ на: комментарий от Harald

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

Там реально паранойя у разработчиков на тему того, чтобы последние версии не утекали на сторону из-за чего просто так купить иду как минимум человеку из СНГ довольно сложно.

o- ()
Ответ на: комментарий от Harald

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

praseodim ★★★★★ ()
Ответ на: комментарий от K22

Если Си понимаешь, то https://godbolt.org/ неплохо помогает понять, что к чему. Одновременно изучаешь инструкции и качаешь скилл «разбираться в непонятном».

Написание дизассемблера хорошо помогает детально вникнуть в кодировку инструкций. Заколебёшься, зато разберёшься.

i-rinat ★★★★★ ()

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

WindowsXP ★★ ()
Ответ на: комментарий от i-rinat

Память набортную напаянную отключил на асусе залитом. Будет с планкой в слоте работать.

В принципе можно страпами было сделать, но ни схемы, ни борды на на него нет, а проц снимать и отзванивать затрах. Вот решил чему-то новому научиться.

K22 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.