В этом треде мы изучаем самый компактный и низкоуровневый язык Ассемблер и смежную с ним область: Реверс-инженеринга (RE).Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС, а то и саму ОС? Вам сюда.Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.Шапка треда в процессе пополнения, пока так.Книги по RE:https://beginners.re/ - "Reverse Engineering для начинающих"- бесплатная современная книга на русском языке. К прочтению вкатывающимся и прочим ньюфагам обязательна!https://www.goodreads.com/shelf/show/reverse-engineering - список книгСайты по RE:http://wiki.yobi.be/wiki/Reverse-Engineeringhttps://www.reddit.com/r/ReverseEngineering/comments/hg0fx/a_modest_proposal_absolutely_no_babies_involved/http://www.program-transformation.org/Transform/ReengineeringWikihttp://blog.livedoor.jp/blackwingcat/https://yurichev.com/blog/http://wiki.xentax.com/index.php/DGTEFFВсе книги и статьи Криса Касперски (R.I.P.)https://yadi.sk/d/CxzdM1wyea4WPКниги по ассемблеру:"Архитектура компьютера" Э. ТаненбаумС.В. Зубков: Assembler. Язык неограниченных возможностей.Сайты по ассемблеру:Замена почившему wasm.ru- https://wasm.in/https://www.unknowncheats.me/wiki/Assemblyhttp://asmworld.ru/https://software.intel.com/en-us/articles/intel-sdmhttp://www.nasm.us/doc/https://sourceware.org/binutils/docs/as/index.html#Tophttps://msdn.microsoft.com/en-us/library/afzk3475.aspxДля ковыряющих винду и софт под неё, сайты с описанием структур со смещениями и разными версиями оных:http://geoffchappell.com/http://msdn.moonsols.com/http://terminus.rewolf.pl/terminus/Предыдущие№1 https://arhivach.org/thread/223223/№2 https://arhivach.org/thread/255168/
О, даже Крис есть тут в списках. Я бы посоветовал еще добавить курс exelab. Ранее это было очень уж годно, а сейчас уж не знаю как. Кстати, ОП ты пробовал реверсить с помощью radare2? Стоит туда вкатываться как в альтернативу IDA? Хотя мне она нравится. Уж куда лучше, чем родна и любимая олля, жаль уже почившая.
>>1015220Я пробовал r2. Не рекомендую третий тред подряд, даже рядом с IDA не стоял, если тебе что-то серьезное нужно. А несерьезное можно хоть через objdump -D реверсить. Единственная причина использовать - кококо ида нешвабодная, дорогая, а ильфак пидар.Алсо, что касается ольги, то ее клон вполне юзабелен, жив и здравствует, называется x64dbg.
>>1015227>Алсо, что касается ольги, то ее клон вполне юзабелен, жив и здравствует, называется x64dbg.И как годно? Блин, надо бы грузануть, вспомнить старые-добрые времена, хех :)
>>1015220>Кстати, ОП ты пробовал реверсить с помощью radare2?Даже не понял, как начать. Какая-то хуета для хипстеров.
Анон >>1000505, отпишись.
>>1015281Аюшки?Я забил, пока катаю бота за кэш, раз своих мозгов не хватает.
>>1015227>Единственная причина использовать - кококо ида нешвабодная, дорогая, а ильфак пидар.Но ведь это весомая причина, всё-таки.Ковыряю сейчас r2+webui, в первом приближении сносно. Сравнивать с IDA пока нелепо, но с objdump ещё нелепей.
Посоны, накидайте binary bomb для лоу-лвл новичка, пожалуйста. Гугол чего-то не оче релевантно выдаёт.
>>1015315Што? Поясни, что ты имеешь в виду. Какой-то фантастики начитался?
>>1015296Откуда вообще в этом итт треде взялось слово веб? У меня, например, бинарники по 10-20 метров, после анализа базы иды весят по полгига. Ида просто рисует нужные места листинга при переходе, а браузер как? Полностью грузит? Ну удачи ему, лол. Динамически подгружает при скролле? А если я долго скроллю?Не пробовал вебморду, от консольного интерфейса впечатления в основном негативные, от функциональности тоже, новый нативный гуй тоже руки не дошли еще посмотреть.Хорошего в веб-клиенте (или лучше в нативной ренедерилке, которая не будет продираться сквозь десятки слоев абстракций и песочниц, и не будет заставлять html/css делать не свойственные ему вещи) - только возможность запустить сложный анализ где-нибудь на соседней машине, пока на своей машине я лампово пишу скрипты и собираю сигнатурки для либ. Ну и совместная работа, куда же без нее, хотя с ней все очень сложно, нужен вменяемый undo, с которым все еще более сложно.
>>1015329Не могу защищать radare2, так как с ним не работал, но не могу не заметить, что ты поехавший, если думаешь, что веб-интерфейс принципиально не может иметь возможности подгружать только нужные области данных. Говоря проще, хуйню несешь какую-то. Если ты имел в виду конкретную реализацию веб-интерфейса, а не веб-интерфейсы вообще, то ты просто очень плохо выразил мысль.
>>1015337Перефразирую: количество анальной боли при реализации нативного интерфейса не идет ни в какое сравнение с той болью, которую придется испытать, чтобы сделать что-то хотя бы отдаленно юзабельное в браузере. Да, я имею в виду веб-интерфейсы вообще, и мне очень жаль, что индустрия до этого докатилась.
>>1015316ну типа http://zpalexander.com/binary-bomb-lab-phase-1/ же
>>1015329Ты какой-то из 90ых.Анальную боль несут с++/жаба, а не нода. А экономить на байткоде в 2к17 может хотеть либо ембеддщик с 8-битной атмегой, либо старый пердун с устаревшими рефлексамм.Загугли скрины уже, если самому некогда ковырять.
>>1015291Как ты быстро.У меня нет WoT и скачать для того, чтобы посмотреть, нет возможности. Изменить количество боёв - не проблема. А где создаётся второй запрос, не знаю. Мне нужно узнать, где функция шифрования, та, которая использует '/start?data='. В IDA нет ссылки на неё. Возможно, она с помощью VMProtect защищена, а может и косвенно вызывается, поэтому и ссылки нет.OllyDbg 2.01 с плагином ScyllaHide (а может и без него, не проверял) нормально запускает программу. Запусти в отладчике, дождись, пока программа проверит валидность ключа, а потом поставь точку останова (Ctrl+G, название функции, когда перейдёт, жми F2) на WS2_32.send. Хотя разработчик для проверки ключа использует функцию WININET.HttpSendRequestA, то можно и на эту функцию поставить точку остановки.И не забудь выключить ASLR, в данном случае это только мешать будет. Скопируешь в блокнот, сохранишь как *.reg файл. Или в реест залезь. Потом перезагрузись.Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]"MoveImages"=dword:00000000
>>1015372Бро, при запущенном боте этот БП срабатывает постоянно, даже когда тот ничего не делает.
>>1015467>при запущенном ботеЕсли запустить программу, она дважды соединяется с сервером: проверка обновлений и проверка ключа. Затем ничего не передаётся. По крайней мере, у меня именно так. Вот после запуска и проверки нужно поставить брекпойнт.Как вижу, передаётся 4 байта. Посмотри в Wireshark, что он там передаёт. Пингует сервер, что ли?
>>1015581Увидел, передаётся 00000001. Поставь условный брекпойнт, Shitf+F2, [esp+0c] > 64
>>1015581Так же себя ведет, может в условии очепятка?
>>1015599Нет, теперь всё правильно. Размер буфера 0xC1, что больше 0x64. А что хотя бы передаёт? Текст или бинарные данные? Щёлкни на третьем, от вершины стека, параметре правой кнопкой мыши и нажми "Follow in Dump". Если там текст "GET /start?....", то нужно будет трассировать до функции шифрования. Сначала можно Ctrl+F9, таким образом отладчик остановится на первом ret, что как раз будет выходом из функции send. А дальше F7 или F8 и смотри, что там идёт. Нужно найти, где в стек кладётся адрес (07CB15C8 в данном случае). И найти, откуда он берётся. Где-то поблизости, если повезёт, будет функция шифрования.
>>1015615Кстати, по адресам 00444B67 и 00444B90 что-то ксорится. Поставь брекпойнты там и посмотри, что там было изначально.
>>1015615>Посмотри в Wireshark, что он там передаёт.Абсолютная тишина.>Follow in DumpПикрелейтедЭта апишка не может для чего-то еще использоваться, кроме передачи по сети? Общение между потоками, например, я хз.Вообще я ловил два типа запроса, проверка ключа и этот start?data. Первый отправляется при запуске бота и старте боя, второй только при старте боя. А БП про который ты говорил срабатывает постоянно, я даже кнопку "в бой" не успеваю прожать.
>>1015627>Абсолютная тишинаПодозрительно.>для чего-то еще использоваться, кроме передачи по сетиЕсли в сеть не идёт, значит локально используется.Попробуй брекпойнт на WININET.HttpSendRequestA. Или измени условие на[[esp+8]] == "GET"
>>1015662>WININET.HttpSendRequestAПопался этот самый запрос с data.Не мог бы ты пояснить, куда копать дальше? По Ctrl-F9 меня кидает рядом, на 7129193D.
>>1015677Может скупе или что-нибудь такое? Там шустрее будет общение.
>>1015369В общем, какой-то локальный мемчик про какую-то скучную лабу. Решай крякми, реверси реальный софт, реверси свои собственные сэмплы, забей на эту хуйню.
>>1015735> локальный мемчикhttp://uu-kk.blogspot.ru/2014/06/of-binary-bombs-part-6.htmlhttp://csapp.cs.cmu.edu/2e/bomblab.pdfhttps://www.reddit.com/r/compsci/comments/5wzbfb/defusing_a_binary_bomb_phase_1/https://github.com/petroav/CMU-assembly-challenge>крякмиОк, спасибо за наводку.По сути, то же самое.
>>1015682Можно и так. А можно и здесь, как-то по теме треда всё же.>>1015677Предыдущий скрин, нашёл алгоритм шифрования, немного перепечатал с экрана, расшифровал и похоже, что передаются какие-то настройки. Почему так - не знаю. Скачал базовый набор для WoT на 2.5 Гб. И у меня отказывается загружаться CyberTank, если уже запущен клиент, а если сначала его, то не показываются танки. Как сделать, чтобы были доступны?>куда копать дальшеТебе надо найти, где данные шифруются. Если пролистнёшь по стеку (правое нижнее окно) вниз, то есть вероятность увидеть не шифрованные данные. Сейчас там видна шифрованная строка. Если не шифрованные данные есть, то жмёшь Ctrl+F9, оказываешься в конце функции, жмёшь F7/F8, оказываешься в предыдущей функции. Жми поочерёдно, посматривая в стек до тех пор, пока не дойдёшь до функции, которая шифрует строку. Ещё можешь сделать дамп программы (плагин OllyDumpEx, например), загрузи его в IDA, так гораздо удобнее будет.Завтра попробую сделать сам, если не осилишь, ты только напиши, как эти танки в ангар добавить, когда они и так там уже стоят.
>>1015912>нашёл алгоритм шифрования, немного перепечатал с экрана, расшифровалМожешь скинуть описание?>похоже, что передаются какие-то настройкиМое предположение, в начале каждого боя, в параметре data бот отсылает хозяину ключ, плюс карту, возможно сетапы, а в ответ получает алгоритм действий и заодно декрементится счетчик доступных боев на серваке.>отказывается загружаться CyberTankНе могу сказать, не сталкивался с такой траблой. Единственный момент, чтоб дойти до момента передачи шифрованных данных, нужен валидный ключ. Если хочешь, могу расшарить каким-нибудь тимвьювером свою виртуалку с игрой, ботом и olly.>Завтра попробую сделать самЕсли будет проще, напиши в скупе j0hnny_mn3monic[at]outlook.com, предоставлю готовое рабочее окружение.
>>1016125Шифрование крутится в виртуальной машине VMProtect, что ожидаемо.>Можешь скинуть описание?for (i = 0; i < data_size; decrypt[ i ] = encrypt[ i ] ^ ((i + 0xD5) % 0xFF), i++);>Мое предположениеМаловато места для алгоритма. Уже выключил всё, а скопировать не догадался. Там передаётся ключ, какая-то шифрованная строка длиной символов 20, некоторые параметры или что-то подобное.>чтоб дойти до момента передачи шифрованных данных, нужен валидный ключНет, не нужен. Ключ периодически проверяется во время работы, но ответ легко подделать. Он не шифрован, в Wireshark ты должен был его увидеть. А шифрованные данные передаются уже после начала боя, когда секундомер ожидания начала боя дойдёт до 0.Как уже писал ранее, самый простой вариант в данном случае - просто отправить ранее перехваченные данные обратно программе. Простейший прокси-сервер, который не пустит трафик программы дальше твоего компьютера. Программа использует системные настройки, поэтому перенаправить трафик очень просто, "Свойства обозревателя/Подключения/Настройка сети" в "Панели управления". Перехватываешь один раз сессию и всегда её используешь. Один и тот же ключ должен, наверное, давать один и тот же результат, если там, конечно же, не добавляется что-то типа времени. Только не забудь добавить проброс трафика, который не относится к программе, дальше, а иначе тот же Хром перестанет работать, т.к. он использует системные настройки.>Не могу сказать, не сталкивался с такой траблойСтранное поведение, нужно сначала запускать программу в отладчике, а только потом игру, тогда всё работает.
>>1016149>for (i = 0; i < data_size; decrypt[ i ] = encrypt[ i ] ^ ((i + 0xD5) % 0xFF), i++);Блин, я у мамы тупенький. Это обратимо, помимо перебора?>А шифрованные данные передаются уже после начала бояСори, не совсем корректно написал, имел ввиду именно этот запрос. C подделкой счетчика боев в запросе checkKey проблем нет.
>>1016188> Это обратимо, помимо перебора?> XORМимопроиграл.
>>1016213>Мимопроиграл.Ну и что ты будешь ксорить, если на руках результат операции и два неизвестных?
>>1016220Где ты там два неизвестных нашел? Там однобайтовый ксор, просто тот байт просто не с нуля стартует и инкрементируется. Это не шифрование даже, а просто обфускация.
>>1016235X ^ ((Х + 0xD5) % 0xFF) = 0x6AСкажи мне пожалуйста, чему равно Х, я наверное действительно что-то не догоняю.
Ребзя, помогите опознать кодировку3a 04 - к33 04 - г66 00 - f70 00 - p6d 00 - m
>>1016188>Это обратимо, помимо перебораДа для ксора, функция шифрования и расшифровки одна и та же. Ты C(++) или C# знаешь? Имена всем переменным осознанные дал же, в чём именно сложность?>имел ввиду именно этот запросИменно этот запрос и имел в виду. Не нужен валидный ключ, чтобы добраться до функции шифрования. Бот сам начинает нажимать кнопки, вступает в бой, а затем отправляет шифрованные данные.Забыл написать, функция перед шифрованием находится по адресу 0043EA10, можешь посмотреть, что именно передаётся.А ещё мне мысль в голову пришла, что та странная строка - это может быть hardware ID, как защита от того, что тебе советую. Для одного и того же компьютера может и пройдёт.>>1016238У тебя ошибка, нет двух X.Первый X - текущий символ для шифровки/расшифровки.Второй X - это счётчик, он равен текущей позиции символа, от 0 до n - 1, где n - длина строки.
>>1016259Это обычный юникод, UTF-16LE.Латиница - как и положено ей быть, кириллицу можешь посмотреть здесь https://ru.wikipedia.org/wiki/%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0_%28%D0%B1%D0%BB%D0%BE%D0%BA_%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4%D0%B0%29
>>1016288>У тебя ошибка, нет двух X.Сори, спасибо.Правда лыжи все равно не едут. В твоих руках это ienpfmofkilamheebffnkiicpnacebnibeamjjbipaodeglnfpbbkdnhinbjnmkfaneghfmickenhfhchddohbjnjbngcjahbbgnkfmdegibppnj превращается во что-то удобочитаемое?Сори, что дергаю по ерунде, просто скила не хватает, а интерес разгорелся, лол.
>>1016293Спасибо тебе большое, действительно помог
>>1016448У меня тоже не едут, кстати. Может, вместо 0xd5 что-то динамическое? Алсо, зачем ты творишь эту херь с binascii, когда в питоне есть нормальные шестнадцатеричные константы?мимоанон
Давно хотел зайти сюда и спросить.Тут есть те, кто шарят в криптовке файлов, крипторах, алгоритмах шифрования и вот этом всем? Сложно ли мимо дурачку запердолить полиморфный криптор, и шоб антивирусы не палили без знаний ассемблера? Есть знания пифона и джаваскрипта.
>>1016563"Полиморфный" как бы подразумевает, что ты будешь менять инструкции в стабе. Чтобы что-то менять, надо знать, что оно из себя представляет. Выучи асм, это самый простой язык.
>>1016448>лыжи все равно не едутЭто не для этого, а вот для этого >>1015627.То, что ты привёл, как раз и есть то, что тебе, в итоге, нужно. Так что увы, с этим пока ничего не получится.Кстати, когда у тебя срабатывает брекпойнт на HttpSendRequestA, окно с игрой перестаёт реагировать на любые действия? Как будто бы зависло приложение? И почему команда, в которую кидает, всё время проигрывает? Они что, без одного танка не могут победить? Один раз была победа и раз 5 поражение.
>>1016730
>>1016730>когда у тебя срабатывает брекпойнт на HttpSendRequestA, окно с игрой перестаёт реагировать на любые действияДа>почему команда, в которую кидает, всё время проигрываетЭто норма, они бы и с тобой лузнули. Имхо, это фишка разработчика по разводу на донат.
>>1016149А как ты код из-под VMProtect вытащил? Что почитать?
>>1016909>А как ты код из-под VMProtect вытащилНикак не вытаскивал, функция была не защищена, а с программы был снят дамп, поэтому с ним можно работать в IDA.
>>1016925Ну с дампом-то понятно. Я думал, тут внезапно образовались спецы, которые саму вм раскручивают за полчаса.
А че на этих ваших ассемблерах писать можно? Надо прокачать архитектуру компютера там, операциооные системы, системное программирование. Короче, есть ли прикол писать на ассемблере?
>>1018318Что угодно. То же, что и на других языках.> есть ли прикол писать на ассемблереВ основном для обучения и ради интереса. Ну и для embedded небольшие кусочки приходится писать именно на ассемблере.
>>1018318>А че на этих ваших ассемблерах писать можно? Что угодно от Hello World до операционной системы.>Короче, есть ли прикол писать на ассемблере?Есть.
>>1018369>>1018371Спасибо аноны. Компиляторы же транслируют код в ассемблер или нет? Везде пишут, что компилятор транслирует в машинный код, но не в двоичный же?Есть такая цитата - "Если вы не знаете, как работает компилятор, то вы не знаете, как работает компьютер."
>>1018408Компиляторы (трансляторы) транслируют код во что-то. Это может быть машинный код (он же двоичный), может быть ассемблер текстом, может быть сишечка текстом (так делал C++ в давние-давние времена, и для последующей обработки уже требовался компилятор сишечки), может быть байткод какой-нибудь вм, может быть какое-то промежуточное представление (погугли link-time code generation - в таком случае машинный код генерит линкер, это позволяет делать некоторые глобальные оптимизации). Вариантов дохуя. Общее в них только то, что код на чем-то человекочитаемом преобразуется во что-то другое (часто более низкоуровневое, но не обязательно).
>>1018436Я не уточнил, что имел ввиду компиляторы в нативный код. Но я не могу понять, как можно компилировать в двоичный код, для чего. Если процессор понимает только команды ассемблера, как двоичный код будет исполняться? Тогда другой вопрос возникает, если компилятор транслирует в ассемблер, то тогда требуется повторная компиляция в исполняемые файлы компилятором ассемблера.
>>1018441Команды ассемблера - это текст. Компилятор ассемблера превращает текст в двоичный код, в байтики. В байтиках закодированы инструкции, ну т.е., вот такие-то биты говорят, какая инструкция, что она делает, вот тут у нас immediate, вот тут биты указывают, в какой регистр положить результат. Процессор читает байтики, разбирает вот эту закодированную информацию и делает, что указано.> Тогда другой вопрос возникает, если компилятор транслирует в ассемблер, то тогда требуется повторная компиляция в исполняемые файлы компилятором ассемблера.Именно так и делается в классическом тулчейне. Просто то, что ты считаешь компилятором, называется compiler driver. Для сишечки он: примет аргументы, вызовет препроцессор, для результата препроцессирования вызовет компилятор (транслятор), для результатов компиляции вызовет ассемблер, для полученных объектных файлов вызовет линкер, и ты получишь свой исполняемый бинарник. Компилятор может содержать все эти утилиты внутри себя, может объединять некоторые этапы (например, может напрямую генерить машинный код, и никакого ассемблера текстом), поэтому ты можешь получить исполняемый файл без промежуточных результатов - зависит от компилятора.
>>1018446Спасибо за подробное разъяснение. Команды ассемблера и инструкции процессора это не одно и то же? Если нет, то можно ли обращаться напрямую к процессору без ассемблера?
>>1018450Можно, но нахуя? Я теоретик-петухан, но для процессорных инструкций используют программаторы вроде. Поправьте, если обосрался.
>>1018450> Команды ассемблера и инструкции процессора это не одно и то же?Все сложно. Одну команду ассемблера ассемблер может превращать в разные инструкции (например, для тебя mov - это просто mov, а для процессора есть разные - mov reg, reg; mov reg, imm; mov reg, [reg] - опкоды отличаются), могут быть оптимизации на уровне ассемблера (масм заменял lea на mov, или наоборот - не помню уже), могут быть псевдоинструкции (например, в ARM некоторые команды не существуют на самом деле и разворачиваются в несколько реальных инструкций). Но в общем и целом соответствие почти полное. Т.е., ассемблерные "команды" - это просто человеко-читаемые имена для реальных кодов инструкций процессора.> можно ли обращаться напрямую к процессору без ассемблераКачаешь мануал по процессору, ищешь формат инструкций, ищешь таблицу опкодов, втыкаешь нужные числа в нужные места, пишешь байтики в память и выполняешь. В этом даже есть некоторый смысл, если ты хочешь написать свой JIT с нуля и не хочешь таскать за собой внешний кодогенератор или ассемблер.
>>1018450И вообще набери в гугле "васм заклинание кода". Где-нибудь обязательно перевыложено.
>>1018452Так если у процессора и ассемблера разные инструкции, то зачем лишняя прослойка? Пока не догоняю разницу между инструкциями процессора и командами ассемблера, если разница вообще есть.
>>1018462Ну типа ассемблер прощее машинного кода.
>>1018459>>1018461Спасибо за помощь. Зачем мне это? Чтобы понять откуда ноги растут. Слишком много абстракций друг на друге, хочется понять с чего все начинается, чтобы понимать как все работает изнутри. А то получается пишешь какие то заклинания, как будто магия. Это не дает мне покоя.
>>1018463Понятно что проще. Но для меня непонятно все ли возможности дает ассемблер, какие дает процессор. И какова разница в их эффективности. Опять же в ассемблерах встречаются функции, в процессоре как я понимаю их нет, вот хочу понять во что они транслируются.
Не знаю правильно ли нагуглил, но я немного в шоке. В руководстве интела по командам 2234 страницы. Больше чем референс С++.https://software.intel.com/sites/default/files/managed/a4/60/325383-sdm-vol-2abcd.pdf
Существует путаница, даже в руководствах Интела инструкциями процессора называют - команды непосредственно процессора, команды ассемблера, и даже двоичный код.
>>1018462>то зачем лишняя прослойка?Затем, что она адреса автоматически проставляет. Если ты пишешь в машинном коде, ты должен высчитывать размер каждой инструкции, чтобы поставить джамп в нужное место, знать адреса каждой константы. Причем если ты добавляешь код в середину функции, то все адреса, соответственно, изменяются, и тебе приходится все заново все пересчитывать. Основная функция ассемблера - именно линковка и проставление адресов, а не текстовое представление кода. Цифры не так уж сложно читать при должной практике.
>>1018470>правильно ли нагуглилПравильно.
Что думаете о forth?
>>1018641Для каких задач?
>>1018665Для разнообразных.
>>1018926Раз для разнообразных, то не подходит.
>>1018641Заебись технология. Только современному былокодеру ни к чему.
В PE файле релоки могут быть где либо кроме кодовых секций? Спрашиваю потому, что если придется их фиксить вручную, можно ли ебануть VirtualProtect(...PAGE_READWRITE, &oldProtect) по всему диапазону релоков, а потом восстанавливать через тот же oldProtect, или там могут попасться и секции данных, и tls и еще хуй знает то?
>>1020124> В PE файле релоки могут быть где либо кроме кодовых секций?Конечно. Пример (глобальные переменные):int foo = 1;int *bar = &foo;> или там могут попасться и секции данныхНу попадутся секции данных, но если ты все равно флаги защиты восстановишь, в чем проблема-то?
>>1015083 (OP)Господа, пишу криптор. Для запуска программы в памяти мне нужен PE-загрузчик. Стоит ли писать его с использованием некоторых объектов C++ STL? Отказываться от STL все равно что выйти из зоны комфорта. Может ли использование STL помешать морфингу кода и затруднить чистку стаба?
>>1020547Дак вот в том и дело, что если при каждой итерации для страницы это делать, то дохуя вызовов VirtualProtect получается. Я думал, может можно в 2 вызова это сделать, а не 2N
>>1020563Почему C++ такой уебищный? Пишу PE-загрузчик и десять минут потратил на создание сущностей для автоматического освобождения ресурсов, хотя если бы писал на си, то мог бы сосредоточиться на решении задачи.https://ideone.com/Yy5the
>>1020611А можно было написать класс и освобождать/закрывать все в деструкторе. Диды десятилетиями так писали, а тут ты со своим scoped.
Что находится в [image_optional_header] SizeOfHeaders? Суммарный размер всех заголовков или может быть что-то другое? Можно рассчитывать на значение этого поля, проецируя все заголовки на память?
>>1020705Количество байт с учетом паддинга нулями, выделенное под заголовки в файле, а не образе. В образе округляй по размеру страницы.
>>1015083 (OP)Подскажите библиотеки для ассемблирования и дезассемблирования или расскажите как пользоваться вот этим http://ref.x86asm.net/coder64.html Что означают эти r/m8, r16/32/64, m16/32, imm8. Ну я предпологаю, что r означает регистр, а остальное не очень понятно.А ещё я немного не понимаю команду jmp. Это относительный переход? Абсолютный? Или и то и то? Просто я не понимаю как происходят переходы в обычных программах, ведь они каждый раз загружаются в разные участки памяти. То же самое и с mov [адрес],значение.А ещё мне хорошо бы почитать про устройство elf-файла и линковку с библиотеками. Я не нашёл.Пост не мой я простио разместил объяву.Сходите пните этого хуя по оригинальной ссылке: https://lol_if_ox.org/b/res/174.html#330
>>1022266> библиотеки для ассемблирования и дезассемблированияkeystone/capstone> Что означают эти r/m8, r16/32/64, m16/32, imm8r - регистр, m - память, imm - непосредственное значение (константа, которая кодируется прямо в инструкцию) циферка - количество бит. r/m8 - восьмибитный регистр или байт из памяти.
Как эти китайцы запихивают свои иероглифы в название процедур?
>>1025441Молча. Они на них пишут. Ты тоже так можешь уже много лет:#include <stdio.h>static void йоба(char сообщение[]) { puts(сообщение); }int main(void) { йоба("привет, мир"); }Как тебе Hopper?
>>1025602Оперативку он жрет конкретно, бинарники от 20мб и выше IDA отжирает 300-400мб, Hopper жрет гиг и более. После закрытия файлов память практически не освобождается, постоянно нужно перезапускать программу.
>>1025754> Оперативку он жрет конкретноНу ничего, вот седьмая ида, которая 64-bit only, выйдет, и будет примерно столько же.
Сам реверсач, помоги неофиту. Решил я поиграть в скайрим, и сейчас нужно много золота. Ну я подумал - хули, сейчас подкрутим. Расчехлил ollydbg, запустил в нем skyrim и понял, что я обосрался: я не могу найти переменную, в которой хранится количество золота. Что я уже пробовал:1. Смотрел количество золота и искал его hex-значение в секции .data в виртуальной памяти, не исполняемом файле, он же вроде memory dump. Также искал значение в стеках каждого треда. Значение пробовал как в прямом порядке искать, так и обратном, свойственном виртуальной памяти (типа 00 00 0E 8B и 8B 0E 00 00 ). Нихуя не получилось, в памяти очень много адресов с этим значением.2. Далее, попробовал сделать search for referenced strings, поставил брейкпоинты на всю хуйню с текстом gold вне зависимости от регистра. Теперь, когда я открываю инвентарь, у меня срабатывает BP (т.к. там в инвентаре кол-во золота отображается), казалось бы, прощелкай пошагово всю хуйню и найди где есть обращение к переменной, в которой хранится количество золота. Но это пиздец, там очень много щелкать приходится. Я так понимаю, что 2 вариант более работоспособный, поэтому меня интересует, нет ли какого то механизма в ollydbg, который мог бы мне помочь? С чего вообще стоит начинать и как стоит делать, чтобы в программе найти значение какой либо переменной и подкрутить ей значение?
>>1026185Делай, как Крис Касперски: сделай дамп образа, чтобы зафиксировать текущее число голды. Измени количество голды и сделай еще один дамп. Для верности сделай еще дамп с другим количеством голды. Сравни дампы.
>>1026213А можно просто взять Cheat Engine, который сделает это автоматически. Алсо, искать константу лишено всякого смысла. Значение может быть в "копейках" (или еще каком-то fixed-point), может быть float или double. Может быть зашифровано, может дублироваться и сравниваться. Много чего может быть.
>>1026213То есть нет волшебной кнопки "сделать заебись"? Либо вручную перебирать ебучие DWORD'ы, либо сделать как ты предлагаешь, либо использовать cheat engine, который автоматизирует то же самое?
Реверсач, что обозначает нотация адресов как на пикрилейтед? Типа ImageBase + RVA вместо VA?
>>1028542Или entry point + rva?
>>1028542Именно так.
Что скажете о книге Калашникове для ньюкека?
>>1028885Нет разницы, как учить асм. Это самый простой язык, где все сложности заканчиваются на отличиях компиляторов. Можно хоть Intel SDM читать. Калашников сойдет тоже.
>>1028916Спасибо, анон. А что на счёт практических задачек? Как я понял, в ассемблировании важно понять не сколько сам яп с его синтаксисом и набором инструкций, сколько принципы работы CPU, изменение регистров по ходу кода етс. А у Калашникова ничего веселее разбора резидента нет вроде. Может есть какой-нибудь годный сборник лаб для студентов дцп курса, а то читать и тупо копипастить код уже утомило.
>>1028980Не знаю, чего тебе конкретного посоветовать. Так-то в 32-битный асм вкатиться проще: если знаешь какой-нибудь Си, можно компилировать код с разным уровнем оптимизаций и смотреть, во что он свернется; на васме были туториалы Iczelion-а, можно писать полноценные десктопные приложения, смотреть олькой или x64dbg, как они выполняются и т. д. Но у тебя там 16-битный код ведь? Пытайся играть с каждой новой инструкцией, пиши минимальные программки в 3-4 инструкции, разбирайся, как все работает. Возьми простые задачки для любого другого языка и пиши их на асме. Подходы к реализации от языка не меняются. Алсо, можешь взять Human Resource Machine, поиграть в нее, потом поделать то же самое на реальном ассемблере.
Пацаны, а каким образом хранятся переменные в C? Вообще переменные в высших языках это одно и тоже на низком уровне?Это же надо сопоставить имя переменной и ее значение. А Имя переменной оно же огромное, это буквы, каждую нужно закодировать минимум одним байтом. Почему дураки программисты их используют вместо номера ячеек памяти? Это же очевидная оптимизация!
>>1033634Толсто. Во время компиляции имена заменяются на номера ячеек памяти. Если изначально использовать адреса, ты заебешься их пересчитывать вручную при изменении программы. Для этого-то как раз изначально и придумали ассемблер, а потом и другие языки.
Сап, драч. Допустим, есть вызов функции, после которого EAX принимает известное мне еще до вызова функции значение. Мне нужно найти, где это значение присваивается в ходе выполнения функции. Можно ли в ollydbg поставить брейкпоинт, чтобы когда определенный регистр принимал определенное значение, срабатывал БП? Conditional breakpoint мне не очень подходит, т.к. он, как я понял, срабатывает на определенной инструкции, а не на всей функции
>>1034289Нашел походу. Run trace - это то, что нужно
Аноны, а что вы думаете по поводу виртуалок с режимом отладки? Например, той же BOCHS. Ну или хак VirtualBox с софтварным эмулятором.
>>1015220Годная тулза, но только если нравится/удобно ковыряться в сонсоли. Для большого унылого энтерпрайза не очень, но для ctf/прошивок/эмуляции - самое ономимо р2фанбой
>>1037376> Error in `r2': double free or corruption (!prev) > Aborted (core dumped)Каждый раз, когда у меня возникает необходимость это использовать (IDA под рукой нет), дело заканчивается листингом objdump. По разным причинам. Сегодня, например, вот так.
Что мне нужно учесть, если я в PE файл хочу добавить запись об импорте функции из kernel32.dll? Наиболее оптимальным по трудозатратам и красоте мне кажется в конец существующей таблицы импорта добавить новую запись kernel32.dll и нужную из неё функцию, ибо я в рот ебал вставлять функцию в уже существующем импорте kernel32.dll и искать все вызовы импортируемых после вставки функций, чтобы добавлять к ним смещение.Допустим, что секция, в которой находится таблица импортов, позволит вместить в себя достаточно байт, чтобы за оффсет не перевалить. Я понимаю, что нужно увеличить виртуальный размер секции с импортом, увеличить размер IMPORT_DATA_DIRECTORY или как там её. Какие еще подводные камни?
>>1038242Никаких, так и делают обычно. Учти только, что за импорты две датадиректории отвечают. Есть IAT еще.
Аноны вкатываюсь в реверс,учу асм парралельно с курсом с exelab, что еще мастхэв знать для реверса и что можно почитать?
>>1038294Шапку.
Как с нуля вкатиться в реверсинг?С чего из шапки начинать изучение?
>>1038722Молча.С начала.
>>1038294>>1038722Сцуко, аноны совсем разленились и не могут перейти по первой ссылке с шапки.АЛСО, удивительно, что тред ещё жив.ОП
>>1039413Да бля понятно что тут ссылок дохуя и все годные, я спрашивал про фундаментальные вещи и нужно ли они типо, а надо ли по ОС заморочится?Надо ли читать Таненбаумана?а архитектуру проццесора?мне сначала это прочитать а потом уже асм,гайды хуйды по реверсу или и так норм
>>1039626как вкатиться, как вкатиться. ответь себе вопрос что происходит с программной точки зрения, когда ты отправляешь сообщения на дваче от нажатия на клавишу и движения мышкой до ввода капчи и нажатия отправить. нахуй оно тебе нужно, читать сразу обо всём без конкретной задачи. информация не будет задерживаться. поставь себе задачу в поле RE. любую, хоть самую дебильную, и решай её. так и вкатишься.
>>1039634Спасибо анон, чтоб у тебя доляры сыпались рекой,любая прога реверсилась, а тянки прыгали на хуйце
подскажите годный дампер процессов. встроенный в ollydbg не подходит
>>1039626> надо лиНадо. И го выучить надо. И джаву с паттернами. И алгоритмы. И цифровую схемотехнику. Чем больше ты знаешь - тем проще реверсить. Но в каком конкретно порядке учить - похуй. Можно просто начать с первой ссылки в шапке. Можно просто выучить асм. Можно начать с теории.
Вопрос знатокам оптимизаций:как можн оптимизировать следующий цикл с учетом того что ег осложность что-то между O(n^2) и O(n^3). Все перменные это ymm регистры, но даже один единственный лишний mov уменьшает скорость на 15-20%
>>1039626>>1039626Таненбаум та еще ересь, по крайней мере на русском, в оригинале нет. Лет 20 назад до дыр зачитал книгу Кейслер операционные системы - проектирование. Проясняет мозги.
>>1042647Таненбаум читабелен. Местами вводит ненужные сущности, местами рассказывает о какой-нибудь хуйне до ее описания, но в целом норм (английскую версию читал).
>>1015083 (OP)Почему в ntdll нет функции LdrpAllocateTls?
>>1042915Потому что есть, но она внутренняя, не является частью публичного апи, и поэтому не экспортируется. Зачем тебе она?
>>1042944Эмулировать тлс в крипторе, передав часть задач системному лоадеру
>>1016757Зачем только за эти танки взялся? От нечего делать, сделал митм на трафик танков. Пароль передаётся в открытом виде, хотя он и в зашифрованном трафике, но заменить публичный ключ на свой не составляет труда, что, собственно, мной же и сделано. Не понимаю, что за тупость у разработчиков? Сделать SHA256 от пароля хотя бы что мешает? Увести пароль от аккаунта проще некуда, возможно, даже фаервол ничего не скажет, весь трафик будет локальным. А на сервере, интересно, пароль хранится в незашифрованном виде? А может так было изначально в движке. "Server Programming Guide" BigWorld легко гуглится.>When a player logs in to a BigWorld server, he sends a username and a password. These are compared to a server-side database, to make sure that the user is subscribed.Ни слова о том, что логин/пароль передаётся в зашифрованном виде. Вообще, защита трафика от прослушки (и, возможно, модификации) очень плохая. Мне даже не пришлось модифицировать программу, чтобы его прослушать.>It would still be possible for a player to hack its own binary and sniff the data stream from the server after it has been decrypted.Гордо написано в гайде, что не правда. Ничего не надо модифицировать, клиент не знает, сервер не догадывается.Интересно, что передаётся в трафике. Сейчас это набор бинарных данных, ничего толком не понятно, кроме строк, которые в них проскакивают. Действительно ли совсем ничего лишнего клиенту не передаётся?Так же у меня есть идея, как сделать обход проверки в боте. Но мне лень сейчас это реализовывать.
>>1042965Ты в свой тред заглядывал вообще? Что ты конкретно хочешь эмулировать? Ты осознаешь, что к моменту, когда твой код получает управление, процесс уже создан, и LdrpAllocateTls уже отработала? Зачем тебе второй раз ее запускать?
>>1043001> публичный ключ на свой не составляет трудаЭто палево и пиздец какое, олсо:>Сделать SHA256 от пароля хотя бы что мешает?Что мешает вычислить пароль с коллизионным SHA256?
>>1043170>Это палевоВ чём или на чём? Само собой, трафик нужно расшифровать и снова зашифровать нужным публичным ключом. Мой аккаунт пока что не заблокировали. Если заблокируют, тогда где-то по тихому передаётся информация о публичном ключе. Не написал, что используется RSA, не сертификат.>с коллизионным SHA256Сложность вычисления коллизии? Это всё-равно лучше, чем пароль открытым текстом. Можно усложнить и добавить соль, которую присылает сервер. Или ещё более усложнить, вычисляя SHA от SHA несколько тысяч раз, как сделано в Wifi.
Пиздец раскажите плз как вы найдете коллизию для sha256
>>1043177>на чёмНа сервере, паблик скорее всего из кольца, если оно не сойдется - будет не очень хорошо.Вот краткое овервьюhttp://maths.straylight.co.uk/edb_files/crypto_colloquium.pdf>Сложность вычисления коллизииO(1), для ключей до 128 бит есть уже предрассчитанные словари.
>>1043335Долбаеб, речь была о sha256, расскажи давай как коллизию искать будешь?
>>1043354https://eprint.iacr.org/2008/270.pdfГовна наверни мамки ананимас
>>1043360Прочитай первую строчку. Эта атака на reduced-версию, меньше половины раундов.
>>1043360Долбаеб короче с кем я спорюТы сам читал статью то? Это поиск коллизии только на 24 раунда из 64 в SHA256, для всех раундов каких либо результатов значительно снижающих количество операций пл сравнению с полным перебором - нет.Кроме того только недавно была опубликовпна ПЕРВАЯ коллизия найденная гуглом на суперкомпах для SHA-1, а SHA-256 значительно сложнее [1], короче иди нахуй уроки учить 1. https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html?m=1
>>1043372Что мешает навернуть birthday поверх этой заготовки?>>1043376Найс аутофиляция. Жаль ты в Вегас в том месяце не был, было бы интересно посмотреть на этот манямир вживую.
>>1043391> Что мешает навернуть birthdayМешает то, что SHA256reduced - это не SHA256. С точки зрения криптографии - это две родственные, но разные хэш-функции.
>>1043397Но разве мы не можем перейти от одного класса к другому заменив функцию расширения сообщений использующуюся с DCE?Я просто к чему веду, недавно ломали JP Morgan Chase, кто в теме говорили о факте компроментации (сорри за мой русский он не совсем родной, я его не очень часто практикую, разве что в /b/) SHA256 на 80 раундов, причем во внутренней сети, т.е. дело обошлось ресурсами какого-то из внутренних серваков на который закинули минимальный код через сотрудников. Да и пруфы косвенные есть, в частности сменили все хеши на BF судя по техникал репортам.
Пацаны тут СЕНСАЦИЯ сыч с двача ищет коллизии к SHA 256 как два пальца, чисто чтоб пароль к танкам проснифить,призываем срочно в тред криптографический отдел гугла чтоб захайить ГЕНИЯ, в то они там мучаются а на дваче все давно уже известно!!
>>1043457>криптографический отдел гуглаЗнал о хартблиде за три года до публикации уязвимости. А ты продолжай веровать.
>>1043469Т.е вся твоя аргументация строится на теории заговора которую невозможно подтвердить мои опровергнуть?Кще раз, парень писал что надо бы закрыит алеие текст пароли в протоколе танков хотя бы хешем SHA256, на что анон (ты или другой) ответил что это ничего не изменит и якобы колизию подобрать легко. Плз расскажи как ТЫ это будешь делать? Без крутых историй заговора и херни типа я был на конфе в вегасе, а также ссылок на статьи которые ты сам не читал.
>>1043473> закрыть плеин текст паролибыстрофикс, соррр с телефона пишу
>>1043473>теории заговора Посмеялся от души, спасибо.>ничего не изменит Это так>как ТЫ это будешь делать>Без крутых историйVentureCrypt дальше ты сам, раз просил без историй. За что люблю русских - говно всегда лезет вперед всего. Проигрывать можно бесконечно :^)
мой проваёдер нарушает закон, по-видимомут.к. я живу в украине но все сервисы мэйл ру работаютвпрочем, у меня дом. сеть, т.ч. всё возможно
Есть софт для которого под МакОС есть кряк. Кряк сделан в виде замены главного exe файл. Лицензирование сделано через текстовый txt файл. Exe'шник при попытке запуска через виртуалку отрубается.Насколько сложно будет портировать кряк под шиндовс? Ида умеет разбирать маковские исполняемые файлы? Есть ли там аналог diff'a для сравнения двух версий файла? Чтобы сразу было ясно где пропатчено? Кто-нибудь тут уже делал подобные операции?
>>1054437Все сам нашел и почти сделал.
>>1054463Нашёл- расскажи другим.
>>1054823Ничего я не смог сделать. Пропатчил аналогичным образом под шиндовс и нихуя не заработало. Программа зависает. Сижу разбираюсь почему.
Это тред байтоебов? Поясните, пожалуйста за такую вещь. - вот есть некий вирос, он ловится антивиросами по характерным сигнатурам (да?).- сигнатура - это машинный код.- одно и то же состояние регистров может быть вызвано разным машинным кодом / ассемблерными коммандами.- предположим, у нас есть метод автоматически получать подобные "синонимичные" комманды (разный машинный код, приводящий к одинаковым состояниям регистров) для любого нужного состояния регистров. Можем ли мы исходя из этого получить неуязвимый вирос, просто меняя изначальный машинный код на "синонимичный"?
>>1055424https://ru.wikipedia.org/wiki/Полиморфизм_компьютерных_вирусов>получить неуязвимый виросС 1990 года хитрые человеки пытаются, говорит статья выше.
>>1055424>он ловится антивиросами по характерным сигнатурам (да?).Нет. Это уже не так с середины 00-х. Ловится по поведению динамически.>Можем ли мы исходя из этого получить неуязвимый вирос, просто меняя изначальный машинный код на "синонимичный"?Можем.
>>1055497>>1055509>Ловится по поведению динамически.А какое поведение считается неправильным? Представим полностью полиморфный meterpreter. Антивирос его не спалил по сигнатурам. Что нужно сделать программе, чтобы антивирос таки догадался? Ну кроме очевидной толстоты - форматирования винтов, массового удаления файлов и т.д.
>>1055512>массового удаления файловСудя по массовому распространению шифраторов, это нормальное поведение программы. Не нормальное поведение для антивируса, это когда программа создаёт удалённый поток, копирует/записывает в память чужого процесса, изменяет исполняемые файлы, читал, что очень не нравится антивирусу, когда программа обращается к службе BITS. Много чего ему может не нравиться.
Ебать журнал ксакеп теперь стоит 500 рублей за штуку. Не покупал его лет 15. Странно, что оно вообще еще выходит.
Поясните, пожалуйста, за тонкую разницу и отношения между опкодом, байткодом и машинным кодом. Как понял я:- мнемоники (MOV, PUSH и т.д.) - удобное для человека представление опкодов- опкод - единичный элемент машинного кода- машинный код - исполняемая процессором последовательность опкодов (?)- байткод - ???- отношение опкода к байткоду - ???- отношение машинного кода к байткоду - ???Или где можно почитать про это внятно, коротко и по-существу?Что скажете за этот ресурс http://ref.x86asm.net/
>>1056105опкод - MOVмашинный код - 010110110110111...байткод - 0145 5451 1245 1243 ABEF
>>1056129>опкод - MOVНо MOV это же мнемокод для удобства, опкоды у этой комманды могут быть разные. Машинный код - это бинарное представление 16ричного байткода?
А еще есть https://en.wikipedia.org/wiki/Micro-operation Короче, я окончательно запутался... Вот то, что можно посмотреть в hiew - это что? Опкод, машинный код, байткод или микрооперации?
>>1056105>байткодГде-то читал такое определение. Байткод - это код, длина которого равна одному байту. Как понимаю, длина команды, без аргументов. Это, по большей части, к скриптовым языкам относится.Остальное не знаю. Вроде про мнемоники правильно ты написал.
>>1056201Байткодом обычно называют машинный код для несуществующей (виртуальной) машины.>>1056174> что можно посмотреть в hiewХекс-дамп. Для дизасма лучше использовать более современные инструменты. В дизасме ты видишь представление машинного кода в виде мнемоник ассемблера. Опкод - часть инструкции (байтики), кодирующая непосредственно саму операцию (остальные части могут кодировать непосредственные значения, регистры, условие и т. д.). Микрооперации выполняют процессоры с микрокодом при обработке всех или только некоторых сложных инструкций (т.е., инструкция машинного кода может выполняться в виде нескольких микроопераций).
>>1056174У микропроцессора есть система (набор) команд, которые он может выполнить, и все эти команды кодируются в памяти с помощью чисел. Ну условно говоря, число 1 может обозначать "сложить регистры A и B и поместить результат в C", а например 2 - "поместить ноль в регистр X". Соответственно, программа для процессора записана в памяти как последовательность таких чисел. Он читает их и выполняет по очереди. Опкод - это просто сокращение для "код операции". В машинном коде у каждой команды свой код, это и есть опкод. В примере выше 1 это опкод для операции сложения.Машинный код (копипащу) или машинный язык — система команд (набор кодов операций) конкретной вычислительной машины. Человеку неудобно читать числа, потому придуман ассемблер - язык, который представляет машинные коды в виде текстовых команд вроде ld r12, 0x0Байткод - это что-то вроде машинного кода, но не для процессора, а для виртуальной машины (например, байткод Java или .NET). То есть последовательность примитивных команд, записанная в виде чисел, которую выполняет не процессор, а программа (виртуальная машина). Команды в нем не обязаны занимать один байт.Микрооперации - это примитивные внутренние для процессора команды, на которые он разбивает большую сложную команду. Ну то есть если допустим у какого-то процессора есть команда "поместить в регистр X значение из ячейки памяти по адресу равному Y + Z" то он может разбить ее на такие микрооперации: - сложить регистры Y и Z, поместив результат во временный регистр T- направить запрос на чтение памяти по адресу из T- поместить пришедший из памяти результат в регистр XМикрооперации никак не видны снаружи, они есть только внутри процессора и про них знают только его разработчики (информация о внутреннем устройстве процессора обычно не публикуется). Когда-то в микропроцессорах все команды (и микрооперации, на которые они разбиваются) были жестко заложены в схеме, но в последние лет 20 вместо этого используют микрокод, который можно перезаписать. Это сделано для того, чтобы можно было исправить ошибку после выпуска процессора.> Вот то, что можно посмотреть в hiew - это что?На этом скриншоте http://www.hiew.ru/pic/hiew851.gif я вижу такие колонки: - смещение в байтах относительно начала файла- машинные коды, записанные в 16-чной системе счисление, представляющие одну команду процессора (те самые опкоды)- та же команда на ассемблере
>>1056174Ты бы попробовал сделать или хотя бы спроектировать простейший микропроцессор из логических элементов, сразу лучше все это понимать начнешь.
>>1055424Имя на значке отражено зеркально. Должно быть наоборот. и волосы на блины почему-то падают
так может кто-то пояснить как взломать SHA-256?думаю биткоинов намайнить побыстрому
>>1057188Спасибо, теперь понятно. А вот на пике одним и тем же ассемблерным коммандам соответствуют разные коды, это почему? Или там не только комманды, но и операнды?>>1057189>Ты бы попробовал сделать или хотя бы спроектировать простейший микропроцессор из логических элементов, сразу лучше все это понимать начнешь. Да ну, я в такое не смогу.
>>1057370> одним и тем же ассемблерным коммандам соответствуют разные кодыТут от разработчика набора инструкций зависит. Обычно разные опкоды делают для разных наборов операндов. Например, может быть опкод для mov reg, imm32, и другой для mov reg, reg.
>>1057242Просто берёшь и перебираешь все варианты.
>>1057370> одним и тем же ассемблерным коммандам соответствуют разные кодыЗначит они не совсем одинаковые. Если ты про таблицу отсюда >>1056137 - то там именно что разные команды. Ну например, если взять первые 3 строчки: MOV r/m8, r8 | 88 MOV r/m16/32/64, r16/32/64 | 89 MOV r8, r/m8 | 8A Видно, что здесь одна команда, но разный порядок и типы операндов. В зависимости от них и выбирается код.Также, здесь написаны команды в обобщенном виде. Ну например r8 (r = register) - это один из 8-битных регистров (AH, AL, BH, BL, CH, CL, DH, DL). А r/m8 (m = memory) значит "8-битный регистр или указание на ячейку памяти". То есть реально кодом 88 кодируются команды вроде MOV AH, BLMOV [EAX + 4], AHMOV [адрес ячейки], CLТебе стоило бы почитать про режимы адресации, где описано какие именно аргументы могут быть у команд. Я что-то не нашел хорошего описания, потому дам ссылку на ту же страницу: http://www.c-jump.com/CIS77/CPU/x86/lecture.html#X77_0090_addressing_modesТут видно, что указать в качестве r/m8 адрес ячейки памяти можно несколькими способами (квадратные скобки обозначают доступ к памяти): - указать ядрес явно: MOV [123456], AH -> скопировать 1 байт из ячейки с адресом 123456 в регистр AH- указать, что адрес берется из регистра: MOV [EBX], AH- указать что адрес хранится в 32-битном регистре, к которому прибавляется 1-или 4-байтное смещение: MOV [EAX + 12], BH- указать адрес с помощью сложного выражения SIB, вроде MOV [EAX + EBX x 4], CHРазумеется, чтобы их различать, после кода 88 идут дополнительные байты. Если мы почитаем например статью тут http://www.c-jump.com/CIS77/CPU/x86/lecture.html#X77_0020_encoding_overviewто мы увидим, что инструкции в машинном коде могут состоять из нескольких байт. - в начале может идти префикс, меняющий какие-то параметры команды (обычно он используется для выбора размера данных, надо которыми выполняется операция, 16/32 или 64 бита), - затем идет опкод из 1 или 2 байт- затем может идти байт MOD R/M который кодирует, над какими именно регистрами делается операция - затем может идти байт SIB, смещение или явно указанный адрес ячейки памяти. Они указываются только если они используются в команде.Так что реально команда MOV AH, CL кодируется 2 байтами - код операции и байт выбора регистров MOD R/M. А команда MOV [123456], AH состоит из опкода, байта MOD R/M и 4-байтового адреса ячейки памяти.Ты просто наверно пропускаешь основы и берешься сразу за сложное. Сначала тебе надо изучить, какие есть в процессоре регистры, какие есть режимы адресации, а потом уже смотреть, как кодируется та или иная команда, иначе ты не поймешь зачем нужны байты вроде MOD R/M в машинном коде.Ну и не у всех процессоров такая сложная система команд. Если еще такой подход как RISC, где используется небольшое число простых команд.
>>1057370Чтобы спроектировать процессор, надо изучить логические схемы: регистры, триггеры, счетчики, логические элементы. Соответственно, (простейший) процессор состоит из: - постоянных и временных регистров для хранения данных- АЛУ, устройство, которое делает арифметические и логические операции надо числами (например, складывает)- шины или шин для передачи данных между регистрами, АЛУ и памятью- декодера команд, который "разбирает" код команды и о котором нижеВот пример простейшего процессора. Он содержит: - IP - регистр, хранящий адрес текущей выполняемой команды. Он увеличивается на 1 после чтения одного байта из памяти. Изначально при включении процессора он хранит 0, то есть программа должна располагаться в памяти, начиная с ячейки с адресом 0- временный регистр CMD для хранения прочитанной из памяти команды. Вход этого регистра подключен к шине данных (по которой приходит прочитанная команда), а выход - к декодеру- декодер команд. Он читает команду из CMD и выдает на выходах сигналы, указывающие микрооперации, из которых состоит команда- 2 8-битных регистра A и B- временный регистр для хранения результата R- АЛУ, входы которого жестко подключены к регистрам A и B, а выход к R Процессор должен разбивать команду на микрооперации, каждая из которых выполняется в определенный момент времени (такт). Допустим, у нашего процессора есть команда LD A, $X, которая кладет в регистр A число $X (указанное после кода команды). Вот как ее можно разбить на микрооперации: Первые 3 микрооперации выполняются для любой команды (чтение кода команды из памяти), а следующие зависят от того, какая именно команда была прочитана.1) подсоединить выход регистра IP к шине адреса памяти, подать в память сигнал чтенияВ ответ на это память выдаст на шину данных содержимое ячейки по адресу из регистра IP.2) подсоединить вход CMD к шине данных и сохранить пришедший из памяти код команды в этом регистре. Так как выход CMD подсоединен к декодеру команд, то он разбирает команду и на его выходе появляются управляющие сигналы, которые выбирают, какие именно микрооперации (на шагах 4, 5 и 6) надо будет делать дальше. 3) увеличить значение регистра IP на одинТеперь идут микрооперации, которые относятся конкретно к команде LD A, $X. Нам надо прочитать следующий байт из памяти и сохранить его в A4) подсоединить выход регистра IP к шине адреса памяти, подать в память сигнал чтенияВ ответ на это память выдаст на шину данных содержимое ячейки по адресу из регистра IP (то есть число $X, которое хранится после кода команды)5) подсоединить вход A к шине данных и сохранить значение с нее в регистре6) увеличить значение регистра IP на один7) команда выполнена, перейти к шагу 1 Или например рассмотрим команду INC A - увеличить A на один. Если наши регистры умеют увеличивать значения, то она будет состоять из одной микрооперации: 4) увеличить значение A на одинЕсли нет - нам придется сделать как-то так: 4) подать на второй вход АЛУ число 1 (к первому входу подсоединен регистр A)5) запустить сложение в АЛУ, сохранить результат в R6) подсоединить выход R к внутренней шине, подсоединить вход A к внутренней шине и сохранить в регистр A значение с нее
>>1057646>Ты просто наверно пропускаешь основы и берешься сразу за сложное. Сначала тебе надо изучить, какие есть в процессоре регистры, какие есть режимы адресации, а потом уже смотреть, как кодируется та или иная команда, иначе ты не поймешь зачем нужны байты вроде MOD R/M в машинном коде.Это все где-то изложено в одном месте? Вот это https://www.nostarch.com/assembly2.htm норм книжка?>>1057671Это все можно же свести к машине Тьюринга?
>>1044834вот через укртелеком двач у мну не работал, а теперь работает, хотя я в украине живу и прокси не юзаю
>>1058307>Это все где-то изложено в одном месте?Палю годноту: Harris & Harris "Digital Design and Computer Architecture".
>>1058423Как бы слегка не для новичка книжка.
>>1058423Thanks, nyasha!
ОП жив и сревернсил ещё одну функцию, лол.
Есть какая-нибудь годная старая книга, можно 90-х, где бы суровые профессора раскладывали по полочкам ассемблер так, как они это делали с делфей? Чтобы даже мне зашло.
>>1059225Что тебе там раскладывать по полочкам? Самый простой язык в мире. Учи мнемоники @ пиши код.
>>1059225->>>1015083 (OP)>Книги по ассемблеру:>"Архитектура компьютера" Э. Таненбаум>С.В. Зубков: Assembler. Язык неограниченных возможностей
В KolibriOS до сих пор нет нормального браузера. Заебаште норм бровузер на асме с интерпретатором жс.
Как матчасть Танненбаум, похоже, как раз то что нужно. А что насчет софта? Самая годнота для дизассемблирования, как я понял, IDA Pro, а опенсорс, как обычно, хуета из-под кота? Или я не прав?
>>1057671>Это все можно же свести к машине Тьюринга?Свести можно, но машина Тьюринга - это математическая модель, которая используется для доказательства различных гипотез. К тому же в ней программа заложена жестко. А я хотел показать примерные идеи, на которых делаются (точнее делались) реальные микропроцессоры.> Это все где-то изложено в одном месте? Я помню в универе видел толстую книгу с описанием интеловской архитектуры, но название забыл. Танненбаум наверно.
>>1059848Зато опенсорс можно взять и улучшить, добавить, чего там не хватает.
>>1059884Для этого придется сначала взять и выкинуть то, что там есть. Почти все.
>>1059848>а опенсорс, как обычно, хуета из-под кота?Ну не то чтобы как обычно, но в случае реверса ты совершенно прав.>>1059884Ну поди и улучшь. Самый ебанутый довод опенсорсников. Уверен, что 99,999% его использующих ни разу ничего не добавили.
>>1058432Define "новичок" тогда уж.Там архитектура с самых основ объясняется, и довольно подробно. Есть там и хардкор, но его не обязательно разбирать досконально для понимания общих принципов.Ещё у Таненбаума есть "Structured Computer Organization", но там более сжато.
Анончики, я думаю среди вас есть те кто читал гайд по крекингу от Ricardo Narvaja никто не может подсказать как снять защиты с крэкми из главы 32?
>>1060082Раз уж на то пошло, x86 - не самая лучшая архитектура для "новичка". Я бы начал с MIPS.http://chortle.ccsu.edu/AssemblyTutorial/
Какая литература лучше всего подойдет для абсолютного нуба?
>>1061476 -> >>1061476
>>1061478?
Упс, промахнулся.>>1061476 -> >>1061474
>>1061481Сам-то с мипсов начинал? Чтоб тебе самому вместо изучения асма с нормальными отладчиками, дизассемблерами и кучей документации роутер ебать!
>>1061540>Сам-то с мипсов начинал?Именно с них. Потом ARM. х86 сейчас начинают ударными темпами закапывать, так что сейчас не понятно, оправданно ли вообще на ее изучение время тратить.>Чтоб тебе самому вместо изучения асмаПеред изучением асма неплохо бы знать, что это вообще за штуковина такая - процессор, чем там ALU занимается на самом деле, что за "дополнение до двух", вот это все. По моей ссылке этому как раз треть материала посвящена, самые что ни на есть азы.>с нормальными отладчиками, дизассемблерами и кучей документацииПод него есть симулятор (как и под любую другую архитектуру), ассемблер/дизассемблер тебе все равно по хорошему свой писать, а с документацией у мипсов как раз все хорошо (весь reference manual занимает от силы страниц 400).>роутер ебать!Лично я ебал PSP, но и роутер никто не запрещает.
>>1061601> х86 сейчас начинают ударными темпами закапыватьЯ это в девяностых слышал.> Перед изучением асма неплохо бы знатьНахуй не нужно новичку. Ты еще с транзисторов предложи начать. Хотя нет, слишком высокий уровень. С ядерной физики.> reference manual занимает от силы страниц 400О да, новичкам только мануалы и читать. Сразу, сходу. Вместе с невозможностью запустить код на реальной машине - охуенный способ не выучить асм, проклясть байтоеблю и пойти писать на джаваскрипте, или что там сейчас модно.
>>1061649>Я это в девяностых слышал.Ну так сейчас как раз повторяется та же самая история: Microsoft и Qualcomm вместо Transmeta пилят транслятор машинного кода ( https://www.youtube.com/watch?v=L9xLYHHBN-A ), исследователи грызут аппаратные баги F00F ( https://www.youtube.com/watch?v=KrksBdWcZgQ&list=PLXI5ri9BGtlFvtN-7boRTVC4mUXiswT63&index=6 ), на серверный рынок лезут всякие жирные arm64 с терабайтами оперативки и даже OpenPOWER зашевелился. Про embedded-рынок и так все понятно. Так что посмотрим, может на этот раз и вправду закопают.>Нахуй не нужно новичку. Ты еще с транзисторов предложи начать.Не передергивай. Представление целых со знаком не надо знать новичку? А что ему тогда надо знать в первую очередь, зоопарк режимов и сегментную адресацию?>О да, новичкам только мануалы и читать. Сразу, сходу.Кто сказал, что сходу? Вот наиграется этот новичок с HelloWorld'ами и решит собственный ассемблер написать. Хороший способ доказать самому себе, что имеешь представление о данной архитектуре.>Вместе с невозможностью запустить код на реальной машинеА мужики-то и не знали.>охуенный способ не выучить асм, проклясть байтоеблю и пойти писать на джаваскрипте, или что там сейчас модноПо мне так последовательное разгребание наслоений человеческой жадности и раздолбайства - отличный способ забить посреди процесса.
>>1061670> Microsoft и Qualcomm вместо Transmeta пилят транслятор машинного кодаНу и пусть пилят. Microsoft скоро осознает, что их очередное вторжение на планшеты и телефоны в очередной раз закончилось ничем, и все похоронит. Проходили уже. И убийца x86 ака титаниум для серверов был, как раз недавно официально окончательно похоронили. К тому же, даже если какая-нибудь архитектура и станет вдруг более популярной, неебическое количество существующего кода для x86 никуда не денется, его все так же придется писать, реверсить и отлаживать. Все это, разумеется, отнюдь не означает, что современному байтоебу не нужно разбираться хотя бы в ARM.> Представление целых со знаком не надо знать новичку?Это надо знать до изучения асма и программирования вообще. Это азы, как и системы счисления, как арифметика младших классов и хотя бы отдаленное представление о логике. А вот что внутри процессора - это лишние, запутывающие новичка знания. Как и существование сегментов или зоопарка режимов процессора. К счастью, 32-битный режим в x86 неебически прост, и если новичок где-нибудь на нем и забьет, то ничего, в общем-то, не потеряет - навык чтения асма у него останется, и он сможет при случае выхлоп компилятора посмотреть или отладить чего-нибудь. Если начнет с MIPS и бросит, то с 99.9% вероятностью полученные знания ему никогда не пригодятся.> А мужики-то и не знали.Ну вот смотри: либо у тебя кривой эмуль, кросскомпиляция, непонятные утилиты, написанные чужими для нелюдей и удаленная отладка через gdb, либо у тебя няшный фасм с собственным редактором, компиляция одной кнопкой, отладка в OllyDbg/x64dbg с графикой, отображением всего, что только можно, трейсами-бэктрейсами, встроенным ассемблером, интуитивным интерфейсом и туториалами на ютубе впридачу. Профессионалу похуй, а вот выбор новичка очевиден.> решит собственный ассемблер написатьВо. То есть нужно начинать с мипсов, чтобы написать еще один ассемблер. Вместо чего-нибудь полезного. Я бы понял, если бы ты рассказал про поиск и патчинг бэкдоров и багов в роутерах, когда производитель на них забил, ну или про моддинг, про портирование старых игр с PS. Я бы понял, если бы ты рекомендовал ARM, чтобы взять стмку за копейки и вкатываться в эмбеддед, чтобы заниматься всякими интересными вещами под андроидом. Но написание ассемблера - это самое бессмысленное занятие, которое можно придумать - пишется за вечер, архитектуру при этом знать необязательно, из всего мануала потребуется прочитать страниц десять, большая часть времени будет потрачена на копипаст и правку табличек опкодов. Да, иногда в этом есть смысл - у меня был случай с экзотической архитектурой, когда модуля для иды не было, какого-либо другого дизасма тоже, ассемблера или компилятора тем более, мануал на китайском, прошивка для железки упакована, нужно было поправить пару килобайт кода и упаковать все обратно. Пришлось писать самому ассемблер, модуль для иды и подобие эмулятора впридачу. Но, сам понимаешь, такие случаи возникают очень нечасто.
>>1061698>Microsoft скоро осознает, что их очередное вторжение на планшеты и телефоны в очередной раз закончилось ничем, и все похоронит.В прошлый раз оно окончилось ничем именно из-за отсутствия возможности запускать с х86-бинарники. На этот раз все будет зависеть от того, у кого лоеры зубастее.>И убийца x86 ака титаниум для серверов былИтаник утонул частично по той же самой причине: отсутствие обратной совместимости + сложная задроченная архитектура -> отсутствие нормальных компиляторов -> хреновое быстродействие за астрономическую цену привет Эльбрус. У arm64 с этим особых проблем нет, да и рынок серверов сейчас большей частью под Open Source. Также у него нет проблем с масштабируемостью, 2^8-ядерные сервера уже давно в свободной продаже.>даже если какая-нибудь архитектура и станет вдруг более популярной, неебическое количество существующего кода для x86 никуда не денется, его все так же придется писать, реверсить и отлаживать.Насколько я понимаю, именно на это и делают ставку. Вот вам готовая связка архитектура+ПО, которая может крутить ваш существующий код без существенной потери производительности, но если хотите полной отдачи - новый код старайтесь писать уже под нее. Как какой-нибудь древний сервер, про который уже никто толком не знает, как и почему вообще он работает. Проще засунуть в виртуалку и сделать копию.>Это надо знать до изучения асма и программирования вообще. Это азы, как и системы счисления, как арифметика младших классов и хотя бы отдаленное представление о логике.Ну так вместо того, чтобы агриться на слово "MIPS", открой мою ссылку и полистай. Там как раз очень подробно разжевывают самые-самые азы (системы счисления, представления чисел и строк, bitwise-операции и сдвиги, плавающую точку, передачу аргументов через регистры и стек, рекурсию, массивы, etc.). Причем разжевывают весьма грамотно, последовательно, с периодическими блиц-повторениями усвоенного. Просто делают это на примере MIPS-архитектуры, потому что (вот так сюрприз!) вся эта теория ложится на нее почти идеально, практически без архитектуро-специфичного оверхеда - кристально чистое байтоебство. Не самый худший вариант потратить 2 недели своего драгоценного времени, если собрался вкатываться в asm и не знаешь вообще ничего. В качестве бонуса сможешь на начальном уровне в MIPS и слегка попрактикуешь разговорный английский (там есть кнопка начитки голосом каждой отдельной темы). В качестве минуса - даже ARM будет в дальнейшем казаться кривой архитектурой.>А вот что внутри процессора - это лишние, запутывающие новичка знания.Смотря какие. Я вот видел людей, которые считали, что ALU на самом деле складывает и вычитает какие-то там числа.>Ну вот смотри: либо у тебя кривой эмуль, кросскомпиляция, непонятные утилиты, написанные чужими для нелюдей и удаленная отладка через gdb, либо у тебя няшный фасмПожалуйста, после краткого курса молодого бойца бери свой няшный фасм и пиши сразу под x86_64 там хоть от нехватки регистров не будет так сильно припекать. Ты уже не будешь смотреть на него коровьими глазами и гадать, 0x10000000 - это сколько кило/мега/гигабайт снизу.>написание ассемблера - это самое бессмысленное занятие, которое можно придуматьНе совсем. Он сильно пригодится, если ты захочешь ассемблировать свое творчество непосредственно на самой железке прямо в память, без перезагрузки/перепрошивки на каждый чих. Да, это я про форт-машину сейчас.
>>1061670>Microsoft и Qualcomm вместо Transmeta пилят транслятор машинного кодаИ за это их засудит Интел просто нахуй.>>1061834>Итаник утонул частично по той же самой причинеЭмулятор х86 там был, работал так же хуёво, как и в ARM.
>>1059201В общем продолжаем.Есть функция PopDefaultProcessorPolicy. ИДА из кода WRK создаёт следующееhttps://pastebin.com/MWxG7w9HОбратите внимание на оптимизацию компелятора с использованием переменной v3.Я среверсил это в вот такой код:https://pastebin.com/giNvha1qЧто выливается после компиляции и реверса ИДЫ вhttps://pastebin.com/RyMCNPRDОптимизация сработала по другому, хотя код делает ровно тоже самое.Собственно вопрос- как мне изменить код, чтобы он компилировался в тоже самое, что и оригинальный майкрософтовский?Плюс в том файле ещё PoInitSystem с кучей неизвестных структур, ну да ладно.
>>1061934>И за это их засудит Интел просто нахуй.За что, за то что Майкрософт запилила программный транслятор бинарников? Так интеловские патенты в основном не про это, а про аппаратную реализацию. Иначе всякие Qemu уже давно бы кверху пузом всплыли. И к Квалкому не особо прикопаешься: они к драгоценной x86 вообще пальцем не притронулись, просто немного подкрутили свой процессор, чтобы транслятор от MS на нем быстрее работал. Если тяжба и начнется - длиться она будет доооолго.>Эмулятор х86 там был, работал так же хуёво, как и в ARM.На майкрософтовских демках сейчас всякие фотошопы с офисами вполне резво бегают и даже танчики какие-то катаются. Поглядим, короче, что выкатят к концу года. Мне кажется никто не будет возражать, если охреневшую монополию хотя бы на рынке ноутбуков немного расшевелят. Конкуренция - это хорошо.
>>1062032>За что, за то что Майкрософт запилила программный транслятор бинарников?А то.>Иначе всякие Qemu уже давно бы кверху пузом всплыли.А ты знаешь продаваемые устройства с квеми? Он просто нахуй никому не нужен, вот и не придираются.>На майкрософтовских демках сейчас всякие фотошопы с офисами вполне резво бегают и даже танчики какие-то катаются.Просто процы со времён итаника подросли, вот и тянут трансляцию без тормозов.>Мне кажется никто не будет возражать, если охреневшую монополию хотя бы на рынке ноутбуков немного расшевелят. Конкуренция - это хорошо.Кроме интела- никто не против. Но интел не хуй с горы, и просто так своё властвующее положение не отдаст.
>>1062046>Он просто нахуй никому не нужен, вот и не придираются.Тогда почему тот же Интел не засудил в свое время Трансмету, а наоборот схлопотал иск от нее? Или история с IBM и Apple, там вообще все один в один: ушли на архитектуру конкурента, запилили транслятор.>Просто процы со времён итаника подросли, вот и тянут трансляцию без тормозов.Это еще Apple в свое время продемонстроровала, сейчас подросли АРМы и настал черед Microsoft. Статус кво не мог вечно продолжаться.
>>1062067>Статус квоПозор мне.
Привет, ребят, студент компьютер сайенс 19 лвл репортинг. Очень понравился ассемблер (Уже сделал половину лаб по нему). Можно ли как-то в него вкатиться, или слишком сложно? Что для этого надо делать?
>>1063843>Что для этого надо делать?Шапку прочитать. А так как ты самостоятельно не смог до этого догадаться, то уровень твоего интеллекта не позволит освоить ассемблер в высокой степени.
>>1064289В шапке нет гайда для тех, кто желает вкатиться. У меня проблема не в недостатке материала, а в отсутствии человека, который знаком с этим и может поделиться немного опытом.
>>1064322А какой тебе опыт нужен? Штудируй литературу и дело с концом.
>>1063843Немного странный вопрос. Учитывая, что ты уже половину лаб сделал. Просто делаешь дальше остальные.Ещё ты не написал, какой ассемблер. Или нет другой архитектуры, кроме x86 и Intel пророк его? Тогда можешь писать программы на C и смотреть, во что превращается код. Даже Visual Studio (если ты в Windows работаешь) может показать ассемблерный листинг, что наглядно и удобно. Дальше берёшь OllyDbg, гуглишь туториалы и вперёд. Попутно знакомишься с Ida.
Начал читать Танненбаума, полистал книжку, там что с точки зрения математики нет ничего сложнее булевой алгебры? В историческом обзоре машина Тьюринга и алгоритмы даже не упомянуты. Это нормально? И еще вопрос, про полиморфизм: если там только булева алгебра, ничего же не стоит автоматически заменять ассемблерные комманды эквивалентными им логическими построениями (в простейшем случае - двойное отрицание комманды логически равно этой комманде, но если так поступить с виросом, все сигнатуры, по которым он детектится, проебутся). Получается, уже таким деревянным методом можно получать идеальный неуязвимый полиморф?
>>1064573Давно уже во многих протекторах так и делают. Это медленно и печально, но все же раскручивается обрано. Гугли SAT solver. А что насчет полиморфа, то ты просто получишь детект от эвристики за ебнутый код.
>>1064739Мм..,ок. А если запилить (в виде макросов для ассемблера) собственную логическую аксиоматику, сколь угодно ебнутую, но непротиворечивую? Компиляться нормально будет, но без моих макросов никак не раскрутишь до изначального кода.
>>1064573Машина Тюринга нужна только для научных статей, она не имеет отношения ни к реальному железу, ни к обфускации кода.>>1064573Антивирусы могут смотреть не только на сигнатуры.>>1064957А зачем смотреть на твой код? Достаточно посмотреть, какие системные вызовы он делает, какие файлы читает, что по сети шлет.
>>1065033>Машина Тюринга нужна только для научных статей, она не имеет отношения ни к реальному железу, ни к обфускации кода.Как жи не имеет. Это одно из уточнений понятия алгоритма.>Антивирусы могут смотреть не только на сигнатуры.А что еще они смотрят?>А зачем смотреть на твой код? Достаточно посмотреть, какие системные вызовы он делает, какие файлы читает, что по сети шлет.Есть конкретные критерии, что должен делать вирос, чтобы признать файл виросом? Вот если сделать бэкдор из скрипта установки и настройки Active directory в шиндовс, антивирос его спалит?
>>1065041> Есть конкретные критерии, что должен делать виросНет. Каждому действию присваивается вес, веса суммируются в оценку или оценки, по которым антивирус решает, норм или нет.> вот если сделать бэкдор из скрипта Проактивка может спалить. Сканер спалит, только если у него есть модуль для такого скрипта и эвристика для поиска каких-то вредных действий.> Как жи не имеетКогда у тебя будет бесконечная память - приходи.
>>1065041>А что еще они смотрят?Поведение.>Есть конкретные критерии, что должен делать вирос, чтобы признать файл виросом?У каждого антивиря они свои, и раскрывать их они желанием не горят. Реверсь все антивири и узнавай, что они ищут.
>>1065239>>1065130Вот насчет этих маняэвристик и т.п. мне реально смешно. К сожалению, плавали, знаем. Имею опыт общения с мутной малварью на компе и телефоне. Так вот, установленному антивиросу на тилибоне было строго по хую, что браузер сам переходит по каким-то ссылкам, активируются платные подписки, вылезают рекламные баннеры и т.п. Т.е. обнаружение реально вредоносной хуйни там уровня /б, это я видел своими глазами. На компе какая-то ебала, запущенная как системный процесс svchost.exe, что-то слала по сети, коннектилась к десяткам адресов, делала еще хуй знает что, заметно загружая процессор, к слову. Пока вручную процесс експлорером не выявил, где оно лежит (откуда запускается) и т.д. и не удалил к хуям, касперский на нее вообще внимания не обращал. Если это и есть ваши супернанотехнологии - эвристика проактивка, то я спокоен.
>>1065335А никто и не писал, что они эффективны на 100%. но сканер уровня /б, как ни странно, неплохо ловит вирусы уровня /б
А чего можно почитать про устройство процессора? Устройство управления интересует, Пецтольд о его устройстве тактично умолчал. Пытаюсь в Logisim собрать 8-битный проц уровня /b/, пока есть только АЛУ примерно такого же уровня.
>>1065385Не в тот тред пишешь и даже не в тот раздел, это больше для /ra/ подходит.http://www.bhv.ru/books/full_contents.php?id=182109http://dmkpress.com/catalog/electronics/circuit_design/978-5-97060-450-2/Logisim лучше выкини, для этих целей есть verilog и VHDL.>пока есть только АЛУ примерно такого же уровня.Дорисуй остальные части - память, шины, регистры всякие. Как дорисуешь, может быть поймешь что устройство управления это совсем несложное устройство.
>>1065404За вторую ссылку спасибо. VHDL И verilog, боюсь, не осилю.
>>1065412>За вторую ссылку спасибо.По первой ссылке:>Глава 23. Архитектура и структурная VHDL-модель процессора DP32.Это более простой пример, чем по второй ссылке. А значит в нем проще будет разобраться.Из того примера явно видно, что устройство управления - это дешифратор с счетчиком.>VHDL И verilog, боюсь, не осилю.Verilog совсем простой же. В /ra/ есть ПЛИС-тред в котором подскажут, если что-то будет непонятно.А для альтернативно одаренных есть http://nand2tetris.org/
>>1065385Можно я ссылочку на свой пост добавлю, где я пытался спроектировать простейший процессор: >>1057671
>>1015083 (OP)Поясните кто-нибудь за знаковое деление (IDIV) в asm.Архитектуры пк не знаю.(а стоило бы наверное, но времени толком нету) (спасибо блядям впихнувшим матанохуйню)Потому и не получается понять деление отрицательного числа на положительное. Единственное что знаю, что отрицательные числа хранятся в дополнительном коде.Есть, например:AX = -120BX = 1 Обнуляю перед делением DX(т.к. деление идет на слово, то остаток помещен будет в DX) Но на деле оказывается, что нужно заполнить регистр DX знаковым битом числа AX, т.е. в DX будут единицы, если делимое отрицательное.Вот тут я и не понимаю почему это так. Поясните как происходит самое деление.
>>1066287idiv bx делит dx:ax на bx. dx:ax означает, что старшие биты делимого берутся из dx, младшие из ax. Если ты не заполняешь dx знаковым битом (хотя хули там заполнять - cwd), то твоое делимое получается 0000000000000000:ax, старший бит ноль, и это будет вполне себе положительное 32-битное число, меньшее чем 65536, вне зависимости от содержимого ax.
>>1066287Алсо, ты можешь делить на bl, если уверен, что частное влезет в al.
>>1066393>>1066394>делить на bl, если уверен, что частное влезет в alДа там по заданию требуют слово на слово деление делать. Спасибо, вроде минимально понятно стало.
Какие могут быть последствия вызова одной и той же .dll в коде дважды, если у них разное название? Сам PE-файл то один и тот же. Мне кажется, ничего плохого произойти не должно, просто она загрузится в адресное пространство процесса в двух экземплярах, никак друг с другом не пересекающихся. Или я о чем то не знаю?
>>1066824под вызовом имею в виду получение дескриптора через LoadLibrary()
>>1066824> просто она загрузится в адресное пространство процесса в двух экземплярахИ не надейся. Повторно винда грузить ничего не будет, просто счетчик использования DLL при повторных вызовах LoadLibrary() инкрементируется (т.е., если DLL уже загружена, то по сути делается GetModuleHandleEx(0, "somedll.dll", ...)), и для выгрузки DLL понадобится не один вызов FreeLibrary(), а столько, сколько раз была вызвана LoadLibrary(). Если тебе нужно именно две копии DLL в памяти, лучше всего просто скопировать файл с другим именем. Есть еще вариант с модификацией PEB_LDR_DATA, но без особых причин туда лезть не стоит.
>>1066889Я в первом посте как раз написал, что имена разные. Про инкрементирование счетчика я знаю, меня интересует именно не будет ли нежданчика, если 2 фактически одинаковых библиотеки будут загружены через LoadLibrary, если они в ФС разные имена имеют.
>>1066890Зависит от либы. Например, если DLL в процессе работы создает какой-нибудь именованный объект (мьютекс, например, или memory mapping), то очевидно, она слегка охуеет и сломается. И это в лучшем случае.А что за задача у тебя?
А поясните, что мешает разврнуть взад sha-256 хеширование? Алгоритм хеширования существует, результат каждого последующего прохода - функция от предыдущего, итоговый результат - суперпозиция таких функций. Ну, и?
>>1067240А что ты ожидаешь получить в итоге? Файл, от которого взят хеш? Идеальная функция компрессии будет, любой размер данных в 32 байта можно уместить.
>>1067250Ну так там же не сам файл хешируется? Допустим, речь только о закодированных сообщениях или блоках биткойнов.
>>1067253>Ну так там же не сам файл хешируется?А что, твоя мамка?>Допустим, речь только о закодированных сообщениях или блоках биткойновПусть. Вот простейшая хеш-функция, сложение. Берём два числа, например 23 и 19. Результатом такого "хеширования" будет 42. Так какие числа у меня там были? Ну, и?
Вот я, допустим, ручками посчитал вещественное число -0.5432 в машинном представлении :-0.5432 = 0.1000 1011 0010 1001 0101 1110 10дальше, в нормализованном виде:-0.5432 = 1.000 1011 0000 1111 0010 0111 * 2 в степени (-1)Харакетристика: 7F - 1 = 7E = 01111110получаем:S + характеристика + мантисса =1 01111110 000 1011 0000 1111 0010 01111011 1111 0000 1011 0000 1111 0010 0111BF0B0F27Потом пишу dd -0.5432, компилю, в листинге вижу BF0B0F28, то есть последний разряд какого-то хуя на единичку больше. Поясните, ЧЯДНТ?
>>1067415Нормализованное значение получается:1.000 1011 0000 1111 0010 0111 1011 и т. д.Выделенная единичка уже не влезает в разрядную сетку и округляется (а так как она 1, она не отбрасывается как 0, а прибавляется):...0111 (7 на конце в твоем хекс-представлении) + 1 = 1000 (8 на конце в правильном представлении).
>>1067441Оу, понял. Спасибо.
Добрый вечер. У меня есть tasm на виртуалке виндовса хр, задание - открыть другой ехе файл с моей асм программы. Мне не нужно решение, я спрашиваю, что гуглить. Спасибо. Может есть книги, в которых это описали?
>>1069239> открытьТы имеешь в виду "запустить" или "открыть для чтения/записи"? int 21h/ah=4bh. Любой справочник по прерываниям. Например, этот: http://www.codenet.ru/progr/dos/int_0026.php
Начал учить этот ваш ассемблер, потому что уже очень давно загорелся такой идеей. Но расстраивает то, что почти ничего непонятно. Вкатываюсь с ооочень большим трудом, до этого программировал на питончике. Я ведь не один такой тугой здесь? Как думаете, упорное залипание в теорию и параллельная практика дадут свои плоды? Я совсем отчаялся уже :с
>>1069334> почти ничего непонятноМеньше читай, больше смотри в отладчике пошагово, что происходит.
Решил вкатиться в асм, наваял пузырьковую сортировку знаковых целых, а она сортирует по величине от 0x00 (ну короче без учета дополнительного кода, 0xFF считает больше чем 0x10).https://pastebin.com/2u4g1kHYКак бы вы переделали? И что я тут наговнокодил? (кроме отсутствия разбиения на процедуры)
>>1069400Забыл сказать, код для 16-битного окружения, под дос короче, сам запускаю из-под досбокса, обмазываюсь debug'ом и дебажу
Аноны помогите, нужно понять что делает программка через ida но я ньюфаг и хз с чего начать даже,помогите как разобраться в этом?Нужно ли полагаться на хекс рэйс или он часто наебывает?
>>1069697> нужно понять что делает программка через idaОсобую уличную магию.> Нужно ли полагаться на хекс рэйс или он часто наебываетИногда без правки дизасма невозможно заставить его выдать корректный код. Без корректных типов переменных могут пропадать целые блоки кода. Иногда циклы превращаются в условия. Куча проблем с floating point, про SIMD вообще молчим.
>>1069711Ну понятно что это с практикой более менне придет , но вот с 0 что можно сделать?Нет там хоть начальных статей,гуидов
>>1069712Очевидные "Образ мышления IDA" (Крис Касперски, книга протухла, но в целом ничего с тех пор не поменялось), beginners.re из шапки, "The IDA Pro Book" (Крис Игл).
Поясните, что должна делать функция 00h прерывания 10h, а то ДосБокс это не переваривает как-то. Должна что-то делать с курсоров вроде, но я не понимаю, что именно.
>>1070541устанавливать видеорежим
>>1070629И тут я понял, что неверно прочитал и мне нужна 01h. Спасибо, иначе так бы и тупил
Делаю лабу с математическим процессором 80х87, нужно поднять одну хуету в степень. Мне надо поднять x в степень а x^a.Надо использовать:fld xfscale aЯ всё правильно делаю? Ассемблер интересный, но инфы пиздец мало, простите, что у вас такое простое спрашиваю.
>>1070915Черт, насколько я понял - я проебался. Выходит - мне надо будет писать функцию поднятия до степеня самостоятельно?Степень должна быть 2*n+1
>>1070945Стандартный способ возведения в степень на FPU - комбинация fyl2x и f2xm1. Про логарифмы в школе рассказывали?
>>1070980Дружище, я ничего не помню почти с курса матана и подобного. Уделишь пару минуток и объяснишь? Буду очень благодарен.
>>1071035Блэт, это же школьная программа.x = 2 ^ log2(x)x ^ a = (2 ^ log2(x)) ^ a = 2 ^ (a log2(x))a log2(x) находится с помощью fyl2x (y = a, x = x).Возведение в степень: f2xm1 (x = результат fyl2x). Полученный результат инкрементишь и получаешь x ^ a.Вместо f2xm1 можно просто шифтануть 1 влево на fyl2x.
>>1071062>Вместо f2xm1 можно просто шифтануть 1 влево на fyl2x. Отмена. Хуйню написал, каюсь.
>>1071290>>1071062Завтра попробуй написать по этому лабу, большое спасибо!
Сап программач. Пытаюсь вкатиться в реверс-инжиниринг. Есть программа на С, принимаюшая ввод от пользователя в массив и выыводяшая этот массив на экран. Пытаюсь произвести переполнение стека, чтобы программа запросила ввод еще раз, но попытки с командой echo дают результат seg fault. Отладчик при этом показывает, что в стеке якобы выделяется гораздо больше памяти для массива чем 2 байта. Что я делаю не так?
>>1071559компилируешь со включённым stack protector'ом
Как то раз баловался ollydbg'ром с одним проприетарным софтом и заметил, что по коду разбросаны JMP'ы, которые сбивают ассемблерный листинг. Типа вот ты шел по инструкциям, 10: MOV EAX EBX16: PUSH 0xFF18: CALL [ECX]22: JMP 2726: SUB ECX, 0xFFFF28: INC [EAX]...И вот после JMP 25 у тебя следующая инструкция уже та, которую ты в листинге не видел, и вместо 26: SUB ECX, 0xFFFF28:INC [EAX]ты видишь уже 27: call kernel32.dll:0x104831: MOV ECX, 0x1535:JMP 41Это и есть виртуализация, или это какая то другая контр-реверсинговая мера?
>>1071742Насчет stack protector`а: как он отключается/включается? При компиляции были флаги m32, ggdb и mpreferred-stack-boundary=2.
>>1071757Это очень примитивное запутывание control flow. Возьми иду, она на такое не ведется, и зделоет тебе 26: db байтики, 27: call. Виртуализация - это когда полезная нагрузка представлена инструкциями виртуальной машины, а код, который ты видишь в дизасм - мусор, перемешанный с кодом самой виртуальной машины.>>1071765Внезапно -fno-stack-protector
>>1071767Большое спасибо.
>>1071767Что тогда с программной точки зрения представляет собой виртуализация? Я знаю концепцию в теории: есть виртуальная машина, у которой свой набор инструкции, которые неким образом сопоставляются реальным инструкциям. И как это реализуется? Всё, что мне приходит в голову - это типа я беру сырые байты кодовой секции, хуярю их функцией byte Virtualize(byte), которая, например, добавляет 1 к каждому байту исходников, потом логику девиртуализации компилирую в .dll, потом в исходники добавляю вызов byte devirtualize(byte, DWORD EIP) из либы с "виртуальной машиной", но по моему я неправильно себе представляю это, потому что уж слишком это уёбищно, чтобы быть правдой.Может есть какой нибудь ресурс, где на простом насколько это допустимо в данной тематике было бы проиллюстрировано виртуализирование на примере какого нибудь калькулятора?
>>1071776> И как это реализуется?Ты вообще представляешь как виртуальная машина работает? Напиши сначала простую вм в вакууме. Какой-то набор инструкций, какой-то массив с байткодом (вручную напишешь какой-нибудь 99 bottles of beer, например) и бесконечный цикл, который выбирает следующую инструкцию, исполняет ее и переходит к следующей (или к какой-то иной, если это было ветвление или вызов функции).Собственно, для виртуализованного кода ты так же пишешь примерно такую же вм. Затем берешь функцию в машинном коде, берешь ее байты, дизассемблируешь, разбиваешь на базовые блоки (грубо говоря, последовательности без ветвлений), инструкции в каждом базовом блоке преобразуешь в инструкции вм, в конце втыкаешь вызовы вм для перехода между базовыми блоками (т.к., скорее всего размер байткода вм будет не равен размеру машинного кода, из которого ты его генерировал). Байткодом затираешь функцию или кладешь байткод в отдельную секцию - похуй. Вместо вызова фукнции втыкаешь вызов вм с адресом входного базового блока. Ну это если без обфускации и антиотладки. Для упрощения своей жизни пилишь кастомный линкер, говоришь компилятору separate functions for linker и работаешь с объектными файлами, а не с исполняемым. Далее тебе становится очевидно, что дизассемблирование - неудобный подход, и логическим развитием будет написание бэкенда к llvm, чтобы сразу генерировать виртуализированный код.
>>1071802> добавляет 1 к каждому байту исходниковЭто обфускация, не виртуализация. Виртуализация подразумевает, что твоя вм байтики выполняет (они инструкции, команды, блять). И нет,> инструкции, которые неким образом сопоставляются реальным инструкциямНе обязательно. Одна инструкция вм может реализовываться хоть мегабайтами кода вм. Ты можешь без проблем придумать для себя инструкцию http_download_file и написать для нее в вм соответствующий обработчик.
Несколько вопросов:1. Как эта программа получает ввод с клавиатуры, если в дизассемблере ни одного прерывания не видно?2. Если они все же есть, то как до них добраться? Запустил программу в edebugger, а функция return_input и находящийся в ней gets завершились и все. Даже окно терминала ни разу не вылезло для запроса ввода. А ведь еще при учебе в шараге при отладке с помощью Turbo Debugger какой-нибудь простенькой программы с вводом с клавиатуры появлялось окно терминала, потом происходил ввод одного символа и отладка продолжалось дальше. Поэтому третий вопрос:3. Какая настройка/опция отвечает за поведение отладчика описанное выше?
>>1071881> прерыванияТы в юзермоде. Единственное твое прерывание - это сисколл. Он надежно спрятан внутри функций, вызываемых функцией gets.> Если они все же есть, то как до них добратьсяЗАЧЕМ?> edebuggerНаверняка какое-нибудь говно. Наверняка оно отбирает у программы stdin. У тебя на скрине gdb, кто тебе мешает поставить брейкпоинт на return_input?
>>1071881И еще 1 вопрос отвалился: поясните пожалуйста за "ширину" стека. В интернете пишут что ширина стека составляет то 2 байта, то 4 байта. Просто последовательность команд чисто для примера push1,push2 кладет мне в стек по адресу N цифру 1, а по адресу [N-4] кладет цифру 2, хотя для этих цифр должно хватать 1 байта, следовательно почему не происходит варианта типа цифра 1 по адресу N, а цифра 2 по адресу [N-1] ?
>>1071885А как мне отлаживать через gdb? просто запрашивается ввод когда я ввожу run, а содержимое регистров параллельно с этим не выводится на экран. А после завершения программы состояние регистров мне ничего говорить не будет.
>>1071886> ширину стекаЕсть размер, ширины нет.> push1,push2push - инструкция x86. Если не использовать operand size override (префикс 66), то оно кладет в стек dword (4 байта) в 32-битном и qword (8 байт) в 64-битном режиме.> почему не происходит варианта типа цифра 1 по адресу NПотому что ты наебнешь выравнивание стека на 4/8 байт, и потом, когда ты захочешь push 0xbaadf00d, вызываемая функция будет сосать по производительности из-за чтения этого значения по невыровненному адресу. Молчу уже про всякие SSE. К тому же, пришлось бы явно указывать pop, сколько байтов читать. Экономить 3 байта в стеке такой ценой нахуй никому не сдалось, поэтому процессор это не поддерживает (ну, точнее, поддерживает 16-битный push через префикс, но лучше так не делать). Если тебе очень хочется положить в стек байт, зарезервируй место каким-нибудь sub esp,N (или push нескольких двордов), и потом клади туда что угодно с помощью mov.>>1071887Ставь брейкпоинты (break) в нужное место перед run, ходи по инструкциям (step, next). И вообще, man gdb.
>>1071889А разве такой подход к стеку не ведет к тому, что стек может быть равномерно забит значениями, для которых хватило бы и 1 байта, т.е. такой подход ведь никак не экономит оперативную память.Кстати, понял как работать с gdb и попутно понял что это офигеть какой неудобный отладчик. Ощущение что под линукс удобный отладчик с GUI хрен найдешь.
>>1071892> т.е. такой подход ведь никак не экономит оперативную память.Еще раз: невыровненный доступ, возникающий из-за хранения байтов и двордов вплотную - это дорого, причем дорого для всех переменных вызываемой функции и ее потомков. При этом экономия на передаче небольших целочисленных констант (это будет какой-нибудь enum или bool) - копеечная. Даже в программах с глубокой вложенностью вызываемых функций ты наэкономил бы максимум какой-нибудь сраный килобайт. В x86-64 ты вообще ничего не наэкономишь, потому что твой байт с большой вероятностью будет передан в 64-битном регистре. Некоторый смысл мог быть при рекурсии, но глубокая рекурсия на системном стеке - зло.
Есть ли инструменты для программирования сразу в машинном коде? С возможностью писать макросы и т.д.
>>1071914> сразу в машинном кодеХекс-редактор?> макросыАссемблер?На flatassembler.net есть fasmg - это ассемблерный движок, не привязанный к конкретной архитектуре. Хуй знает, что тебе нужно.
>>1071916>Хуй знает, что тебе нужно. Возможность манипулировать с опкодами, как с ассемблерными коммандами. Например, представить опкод одной комманды в виде функции от другого опкода. В ассемблере можно заменять исходные комманды их логическими эквивалентами, хочется чего-то похожего, но с 16-ричными опкодами и не только логикой, но и любыми функциями, н-р арифметикой.
>>1071919Ну посмотри на fasmg все же. Когда видишь его впервые, синтаксис кажется слегка странным, если не писал на фасме до этого, но если привыкнуть - вполне норм. Примеры в комплекте, написано оно на себе самом.
Снова вкатывающийся в отладку программ. Есть программа принимающая ввод в буфер величиной 2 байта и 1 раз выводящая его. Мне таки удалось заставить программу вывести буфер 2 раза, а не один результат пикрелейтед путем тупого подбора т.к.я не очень умею в линуховые отладчики они все консольные и жутко неудобные, но дело не в этом. Вопрос: судя по дизассемблированному виду функция return_input выделяет вначале стеку 36 байт, тогда почему для выхода из фрейма стека и перезаписи сохраненного ebp и адреса возврата потребовалось 18 байт? И еще: в gdb есть разница между выводом десятичной десятки и шестнадцатеричной?
>>1074935> я не очень умею в линуховые отладчикиМожешь отлаживать идой через gdbserver, хотя отладчик в IDA тоже неудобным кажется после OllyDbg.> почему для выхода из фрейма стека и перезаписи сохраненного ebp и адреса возврата потребовалось 18 байтПотому что аргумент gets адресуется относительно ebp, а не esp. Передается ebp-10, плюс 4 байта на сохраненный ebp, плюс 4 байта на адрес возврата.> в gdb есть разница между выводом десятичной десятки и шестнадцатеричнойНе понял вопроса.
Что думаете про реверс-инжиниринг игр с целью геймхака и самого геймдева в общем. Актуально ли и нужно ли кому-нибудь. Сколько ещё проживёт эта индустрия? Идется речь про реверсинг/разработку многопользовательских видеоигр.
>>1075208За деньги - только если тебя с этого прет. Если не прет - заебешься, проклянешь айти и уйдешь в дворники. Без денег аналогично. А в целом актуально и нужно.
Хотел вот поизучать ДОС, скопипастил кодик на С, который должен блокировать нажатие клавиши. Ничего не работает (пикрел, https://pastebin.com/gJpdrs5K). Потом скопипастил кодик, который выдает инфу о системе, ОЗУ, ПЗУ - какие-то ебанутые значения получаются. А так хочется вкатиться в эту древнюю тему, но ничего не получается. Подскажи ньюфагу, как ему быть.
asm тред? подписался
>>1082933Твоя паста протухла.
>>1083038То есть кодик никак не запустить с досбокса?
>>1083038У него там макака ссылку пошатала. Скобку с точкой убери.
>>1083076Должно работать в досбоксе. Только а) для активации тебе надо нажать хоткей, который он тебе предлагает, б) блокирует оно клавишу "3", а если нужны другие - гугли таблицы сканкодов и меняй сканкод в начале исходника. Можешь допилить и сделать антиспеллчекер (вставлять опечатки или заменять введенные слова на другие).
Есть одна прошивка для TV платы на Mstar'о подобном mips soc так же известном как tsumv59 если точнее. В конце файла есть хедер одинаковый для всех прошивок, 4-6 нулевых байт и некая контрольная сумма минимум 4 байта.Конец и вывод команды crc32 в разных прошивках под этот проц выглядят такBE EF 00 00 00 00 00 00 00 00 CD 57 61 A4 B0 22 (crc 4b814419)BE EF 00 00 00 00 00 B3 51 CD AB AA 55 73 F7 B6 2D(crc 74124a07)BE EF 00 00 00 00 67 C7 F3 87 11 51 (crc32 8cb436f5, сам файл прикладываю)https://nofile.io/f/fgo1eWKKos4/1.zipЛюбое изменение до/в/после контрольной суммы вызывает отказ обновления по USB. Модификация файла с последующим приведением crc32 к исходному виду не помогает. IDA особенно не помогает. binwalk выплёвывает >40 LZMA Compressed data которую распаковывает в 0 или 256байт мусор и TIFF логотип.Как вычисляется эта контрольная сумма?
>>1083216про binwalk напиздел, поставил из репы, получил другой ответ
>>1083216Что-то совсем тебя не понял. Это точно CRC32? Ты смог получить это значение на не изменённой прошивке? Явно там не весь файл проверяется, а только сами данные без заголовка (хотя это не точно).>Модификация файла с последующим приведением crc32 к исходному виду не помогаетВот эта фраза мне не понятна. Ты изменил файл, но оставил неизменным контрольную сумму?Подключайся по отладочному интерфейсу к устройству (JTAG что-ли называется) и смотри, как проверяется контрольная сумма. Может и в файле ещё где-то есть места, где проверяется целостность файла.
>>1083300crc32 можно привести к любому значению за счёт 4 dummy байт. Помимо того crc считается для каждого отдельного раздела кроме ресурсов и для целого бинарнка. Получить записанное в прошивке значение у меня не получается, это вполне может быть экзотический полином для crc32 или результат обычного crc32/16 инвертирован/реверсирован/сдвинут, это я пытаюсь выяснить. Я попробовал трюк с приведением crc32 к исходному просто чтобы исключить последнее предположение. Я менял значение случайных байт в различных частях прошивки, увеличивал/уменьшал размер в конца с начала чтобы определить границы проверки. Если снять дамп микросхемы, его можно превратить в файл прошивки для usb обрезав хвост после контрольной суммы и дав ему правильное имя.На плате есть UART, но полезной информации кроме тех. данных платы он не выплёвываетВ итоге мы имеем1.Файл проверяется целиком, любое изменение в любом месте/размере ведёт к ошибке.2. Проверочная сумма считается для целого файла на этапе сборки, затем записывается в хвост в виде 2-4 байт, затем файл подгоняется dummy байтами под исходную сумму. Это привычная практика для файлов с вшитой кс.3. JTAG не вывден, даже если бы был, делать мне там нечего. Есть теоретический дебаг/прошивка через i2c/uart. Так то мне ничего не мешает внести изменения в бинарник, зашить его через SPI и забыть, если конечно прошивка не проверяет себя при запуске. Мне просто любопытно как организована проверка целостности и как её обойти.
>>1083491>Помимо того crc считается для каждого отдельного раздела кроме ресурсов*зачастую, не обязательно в данном случаеКороч, у кого есть предложения, открываю конкурс по окирпичиванию моего телевизора. сделайте мод отличный от оригинала который зальётся по usb.
Почему никто не вкладывает денег в разработку игрового движка на ассемблере, тут одни плюсы, высокая производительность, более качественная графика, для меньшего геморроя можно поддерживаемые процессоры начиная от i3 и выше.Посмотрите на демосцены какой там охуеный графон в 64К.Для простоты разработки можно использовать высокоуровневые макросы но не везде.Как по вашему идея?Какие трудности могут возникнуть?Сколько времени уйдет чтобы дойти до уровня UE4?Была ли такая идея на кикстартере?
>>1083508> Почему никто не вкладывает денег в разработку игрового движка на ассемблерПотому что писать медленно, модифицировать сложно, а практического смысла нет.> высокая производительностьВ теории. На практике компилятор знает лучше тебя, и у него больше возможностей (например, автоматическая оптимизация по результатам профилирования - на сколько проходов тебя хватит вручную?).> более качественная графикаНе более качественная, чем на любом другом языке программирования.> какой там охуеный графон в 64КПрактически все даже не на Си - на крестах! И даже 4К многие на Си.> Сколько времени уйдет чтобы дойти до уровня UE4?∞ Обоснование: пока пишешь - поддерживаемое железо уйдет в небытие, и ты будешь начинать с нуля снова и снова.>>1083491Ты прошивку-то реверсить пробовал? Чего гадать, если можно взять дамп и посмотреть на код USB-бутлоадера? Только лучше именно дамп, чтобы не ебаться с распаковкой.
>>1083514Дамп=прошивка+настройки в хвосте.Какой бы фс/сжатием эта прошивка не пользовалась, binwalk определить не может.>Ты прошивку-то реверсить пробовал?> IDA особенно не помогаетЧитай внимательнее.Не знаю что я делаю не так, но читаемого кода очень мало. в основном всё текстовые строки без кросс отсылок. Единственное где вообще получилось найти касающийся USB_isp и crc кусок - в прошивке под другой процессор tsumv29. Алгоритм проверки там такой же, ибо файлом от 29 можно окирпичить 59. появилась зацепка, строка "golden crc". Но как я понял это как раз и есть механизм записи контрольной суммы файла в сам файл.
>>1083542> Дамп=прошивка+настройки в хвосте.Ну кто-то же ее читает и распаковывает!> Какой бы фс/сжатием эта прошивка не пользовалась, binwalk определить не может.Ну вот я сходу нашел там кусок, упакованный дефлейтом https://ideone.com/Uatl3I и содержащий строки:> Download Buffer Addr: 0x%08lx\n> Download Buffer Size: 0x%08lx\n> Error> File size error> Copying image from USB to DRAM> Error> CRC32 Integrity Check failed !!> CRC32 Integrity Check pass !!а также весьма интересное:> ChecksumErrOrBCHParityErr(про BCH спроси англовики, если не сталкивался), а также:> LzmaStatusтак что LZMA там тоже есть. А по 0x78e8 в распакованном куске видно литералы для zlib.inflate.> но читаемого кода очень мало. в основном всё текстовые строки без кросс отсылок Есть даташит хотя бы на семейство чипа? Там точно мипсы? (Хотя вроде как регистры репортит вполне себе мипсовые). Код вообще на исполняемый не похож, куда ни ткнись.
>>1083558> по 0x78e8 в распакованном кускеВ самом файле прошивки, прошу прощения.
>>1083558Еще попались:> Wrong hash key> Wrong Chip ID> Auth OK> Auth NG
>>1083558>Datasheet..MIPSДаташита нет. Даже то что это mstar чип я выяснил по уликам в коде и uart инфе. это вполне может быть не mips. Это скорее догадка. Из инфы существует схема и пинаут.>Ну кто-то же ее читает и распаковывает!Я к тому что на флеше лежит точная копия файла прошивки без изменений. если и есть фс/сжатие, то код ответственный за распаковку должен быть виден, а у фс должна быть обнаружимая сигнатура/Потыкал файл свопом с разными настройками, получил mysql compresed data и криптопарашу. Заодно binwalk после свопа начал определять код как Arm. РАзный своп даёт немного больше читаемого кода.
>>1083770> это вполне может быть не mipsЯ тут погуглил еще, и нашелся мануал по сборке бутлоадера под это дело (по крайней мере одно имя файла со скриншота в бинарнике есть):https://wenku.baidu.com/view/7faa4869a6c30c2258019e25.htmlЕсли поискать по csdn, то найдутся и другие мануалы по сборке, все они настолько же ебнутые (colinux и т. д.) и все предлагают поставить mipsisa32-elf, что как бы намекает.На pudn лежат исходники бутлоадера от более старой прошивки (по слову mstar ищутся), они в принципе помогли бы составить общее впечатление о прошивке в целом. Есть аккаунт? Мой стух. Если знаешь живой поисковик по облаку baidu вроде умершего wangpanhezi, можешь там поискать. Очень часто всплывают даташиты и инструменты для прошивки.
А есть ли телеграм-конфа этого треда?
>>1083960Адекватные люди не пользуются говномессенджерами, которые привязаны к телефону. Вот если ты жаббер-конфу создашь, можно и набежать.
>>1083963> которые привязаны к телефону> Подразумевая, что номер никому не виден
>>1083966>подразумевая, что номера хранит база
Создание конфы по этому треду в Telegram Messanger. Если создавать, то я думаю не паблик-конфу сперва. Или есть еще варианты?
>>1083971Можно сразу IRC-канал захуярить, лол.
>>1083972Алсо, нужно хотя бы 5-15 желающих людей поднять такую конференцию. Если такое число наберется, то можно будет создавать. Желающие решившие поддержать идею — напишите свои юзернеймы в ответ.
>>1083982>15 желающих людей поднять такую конференциюхз, зачем это. сидеть там и ололокать? задрачивать самообразование можно и в оффлайне, а для пары вопросов в сутки и тредика хватит
>>1084057Двачую.
>>1015083 (OP)> Программируете микроконтролёры, пишете драйвера для ОС, а то и саму ОС? Вам сюда.Ну ок, сюда так сюда.Что такого ОС делает с дисками, что с ними потом нельзя работать через int 13h?INT 13h AH=00h: Reset Disk Drive не помогает.Переход из защищенного в реальный режим делаю корректно.
Есть прога, шифрующая бд blowfishем, в зашифрованном виде пароль остается в файле "ini". Можно как-то дизассемблированием достать пароль?
>>1084136Хуй знает, бинарник выложи.
>>1084137https://drive.google.com/open?id=0B5YHle7vjDgVd0NHMkpDRmtwS0E
>>1083972>Создание конфы по этому треду в Telegram Messanger.Нахуй не нужно, инфа там тонет, общаться там всё равно что пердеть в вечность. А эти треды заархивируем и приложим к первому, так что даже через века ньюфани будут читать наш FAQ и восхищаться нашими знаниями.>>1084109>Что такого ОС делает с дискамиКакая ОС, мы должны угадать?Нихрена в этом не понимаю, считаю, что ОС тебя озалупила в режим виртуального V86 и подкладывает тебе эмулированных хуйцов. И весь твой реальный режим эмулирован, и int 13h, даже небо, даже деление на ноль.
Экзешник упакован upx'ом. Стал гуглить, как распаковать. Там с помощью ollydbg надо найти OEP, но что-то у меня уже на этом шаге косяк.>>1084271-кун
>>1084417> Аноним 30/10/17 Пнд 08:46:20 №1084417 >Читай статьи Нарвахи, он там подробно обьясняет как работать с этим отладчиком.
>>1083770> это вполне может быть не mipsВот исходник того, что было пожато дефлейтом:https://github.com/caxyu/mstar6a918/tree/master/code/MBoot_Napoli_TVOS/sboot/src/macaw12Судя по синтаксису инструкций, строкам в бинарнике и названиям файлов, это какое-то отродье OpenRISC на асике, но мой дизасм его не жрет, да и статистика показывает что-то больше похожее на 16-битные опкоды. Возможно, опкоды изменены. Кроме того, в дереве исходников овердохуя всяких интересных вещей, вплоть до загрузчика на базе 8051 - ребята там развлекались по-полной.>>1084417> Стал гуглить, как распаковатьВнезапно upx -d filename (понадобится UPX 2.x, его несложно нагуглить или собрать из исходников). Алсо, там пароль ведь для открытия настроек, а не для файла. Или я что-то делаю неправильно? Алсо, там два exe, чем они отличаются?
>>1084459Кажется, экзешник HT не нужен, бд открывались с другого. Вот еще одна такая же база расшифрованная: https://drive.google.com/open?id=0B5YHle7vjDgVU1Z1bC1yUDZYRUUТам в password.txt я пароль расшифрованный указал.
>>1084397>Какая ОС, мы должны угадать?Ленсук.> Нихрена в этом не понимаю, считаю, что ОС тебя озалупила в режим виртуального V86 и подкладывает тебе эмулированных хуйцов.Нет, я с помощью kexec загружаю свой бинарь, ему ленсук передаёт всё управление и сам завершается полностью.
>>1084459Кстати, по этой ерунде в Password никак его не достать?
Треда конкретно по микроконтролерам не нашел, поэтому спрошу здесь. В универе препод предложил запрограмировать микроконтролер avr для регулятора напряжения асинхронного двигателя. На чем лучше писать, си или асм, мой опыт программирования это хелловорды на джаве и вебговно. С чего вообще начать изучение этой темы, и какой ресурс для этого лучше всего? Сайтов и книг много, где-то советуют асм, где-то C.
>>1084771С асма начинать проще, и асм все равно нужен будет рано или поздно, но если у тебя одноразовая учебная задача, можно и на си склепать, не погружаясь.
>>1084749В инишнике по первой ссылке Password="D3SPQOQsJbNZs8YxX3Nv6DJdscaG25jo" расшифровывается в "1202201320072010" (пасс для доступа к настройкам). Password2="SFTS7fJAJ-PTPBPRk6RYmg14db4eN-S7bJNMV2sYtFF6dl8sXceoLE" расшифровывается в "true D3SPQOQsJbNZs8YxX3Nv6DJdscaG25jo" (как видно, вторая строки та же, что и в Password - нахуй так было делать, я не знаю). То есть никаких паролей к базам в ini не лежит.Шифрование Blowfish, big-endian, CFB c IV="Init Vector" (IV забивается нулями, потом каждый байт строки с индексом index ксорится с байтом по iv[index % 8]), в конце шифротекста обычный паддинг. Для ini-файла строки шифруются с паролем "#$%^dfjhER%khuw" и потом кодируются base64 с кастомным алфавитом "+-0..9A..Za..z".В принципе можно написать банальный брут по известному открытому тексту.Если еще что-то нужно - пиши, базу иды пока не удаляю.
>>1084800Как ты вообще это расшифровываешь?
>>1084815Ну охуеть. А второй абзац я для кого писал?
>>1084815Удваиваю вопрос.
>>1085097Не очень понятно, через что / какими инструментами прогнать строчку в Password, чтобы получилось это 1202201320072010?
>>1085254Охуеваю еще больше. Мы тут в треде про реверсинг или где? Может, мы еще и не программисты? Бери любимый язык программирования и пиши код (у меня были Python 3 + родной base64 с предварительной трансляцией в стандартный алфавит + blowfish из pip).
>>1015083 (OP)> Совсем запутался с адресацией в двубайтовом массиве.В di нужен адрес на элемент в массиве.Изначально в di - адрес на первый элемент. lea di, arrayзатем: 1) cmp word ptr arr[bx], word ptr di //сравниваю два байта из массива по смещению bx со значением по адресу di(но тут я походу проебался где-то) 2) lea di, arr[bx] - вот тут тоже.
>>1089524>1) cmp word ptr arr[bx], word ptr di //сравниваю два байта из массива по смещению bx со значением по адресу di(но тут я походу проебался где-то) >сделал так:mov ax, word ptr [di]cmp word ptr arr[bx], axИ заработало. Есть вариант лучше? Без задействования регистров в одну строку?
>>1089524> cmp word ptr arr[bx], word ptr diТак нельзя. В инструкциях x86 только один операнд может обращаться к памяти.> 2) lea di, arr[bx] - вот тут тожеТут все норм (кроме ебучего нелогичного синтаксиса адресации). Если не компилируется, попробуй lea di,[arr+bx]
>>1089542>кроме ебучего нелогичного синтаксиса А что конкретно? Так надо было?lea di, array Идейно просто было так:в di и si получить адреса, и их обменять. но потом я понял что проебался ибо адреса в памяти менять то нельзя. Все вроде работает. Доделал. >>1089542>Так нельзя. В инструкциях x86 только один операнд может обращаться к памяти.>Понял, спасибо
>>1089549> А что конкретно?Вот в фасме логичный синтаксис - есть обращение к памяти (или его имитация в lea) - вся хуйня всегда в квадратных скобках, снаружи только тип. Нет обращения - просто втыкаешь имя переменной. И никаких offset, addr, ptr и прочей хуйни. Просто:mov ax,[di]cmp [bx],axиlea di,[arr+bx]
Сап реверсач. Не так давно в мои руки попала одна хуйнюшка - моторчик из здоровенного напольного МФУ - которую я был бы не прочь реверснуть. Сразу скажу, аппаратный реверс обсуждать не буду, всё же это нерелейтед, и с таким нужно идти в /ra/. Предположим, что его я уже сделал, ну то есть разобрался, какой пин коннектора за что отвечает. Предположим, также, что я создал подходящий переходник с какого-нибудь COM-порта. Что делать дальше? Как реверсить систему комманд мотора, хотя, я бы даже сказал, сервопривода, так как эта штука имеет свою собственную печатную плату, и при этом предполагается, что она будет подключаться к материнской плате МФУ. Да и сам внешний вид коннектора намекает на то, что там больше пинов, чем просто плюс и минус, то есть какие-то данные между материнкой и платой мотора передаются.Собственно, способы подобного реверса имеются? Спецификации мотора, положим, найти я могу, но то не интересно.
>>1090307https://www.saleae.com
>>1090307>Предположим, что его я уже сделал, ну то есть разобрался, какой пин коннектора за что отвечает.А больше может ничего и не нужно. Например, простейшие контроллеры двигателей управляются без команд как таковых. Один провод направление, а по фронту сигнала на другом проводе двигатель делает шаг.В любом случае начинать необходимо с поиска схемы, если схему найти не удается то искать документацию на отдельные микросхемы. Иначе будет неизвестно даже что там за микроконтроллер/процессор. Если устройство в рабочем состоянии, то можно посмотреть осциллографом сигналы на этом разъеме.
>>1090336Только перед тем как тыкать логический анализатор, стоит узнать хотя бы уровни сигналов.
Тредик, не умирай. Бамп.
Есть несколько модулей ядра .ko и функция в одном из них. Как найти все вызовы этой функции из каких-либо модулей?
>>1097380Хули так рано бампать? Я бампну по окончании месяца.OП
>>1015083 (OP)Необходимо перекрыть прерывание таймера. И сделать установку и удаление обработчика используя аргументы командной строки. И использовать мультиплексорное прерывание.Я правильно понимаю, что помимо перекрытого обработчика таймера, мне еще придется перекрывать обработчик мультиплексорного прерывания??Вот я не могу понять: mov ah,* mov al,0 ; функция проверки установлен ли обработчик int 2FH Что в регистр ah пихать то.
>>1098183Вроде разобрался.
Даже не знаю, где спрашивать. Хочу сделать ассемблерную вставку в сишный код, т.к. нужно ловить ногодрыг от ведомого устроства, что стандартными методами, внезапно, оказалось нетривиальной задачей я еще молчу про синхронизацию и выдержку интервала времени по RTC-таймеру, которые компилятор заботливо "оптимизирует", из-за чего после каждой сборки на ножки вылазит какая-то хуйня вместо расчетного интервала, ибо компилятор GCC и используется AT&T-подобный синтаксис. Что должно быть:Загрузка в регистр адреса, по которому располагается регистр для ногодрыга как забить сюда PERIPH_BASE+GPIOA_BASE+GPIO_ODR в душе не ебу, пришлось клеить такЗагрузка в другие два регистра собственно значений для ногодрыга конкретной ногойЗапись значения из регистра по адресу.Как это правильно оформить?
>>1098394Судя по названиям регистров это STM32. С этим тебе скорее в /ra/.>нужно ловить ногодрыг от ведомого устростваТак делается только в простейшем случае. Для вариантов чуть посложнее в таймерах есть модуль сравнения/захвата. В совсем сложных случаях - пересылка ПДП из GPIO в память.>которые компилятор заботливо "оптимизирует"Это потому что Си не знаешь. Для того чтобы компилятор не "выкидывал" код, нужно использовать volatile.
>>1098410Простейший пока потому, что лепить сразу в кучу все на прерывания займёт достаточно много времени - хочу для начала получить рабочую модель "на пальцах", а уж потом заняться её перетрушиванием. Инты и пдп довольно простые вещи, но работоспособность вперёд.>Это потому что Си не знаешь.Есть такое, да. Я в железо хочу, а не в Си, поэтому в душе не ебу, как делать те или иные вещи, которые опытному сишнику на раз-два.Честно говоря - в душе ебал этот Си с его кучей несовместимых между собой компиляторов, каждую конкретную хуйню приходится по часу шарить в гугле, нет бы предоставить тот же ассемблер, но с возможностью не грузиться вопросами "R2 и R3 трогать нельзя, R0 щас заюзаем, а что там R3? звуки шуршания листингом в поисках последнего использования регистра, каждый проект приходится править, чтоб он начал собираться gcc, а от эвоного инлайн асма с синтаксисом AT&T но при этом типичным расположением операндов я вообще в осадок выпал - это при том, что собсно AS из гнутого тулчейна жрет вполне себе человеческий код безо всяких процентов и амперсандов с кавычками и двоеточиями.
>>1098432Из твоих портянок нихера не понятно, что же это у тебя за задача такая нетривиальная, но я если она связана с портами и временем, я бы постарался сделать строго на таймерах, тем более, что в stm они прекрасные. Ещё можно использовать DMA, бывает задорно получается.Ещё замечу, что за десять лет дрочения контроллеров у меня не было ни одного случая, чтобы задачу io нельзя было нормально решить на С.
>>1098499В конкретном случае я просто пытался проверить, насколько резво стмка умеет дрыгать ногами. Вменяемого результата добился только когда выкинул к ебеням большую часть писанины, оставив только ногодрыг.Чуть более глобально - ловить ACK от геймпада с выдержкой задержки перед следующим пакетом, 5й канал. В итоге вкуривал, какие же задержки реально выходят.А, хер с ним. В итоге проц ещё и дрыгает ногой там, где в коде этого вообще не подразумевается, даже полное стирание пару раз прогнал. Обидно, конечно, что нельзя просто так взять и написать в линеечку код, который просто возьмёт и заработает, придётся въезжать на прерываниях.
что можно прочитать покороче про директивы ассемблера, ну то говно с точкой. писать умею, инструкции брать ясно где, секции понятно что - мне бы собрать в кучу это всё.ещё я не очень понял такую штуку, чем ассемблеры отличаются? я так понял, спецификация по процессору определяет и его ассемблер, тогда почему получился синтаксис ГАС? причём я так понял, под другие архитектуры там всё как у всех.
ну и наверно директивы, это главное чем отличаются ассемблеры, в этом плане мне интересен такой момент: как писать портируемые смещения в структурах - какие-нибудь алиасы или что-то такое.
>>1043476>Проигрывать можно бесконечно :^)Ну, то что такой лузер как ты бесконечно проигрывает - это норма
>>1059225http://codenet.ru/progr/asm/tasm/ Очень сурово.Тут же и про директивы есть (кто-то в начале тренда спрашивал).
>>1015083 (OP)Какие можно взять компиляторы для ARM и MIPS под винду, чтобы удобненько проходить книгу Юричева?
>>1101025Виртуалбокс с линуксами возьми. Хотя можно и просто шланг для винды (clang --target=mips -S -с foo.c тебе будет вполне достаточно, либы и хедеры не нужны).
>>1101181>clang --target=mips -S -с foo.cПочему после ввода clang main.c --target=armv7 возникает ошибка fatal error 'stdio.h' file not found?
>>1101330Потому что у тебя нет хедеров для ARM, очевидно же. Я думал, тебе не компилировать, а только дизасм смотреть. В теории, можешь спиздить хедеры из любой линуксовой репы https://releases.linaro.org/components/toolchain/binaries/5.2-2015.11-2/arm-eabi/sysroot-linaro-newlib-gcc5.2-2015.11-2-arm-eabi.tar.xz, положить куда-нибудь и сказать -isysrootдиректория, но оно все равно не слинкуется, нужны остатки тулчейна. Ну можешь тот же линаро скачать так-то.
Ребят, подскажите, в чем прикол. Компилирую все в экзешник, под стек отвел 100h.Я в секции .data объявляю строку, например string db 'string $'.При компиляции lea dx,string , тасм превращает мое lea в mov dx, offset string (экономит байт). Собстно вопрос: почему в отладчике я получаю mov dx,[0000] ? Тасм не учитывает, что при запуске exe в [0000] будет не string, а PSP? Что исправить? Я не понимаю, что делаю не так
>>1104807Потому что сегмент загрузи. Я хуй знаю, как в ваших тасмах, достаточно ли там assume или нужно явно сказать mov ds,DATA. А если хочешь, чтобы все в одном сегменте валялось, зделой .com, model tiny, вся хуйня.
Добрый день/вечер/ночь, господа.Хочу вкатиться, открываю beginners.re из шапки, а там прямо в первой главе, как говорится, с места в карьер, и где-то к 50й странице уже становится тяжко и непонятно. Так и должно быть, или мне лучше почитать дополнительную литературу/статьи?
>>1105249Ах да, навыки в программировании C (начальный уровень), а так же C# присутствуют.
>>1105249>beginners.reКак я понял, beginners.re это сайт описывающий технику обратной разработки, предполагая, что изучающий уже знаком с инструментарием языка ассемблера и его особенностями. Посмотри сайты ниже в ОП-посте. Ну или сам погугли какой-нибудь "ASM для чайников". Поищи на вики статьи про такие понятия, как "сегментная адресация", "регистры процессора" и прочее.
>>1084426>>1015083 (OP)ОП, ты незаслуженно забываешь в шапку добавлять Нарваху. Как практический курс по дебагеру для новичков оч удобно и наглядно.https://mega.nz/#!Bc9VVAYC!Vk6CFlW6VIoskLNgDKXbsL6FacDQeOKe6LX92wNicKY
>>1105748А курс кто-нибудь перепилил на x64dbg и современные ОС, или там по-прежнему XP и первая олька?
>>1105980дык ольки под 64 и нет. Это перевод в виде Chm внутри и олька и плагины и CrackMe, на ехелабе подобрал когда то.А так как курс под начинающих - смысл перепиливать - с этим разберется как есть - дальше уже сам материал найдет, если будет интересно.
>>1105980п.с. вроде когда пробегался - всё под вин 7/8/10 более менее работало без проблем.
>>1105748>ОП, ты незаслуженно забываешь в шапку добавлять НарвахуЕсли бы я знал о его существовании... Как бы намекаю>>1015083 (OP)>Шапка треда в процессе пополнения, пока так.В следующий раз добавлю.Бессменный ОП этого треда
Помогите вспомнить.В какой-то старой книге или статье Криса Касперски было упоминание про книгу инженера то ли Интел, то ли другой компании.Описание книги было примерно такое: "корпорация выдавливает из инженера все соки, а затем выкидывает на помойку".
>>1106526Еле нагуглил.
Двач, не поможешь ньюфагу? Недавно заинтересовался реверс-инжинирингом и в качестве первой жертвы выбрал известного в узких кругах бота для игры. На первый взгляд все было очень просто, и даже с околонулевыми знаниями я вскоре смог запустить основное окно несмотря на неправильный ключ (который должен сверяться на сервере бота). Однако, к игровым серверам оно по-прежнему отказывалось подключаться. Оказалось, что сначала проверяется статус нужного сервера (пик1), а в случае его доступности активируется функция проверки некоего ключа авторизации (пик2), которая уже выше моего понимания. Интересно, что если ссылку оттуда вставить в браузер и изменять переменные, то значение ключа будет меняться только при редактировании v1, которая скорее всего является айпишником сервера. Возникает вопрос, зачем тогда вообще нужен правильный ключ.Еще больше вопросов вызывает переменная "HuyZhaet". Кроме прикрепленных скринов она встречается несколько десятков раз в различных функциях, и всегда окружена подобными конструкциями. Подскажите хоть примерно что дальше делать, у меня даже предположений нет. Ссылка на мои изыскания, если кому интересно: http://rgho.st/private/8p5MxgZnR/633d5f0ad2d83d1afa68d7bbdf4c1afeСсылка на установщик с оффсайта: http://rakbot.ru/download
>>1106954>Еще больше вопросов вызывает переменная "HuyZhaet". Кроме прикрепленных скринов она встречается несколько десятков раз в различных функциях, и всегда окружена подобными конструкциями.Это вызов виртуальной функции в C++. Судя по тому, что этой переменной ничего не присваивается, она глобальная. Смотри, где создаётся (легко найти по конструкции вида mov global_var, eax) и восстанавливай виртуальную таблицу. Там и должна быть интересующая тебя функция проверки ключа.>если ссылку оттуда вставить в браузер и изменять переменные, то значение ключа будет меняться только при редактировании v1, которая скорее всего является айпишником сервераНет. Там ясно видно, что это функция типа sprintf и первым параметром передаётся auth_in в создаваемом url. Подозреваю, что это берётся из первого запроса. Запусти Wireshark и посмотри.
>>1105249Смотри сюда:http://octopuslabs.io/legend/blog/sample-page.htmlhttps://tuts4you.com/e107_plugins/download/download.php?action=view&id=2876Самый простой способ вкатиться. По второй ссылке в первых уроках аффтар учит азам АСМа.
>>1107685Я в asm вкатывался Калашников - Ассемблер - это просто (морально устарело, но на XP и в DOSBox всё работает, для наглядного использования годно)иhttp://asmworld.ru/uchebnik/
>>1107685так это же Нарваха, выложенный чуть выше.
>>1107817Нет, не он. Посмотри внимательнее.
анончики, насколько быстро можно вкатиться в байтоебство, чтобы хотя бы суметь проанализировать простенький пакет в вайршарке. много ли вы получаете профита от асма, если не используете его в работе. Всмысле стоит ли его изучать как хобби?
>>1107945Зависит от ассемблера. В целом ассемблер как отдельные команды - простой.> много ли вы получаете профита от асма, если не используете его в работе. Всмысле стоит ли его изучать как хобби? Можно например оптимизировать функции на других языках, глядя в ассемблерный выхлоп:https://godbolt.org/
>>1107946интересно, и часто такая оптимизация используется?
>>1015083 (OP)OP, ЯД с Крисом - твой? если да - предлагаю заменить Образ мышления IDA, тут вот оригинальный исходный DOC для издатесльства лежит, только некоторых иллюстраций не хватает, зато все листинги как надо. _https://rutracker.org/forum/viewtopic.php?t=272818
>>1107957Увы, не мой, добавлю рядом.
Ребят, а расскажите о перспективах заработка и сложности найти работу
>>1111184Перспектив никаких, работать негде. Реверсеры требуются разве что в АВ компаниях, всё остальное нелегально.
>>1111414А что по асм?
>>1111429Выбор чуть больше, но суть та же.
>>1015358Дел, ты просто не умеешь, вот и всё. Как я, например, не умею в патчи бинарников. Короче, всё от навыков зависит.
>>1015370Вот опять, хипстарок защищает своё глючное поделие только потому что умеет в него. Нода хороша только для сборки фронтенда -- и то, лишь потому, что можно простить ей все глюки зависимостей сотен пакетов на локальной машине.
>>1015370Боль тебе будет нести всё, что ты не умеешь, лошара
Помню, в 2001 работал (начинающим тогда юникс админом) в конторе, которая пилила, помимо прочего, полулегальный рекламный малварь -- после установки прога заменяла рекламу во всех браузерах на свою и даже корректировала поисковую выдачу. Сейчас уже не у кого спросить, как они это делали, а интересно: каким образом можно перехватить ответ от сервера в браузер (при том, ssl) и заменить в нём пару параметров?
>>1111721>каким образом можно перехватить ответ от сервера в браузерСамый простой способ - прокси-сервер. Скорее всего, именно это и было.>при том, ssl>в 2001Нунизнаю. Но это тоже решается очень просто своим корневым сертификатом в системе и того же прокси-сервера.
Товарищи аноны, читаю "Архитектура компьютера" Э. Таненбаума, и что-то я не совсем понимаю тему про "Упорядочение байтов", в чем, собственно профиты систем с обратным порядком следования и/или систем с прямым порядком?
>>1113533Чтобы корпоративный клиент не мигрировал с PDP-7 на IBM S/360, а купил PDP-11.
>>1113672То есть это делается просто для того, чтобы существовало различие между архитектурами?
>>1113683Как и разделители каталогов и символы перевода строки.Google, фатальный недостаток вот это вот всё.
>>1113533https://softwareengineering.stackexchange.com/questions/95556/what-is-the-advantage-of-little-endian-formatТлдр:На ранних pipelined (хз что это) процессорах little-endian улучшал производительность. Big-endian удобочитаем человеками.В другом месте пишут что эти форматы ни для чего не нужны. Наверное сейчас это наследие 60х
>>1113742>pipelined (хз что это)Вычислительный конвейер. Как пример, пока работает АЛУ, можно параллельно считывать следующую инструкцию из памяти. Я не понимаю как порядок байт может улучшить производительность.>>1113533Какой-то порядок байт все равно должен быть. Оба варианта практически равноценны, какой выбрать? Это как порядок бит при передаче по последовательному интерфейсу.
>>1113747Может дело в каких-то инструкциях, которым в little-endian нужно меньше тактов, чтобы что-то проверить. Например четность
>>1113747Вот оно че, михалычOK, here's the reason as I've had it explained to me: Addition and subtractionWhen you add or subtract multi-byte numbers, you have to start with the least significant byte. If you're adding two 16-bit numbers for example, there may be a carry from the least significant byte to the most significant byte, so you have to start with the least significant byte to see if there is a carry. This is the same reason that you start with the rightmost digit when doing longhand addition. You can't start from the left.Consider an 8-bit system that fetches bytes sequentially from memory. If it fetches the least significant byte first, it can start doing the addition while the most significant byte is being fetched from memory. This parallelism is why performance is better in little endian on such as system. If it had to wait until both bytes were fetched from memory, or fetch them in the reverse order, it would take longer.This is on old 8-bit systems. On a modern CPU I doubt the byte order makes any difference and we use little endian only for historical reasons.
>>1113884Сейчас аргумент про длиную арифметику потерял смысл: длинную арифметику реализуют не массивами байтов, а массивами слов, и порядок байтов в слове никак не влияет на реализацию, лишь бы сами слова располагались в порядке little-endian.Зато есть другой аргумент: компиляторы достаточно часто при работе с переменными типа char или short int кладут временные результаты в полноразмерное слово (int или long int) - это быстрее, а при необходимости (например, при возврате байта из функции) читают оттуда только первые один-два байта. С big-endian такие финты не пройдут: вместо простого чтения по указателю потребовалось бы прибавление офсета, а заодно и само чтение было бы по невыровненному адресу. Алсо, некоторые любят делать магиюписать говнокод вида uint32_t foo = 0x11223344; ∗(uint16_t ∗) foo = 0xffff, который теряет всякий смысл на big-endian машине.
>>1113957Про такую магию где-то пишут или самому надо доходить?
>>1114388В любой книге по C, в разделах про типы переменных и про указатели.
пиздец везет тем кто шарит в реверсинге, всегда хотел заниматься им, но никогда не было времени нормально изучить это. В итоге 30 лвл пишу гавно на джаве.хотя платят много, но не интересно нисколько Парни как вы находите время на лоу левел? Это у вас как хобби или работа?
>>1114876>Парни как вы находите время на лоу левел?Открой для себя RetDec:http://blog.avast.com/avast-open-sources-its-machine-code-decompilerhttp://www.opennet.ru/opennews/art.shtml?num=47741http://github.com/avast-tl/retdec
>>1114879RetDec одинаково некачественный и бесполезный. Не стоит потраченного времени и тех десятков гигов оперативки, которая требуется, чтобы прожевать им что-нибудь сложнее хелловорлда.
>>1084417> Стал гуглить, как распаковатьhttps://2ch.hk/pr/res/1015083.html'''DecompressAll UPX supported file formats can be unpacked using the -d switch, eg. upx -d yourfile.exe will uncompress the file you've just compressed. '''
>>1115056fix: https://linux.die.net/man/1/upx
>>1105980Начинающему x64 нахуй не нужен. Лишний раз голову морочить.
А как всякие дебаггеры примитивные получают состояние процессора (регистры, стек, команды)? От ос ведь? А как можно получить доступ ко всему этому без ОС? С помощью каких механизмов это происходит?
>>1115555Там какие-то дополнительные регистры и прерывания есть. Не забивай голову. Ты что, пишешь операционные системы?..
>>1115561Да интересно вдруг стало.Тоже подумал про прерывания.
>>1115621Ну смотри, ОС переключает задачи по прерыванию (по прерыванию таймера, по исключению и т. д.). При переключении задачи ОС сохраняет/восстанавливает регистры в контекст выполнения (кусок памяти, привязанный к потоку выполнения) банально через push/pusha или mov [dest],reg, ну или там через всякие fxsave для FPU/SSEx.Когда в отлаживаемом процессе возникает исключение (например, когда выполнение дошло до брейкпоинта - брейкпоинты вызывают исключение), ОС видит, что к процессу подключен отладчик, и вместо того, чтобы прибить процесс, она переключает задачу на какую-нибудь другую (например, на этот самый отладчик) и сигнализирует отладчику об этом событии. При этом на отлаживаемую задачу ОС перестает переключаться (т.е., останавливает ее), пока отладчик явно не скажет, что все ок, и можно продолжать.А теперь, что касается твоего вопроса: раз отлаживаемый процесс остановлен, значит, его состояние сохранено в контексте выполнения и не меняется. А раз оно там сохранено, то по запросу отладчика ОС может это состояние прочитать или изменить.
>>1115822О, спасибо огромное!Теперь картинка сложилась. А аппаратные точки генерируют прерывание или исключение? Помню я читал у нарвахи про их отличие от виртуальных брейкпоинтов. Если не ошибаюсь, то с их помощью, в частности, обходят обходят программы, проверяющие, отлаживают ли их.
Фикс мелтдауна для шиндовс весит 231 Мб. Кто-нибудь ковырялся в нем? Сколько модулей ядра они там переделали?
>>1116349Полный список чего они в этом багфиксе перекомпилировали:http://download.microsoft.com/download/4/6/E/46EE95B4-7B13-4157-BAD1-854D4FA4855A/4056894.csv
Про мелтдаун и спектруhttps://www.securitylab.ru/analytics/490642.php
>>1117036Эту парашу спамят по всему интернету. Зарепортил мудака.
>>1117119Ты про статью или про уязвимость?
Здесь обсуждают ту самую уязвимость на уровне физической микроархитектуры процессоров Intel? А что там насчёт неё?
>>1117295Выше дал статью же
>>1117318Почитал. И не понимаю, почему всем не похуй. Если эта заплатка КОКОКО СНИЖЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ ДО 30% ОТ НАЧАЛЬНОГО УРОВНЯ то нахер оно нужно? Вот если бы вскрылась уязвимость в процессорах какого-нибудь сетевого оборудования, типа кисок или хуйвеев, вот это была бы проблема. Впрочем, там инфа соточка бэкдуров дохера. Главное, чтобы они не попали в открытый доступ, в руки васянов.
>>1117218Про статью вестимо.>>1117445>СНИЖЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ ДО 30% ОТ НАЧАЛЬНОГО УРОВНЯ то нахер оно нужно?Нахер тебе тогда вообще защищённая ОС? Сиди на параше без разделения прав, получишь прибавку в скорости в 100%.>И не понимаю, почему всем не похуй.Жабаскрипт в броузере может прочитать все твои пароли от архивов с ЦП, и тебе не похуй?
>>1117460Антивирус защитэ.
>>1117460> Жабаскрипт в броузере может прочитать все твои паролиНе может. В браузерах уже успели похерить точность performance.now (снова!), так что все измерения скорости доступа превращаются в гадание на кофейной гуще. Тащемта даже не в браузерах на более-менее загруженной системе это тоже гадание на кофейной гуще с охуительной скоростью уровня байт-в-секунду.
>>1117467Нет.>>1117478Осталось только обновить мой устаревший браузер, так как ничего нового на XP всё равно не идёт.>Тащемта даже не в браузерах на более-менее загруженной системе это тоже гадание на кофейной гуще с охуительной скоростью уровня байт-в-секунду.Вот тут в общем согласен, это надо систему в монопольный доступ захватывать.Пойду поставлю майнер биткоинов в фоновый режим, пусть хакиры пососут.Кстати вопрос. Функция CmpGetAcpiBiosInformation возвращает в переданном ей аргументе структуру с трёх элементов:boot_archpm_profileflagsкоторые добывает из АCPITable FADTНи у кого нет мыслей, что это за структура, или мне придмывать свою?Ёбаный обу когда будет нормальная капча?
>>1015083 (OP)Прорвался через 7 слоёв капчи к вам ИТТ!Хочу вкатиться в GAS на Линухе.Что посоветуете? Хоть что-нибудь на русском есть?Алсо, AT&T синтаксис для пацанов, да?
>>1117575> Хочу вкатиться в GAS на Линухе.Странное желание.> Алсо, AT&T синтаксис для пацанов, да? Для дебилов, как и сам GAS.
>>1117597> что-то странное> дебильноеУ тебя трудная жизнь, да?
>>1117704У сажа-куна действительно было трудное детство, и он немного грубоват, но тему знает, и в отношении GAS и AT&T он полностью прав.
>>1105748Нарваха еще же по IDA писал статьи, их как раз сейчас на васме переводят.
Как обычно делается привязка к флешке?Тяжело ли ее потом убрать?
>>1117779Может, хоть ты пояснишь, что с ними не так, и что лучше использовать?Вообще, у вас тут только тред реверс-инжиниринга, так?Вы тут игры взламываете и порнуху рипаете, или тут есть программисты на ASM'е?
>>1117824Синтаксисы intel и at&t это просто представление мнемониками байтов в памяти. Мне нравится интеловский синтаксис тем, (один из плюсов) что порядок записи аргументов команды одинаков с высокоуровневыми языками. Т.е mov ax, 100Можно записать как int ax = 100В at&t это выглядит как mov 100, ax
https://webkit.org/blog/8048/what-spectre-and-meltdown-mean-for-webkit/
>>1117835Согласен с этим, в т.ч. и в функциях стандартной либы обычно сначала идёт dest.А что бы ты мне посоветовал?
>>1117844Я вот быстро поискал https://stackoverflow.com/questions/9347909/can-i-use-intel-syntax-of-x86-assembly-with-gcc Похоже с флагом можно компилировать в GAS интеловски синтакс. Но вот как с библиотеками это законтачится - я не знаю. Так как я себе поставил дос с tasm'ом для обучения и никаких либ не использовал.
Можете обоссывать меня. Но я сразу скажу, что в шараге нам так ничего и не пояснили, а я как последний лох проебал 800р, наткнувшись на мошенника, который обещал помочь. Анон, у меня уже нет денег, ты моя последняя надежда, может найдется не равнодушный. TASM, 16-битный ассемблер.
>>1117854Нормально всё будет, там всё модульно, GAS всё распарсит.Короче, ты мне посоветовал другой синтаксис, ок, учту.
>>1117878https://pastebin.com/JNL423hLНа свой страх и риск
>>1117887да научишься с одним, на другой легко будет перескочить)
>>1117878В 19 строчке замени [ds+si] на [ds+si-1]
>>1117973> mov ax,[ds+si] ;Загружаем байтикТы уже обосрался - загрузил вордик. Дальше даже не смотрел.
>>1117878mov si, offset Scldlodsb ;; load string length from first byte of S into ALmov di, sixor cx, cxmov cl, al ;; CX = S string lengthread_char:lodsbcmp al, 'A' ;; >= 'A'jl wrong_charcmp al, 'Z' ;; <= 'Z'jg wrong_charor al, 32 ;; lowercase itwrong_char:stosbloop read_char
>>1117977Это тонкое место, но тасму, если не ошибаюсь, похуй
>>1117977Или тасм возьмет из памяти ворд?
>>1117994Таки ворд, или надо movzx al, byte ptr [hooy]> cmp ax,'A'B тут не CMP а SUB если уж потом с 25 сравнивать собрался, но это не разрушит AXЗа один бранч сравнение 'A' <= x <= 'Z' делается примерно так:movzx dx, alsub dx,'A'cmp dx,'Z'-'A'ja wrong_charКароче садись, два =)
>>1117998Поспешишь - сделаешь как я))Мысли наложились и я забыл шо заменил sub на cmpНе хотел вычитать, потому что пришлось бы прибавлять 'A'P.S спасибо за объяснение ошибок
>>1117563>Ни у кого нет мыслей, что это за структура, или мне придмывать свою?Нашёл, это _MSAcpiInfo, как ни странно.
Ребята, спасибо, с третьим вроде разобрался. А как сделать первое? Оно же легкое. Помогите плиз
>>1015083 (OP)Посоветуйте справочник по ассемблеру Интел, чтобы открыть, например, про lodsw, и все про нее прочитать
>>1118868http://ref.x86asm.net/x86reference.xmlпопробуй этот (должен быть здоровым)
>>1118868Intel SDM, том второй. Больше, чем написано там, ты нигде не найдешь. Даже псевдокод есть для каждой инструкции.
Правильно я сделал первое, не?>>1118545 вот задание
>>1118956Если ответ сошелся, то правильно)
>>1118959Бля, не, я в dx там заношу, а он потом значение меняет. Как занести в переменную?
>>1118964Чтобы промежуточный результат сохранить? Толкай в стек, например (push регистр). Или загрузи в ненужный регистр (какой-нибудь ES)
Ёбанный Обу когда будет нормальная капча?Можете пояснить за функцию VfZwDeleteBootEntry. Если смотреть на код отладочной х86 венды (или WRK), то получается пикрил. Внимание, вопрос. Что за переменная var_1C, и на кой она там нужна? Применив все свои недюжинные скиллы в брутфорсе исходного кода, получил такой код, который компилится байт-в-байт, но всё равно не понимаю, что там задумывалось.NTSTATUSNTAPIVfZwDeleteBootEntry ( IN ULONG Id ){ NTSTATUS Status; if ( VfZwShouldCheck(_ReturnAddress()) ) { try { Status = STATUS_SUCCESS; } except (VfZwExceptionFilter(GetExceptionInformation())) { NOTHING; } } Status = ZwDeleteBootEntry(Id); return Status;}
IDA отказывается открывать либу. Верно определяет тип либы, начинает загружать, почти мгновенно говорит, что не может считать сектор X. При этом указанный номер соответствует номеру байта, следующего за концом файла.Не помню точно формулировку ошибки, что-то вроде "Could not read file at sector XXXXXXXX, continue?" (ошибка всё равно не гуглится).В чём может быть дело?
>>1122478Возможно, антиотладочные приёмы. Что за либа? Если это защита от кряка крупной игры, или другой дорогой софт, то ничего удивительного.
>>1122494Как это вообще может работать?Там же просто код, ида же его не выполняет, чтоб он мог себя защищать. Она просто пытается прочесть байты.
>>1122499ИДА пытается прочитать эти байты и понять, куда они ведут. При использовании некоторых хаков можно добиться разного поведения кода для процессора и с точки зрения иды, то есть процессор будет исполнять валидную инструкцию, а ида неправильно её дешифрует и попытается заглянуть за границу файла.Ах да, некоторые либы на самом деле являются указателями на функции в дллке, и не содержат кода. Попробуй посмотреть ей 7зипом, лол.
>>1122502Когда работал с оверлеями, ида не ругалась, когда, например, вызывала функцию за пределами адресного пространства этого файла, а просто помечала адрес красным. Или ты не об этом?
>>1122502Вообще это либы из psyq SDK для первой плейстейшен. ДЛЛ'ок тут в принципе никаких нет.Агрх.
>>1122504> Или ты не об этом?Да я сам ХЗ о чём. Просто читал покойного Криску про наёбывание ИДЫ.>>1122506>ДЛЛ'ок тут в принципе никаких нет.И я про что. Что ты там дизассемблировать собрался, текст видаимя_либы.dll имя_функции
>>1122510Либо ты несёшь хуйню, либо я тупой. Эти либы статически линкуются с проектом, в них должен быть код, причем тут динамические либы?
>>1122515>Эти либы статически линкуются с проектомЯ конечно должен был угадать это по скриншоту. Или ты думаешь, я тут же брошусь качать твой СДК?
>>1122517Сорри.Это вообще моя догадка, я и самим сдк так-то пользоваться не намерен, у меня обратный процесс.Могу скинуть либу.
>>1122520Ну давай.
>>1122523http://puu.sh/z56hX/566b9fa9ce.LIBLIBC.LIBМануал говорит, что это Standard C Library.Консольке нужны и дефолтные функции сишки.
>>1122478Известная проблема. Это сломали в 6.8 вроде. Возьми предыдущую.
>>1122566Бля, а я как раз пробовал только 6.8 и 7. Чому в 7 не починили?
>>1122566Я тебе ильфак чтоли? Откуда мне знать? Никто не репортил? Никому не нужно? Напиши свой лоадер всего семейства (CPE, EXE, OBJ, BIOS и т. д.) или возьми 6.5. Лоадер на питоне пишется за пару часов.
>>1122572Ну охуеть. Это ты плагин к иде имеешь ввиду?
>>1122577Ну да. Рандомная статья из гугла: https://darklabs.squarespace.com/blog/2016/7/25/simple-ida-loaderЧто за игру реверсишь?
>>1122570>7Лол, только узнал, что седьмая версия утекла.
>>1122581Chrono CrossНе обоссывай.
>>1122593Мы знакомы. Можешь обоссывать.
>>1122591IDA 7.0.torrent@C:\Program Files\IDA 7.0\ida64.exe Не является приложением Win32@Патчишь байтики подсистемы PE заголовка@Запускаешь на хрюшеИльфак- пидарас.
>>1122599Да я так и знал.Даже хотел написать "pe", выйди из сумрака.
>>1122606Макаба съела звёздочки, ну ты понил.
>>1122600А потом один из плагинов захочет современный API, не сможешь вызвать какой-нибудь fstat64 из новой ucrt и что-нибудь тебе сломает. Ильфак не пидорас, это скорее к Microsoft претензии. Но все равно версии в заголовке не просто так сделали.
>>1122599Ты один из моих идолов так-то. Рассказываю о тебе окружающем как о легенде.
>>1122615*окружающим
>>1122613Код исключения: 0xC0000005Сведения об исключении: Потоком была предпринята попытка прочитать или записать данные на виртуальный адрес, к которому он не имеет соответствующего доступа.Сведения о куче: ПрисутствующиеСука.
>>1122572Сейчас попробую с 6.5.Вообще охуеть конечно — иметь десять версий под разные подзадачи.
Если тебе по какой-то причине неприятно/неудобно более тесно общаться, то я буду рад и анонимной помощи здесь. Потому что мне помогает либо никто, либо ты.
>>1122630C 6.5 открылось всё. Есть смысл ебаться с загрузчиком, чтоб пользоваться 7.0 или и так сойдёт?Вообще охуеть конечно, даже есть все названия.Это ж можно просто сопоставлять названия с доками и реверсить не вслепую! Я кончил.
Не хотел вызывать щитшторм на свою голову, но как в edb-debugger сделать запуск программы с аргументом, чей текст находится в файле? Я говорю об аналоге из gdb типа run < arg.txt Просто хочется толкового gui-отладчика, а как только ищу адекватные отладчики под линукс, то напрашивается или какой-нибудь voltron производные от gdb, которые еще напильником надо обрабатывать, да еще не на всех дистрах нормально работают или этот edb.
>>1122798> Просто хочется толкового gui-отладчикаIDA + gdbstub/gdbserver/whatever.
>>1117783оо! это прекрасная новость!
Анон, чем дебажить NASM на винде?
>>1123482Да любым отладчиком, разве есть принципиальная разница?
>>1123542NASM генерирует только отладочные символы CodeView8 для Win32. Я не знаю ни одного дебаггера, умеющего их читать (кроме самого CodeView, очевидно).А конвертер cv2pdb у меня не завёлся с готового бинарника. Компилировать его вручную я не хочу.
Ньюфаг в треде. Есть %программа_нейм% заранее скомпилированная с флагами -fno-stack-protector и -execstack с помощью gcc. В проге изначально нет проверки на размер введенных данных. Если запускать прогу через gdb и использовать при вводе строку с определенным количеством символов и payload`ом, то payload успешно запускается. Если просто запускать программу в терминале, то та же самая строка с payload`ом приводит к сегфолту. В чем дело? Имеет место быть ASLR?
>>1122600А что за байтики? Просто меняешь win64 заголовок на корректный с точки зрения формата pe? мимоиюнь
>>1124498Типа того. Правлю версии минимальной ОС и подсистемы.
Пишу бинарный транслятор из MIPS в x86. Что делать с недостатком регистров? Складывать всё в стэк?
>>1125416А что же ещё. Неплохо было бы анализировать частоту использования и складывать в долгий ящик редко используемые регистры, но это больше для динамической рекомпиляции подходит, где можно собрать актуальную статистику.
>>1125539Как-то неудобно выходит, это ж придется ещё записывать куда-нибудь в кучу, где какие регистры сохранены (а тогда уж проще для таблицы регистров и выделить значение в куче, но это уже совсем какая-то эмуляция получается).
>>1125416>>1125547> Складывать всё в стэк? Да.> это ж придется ещё записывать куда-нибудь в кучу, где какие регистры сохранены (а тогда уж проще для таблицы регистров и выделить значение в кучеХранить регистры в куче бессмысленно. Тебе их между вызовами функций сохранять, а раз ты их все равно сохраняешь в какой-то стек (эмулированный или родной x86), то зачем куча? К тому же, если одна из целей - это натравливание HexRays на результат, то с глобальными переменными результат получается отвратительным. Лучше забудь, что в x86 вообще есть какие-то там регистры и создавай в каждой функции фрейм стека с 32 (ну или меньше) переменными reg_0...reg31. Все действия будешь делать с ними, а x86-регистры будешь использовать только для хранения операндов инструкций, загружая их непосредственно перед инструкцией. Увидишь последовательно выгрузку-загрузку одной и той же переменной - удаляешь. По скорости все это не так ужасно, как кажется - tinycc тому пример. А уже потом поверх этого будешь писать register allocator, выделяя регистры под "горячие" переменные, если захочешь.> но это уже совсем какая-то эмуляция получаетсяНикуда не денешься. Тебе все равно придется носить с программой либо кусок своего транслятора, либо эмулятор. Потому что никакая IDA тебе все цели непрямых переходов не найдет. А значит, некоторые такие переходы будут крашить программу. А чтобы не крашилось, нужно инструментировать непрямые call и jmp, проверяя, попадаешь ли ты в начало базового блока. Если цель перехода попадает не в начало базового блока, либо вообще вне базового блока, тогда такой код придется либо транслировать на лету, либо эмулировать. Да, при следующей итерации трансляции эта конкретная позиция пофиксится, но ты никогда не сможешь быть уверен, что пофиксил всё.Почему не в ARM?
>>1125775>Почему не в ARM?А почему да?Чтоб почти нативно было.Какие плюсы/минусы подводные камни?
>>1125781Ёбли меньше.
>>1125775Лол, чот я только сейчас понял, что call/jmp могут вести в разные места из одного и того же кода.
>>1125786Может ты еще и классическую статью не читал? Почитай, это наиболее годное введение. http://www.gtoal.com/sbt/
>>1125788Спасибо.Не читал офк.Вообще на всю эту тему очень мало чего гуглится, либо гуглится плохо.Или я просто тупой.Скорее всего.
>>1125788Дай ещё полезных материалов, времени для чтения у меня очень много.
ПЕРЕКОТ>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)>>1126092 (OP)
>>1122613так кст и есть, пробовали уже))