Двач.hk не отвечает.
Вы видите копию треда, сохраненную 8 марта 2018 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ASM & Reverse engineering №3 # OP 1015083 В конец треда | Веб
В этом треде мы изучаем самый компактный и низкоуровневый язык Ассемблер и смежную с ним область: Реверс-инженеринга (RE).

Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС, а то и саму ОС? Вам сюда.
Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.

Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.

Шапка треда в процессе пополнения, пока так.

Книги по RE:
https://beginners.re/ - "Reverse Engineering для начинающих"- бесплатная современная книга на русском языке. К прочтению вкатывающимся и прочим ньюфагам обязательна!
https://www.goodreads.com/shelf/show/reverse-engineering - список книг

Сайты по RE:
http://wiki.yobi.be/wiki/Reverse-Engineering
https://www.reddit.com/r/ReverseEngineering/comments/hg0fx/a_modest_proposal_absolutely_no_babies_involved/
http://www.program-transformation.org/Transform/ReengineeringWiki
http://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/Assembly
http://asmworld.ru/
https://software.intel.com/en-us/articles/intel-sdm
http://www.nasm.us/doc/
https://sourceware.org/binutils/docs/as/index.html#Top
https://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/
2 1015220
О, даже Крис есть тут в списках. Я бы посоветовал еще добавить курс exelab. Ранее это было очень уж годно, а сейчас уж не знаю как. Кстати, ОП ты пробовал реверсить с помощью radare2? Стоит туда вкатываться как в альтернативу IDA? Хотя мне она нравится. Уж куда лучше, чем родна и любимая олля, жаль уже почившая.
sage 3 1015227
>>015220
Я пробовал r2. Не рекомендую третий тред подряд, даже рядом с IDA не стоял, если тебе что-то серьезное нужно. А несерьезное можно хоть через objdump -D реверсить. Единственная причина использовать - кококо ида нешвабодная, дорогая, а ильфак пидар.

Алсо, что касается ольги, то ее клон вполне юзабелен, жив и здравствует, называется x64dbg.
4 1015229
>>015227

>Алсо, что касается ольги, то ее клон вполне юзабелен, жив и здравствует, называется x64dbg.



И как годно? Блин, надо бы грузануть, вспомнить старые-добрые времена, хех :)
# OP 5 1015252
>>015220

>Кстати, ОП ты пробовал реверсить с помощью radare2?


Даже не понял, как начать. Какая-то хуета для хипстеров.
6 1015281
Анон >>1000505, отпишись.
7 1015291
>>015281
Аюшки?
Я забил, пока катаю бота за кэш, раз своих мозгов не хватает.
8 1015296
>>015227

>Единственная причина использовать - кококо ида нешвабодная, дорогая, а ильфак пидар.


Но ведь это весомая причина, всё-таки.
Ковыряю сейчас r2+webui, в первом приближении сносно. Сравнивать с IDA пока нелепо, но с objdump ещё нелепей.
9 1015315
Посоны, накидайте binary bomb для лоу-лвл новичка, пожалуйста. Гугол чего-то не оче релевантно выдаёт.
sage 10 1015316
>>015315
Што? Поясни, что ты имеешь в виду. Какой-то фантастики начитался?
sage 11 1015329
>>015296
Откуда вообще в этом итт треде взялось слово веб? У меня, например, бинарники по 10-20 метров, после анализа базы иды весят по полгига. Ида просто рисует нужные места листинга при переходе, а браузер как? Полностью грузит? Ну удачи ему, лол. Динамически подгружает при скролле? А если я долго скроллю?
Не пробовал вебморду, от консольного интерфейса впечатления в основном негативные, от функциональности тоже, новый нативный гуй тоже руки не дошли еще посмотреть.
Хорошего в веб-клиенте (или лучше в нативной ренедерилке, которая не будет продираться сквозь десятки слоев абстракций и песочниц, и не будет заставлять html/css делать не свойственные ему вещи) - только возможность запустить сложный анализ где-нибудь на соседней машине, пока на своей машине я лампово пишу скрипты и собираю сигнатурки для либ. Ну и совместная работа, куда же без нее, хотя с ней все очень сложно, нужен вменяемый undo, с которым все еще более сложно.
12 1015337
>>015329
Не могу защищать radare2, так как с ним не работал, но не могу не заметить, что ты поехавший, если думаешь, что веб-интерфейс принципиально не может иметь возможности подгружать только нужные области данных. Говоря проще, хуйню несешь какую-то. Если ты имел в виду конкретную реализацию веб-интерфейса, а не веб-интерфейсы вообще, то ты просто очень плохо выразил мысль.
sage 13 1015358
>>015337
Перефразирую: количество анальной боли при реализации нативного интерфейса не идет ни в какое сравнение с той болью, которую придется испытать, чтобы сделать что-то хотя бы отдаленно юзабельное в браузере. Да, я имею в виду веб-интерфейсы вообще, и мне очень жаль, что индустрия до этого докатилась.
15 1015370
>>015329
Ты какой-то из 90ых.
Анальную боль несут с++/жаба, а не нода. А экономить на байткоде в 2к17 может хотеть либо ембеддщик с 8-битной атмегой, либо старый пердун с устаревшими рефлексамм.
Загугли скрины уже, если самому некогда ковырять.
scr1.png177 Кб, 1024x739
16 1015372
>>015291
Как ты быстро.
У меня нет 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
00.jpg493 Кб, 1920x1080
17 1015467
>>015372
Бро, при запущенном боте этот БП срабатывает постоянно, даже когда тот ничего не делает.
18 1015581
>>015467

>при запущенном боте


Если запустить программу, она дважды соединяется с сервером: проверка обновлений и проверка ключа. Затем ничего не передаётся. По крайней мере, у меня именно так. Вот после запуска и проверки нужно поставить брекпойнт.
Как вижу, передаётся 4 байта. Посмотри в Wireshark, что он там передаёт. Пингует сервер, что ли?
19 1015586
>>015581
Увидел, передаётся 00000001. Поставь условный брекпойнт, Shitf+F2, [esp+0c] > 64
00.jpg477 Кб, 1920x1080
20 1015599
>>015581
Так же себя ведет, может в условии очепятка?
scr2.png116 Кб, 712x538
21 1015615
>>015599
Нет, теперь всё правильно. Размер буфера 0xC1, что больше 0x64. А что хотя бы передаёт? Текст или бинарные данные? Щёлкни на третьем, от вершины стека, параметре правой кнопкой мыши и нажми "Follow in Dump". Если там текст "GET /start?....", то нужно будет трассировать до функции шифрования. Сначала можно Ctrl+F9, таким образом отладчик остановится на первом ret, что как раз будет выходом из функции send. А дальше F7 или F8 и смотри, что там идёт. Нужно найти, где в стек кладётся адрес (07CB15C8 в данном случае). И найти, откуда он берётся. Где-то поблизости, если повезёт, будет функция шифрования.
22 1015622
>>015615
Кстати, по адресам 00444B67 и 00444B90 что-то ксорится. Поставь брекпойнты там и посмотри, что там было изначально.
00.jpg478 Кб, 1920x1058
23 1015627
>>015615

>Посмотри в Wireshark, что он там передаёт.


Абсолютная тишина.

>Follow in Dump


Пикрелейтед
Эта апишка не может для чего-то еще использоваться, кроме передачи по сети? Общение между потоками, например, я хз.
Вообще я ловил два типа запроса, проверка ключа и этот start?data. Первый отправляется при запуске бота и старте боя, второй только при старте боя. А БП про который ты говорил срабатывает постоянно, я даже кнопку "в бой" не успеваю прожать.
24 1015662
>>015627

>Абсолютная тишина


Подозрительно.

>для чего-то еще использоваться, кроме передачи по сети


Если в сеть не идёт, значит локально используется.
Попробуй брекпойнт на WININET.HttpSendRequestA. Или измени условие на
[[esp+8]] == "GET"
00.jpg494 Кб, 1920x1080
25 1015677
>>015662

>WININET.HttpSendRequestA


Попался этот самый запрос с data.
Не мог бы ты пояснить, куда копать дальше? По Ctrl-F9 меня кидает рядом, на 7129193D.
26 1015682
>>015677
Может скупе или что-нибудь такое? Там шустрее будет общение.
sage 27 1015735
>>015369
В общем, какой-то локальный мемчик про какую-то скучную лабу. Решай крякми, реверси реальный софт, реверси свои собственные сэмплы, забей на эту хуйню.
scr3.png5 Кб, 832x80
29 1015912
>>015682
Можно и так. А можно и здесь, как-то по теме треда всё же.
>>015677
Предыдущий скрин, нашёл алгоритм шифрования, немного перепечатал с экрана, расшифровал и похоже, что передаются какие-то настройки. Почему так - не знаю. Скачал базовый набор для WoT на 2.5 Гб. И у меня отказывается загружаться CyberTank, если уже запущен клиент, а если сначала его, то не показываются танки. Как сделать, чтобы были доступны?

>куда копать дальше


Тебе надо найти, где данные шифруются. Если пролистнёшь по стеку (правое нижнее окно) вниз, то есть вероятность увидеть не шифрованные данные. Сейчас там видна шифрованная строка. Если не шифрованные данные есть, то жмёшь Ctrl+F9, оказываешься в конце функции, жмёшь F7/F8, оказываешься в предыдущей функции. Жми поочерёдно, посматривая в стек до тех пор, пока не дойдёшь до функции, которая шифрует строку. Ещё можешь сделать дамп программы (плагин OllyDumpEx, например), загрузи его в IDA, так гораздо удобнее будет.
Завтра попробую сделать сам, если не осилишь, ты только напиши, как эти танки в ангар добавить, когда они и так там уже стоят.
30 1016125
>>015912

>нашёл алгоритм шифрования, немного перепечатал с экрана, расшифровал


Можешь скинуть описание?

>похоже, что передаются какие-то настройки


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

>отказывается загружаться CyberTank


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

>Завтра попробую сделать сам


Если будет проще, напиши в скупе j0hnny_mn3monic[at]outlook.com, предоставлю готовое рабочее окружение.
31 1016149
>>016125
Шифрование крутится в виртуальной машине VMProtect, что ожидаемо.

>Можешь скинуть описание?


for (i = 0; i < data_size; decrypt[ i ] = encrypt[ i ] ^ ((i + 0xD5) % 0xFF), i++);

>Мое предположение


Маловато места для алгоритма. Уже выключил всё, а скопировать не догадался. Там передаётся ключ, какая-то шифрованная строка длиной символов 20, некоторые параметры или что-то подобное.

>чтоб дойти до момента передачи шифрованных данных, нужен валидный ключ


Нет, не нужен. Ключ периодически проверяется во время работы, но ответ легко подделать. Он не шифрован, в Wireshark ты должен был его увидеть. А шифрованные данные передаются уже после начала боя, когда секундомер ожидания начала боя дойдёт до 0.
Как уже писал ранее, самый простой вариант в данном случае - просто отправить ранее перехваченные данные обратно программе. Простейший прокси-сервер, который не пустит трафик программы дальше твоего компьютера. Программа использует системные настройки, поэтому перенаправить трафик очень просто, "Свойства обозревателя/Подключения/Настройка сети" в "Панели управления". Перехватываешь один раз сессию и всегда её используешь. Один и тот же ключ должен, наверное, давать один и тот же результат, если там, конечно же, не добавляется что-то типа времени. Только не забудь добавить проброс трафика, который не относится к программе, дальше, а иначе тот же Хром перестанет работать, т.к. он использует системные настройки.

>Не могу сказать, не сталкивался с такой траблой


Странное поведение, нужно сначала запускать программу в отладчике, а только потом игру, тогда всё работает.
32 1016188
>>016149

>for (i = 0; i < data_size; decrypt[ i ] = encrypt[ i ] ^ ((i + 0xD5) % 0xFF), i++);


Блин, я у мамы тупенький. Это обратимо, помимо перебора?

>А шифрованные данные передаются уже после начала боя


Сори, не совсем корректно написал, имел ввиду именно этот запрос. C подделкой счетчика боев в запросе checkKey проблем нет.
33 1016213
>>016188

> Это обратимо, помимо перебора?


> XOR


Мимопроиграл.
34 1016220
>>016213

>Мимопроиграл.


Ну и что ты будешь ксорить, если на руках результат операции и два неизвестных?
35 1016235
>>016220
Где ты там два неизвестных нашел? Там однобайтовый ксор, просто тот байт просто не с нуля стартует и инкрементируется. Это не шифрование даже, а просто обфускация.
36 1016238
>>016235
X ^ ((Х + 0xD5) % 0xFF) = 0x6A
Скажи мне пожалуйста, чему равно Х, я наверное действительно что-то не догоняю.
37 1016259
Ребзя, помогите опознать кодировку
3a 04 - к
33 04 - г
66 00 - f
70 00 - p
6d 00 - m
38 1016288
>>016188

>Это обратимо, помимо перебора


Да для ксора, функция шифрования и расшифровки одна и та же. Ты C(++) или C# знаешь? Имена всем переменным осознанные дал же, в чём именно сложность?

>имел ввиду именно этот запрос


Именно этот запрос и имел в виду. Не нужен валидный ключ, чтобы добраться до функции шифрования. Бот сам начинает нажимать кнопки, вступает в бой, а затем отправляет шифрованные данные.
Забыл написать, функция перед шифрованием находится по адресу 0043EA10, можешь посмотреть, что именно передаётся.
А ещё мне мысль в голову пришла, что та странная строка - это может быть hardware ID, как защита от того, что тебе советую. Для одного и того же компьютера может и пройдёт.
>>016238
У тебя ошибка, нет двух X.
Первый X - текущий символ для шифровки/расшифровки.
Второй X - это счётчик, он равен текущей позиции символа, от 0 до n - 1, где n - длина строки.
39 1016293
>>016259
Это обычный юникод, UTF-16LE.
Латиница - как и положено ей быть, кириллицу можешь посмотреть здесь https://ru.wikipedia.org/wiki/Кириллица_(блок_Юникода)
00.jpg161 Кб, 1920x1080
40 1016448
>>016288

>У тебя ошибка, нет двух X.


Сори, спасибо.
Правда лыжи все равно не едут. В твоих руках это ienpfmofkilamheebffnkiicpnacebnibeamjjbipaodeglnfpbbkdnhinbjnmkfaneghfmickenhfhchddohbjnjbngcjahbbgnkfmdegibppnj превращается во что-то удобочитаемое?
Сори, что дергаю по ерунде, просто скила не хватает, а интерес разгорелся, лол.
41 1016495
>>016293
Спасибо тебе большое, действительно помог
42 1016556
>>016448
У меня тоже не едут, кстати. Может, вместо 0xd5 что-то динамическое? Алсо, зачем ты творишь эту херь с binascii, когда в питоне есть нормальные шестнадцатеричные константы?
мимоанон
43 1016563
Давно хотел зайти сюда и спросить.
Тут есть те, кто шарят в криптовке файлов, крипторах, алгоритмах шифрования и вот этом всем?
Сложно ли мимо дурачку запердолить полиморфный криптор, и шоб антивирусы не палили без знаний ассемблера? Есть знания пифона и джаваскрипта.
sage 44 1016585
>>016563
"Полиморфный" как бы подразумевает, что ты будешь менять инструкции в стабе. Чтобы что-то менять, надо знать, что оно из себя представляет. Выучи асм, это самый простой язык.
45 1016730
>>016448

>лыжи все равно не едут


Это не для этого, а вот для этого >>015627.
То, что ты привёл, как раз и есть то, что тебе, в итоге, нужно. Так что увы, с этим пока ничего не получится.
Кстати, когда у тебя срабатывает брекпойнт на HttpSendRequestA, окно с игрой перестаёт реагировать на любые действия? Как будто бы зависло приложение? И почему команда, в которую кидает, всё время проигрывает? Они что, без одного танка не могут победить? Один раз была победа и раз 5 поражение.
scr4.png30 Кб, 835x563
46 1016732
47 1016757
>>016730

>когда у тебя срабатывает брекпойнт на HttpSendRequestA, окно с игрой перестаёт реагировать на любые действия


Да

>почему команда, в которую кидает, всё время проигрывает


Это норма, они бы и с тобой лузнули. Имхо, это фишка разработчика по разводу на донат.
48 1016909
>>016149
А как ты код из-под VMProtect вытащил? Что почитать?
49 1016925
>>016909

>А как ты код из-под VMProtect вытащил


Никак не вытаскивал, функция была не защищена, а с программы был снят дамп, поэтому с ним можно работать в IDA.
50 1016944
>>016925
Ну с дампом-то понятно. Я думал, тут внезапно образовались спецы, которые саму вм раскручивают за полчаса.
51 1018318
А че на этих ваших ассемблерах писать можно? Надо прокачать архитектуру компютера там, операциооные системы, системное программирование. Короче, есть ли прикол писать на ассемблере?
52 1018369
>>018318
Что угодно. То же, что и на других языках.

> есть ли прикол писать на ассемблере


В основном для обучения и ради интереса. Ну и для embedded небольшие кусочки приходится писать именно на ассемблере.
# OP 53 1018371
>>018318

>А че на этих ваших ассемблерах писать можно?


Что угодно от Hello World до операционной системы.

>Короче, есть ли прикол писать на ассемблере?


Есть.
54 1018408
>>018369
>>018371

Спасибо аноны. Компиляторы же транслируют код в ассемблер или нет? Везде пишут, что компилятор транслирует в машинный код, но не в двоичный же?

Есть такая цитата - "Если вы не знаете, как работает компилятор, то вы не знаете, как работает компьютер."
55 1018436
>>018408
Компиляторы (трансляторы) транслируют код во что-то. Это может быть машинный код (он же двоичный), может быть ассемблер текстом, может быть сишечка текстом (так делал C++ в давние-давние времена, и для последующей обработки уже требовался компилятор сишечки), может быть байткод какой-нибудь вм, может быть какое-то промежуточное представление (погугли link-time code generation - в таком случае машинный код генерит линкер, это позволяет делать некоторые глобальные оптимизации). Вариантов дохуя. Общее в них только то, что код на чем-то человекочитаемом преобразуется во что-то другое (часто более низкоуровневое, но не обязательно).
56 1018441
>>018436
Я не уточнил, что имел ввиду компиляторы в нативный код. Но я не могу понять, как можно компилировать в двоичный код, для чего. Если процессор понимает только команды ассемблера, как двоичный код будет исполняться? Тогда другой вопрос возникает, если компилятор транслирует в ассемблер, то тогда требуется повторная компиляция в исполняемые файлы компилятором ассемблера.
57 1018446
>>018441
Команды ассемблера - это текст. Компилятор ассемблера превращает текст в двоичный код, в байтики. В байтиках закодированы инструкции, ну т.е., вот такие-то биты говорят, какая инструкция, что она делает, вот тут у нас immediate, вот тут биты указывают, в какой регистр положить результат. Процессор читает байтики, разбирает вот эту закодированную информацию и делает, что указано.

> Тогда другой вопрос возникает, если компилятор транслирует в ассемблер, то тогда требуется повторная компиляция в исполняемые файлы компилятором ассемблера.


Именно так и делается в классическом тулчейне. Просто то, что ты считаешь компилятором, называется compiler driver. Для сишечки он: примет аргументы, вызовет препроцессор, для результата препроцессирования вызовет компилятор (транслятор), для результатов компиляции вызовет ассемблер, для полученных объектных файлов вызовет линкер, и ты получишь свой исполняемый бинарник. Компилятор может содержать все эти утилиты внутри себя, может объединять некоторые этапы (например, может напрямую генерить машинный код, и никакого ассемблера текстом), поэтому ты можешь получить исполняемый файл без промежуточных результатов - зависит от компилятора.
58 1018450
>>018446
Спасибо за подробное разъяснение. Команды ассемблера и инструкции процессора это не одно и то же? Если нет, то можно ли обращаться напрямую к процессору без ассемблера?
59 1018452
>>018450
Можно, но нахуя? Я теоретик-петухан, но для процессорных инструкций используют программаторы вроде. Поправьте, если обосрался.
60 1018459
>>018450

> Команды ассемблера и инструкции процессора это не одно и то же?


Все сложно. Одну команду ассемблера ассемблер может превращать в разные инструкции (например, для тебя mov - это просто mov, а для процессора есть разные - mov reg, reg; mov reg, imm; mov reg, [reg] - опкоды отличаются), могут быть оптимизации на уровне ассемблера (масм заменял lea на mov, или наоборот - не помню уже), могут быть псевдоинструкции (например, в ARM некоторые команды не существуют на самом деле и разворачиваются в несколько реальных инструкций). Но в общем и целом соответствие почти полное. Т.е., ассемблерные "команды" - это просто человеко-читаемые имена для реальных кодов инструкций процессора.

> можно ли обращаться напрямую к процессору без ассемблера


Качаешь мануал по процессору, ищешь формат инструкций, ищешь таблицу опкодов, втыкаешь нужные числа в нужные места, пишешь байтики в память и выполняешь. В этом даже есть некоторый смысл, если ты хочешь написать свой JIT с нуля и не хочешь таскать за собой внешний кодогенератор или ассемблер.
61 1018461
>>018450
И вообще набери в гугле "васм заклинание кода". Где-нибудь обязательно перевыложено.
62 1018462
>>018452
Так если у процессора и ассемблера разные инструкции, то зачем лишняя прослойка? Пока не догоняю разницу между инструкциями процессора и командами ассемблера, если разница вообще есть.
63 1018463
>>018462
Ну типа ассемблер прощее машинного кода.
64 1018465
>>018459
>>018461
Спасибо за помощь. Зачем мне это? Чтобы понять откуда ноги растут. Слишком много абстракций друг на друге, хочется понять с чего все начинается, чтобы понимать как все работает изнутри. А то получается пишешь какие то заклинания, как будто магия. Это не дает мне покоя.
65 1018467
>>018463
Понятно что проще. Но для меня непонятно все ли возможности дает ассемблер, какие дает процессор. И какова разница в их эффективности. Опять же в ассемблерах встречаются функции, в процессоре как я понимаю их нет, вот хочу понять во что они транслируются.
66 1018470
Не знаю правильно ли нагуглил, но я немного в шоке. В руководстве интела по командам 2234 страницы. Больше чем референс С++.

https://software.intel.com/sites/default/files/managed/a4/60/325383-sdm-vol-2abcd.pdf
67 1018478
Существует путаница, даже в руководствах Интела инструкциями процессора называют - команды непосредственно процессора, команды ассемблера, и даже двоичный код.
68 1018479
>>018462

>то зачем лишняя прослойка?


Затем, что она адреса автоматически проставляет. Если ты пишешь в машинном коде, ты должен высчитывать размер каждой инструкции, чтобы поставить джамп в нужное место, знать адреса каждой константы. Причем если ты добавляешь код в середину функции, то все адреса, соответственно, изменяются, и тебе приходится все заново все пересчитывать. Основная функция ассемблера - именно линковка и проставление адресов, а не текстовое представление кода. Цифры не так уж сложно читать при должной практике.
69 1018505
>>018470

>правильно ли нагуглил


Правильно.
70 1018641
Что думаете о forth?
71 1018665
>>018641
Для каких задач?
72 1018926
>>018665
Для разнообразных.
73 1019114
>>018926
Раз для разнообразных, то не подходит.
74 1019121
>>018641
Заебись технология. Только современному былокодеру ни к чему.
75 1020124
В PE файле релоки могут быть где либо кроме кодовых секций? Спрашиваю потому, что если придется их фиксить вручную, можно ли ебануть VirtualProtect(...PAGE_READWRITE, &oldProtect) по всему диапазону релоков, а потом восстанавливать через тот же oldProtect, или там могут попасться и секции данных, и tls и еще хуй знает то?
76 1020547
>>020124

> В PE файле релоки могут быть где либо кроме кодовых секций?


Конечно. Пример (глобальные переменные):
int foo = 1;
int *bar = &foo;

> или там могут попасться и секции данных


Ну попадутся секции данных, но если ты все равно флаги защиты восстановишь, в чем проблема-то?
77 1020563
>>015083 (OP)
Господа, пишу криптор. Для запуска программы в памяти мне нужен PE-загрузчик. Стоит ли писать его с использованием некоторых объектов C++ STL? Отказываться от STL все равно что выйти из зоны комфорта. Может ли использование STL помешать морфингу кода и затруднить чистку стаба?
78 1020592
>>020547
Дак вот в том и дело, что если при каждой итерации для страницы это делать, то дохуя вызовов VirtualProtect получается. Я думал, может можно в 2 вызова это сделать, а не 2N
79 1020611
>>020563
Почему C++ такой уебищный? Пишу PE-загрузчик и десять минут потратил на создание сущностей для автоматического освобождения ресурсов, хотя если бы писал на си, то мог бы сосредоточиться на решении задачи.

https://ideone.com/Yy5the
80 1020624
>>020611
А можно было написать класс и освобождать/закрывать все в деструкторе. Диды десятилетиями так писали, а тут ты со своим scoped.
81 1020705
Что находится в [image_optional_header] SizeOfHeaders? Суммарный размер всех заголовков или может быть что-то другое? Можно рассчитывать на значение этого поля, проецируя все заголовки на память?
82 1020736
>>020705
Количество байт с учетом паддинга нулями, выделенное под заголовки в файле, а не образе. В образе округляй по размеру страницы.
83 1022266
>>015083 (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
84 1024089
>>022266

> библиотеки для ассемблирования и дезассемблирования


keystone/capstone

> Что означают эти r/m8, r16/32/64, m16/32, imm8


r - регистр, m - память, imm - непосредственное значение (константа, которая кодируется прямо в инструкцию) циферка - количество бит. r/m8 - восьмибитный регистр или байт из памяти.
Screen Shot 2017-07-15 at 16.26.43.png296 Кб, 1747x1174
85 1025441
Как эти китайцы запихивают свои иероглифы в название процедур?
sage 86 1025602
>>025441
Молча. Они на них пишут. Ты тоже так можешь уже много лет:
#include <stdio.h>
static void йоба(char сообщение[]) { puts(сообщение); }
int main(void) { йоба("привет, мир"); }
Как тебе Hopper?
87 1025754
>>025602
Оперативку он жрет конкретно, бинарники от 20мб и выше IDA отжирает 300-400мб, Hopper жрет гиг и более. После закрытия файлов память практически не освобождается, постоянно нужно перезапускать программу.
sage 88 1025796
>>025754

> Оперативку он жрет конкретно


Ну ничего, вот седьмая ида, которая 64-bit only, выйдет, и будет примерно столько же.
89 1026185
Сам реверсач, помоги неофиту. Решил я поиграть в скайрим, и сейчас нужно много золота. Ну я подумал - хули, сейчас подкрутим. Расчехлил ollydbg, запустил в нем skyrim и понял, что я обосрался: я не могу найти переменную, в которой хранится количество золота. Что я уже пробовал:
1. Смотрел количество золота и искал его hex-значение в секции .data в виртуальной памяти, не исполняемом файле, он же вроде memory dump. Также искал значение в стеках каждого треда. Значение пробовал как в прямом порядке искать, так и обратном, свойственном виртуальной памяти (типа 00 00 0E 8B и 8B 0E 00 00 ). Нихуя не получилось, в памяти очень много адресов с этим значением.
2. Далее, попробовал сделать search for referenced strings, поставил брейкпоинты на всю хуйню с текстом gold вне зависимости от регистра. Теперь, когда я открываю инвентарь, у меня срабатывает BP (т.к. там в инвентаре кол-во золота отображается), казалось бы, прощелкай пошагово всю хуйню и найди где есть обращение к переменной, в которой хранится количество золота. Но это пиздец, там очень много щелкать приходится.

Я так понимаю, что 2 вариант более работоспособный, поэтому меня интересует, нет ли какого то механизма в ollydbg, который мог бы мне помочь? С чего вообще стоит начинать и как стоит делать, чтобы в программе найти значение какой либо переменной и подкрутить ей значение?
90 1026213
>>026185
Делай, как Крис Касперски: сделай дамп образа, чтобы зафиксировать текущее число голды. Измени количество голды и сделай еще один дамп. Для верности сделай еще дамп с другим количеством голды. Сравни дампы.
91 1026216
>>026213
А можно просто взять Cheat Engine, который сделает это автоматически. Алсо, искать константу лишено всякого смысла. Значение может быть в "копейках" (или еще каком-то fixed-point), может быть float или double. Может быть зашифровано, может дублироваться и сравниваться. Много чего может быть.
92 1026217
>>026213
То есть нет волшебной кнопки "сделать заебись"? Либо вручную перебирать ебучие DWORD'ы, либо сделать как ты предлагаешь, либо использовать cheat engine, который автоматизирует то же самое?
Снимок.PNG36 Кб, 894x281
93 1028542
Реверсач, что обозначает нотация адресов как на пикрилейтед? Типа ImageBase + RVA вместо VA?
94 1028544
>>028542
Или entry point + rva?
95 1028546
>>028542
Именно так.
14996969108130.jpg148 Кб, 811x359
96 1028885
Что скажете о книге Калашникове для ньюкека?
97 1028916
>>028885
Нет разницы, как учить асм. Это самый простой язык, где все сложности заканчиваются на отличиях компиляторов. Можно хоть Intel SDM читать. Калашников сойдет тоже.
98 1028980
>>028916
Спасибо, анон. А что на счёт практических задачек? Как я понял, в ассемблировании важно понять не сколько сам яп с его синтаксисом и набором инструкций, сколько принципы работы CPU, изменение регистров по ходу кода етс. А у Калашникова ничего веселее разбора резидента нет вроде. Может есть какой-нибудь годный сборник лаб для студентов дцп курса, а то читать и тупо копипастить код уже утомило.
99 1029016
>>028980
Не знаю, чего тебе конкретного посоветовать. Так-то в 32-битный асм вкатиться проще: если знаешь какой-нибудь Си, можно компилировать код с разным уровнем оптимизаций и смотреть, во что он свернется; на васме были туториалы Iczelion-а, можно писать полноценные десктопные приложения, смотреть олькой или x64dbg, как они выполняются и т. д. Но у тебя там 16-битный код ведь? Пытайся играть с каждой новой инструкцией, пиши минимальные программки в 3-4 инструкции, разбирайся, как все работает. Возьми простые задачки для любого другого языка и пиши их на асме. Подходы к реализации от языка не меняются. Алсо, можешь взять Human Resource Machine, поиграть в нее, потом поделать то же самое на реальном ассемблере.
100 1033634
Пацаны, а каким образом хранятся переменные в C? Вообще переменные в высших языках это одно и тоже на низком уровне?
Это же надо сопоставить имя переменной и ее значение. А Имя переменной оно же огромное, это буквы, каждую нужно закодировать минимум одним байтом. Почему дураки программисты их используют вместо номера ячеек памяти? Это же очевидная оптимизация!
sage 101 1033677
>>033634
Толсто. Во время компиляции имена заменяются на номера ячеек памяти. Если изначально использовать адреса, ты заебешься их пересчитывать вручную при изменении программы. Для этого-то как раз изначально и придумали ассемблер, а потом и другие языки.
102 1034289
Сап, драч. Допустим, есть вызов функции, после которого EAX принимает известное мне еще до вызова функции значение. Мне нужно найти, где это значение присваивается в ходе выполнения функции. Можно ли в ollydbg поставить брейкпоинт, чтобы когда определенный регистр принимал определенное значение, срабатывал БП? Conditional breakpoint мне не очень подходит, т.к. он, как я понял, срабатывает на определенной инструкции, а не на всей функции
103 1034360
>>034289
Нашел походу. Run trace - это то, что нужно
104 1036950
Аноны, а что вы думаете по поводу виртуалок с режимом отладки? Например, той же BOCHS. Ну или хак VirtualBox с софтварным эмулятором.
105 1037376
>>015220
Годная тулза, но только если нравится/удобно ковыряться в сонсоли. Для большого унылого энтерпрайза не очень, но для ctf/прошивок/эмуляции - самое оно
мимо р2фанбой
sage 106 1038224
>>037376

> Error in `r2': double free or corruption (!prev)


> Aborted (core dumped)


Каждый раз, когда у меня возникает необходимость это использовать (IDA под рукой нет), дело заканчивается листингом objdump. По разным причинам. Сегодня, например, вот так.
107 1038242
Что мне нужно учесть, если я в PE файл хочу добавить запись об импорте функции из kernel32.dll? Наиболее оптимальным по трудозатратам и красоте мне кажется в конец существующей таблицы импорта добавить новую запись kernel32.dll и нужную из неё функцию, ибо я в рот ебал вставлять функцию в уже существующем импорте kernel32.dll и искать все вызовы импортируемых после вставки функций, чтобы добавлять к ним смещение.

Допустим, что секция, в которой находится таблица импортов, позволит вместить в себя достаточно байт, чтобы за оффсет не перевалить. Я понимаю, что нужно увеличить виртуальный размер секции с импортом, увеличить размер IMPORT_DATA_DIRECTORY или как там её. Какие еще подводные камни?
sage 108 1038284
>>038242
Никаких, так и делают обычно. Учти только, что за импорты две датадиректории отвечают. Есть IAT еще.
109 1038294
Аноны вкатываюсь в реверс,учу асм парралельно с курсом с exelab, что еще мастхэв знать для реверса и что можно почитать?
sage 110 1038298
>>038294
Шапку.
111 1038722
Как с нуля вкатиться в реверсинг?
С чего из шапки начинать изучение?
sage 112 1038777
>>038722
Молча.
С начала.
# OP 113 1039413
>>038294
>>038722
Сцуко, аноны совсем разленились и не могут перейти по первой ссылке с шапки.
АЛСО, удивительно, что тред ещё жив.
ОП
114 1039626
>>039413
Да бля понятно что тут ссылок дохуя и все годные, я спрашивал про фундаментальные вещи и нужно ли они типо, а надо ли по ОС заморочится?Надо ли читать Таненбаумана?а архитектуру проццесора?мне сначала это прочитать а потом уже асм,гайды хуйды по реверсу или и так норм
115 1039634
>>039626
как вкатиться, как вкатиться. ответь себе вопрос что происходит с программной точки зрения, когда ты отправляешь сообщения на дваче от нажатия на клавишу и движения мышкой до ввода капчи и нажатия отправить. нахуй оно тебе нужно, читать сразу обо всём без конкретной задачи. информация не будет задерживаться. поставь себе задачу в поле RE. любую, хоть самую дебильную, и решай её. так и вкатишься.
116 1039637
>>039634
Спасибо анон, чтоб у тебя доляры сыпались рекой,любая прога реверсилась, а тянки прыгали на хуйце
117 1039660
подскажите годный дампер процессов. встроенный в ollydbg не подходит
118 1039840
>>039626

> надо ли


Надо. И го выучить надо. И джаву с паттернами. И алгоритмы. И цифровую схемотехнику. Чем больше ты знаешь - тем проще реверсить. Но в каком конкретно порядке учить - похуй. Можно просто начать с первой ссылки в шапке. Можно просто выучить асм. Можно начать с теории.
Screenshot20170811172203.png34 Кб, 410x502
119 1042632
Вопрос знатокам оптимизаций:
как можн оптимизировать следующий цикл с учетом того что ег осложность что-то между O(n^2) и O(n^3). Все перменные это ymm регистры, но даже один единственный лишний mov уменьшает скорость на 15-20%
120 1042647
>>039626
>>039626
Таненбаум та еще ересь, по крайней мере на русском, в оригинале нет. Лет 20 назад до дыр зачитал книгу Кейслер операционные системы - проектирование. Проясняет мозги.
121 1042881
>>042647
Таненбаум читабелен. Местами вводит ненужные сущности, местами рассказывает о какой-нибудь хуйне до ее описания, но в целом норм (английскую версию читал).
122 1042915
>>015083 (OP)
Почему в ntdll нет функции LdrpAllocateTls?
123 1042944
>>042915
Потому что есть, но она внутренняя, не является частью публичного апи, и поэтому не экспортируется. Зачем тебе она?
124 1042965
>>042944
Эмулировать тлс в крипторе, передав часть задач системному лоадеру
125 1043001
>>016757
Зачем только за эти танки взялся? От нечего делать, сделал митм на трафик танков. Пароль передаётся в открытом виде, хотя он и в зашифрованном трафике, но заменить публичный ключ на свой не составляет труда, что, собственно, мной же и сделано. Не понимаю, что за тупость у разработчиков? Сделать 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.


Гордо написано в гайде, что не правда. Ничего не надо модифицировать, клиент не знает, сервер не догадывается.
Интересно, что передаётся в трафике. Сейчас это набор бинарных данных, ничего толком не понятно, кроме строк, которые в них проскакивают. Действительно ли совсем ничего лишнего клиенту не передаётся?
Так же у меня есть идея, как сделать обход проверки в боте. Но мне лень сейчас это реализовывать.
126 1043103
>>042965
Ты в свой тред заглядывал вообще? Что ты конкретно хочешь эмулировать? Ты осознаешь, что к моменту, когда твой код получает управление, процесс уже создан, и LdrpAllocateTls уже отработала? Зачем тебе второй раз ее запускать?
127 1043170
>>043001

> публичный ключ на свой не составляет труда


Это палево и пиздец какое, олсо:

>Сделать SHA256 от пароля хотя бы что мешает?


Что мешает вычислить пароль с коллизионным SHA256?
128 1043177
>>043170

>Это палево


В чём или на чём? Само собой, трафик нужно расшифровать и снова зашифровать нужным публичным ключом. Мой аккаунт пока что не заблокировали. Если заблокируют, тогда где-то по тихому передаётся информация о публичном ключе. Не написал, что используется RSA, не сертификат.

>с коллизионным SHA256


Сложность вычисления коллизии? Это всё-равно лучше, чем пароль открытым текстом. Можно усложнить и добавить соль, которую присылает сервер. Или ещё более усложнить, вычисляя SHA от SHA несколько тысяч раз, как сделано в Wifi.
129 1043282
Пиздец раскажите плз как вы найдете коллизию для sha256
130 1043335
>>043177

>на чём


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

Вот краткое овервью
http://maths.straylight.co.uk/edb_files/crypto_colloquium.pdf

>Сложность вычисления коллизии


O(1), для ключей до 128 бит есть уже предрассчитанные словари.
131 1043354
>>043335
Долбаеб, речь была о sha256, расскажи давай как коллизию искать будешь?
132 1043360
>>043354
https://eprint.iacr.org/2008/270.pdf
Говна наверни мамки ананимас
133 1043372
>>043360
Прочитай первую строчку. Эта атака на reduced-версию, меньше половины раундов.
134 1043376
>>043360
Долбаеб короче с кем я спорю
Ты сам читал статью то? Это поиск коллизии только на 24 раунда из 64 в SHA256, для всех раундов каких либо результатов значительно снижающих количество операций пл сравнению с полным перебором - нет.

Кроме того только недавно была опубликовпна ПЕРВАЯ коллизия найденная гуглом на суперкомпах для SHA-1, а SHA-256 значительно сложнее [1], короче иди нахуй уроки учить

1. https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html?m=1
135 1043391
>>043372
Что мешает навернуть birthday поверх этой заготовки?

>>043376
Найс аутофиляция. Жаль ты в Вегас в том месяце не был, было бы интересно посмотреть на этот манямир вживую.
136 1043397
>>043391

> Что мешает навернуть birthday


Мешает то, что SHA256reduced - это не SHA256. С точки зрения криптографии - это две родственные, но разные хэш-функции.
137 1043402
>>043397
Но разве мы не можем перейти от одного класса к другому заменив функцию расширения сообщений использующуюся с DCE?
Я просто к чему веду, недавно ломали JP Morgan Chase, кто в теме говорили о факте компроментации (сорри за мой русский он не совсем родной, я его не очень часто практикую, разве что в /b/) SHA256 на 80 раундов, причем во внутренней сети, т.е. дело обошлось ресурсами какого-то из внутренних серваков на который закинули минимальный код через сотрудников. Да и пруфы косвенные есть, в частности сменили все хеши на BF судя по техникал репортам.
138 1043457
Пацаны тут СЕНСАЦИЯ сыч с двача ищет коллизии к SHA 256 как два пальца, чисто чтоб пароль к танкам проснифить,призываем срочно в тред криптографический отдел гугла чтоб захайить ГЕНИЯ, в то они там мучаются а на дваче все давно уже известно!!
139 1043469
>>043457

>криптографический отдел гугла


Знал о хартблиде за три года до публикации уязвимости. А ты продолжай веровать.
140 1043473
>>043469
Т.е вся твоя аргументация строится на теории заговора которую невозможно подтвердить мои опровергнуть?

Кще раз, парень писал что надо бы закрыит алеие текст пароли в протоколе танков хотя бы хешем SHA256, на что анон (ты или другой) ответил что это ничего не изменит и якобы колизию подобрать легко. Плз расскажи как ТЫ это будешь делать? Без крутых историй заговора и херни типа я был на конфе в вегасе, а также ссылок на статьи которые ты сам не читал.
141 1043475
>>043473

> закрыть плеин текст пароли


быстрофикс, соррр с телефона пишу
142 1043476
>>043473

>теории заговора


Посмеялся от души, спасибо.

>ничего не изменит


Это так

>как ТЫ это будешь делать


>Без крутых историй


VentureCrypt дальше ты сам, раз просил без историй.

За что люблю русских - говно всегда лезет вперед всего. Проигрывать можно бесконечно :^)
143 1044834
мой проваёдер нарушает закон, по-видимому
т.к. я живу в украине но все сервисы мэйл ру работают
впрочем, у меня дом. сеть, т.ч. всё возможно
144 1054437
Есть софт для которого под МакОС есть кряк. Кряк сделан в виде замены главного exe файл. Лицензирование сделано через текстовый txt файл. Exe'шник при попытке запуска через виртуалку отрубается.

Насколько сложно будет портировать кряк под шиндовс? Ида умеет разбирать маковские исполняемые файлы? Есть ли там аналог diff'a для сравнения двух версий файла? Чтобы сразу было ясно где пропатчено? Кто-нибудь тут уже делал подобные операции?
145 1054463
>>054437
Все сам нашел и почти сделал.
# OP 146 1054823
>>054463
Нашёл- расскажи другим.
147 1054871
>>054823
Ничего я не смог сделать. Пропатчил аналогичным образом под шиндовс и нихуя не заработало. Программа зависает. Сижу разбираюсь почему.
блиныаниме.jpg266 Кб, 960x874
148 1055424
Это тред байтоебов? Поясните, пожалуйста за такую вещь.
- вот есть некий вирос, он ловится антивиросами по характерным сигнатурам (да?).
- сигнатура - это машинный код.
- одно и то же состояние регистров может быть вызвано разным машинным кодом / ассемблерными коммандами.
- предположим, у нас есть метод автоматически получать подобные "синонимичные" комманды (разный машинный код, приводящий к одинаковым состояниям регистров) для любого нужного состояния регистров. Можем ли мы исходя из этого получить неуязвимый вирос, просто меняя изначальный машинный код на "синонимичный"?
149 1055497
>>055424
https://ru.wikipedia.org/wiki/Полиморфизм_компьютерных_вирусов

>получить неуязвимый вирос


С 1990 года хитрые человеки пытаются, говорит статья выше.
150 1055509
>>055424

>он ловится антивиросами по характерным сигнатурам (да?).


Нет. Это уже не так с середины 00-х. Ловится по поведению динамически.

>Можем ли мы исходя из этого получить неуязвимый вирос, просто меняя изначальный машинный код на "синонимичный"?


Можем.
151 1055512
>>055497>>055509

>Ловится по поведению динамически.


А какое поведение считается неправильным? Представим полностью полиморфный meterpreter. Антивирос его не спалил по сигнатурам. Что нужно сделать программе, чтобы антивирос таки догадался? Ну кроме очевидной толстоты - форматирования винтов, массового удаления файлов и т.д.
152 1055524
>>055512

>массового удаления файлов


Судя по массовому распространению шифраторов, это нормальное поведение программы. Не нормальное поведение для антивируса, это когда программа создаёт удалённый поток, копирует/записывает в память чужого процесса, изменяет исполняемые файлы, читал, что очень не нравится антивирусу, когда программа обращается к службе BITS. Много чего ему может не нравиться.
153 1055970
Ебать журнал ксакеп теперь стоит 500 рублей за штуку. Не покупал его лет 15. Странно, что оно вообще еще выходит.
15036527414510.jpg99 Кб, 740x660
154 1056105
Поясните, пожалуйста, за тонкую разницу и отношения между опкодом, байткодом и машинным кодом. Как понял я:
- мнемоники (MOV, PUSH и т.д.) - удобное для человека представление опкодов
- опкод - единичный элемент машинного кода
- машинный код - исполняемая процессором последовательность опкодов (?)
- байткод - ???
- отношение опкода к байткоду - ???
- отношение машинного кода к байткоду - ???
Или где можно почитать про это внятно, коротко и по-существу?
Что скажете за этот ресурс http://ref.x86asm.net/
yb.jpg51 Кб, 604x579
155 1056129
>>056105
опкод - MOV
машинный код - 010110110110111...
байткод - 0145 5451 1245 1243 ABEF
1.png59 Кб, 1207x618
156 1056137
>>056129

>опкод - MOV


Но MOV это же мнемокод для удобства, опкоды у этой комманды могут быть разные.
Машинный код - это бинарное представление 16ричного байткода?
1493906486110.jpg338 Кб, 1369x1183
157 1056174
А еще есть https://en.wikipedia.org/wiki/Micro-operation Короче, я окончательно запутался... Вот то, что можно посмотреть в hiew - это что? Опкод, машинный код, байткод или микрооперации?
158 1056201
>>056105

>байткод


Где-то читал такое определение. Байткод - это код, длина которого равна одному байту. Как понимаю, длина команды, без аргументов. Это, по большей части, к скриптовым языкам относится.
Остальное не знаю. Вроде про мнемоники правильно ты написал.
159 1056311
>>056201
Байткодом обычно называют машинный код для несуществующей (виртуальной) машины.

>>056174

> что можно посмотреть в hiew


Хекс-дамп. Для дизасма лучше использовать более современные инструменты. В дизасме ты видишь представление машинного кода в виде мнемоник ассемблера. Опкод - часть инструкции (байтики), кодирующая непосредственно саму операцию (остальные части могут кодировать непосредственные значения, регистры, условие и т. д.). Микрооперации выполняют процессоры с микрокодом при обработке всех или только некоторых сложных инструкций (т.е., инструкция машинного кода может выполняться в виде нескольких микроопераций).
160 1057188
>>056174

У микропроцессора есть система (набор) команд, которые он может выполнить, и все эти команды кодируются в памяти с помощью чисел. Ну условно говоря, число 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-чной системе счисление, представляющие одну команду процессора (те самые опкоды)
- та же команда на ассемблере
160 1057188
>>056174

У микропроцессора есть система (набор) команд, которые он может выполнить, и все эти команды кодируются в памяти с помощью чисел. Ну условно говоря, число 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-чной системе счисление, представляющие одну команду процессора (те самые опкоды)
- та же команда на ассемблере
161 1057189
>>056174

Ты бы попробовал сделать или хотя бы спроектировать простейший микропроцессор из логических элементов, сразу лучше все это понимать начнешь.
162 1057191
>>055424
Имя на значке отражено зеркально. Должно быть наоборот. и волосы на блины почему-то падают
163 1057242
так может кто-то пояснить как взломать SHA-256?
думаю биткоинов намайнить побыстрому
monobeno.jpg143 Кб, 716x716
164 1057370
>>057188
Спасибо, теперь понятно. А вот на пике одним и тем же ассемблерным коммандам соответствуют разные коды, это почему? Или там не только комманды, но и операнды?
>>057189

>Ты бы попробовал сделать или хотя бы спроектировать простейший микропроцессор из логических элементов, сразу лучше все это понимать начнешь.


Да ну, я в такое не смогу.
165 1057585
>>057370

> одним и тем же ассемблерным коммандам соответствуют разные коды


Тут от разработчика набора инструкций зависит. Обычно разные опкоды делают для разных наборов операндов. Например, может быть опкод для mov reg, imm32, и другой для mov reg, reg.
166 1057587
>>057242
Просто берёшь и перебираешь все варианты.
167 1057646
>>057370

> одним и тем же ассемблерным коммандам соответствуют разные коды


Значит они не совсем одинаковые. Если ты про таблицу отсюда >>056137 - то там именно что разные команды. Ну например, если взять первые 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, BL
MOV [EAX + 4], AH
MOV [адрес ячейки], 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, где используется небольшое число простых команд.
167 1057646
>>057370

> одним и тем же ассемблерным коммандам соответствуют разные коды


Значит они не совсем одинаковые. Если ты про таблицу отсюда >>056137 - то там именно что разные команды. Ну например, если взять первые 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, BL
MOV [EAX + 4], AH
MOV [адрес ячейки], 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, где используется небольшое число простых команд.
168 1057671
>>057370
Чтобы спроектировать процессор, надо изучить логические схемы: регистры, триггеры, счетчики, логические элементы. Соответственно, (простейший) процессор состоит из:

- постоянных и временных регистров для хранения данных
- АЛУ, устройство, которое делает арифметические и логические операции надо числами (например, складывает)
- шины или шин для передачи данных между регистрами, АЛУ и памятью
- декодера команд, который "разбирает" код команды и о котором ниже

Вот пример простейшего процессора. Он содержит:

- 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. Нам надо прочитать следующий байт из памяти и сохранить его в A

4) подсоединить выход регистра IP к шине адреса памяти, подать в память сигнал чтения

В ответ на это память выдаст на шину данных содержимое ячейки по адресу из регистра IP (то есть число $X, которое хранится после кода команды)

5) подсоединить вход A к шине данных и сохранить значение с нее в регистре

6) увеличить значение регистра IP на один

7) команда выполнена, перейти к шагу 1

Или например рассмотрим команду INC A - увеличить A на один. Если наши регистры умеют увеличивать значения, то она будет состоять из одной микрооперации:

4) увеличить значение A на один

Если нет - нам придется сделать как-то так:

4) подать на второй вход АЛУ число 1 (к первому входу подсоединен регистр A)
5) запустить сложение в АЛУ, сохранить результат в R
6) подсоединить выход R к внутренней шине, подсоединить вход A к внутренней шине и сохранить в регистр A значение с нее
168 1057671
>>057370
Чтобы спроектировать процессор, надо изучить логические схемы: регистры, триггеры, счетчики, логические элементы. Соответственно, (простейший) процессор состоит из:

- постоянных и временных регистров для хранения данных
- АЛУ, устройство, которое делает арифметические и логические операции надо числами (например, складывает)
- шины или шин для передачи данных между регистрами, АЛУ и памятью
- декодера команд, который "разбирает" код команды и о котором ниже

Вот пример простейшего процессора. Он содержит:

- 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. Нам надо прочитать следующий байт из памяти и сохранить его в A

4) подсоединить выход регистра IP к шине адреса памяти, подать в память сигнал чтения

В ответ на это память выдаст на шину данных содержимое ячейки по адресу из регистра IP (то есть число $X, которое хранится после кода команды)

5) подсоединить вход A к шине данных и сохранить значение с нее в регистре

6) увеличить значение регистра IP на один

7) команда выполнена, перейти к шагу 1

Или например рассмотрим команду INC A - увеличить A на один. Если наши регистры умеют увеличивать значения, то она будет состоять из одной микрооперации:

4) увеличить значение A на один

Если нет - нам придется сделать как-то так:

4) подать на второй вход АЛУ число 1 (к первому входу подсоединен регистр A)
5) запустить сложение в АЛУ, сохранить результат в R
6) подсоединить выход R к внутренней шине, подсоединить вход A к внутренней шине и сохранить в регистр A значение с нее
monobeno3.jpg28 Кб, 439x392
169 1058307
>>057646

>Ты просто наверно пропускаешь основы и берешься сразу за сложное. Сначала тебе надо изучить, какие есть в процессоре регистры, какие есть режимы адресации, а потом уже смотреть, как кодируется та или иная команда, иначе ты не поймешь зачем нужны байты вроде MOD R/M в машинном коде.


Это все где-то изложено в одном месте? Вот это https://www.nostarch.com/assembly2.htm норм книжка?
>>057671
Это все можно же свести к машине Тьюринга?
170 1058319
>>044834
вот через укртелеком двач у мну не работал, а теперь работает, хотя я в украине живу и прокси не юзаю
171 1058423
>>058307

>Это все где-то изложено в одном месте?


Палю годноту: Harris & Harris "Digital Design and Computer Architecture".
172 1058432
>>058423
Как бы слегка не для новичка книжка.
173 1058470
>>058423
Thanks, nyasha!
# OP 174 1059201
ОП жив и сревернсил ещё одну функцию, лол.
175 1059225
Есть какая-нибудь годная старая книга, можно 90-х, где бы суровые профессора раскладывали по полочкам ассемблер так, как они это делали с делфей?
Чтобы даже мне зашло.
176 1059287
>>059225
Что тебе там раскладывать по полочкам? Самый простой язык в мире. Учи мнемоники @ пиши код.
# OP 177 1059378
>>059225
->
>>015083 (OP)

>Книги по ассемблеру:


>"Архитектура компьютера" Э. Таненбаум


>С.В. Зубков: Assembler. Язык неограниченных возможностей

178 1059393
В KolibriOS до сих пор нет нормального браузера. Заебаште норм бровузер на асме с интерпретатором жс.
monobeno4.png910 Кб, 1280x800
179 1059848
Как матчасть Танненбаум, похоже, как раз то что нужно. А что насчет софта? Самая годнота для дизассемблирования, как я понял, IDA Pro, а опенсорс, как обычно, хуета из-под кота? Или я не прав?
180 1059883
>>057671

>Это все можно же свести к машине Тьюринга?


Свести можно, но машина Тьюринга - это математическая модель, которая используется для доказательства различных гипотез. К тому же в ней программа заложена жестко. А я хотел показать примерные идеи, на которых делаются (точнее делались) реальные микропроцессоры.

> Это все где-то изложено в одном месте?


Я помню в универе видел толстую книгу с описанием интеловской архитектуры, но название забыл. Танненбаум наверно.
181 1059884
>>059848

Зато опенсорс можно взять и улучшить, добавить, чего там не хватает.
182 1060008
>>059884
Для этого придется сначала взять и выкинуть то, что там есть. Почти все.
# OP 183 1060021
>>059848

>а опенсорс, как обычно, хуета из-под кота?


Ну не то чтобы как обычно, но в случае реверса ты совершенно прав.
>>059884
Ну поди и улучшь. Самый ебанутый довод опенсорсников. Уверен, что 99,999% его использующих ни разу ничего не добавили.
184 1060082
>>058432
Define "новичок" тогда уж.

Там архитектура с самых основ объясняется, и довольно подробно. Есть там и хардкор, но его не обязательно разбирать досконально для понимания общих принципов.

Ещё у Таненбаума есть "Structured Computer Organization", но там более сжато.
185 1061279
Анончики, я думаю среди вас есть те кто читал гайд по крекингу от Ricardo Narvaja никто не может подсказать как снять защиты с крэкми из главы 32?
186 1061474
>>060082
Раз уж на то пошло, x86 - не самая лучшая архитектура для "новичка". Я бы начал с MIPS.
http://chortle.ccsu.edu/AssemblyTutorial/
187 1061476
Какая литература лучше всего подойдет для абсолютного нуба?
189 1061480
190 1061481
Упс, промахнулся.
>>061476 -> >>061474
191 1061540
>>061481
Сам-то с мипсов начинал? Чтоб тебе самому вместо изучения асма с нормальными отладчиками, дизассемблерами и кучей документации роутер ебать!
shot0001.jpg106 Кб, 1008x720
192 1061601
>>061540

>Сам-то с мипсов начинал?


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

>Чтоб тебе самому вместо изучения асма


Перед изучением асма неплохо бы знать, что это вообще за штуковина такая - процессор, чем там ALU занимается на самом деле, что за "дополнение до двух", вот это все. По моей ссылке этому как раз треть материала посвящена, самые что ни на есть азы.

>с нормальными отладчиками, дизассемблерами и кучей документации


Под него есть симулятор (как и под любую другую архитектуру), ассемблер/дизассемблер тебе все равно по хорошему свой писать, а с документацией у мипсов как раз все хорошо (весь reference manual занимает от силы страниц 400).

>роутер ебать!


Лично я ебал PSP, но и роутер никто не запрещает.
193 1061649
>>061601

> х86 сейчас начинают ударными темпами закапывать


Я это в девяностых слышал.

> Перед изучением асма неплохо бы знать


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

> reference manual занимает от силы страниц 400


О да, новичкам только мануалы и читать. Сразу, сходу. Вместе с невозможностью запустить код на реальной машине - охуенный способ не выучить асм, проклясть байтоеблю и пойти писать на джаваскрипте, или что там сейчас модно.
194 1061670
>>061649

>Я это в девяностых слышал.


Ну так сейчас как раз повторяется та же самая история: 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'ами и решит собственный ассемблер написать. Хороший способ доказать самому себе, что имеешь представление о данной архитектуре.

>Вместе с невозможностью запустить код на реальной машине


А мужики-то и не знали.

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


По мне так последовательное разгребание наслоений человеческой жадности и раздолбайства - отличный способ забить посреди процесса.
sage 195 1061698
>>061670

> Microsoft и Qualcomm вместо Transmeta пилят транслятор машинного кода


Ну и пусть пилят. Microsoft скоро осознает, что их очередное вторжение на планшеты и телефоны в очередной раз закончилось ничем, и все похоронит. Проходили уже. И убийца x86 ака титаниум для серверов был, как раз недавно официально окончательно похоронили. К тому же, даже если какая-нибудь архитектура и станет вдруг более популярной, неебическое количество существующего кода для x86 никуда не денется, его все так же придется писать, реверсить и отлаживать. Все это, разумеется, отнюдь не означает, что современному байтоебу не нужно разбираться хотя бы в ARM.

> Представление целых со знаком не надо знать новичку?


Это надо знать до изучения асма и программирования вообще. Это азы, как и системы счисления, как арифметика младших классов и хотя бы отдаленное представление о логике. А вот что внутри процессора - это лишние, запутывающие новичка знания. Как и существование сегментов или зоопарка режимов процессора. К счастью, 32-битный режим в x86 неебически прост, и если новичок где-нибудь на нем и забьет, то ничего, в общем-то, не потеряет - навык чтения асма у него останется, и он сможет при случае выхлоп компилятора посмотреть или отладить чего-нибудь. Если начнет с MIPS и бросит, то с 99.9% вероятностью полученные знания ему никогда не пригодятся.

> А мужики-то и не знали.


Ну вот смотри: либо у тебя кривой эмуль, кросскомпиляция, непонятные утилиты, написанные чужими для нелюдей и удаленная отладка через gdb, либо у тебя няшный фасм с собственным редактором, компиляция одной кнопкой, отладка в OllyDbg/x64dbg с графикой, отображением всего, что только можно, трейсами-бэктрейсами, встроенным ассемблером, интуитивным интерфейсом и туториалами на ютубе впридачу. Профессионалу похуй, а вот выбор новичка очевиден.

> решит собственный ассемблер написать


Во. То есть нужно начинать с мипсов, чтобы написать еще один ассемблер. Вместо чего-нибудь полезного. Я бы понял, если бы ты рассказал про поиск и патчинг бэкдоров и багов в роутерах, когда производитель на них забил, ну или про моддинг, про портирование старых игр с PS. Я бы понял, если бы ты рекомендовал ARM, чтобы взять стмку за копейки и вкатываться в эмбеддед, чтобы заниматься всякими интересными вещами под андроидом. Но написание ассемблера - это самое бессмысленное занятие, которое можно придумать - пишется за вечер, архитектуру при этом знать необязательно, из всего мануала потребуется прочитать страниц десять, большая часть времени будет потрачена на копипаст и правку табличек опкодов. Да, иногда в этом есть смысл - у меня был случай с экзотической архитектурой, когда модуля для иды не было, какого-либо другого дизасма тоже, ассемблера или компилятора тем более, мануал на китайском, прошивка для железки упакована, нужно было поправить пару килобайт кода и упаковать все обратно. Пришлось писать самому ассемблер, модуль для иды и подобие эмулятора впридачу. Но, сам понимаешь, такие случаи возникают очень нечасто.
sage 195 1061698
>>061670

> Microsoft и Qualcomm вместо Transmeta пилят транслятор машинного кода


Ну и пусть пилят. Microsoft скоро осознает, что их очередное вторжение на планшеты и телефоны в очередной раз закончилось ничем, и все похоронит. Проходили уже. И убийца x86 ака титаниум для серверов был, как раз недавно официально окончательно похоронили. К тому же, даже если какая-нибудь архитектура и станет вдруг более популярной, неебическое количество существующего кода для x86 никуда не денется, его все так же придется писать, реверсить и отлаживать. Все это, разумеется, отнюдь не означает, что современному байтоебу не нужно разбираться хотя бы в ARM.

> Представление целых со знаком не надо знать новичку?


Это надо знать до изучения асма и программирования вообще. Это азы, как и системы счисления, как арифметика младших классов и хотя бы отдаленное представление о логике. А вот что внутри процессора - это лишние, запутывающие новичка знания. Как и существование сегментов или зоопарка режимов процессора. К счастью, 32-битный режим в x86 неебически прост, и если новичок где-нибудь на нем и забьет, то ничего, в общем-то, не потеряет - навык чтения асма у него останется, и он сможет при случае выхлоп компилятора посмотреть или отладить чего-нибудь. Если начнет с MIPS и бросит, то с 99.9% вероятностью полученные знания ему никогда не пригодятся.

> А мужики-то и не знали.


Ну вот смотри: либо у тебя кривой эмуль, кросскомпиляция, непонятные утилиты, написанные чужими для нелюдей и удаленная отладка через gdb, либо у тебя няшный фасм с собственным редактором, компиляция одной кнопкой, отладка в OllyDbg/x64dbg с графикой, отображением всего, что только можно, трейсами-бэктрейсами, встроенным ассемблером, интуитивным интерфейсом и туториалами на ютубе впридачу. Профессионалу похуй, а вот выбор новичка очевиден.

> решит собственный ассемблер написать


Во. То есть нужно начинать с мипсов, чтобы написать еще один ассемблер. Вместо чего-нибудь полезного. Я бы понял, если бы ты рассказал про поиск и патчинг бэкдоров и багов в роутерах, когда производитель на них забил, ну или про моддинг, про портирование старых игр с PS. Я бы понял, если бы ты рекомендовал ARM, чтобы взять стмку за копейки и вкатываться в эмбеддед, чтобы заниматься всякими интересными вещами под андроидом. Но написание ассемблера - это самое бессмысленное занятие, которое можно придумать - пишется за вечер, архитектуру при этом знать необязательно, из всего мануала потребуется прочитать страниц десять, большая часть времени будет потрачена на копипаст и правку табличек опкодов. Да, иногда в этом есть смысл - у меня был случай с экзотической архитектурой, когда модуля для иды не было, какого-либо другого дизасма тоже, ассемблера или компилятора тем более, мануал на китайском, прошивка для железки упакована, нужно было поправить пару килобайт кода и упаковать все обратно. Пришлось писать самому ассемблер, модуль для иды и подобие эмулятора впридачу. Но, сам понимаешь, такие случаи возникают очень нечасто.
196 1061834
>>061698

>Microsoft скоро осознает, что их очередное вторжение на планшеты и телефоны в очередной раз закончилось ничем, и все похоронит.


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

>И убийца x86 ака титаниум для серверов был


Итаник утонул частично по той же самой причине: отсутствие обратной совместимости + сложная задроченная архитектура -> отсутствие нормальных компиляторов -> хреновое быстродействие за астрономическую цену привет Эльбрус. У arm64 с этим особых проблем нет, да и рынок серверов сейчас большей частью под Open Source. Также у него нет проблем с масштабируемостью, 2^8-ядерные сервера уже давно в свободной продаже.

>даже если какая-нибудь архитектура и станет вдруг более популярной, неебическое количество существующего кода для x86 никуда не денется, его все так же придется писать, реверсить и отлаживать.


Насколько я понимаю, именно на это и делают ставку. Вот вам готовая связка архитектура+ПО, которая может крутить ваш существующий код без существенной потери производительности, но если хотите полной отдачи - новый код старайтесь писать уже под нее. Как какой-нибудь древний сервер, про который уже никто толком не знает, как и почему вообще он работает. Проще засунуть в виртуалку и сделать копию.

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


Ну так вместо того, чтобы агриться на слово "MIPS", открой мою ссылку и полистай. Там как раз очень подробно разжевывают самые-самые азы (системы счисления, представления чисел и строк, bitwise-операции и сдвиги, плавающую точку, передачу аргументов через регистры и стек, рекурсию, массивы, etc.). Причем разжевывают весьма грамотно, последовательно, с периодическими блиц-повторениями усвоенного. Просто делают это на примере MIPS-архитектуры, потому что (вот так сюрприз!) вся эта теория ложится на нее почти идеально, практически без архитектуро-специфичного оверхеда - кристально чистое байтоебство. Не самый худший вариант потратить 2 недели своего драгоценного времени, если собрался вкатываться в asm и не знаешь вообще ничего. В качестве бонуса сможешь на начальном уровне в MIPS и слегка попрактикуешь разговорный английский (там есть кнопка начитки голосом каждой отдельной темы). В качестве минуса - даже ARM будет в дальнейшем казаться кривой архитектурой.

>А вот что внутри процессора - это лишние, запутывающие новичка знания.


Смотря какие. Я вот видел людей, которые считали, что ALU на самом деле складывает и вычитает какие-то там числа.

>Ну вот смотри: либо у тебя кривой эмуль, кросскомпиляция, непонятные утилиты, написанные чужими для нелюдей и удаленная отладка через gdb, либо у тебя няшный фасм


Пожалуйста, после краткого курса молодого бойца бери свой няшный фасм и пиши сразу под x86_64 там хоть от нехватки регистров не будет так сильно припекать. Ты уже не будешь смотреть на него коровьими глазами и гадать, 0x10000000 - это сколько кило/мега/гигабайт снизу.

>написание ассемблера - это самое бессмысленное занятие, которое можно придумать


Не совсем. Он сильно пригодится, если ты захочешь ассемблировать свое творчество непосредственно на самой железке прямо в память, без перезагрузки/перепрошивки на каждый чих. Да, это я про форт-машину сейчас.
196 1061834
>>061698

>Microsoft скоро осознает, что их очередное вторжение на планшеты и телефоны в очередной раз закончилось ничем, и все похоронит.


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

>И убийца x86 ака титаниум для серверов был


Итаник утонул частично по той же самой причине: отсутствие обратной совместимости + сложная задроченная архитектура -> отсутствие нормальных компиляторов -> хреновое быстродействие за астрономическую цену привет Эльбрус. У arm64 с этим особых проблем нет, да и рынок серверов сейчас большей частью под Open Source. Также у него нет проблем с масштабируемостью, 2^8-ядерные сервера уже давно в свободной продаже.

>даже если какая-нибудь архитектура и станет вдруг более популярной, неебическое количество существующего кода для x86 никуда не денется, его все так же придется писать, реверсить и отлаживать.


Насколько я понимаю, именно на это и делают ставку. Вот вам готовая связка архитектура+ПО, которая может крутить ваш существующий код без существенной потери производительности, но если хотите полной отдачи - новый код старайтесь писать уже под нее. Как какой-нибудь древний сервер, про который уже никто толком не знает, как и почему вообще он работает. Проще засунуть в виртуалку и сделать копию.

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


Ну так вместо того, чтобы агриться на слово "MIPS", открой мою ссылку и полистай. Там как раз очень подробно разжевывают самые-самые азы (системы счисления, представления чисел и строк, bitwise-операции и сдвиги, плавающую точку, передачу аргументов через регистры и стек, рекурсию, массивы, etc.). Причем разжевывают весьма грамотно, последовательно, с периодическими блиц-повторениями усвоенного. Просто делают это на примере MIPS-архитектуры, потому что (вот так сюрприз!) вся эта теория ложится на нее почти идеально, практически без архитектуро-специфичного оверхеда - кристально чистое байтоебство. Не самый худший вариант потратить 2 недели своего драгоценного времени, если собрался вкатываться в asm и не знаешь вообще ничего. В качестве бонуса сможешь на начальном уровне в MIPS и слегка попрактикуешь разговорный английский (там есть кнопка начитки голосом каждой отдельной темы). В качестве минуса - даже ARM будет в дальнейшем казаться кривой архитектурой.

>А вот что внутри процессора - это лишние, запутывающие новичка знания.


Смотря какие. Я вот видел людей, которые считали, что ALU на самом деле складывает и вычитает какие-то там числа.

>Ну вот смотри: либо у тебя кривой эмуль, кросскомпиляция, непонятные утилиты, написанные чужими для нелюдей и удаленная отладка через gdb, либо у тебя няшный фасм


Пожалуйста, после краткого курса молодого бойца бери свой няшный фасм и пиши сразу под x86_64 там хоть от нехватки регистров не будет так сильно припекать. Ты уже не будешь смотреть на него коровьими глазами и гадать, 0x10000000 - это сколько кило/мега/гигабайт снизу.

>написание ассемблера - это самое бессмысленное занятие, которое можно придумать


Не совсем. Он сильно пригодится, если ты захочешь ассемблировать свое творчество непосредственно на самой железке прямо в память, без перезагрузки/перепрошивки на каждый чих. Да, это я про форт-машину сейчас.
# OP 197 1061934
>>061670

>Microsoft и Qualcomm вместо Transmeta пилят транслятор машинного кода


И за это их засудит Интел просто нахуй.
>>061834

>Итаник утонул частично по той же самой причине


Эмулятор х86 там был, работал так же хуёво, как и в ARM.
# OP 198 1061964
>>059201
В общем продолжаем.
Есть функция PopDefaultProcessorPolicy. ИДА из кода WRK создаёт следующее
https://pastebin.com/MWxG7w9H
Обратите внимание на оптимизацию компелятора с использованием переменной v3.
Я среверсил это в вот такой код:
https://pastebin.com/giNvha1q
Что выливается после компиляции и реверса ИДЫ в
https://pastebin.com/RyMCNPRD
Оптимизация сработала по другому, хотя код делает ровно тоже самое.
Собственно вопрос- как мне изменить код, чтобы он компилировался в тоже самое, что и оригинальный майкрософтовский?
Плюс в том файле ещё PoInitSystem с кучей неизвестных структур, ну да ладно.
199 1062032
>>061934

>И за это их засудит Интел просто нахуй.


За что, за то что Майкрософт запилила программный транслятор бинарников? Так интеловские патенты в основном не про это, а про аппаратную реализацию. Иначе всякие Qemu уже давно бы кверху пузом всплыли. И к Квалкому не особо прикопаешься: они к драгоценной x86 вообще пальцем не притронулись, просто немного подкрутили свой процессор, чтобы транслятор от MS на нем быстрее работал. Если тяжба и начнется - длиться она будет доооолго.

>Эмулятор х86 там был, работал так же хуёво, как и в ARM.


На майкрософтовских демках сейчас всякие фотошопы с офисами вполне резво бегают и даже танчики какие-то катаются. Поглядим, короче, что выкатят к концу года. Мне кажется никто не будет возражать, если охреневшую монополию хотя бы на рынке ноутбуков немного расшевелят. Конкуренция - это хорошо.
# OP 200 1062046
>>062032

>За что, за то что Майкрософт запилила программный транслятор бинарников?


А то.

>Иначе всякие Qemu уже давно бы кверху пузом всплыли.


А ты знаешь продаваемые устройства с квеми? Он просто нахуй никому не нужен, вот и не придираются.

>На майкрософтовских демках сейчас всякие фотошопы с офисами вполне резво бегают и даже танчики какие-то катаются.


Просто процы со времён итаника подросли, вот и тянут трансляцию без тормозов.

>Мне кажется никто не будет возражать, если охреневшую монополию хотя бы на рынке ноутбуков немного расшевелят. Конкуренция - это хорошо.


Кроме интела- никто не против. Но интел не хуй с горы, и просто так своё властвующее положение не отдаст.
201 1062067
>>062046

>Он просто нахуй никому не нужен, вот и не придираются.


Тогда почему тот же Интел не засудил в свое время Трансмету, а наоборот схлопотал иск от нее? Или история с IBM и Apple, там вообще все один в один: ушли на архитектуру конкурента, запилили транслятор.

>Просто процы со времён итаника подросли, вот и тянут трансляцию без тормозов.


Это еще Apple в свое время продемонстроровала, сейчас подросли АРМы и настал черед Microsoft. Статус кво не мог вечно продолжаться.
202 1062069
>>062067

>Статус кво


Позор мне.
203 1063843
Привет, ребят, студент компьютер сайенс 19 лвл репортинг. Очень понравился ассемблер (Уже сделал половину лаб по нему). Можно ли как-то в него вкатиться, или слишком сложно? Что для этого надо делать?
204 1064289
>>063843

>Что для этого надо делать?


Шапку прочитать. А так как ты самостоятельно не смог до этого догадаться, то уровень твоего интеллекта не позволит освоить ассемблер в высокой степени.
205 1064322
>>064289
В шапке нет гайда для тех, кто желает вкатиться. У меня проблема не в недостатке материала, а в отсутствии человека, который знаком с этим и может поделиться немного опытом.
206 1064341
>>064322
А какой тебе опыт нужен? Штудируй литературу и дело с концом.
207 1064350
>>063843
Немного странный вопрос. Учитывая, что ты уже половину лаб сделал. Просто делаешь дальше остальные.
Ещё ты не написал, какой ассемблер. Или нет другой архитектуры, кроме x86 и Intel пророк его? Тогда можешь писать программы на C и смотреть, во что превращается код. Даже Visual Studio (если ты в Windows работаешь) может показать ассемблерный листинг, что наглядно и удобно. Дальше берёшь OllyDbg, гуглишь туториалы и вперёд. Попутно знакомишься с Ida.
monobeno7.jpg182 Кб, 602x692
208 1064573
Начал читать Танненбаума, полистал книжку, там что с точки зрения математики нет ничего сложнее булевой алгебры? В историческом обзоре машина Тьюринга и алгоритмы даже не упомянуты. Это нормально? И еще вопрос, про полиморфизм: если там только булева алгебра, ничего же не стоит автоматически заменять ассемблерные комманды эквивалентными им логическими построениями (в простейшем случае - двойное отрицание комманды логически равно этой комманде, но если так поступить с виросом, все сигнатуры, по которым он детектится, проебутся). Получается, уже таким деревянным методом можно получать идеальный неуязвимый полиморф?
209 1064739
>>064573
Давно уже во многих протекторах так и делают. Это медленно и печально, но все же раскручивается обрано. Гугли SAT solver. А что насчет полиморфа, то ты просто получишь детект от эвристики за ебнутый код.
monobeno8.jpg81 Кб, 1280x720
210 1064957
>>064739
Мм..,ок. А если запилить (в виде макросов для ассемблера) собственную логическую аксиоматику, сколь угодно ебнутую, но непротиворечивую? Компиляться нормально будет, но без моих макросов никак не раскрутишь до изначального кода.
211 1065033
>>064573
Машина Тюринга нужна только для научных статей, она не имеет отношения ни к реальному железу, ни к обфускации кода.

>>064573
Антивирусы могут смотреть не только на сигнатуры.

>>064957
А зачем смотреть на твой код? Достаточно посмотреть, какие системные вызовы он делает, какие файлы читает, что по сети шлет.
212 1065041
>>065033

>Машина Тюринга нужна только для научных статей, она не имеет отношения ни к реальному железу, ни к обфускации кода.


Как жи не имеет. Это одно из уточнений понятия алгоритма.

>Антивирусы могут смотреть не только на сигнатуры.


А что еще они смотрят?

>А зачем смотреть на твой код? Достаточно посмотреть, какие системные вызовы он делает, какие файлы читает, что по сети шлет.


Есть конкретные критерии, что должен делать вирос, чтобы признать файл виросом? Вот если сделать бэкдор из скрипта установки и настройки Active directory в шиндовс, антивирос его спалит?
213 1065130
>>065041

> Есть конкретные критерии, что должен делать вирос


Нет. Каждому действию присваивается вес, веса суммируются в оценку или оценки, по которым антивирус решает, норм или нет.

> вот если сделать бэкдор из скрипта


Проактивка может спалить. Сканер спалит, только если у него есть модуль для такого скрипта и эвристика для поиска каких-то вредных действий.

> Как жи не имеет


Когда у тебя будет бесконечная память - приходи.
214 1065239
>>065041

>А что еще они смотрят?


Поведение.

>Есть конкретные критерии, что должен делать вирос, чтобы признать файл виросом?


У каждого антивиря они свои, и раскрывать их они желанием не горят. Реверсь все антивири и узнавай, что они ищут.
215 1065335
>>065239
>>065130
Вот насчет этих маняэвристик и т.п. мне реально смешно. К сожалению, плавали, знаем. Имею опыт общения с мутной малварью на компе и телефоне. Так вот, установленному антивиросу на тилибоне было строго по хую, что браузер сам переходит по каким-то ссылкам, активируются платные подписки, вылезают рекламные баннеры и т.п. Т.е. обнаружение реально вредоносной хуйни там уровня /б, это я видел своими глазами. На компе какая-то ебала, запущенная как системный процесс svchost.exe, что-то слала по сети, коннектилась к десяткам адресов, делала еще хуй знает что, заметно загружая процессор, к слову. Пока вручную процесс експлорером не выявил, где оно лежит (откуда запускается) и т.д. и не удалил к хуям, касперский на нее вообще внимания не обращал. Если это и есть ваши супернанотехнологии - эвристика проактивка, то я спокоен.
216 1065365
>>065335
А никто и не писал, что они эффективны на 100%. но сканер уровня /б, как ни странно, неплохо ловит вирусы уровня /б
217 1065385
А чего можно почитать про устройство процессора? Устройство управления интересует, Пецтольд о его устройстве тактично умолчал. Пытаюсь в Logisim собрать 8-битный проц уровня /b/, пока есть только АЛУ примерно такого же уровня.
218 1065404
>>065385
Не в тот тред пишешь и даже не в тот раздел, это больше для /ra/ подходит.
http://www.bhv.ru/books/full_contents.php?id=182109
http://dmkpress.com/catalog/electronics/circuit_design/978-5-97060-450-2/
Logisim лучше выкини, для этих целей есть verilog и VHDL.

>пока есть только АЛУ примерно такого же уровня.


Дорисуй остальные части - память, шины, регистры всякие. Как дорисуешь, может быть поймешь что устройство управления это совсем несложное устройство.
219 1065412
>>065404
За вторую ссылку спасибо. VHDL И verilog, боюсь, не осилю.
220 1065423
>>065412

>За вторую ссылку спасибо.


По первой ссылке:

>Глава 23. Архитектура и структурная VHDL-модель процессора DP32.


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

>VHDL И verilog, боюсь, не осилю.


Verilog совсем простой же. В /ra/ есть ПЛИС-тред в котором подскажут, если что-то будет непонятно.
А для альтернативно одаренных есть http://nand2tetris.org/
221 1065723
>>065385
Можно я ссылочку на свой пост добавлю, где я пытался спроектировать простейший процессор: >>057671
222 1066287
>>015083 (OP)
Поясните кто-нибудь за знаковое деление (IDIV) в asm.
Архитектуры пк не знаю.(а стоило бы наверное, но времени толком нету) (спасибо блядям впихнувшим матанохуйню)
Потому и не получается понять деление отрицательного числа на положительное.
Единственное что знаю, что отрицательные числа хранятся в дополнительном коде.

Есть, например:
AX = -120
BX = 1
Обнуляю перед делением DX(т.к. деление идет на слово, то остаток помещен будет в DX)
Но на деле оказывается, что нужно заполнить регистр DX знаковым битом числа AX, т.е. в DX будут единицы, если делимое отрицательное.
Вот тут я и не понимаю почему это так.
Поясните как происходит самое деление.
223 1066393
>>066287
idiv bx делит dx:ax на bx. dx:ax означает, что старшие биты делимого берутся из dx, младшие из ax. Если ты не заполняешь dx знаковым битом (хотя хули там заполнять - cwd), то твоое делимое получается 0000000000000000:ax, старший бит ноль, и это будет вполне себе положительное 32-битное число, меньшее чем 65536, вне зависимости от содержимого ax.
sage 224 1066394
>>066287
Алсо, ты можешь делить на bl, если уверен, что частное влезет в al.
225 1066403
>>066393
>>066394

>делить на bl, если уверен, что частное влезет в al


Да там по заданию требуют слово на слово деление делать.
Спасибо, вроде минимально понятно стало.
226 1066824
Какие могут быть последствия вызова одной и той же .dll в коде дважды, если у них разное название? Сам PE-файл то один и тот же. Мне кажется, ничего плохого произойти не должно, просто она загрузится в адресное пространство процесса в двух экземплярах, никак друг с другом не пересекающихся. Или я о чем то не знаю?
227 1066826
>>066824
под вызовом имею в виду получение дескриптора через LoadLibrary()
228 1066889
>>066824

> просто она загрузится в адресное пространство процесса в двух экземплярах


И не надейся. Повторно винда грузить ничего не будет, просто счетчик использования DLL при повторных вызовах LoadLibrary() инкрементируется (т.е., если DLL уже загружена, то по сути делается GetModuleHandleEx(0, "somedll.dll", ...)), и для выгрузки DLL понадобится не один вызов FreeLibrary(), а столько, сколько раз была вызвана LoadLibrary(). Если тебе нужно именно две копии DLL в памяти, лучше всего просто скопировать файл с другим именем. Есть еще вариант с модификацией PEB_LDR_DATA, но без особых причин туда лезть не стоит.
229 1066890
>>066889
Я в первом посте как раз написал, что имена разные. Про инкрементирование счетчика я знаю, меня интересует именно не будет ли нежданчика, если 2 фактически одинаковых библиотеки будут загружены через LoadLibrary, если они в ФС разные имена имеют.
230 1066934
>>066890
Зависит от либы. Например, если DLL в процессе работы создает какой-нибудь именованный объект (мьютекс, например, или memory mapping), то очевидно, она слегка охуеет и сломается. И это в лучшем случае.

А что за задача у тебя?
231 1067240
А поясните, что мешает разврнуть взад sha-256 хеширование? Алгоритм хеширования существует, результат каждого последующего прохода - функция от предыдущего, итоговый результат - суперпозиция таких функций. Ну, и?
232 1067250
>>067240
А что ты ожидаешь получить в итоге? Файл, от которого взят хеш? Идеальная функция компрессии будет, любой размер данных в 32 байта можно уместить.
233 1067253
>>067250
Ну так там же не сам файл хешируется? Допустим, речь только о закодированных сообщениях или блоках биткойнов.
234 1067272
>>067253

>Ну так там же не сам файл хешируется?


А что, твоя мамка?

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


Пусть. Вот простейшая хеш-функция, сложение. Берём два числа, например 23 и 19. Результатом такого "хеширования" будет 42. Так какие числа у меня там были? Ну, и?
59673483f7065a4f9f2de4a3333a2350.jpg193 Кб, 750x650
235 1067415
Вот я, допустим, ручками посчитал вещественное число -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 0111
1011 1111 0000 1011 0000 1111 0010 0111
BF0B0F27

Потом пишу dd -0.5432, компилю, в листинге вижу BF0B0F28, то есть последний разряд какого-то хуя на единичку больше. Поясните, ЧЯДНТ?
236 1067441
>>067415
Нормализованное значение получается:
1.000 1011 0000 1111 0010 0111 1011 и т. д.
Выделенная единичка уже не влезает в разрядную сетку и округляется (а так как она 1, она не отбрасывается как 0, а прибавляется):
...0111 (7 на конце в твоем хекс-представлении) + 1 = 1000 (8 на конце в правильном представлении).
237 1067447
>>067441
Оу, понял. Спасибо.
238 1069239
Добрый вечер. У меня есть tasm на виртуалке виндовса хр, задание - открыть другой ехе файл с моей асм программы.

Мне не нужно решение, я спрашиваю, что гуглить. Спасибо. Может есть книги, в которых это описали?
239 1069276
>>069239

> открыть


Ты имеешь в виду "запустить" или "открыть для чтения/записи"? int 21h/ah=4bh. Любой справочник по прерываниям. Например, этот: http://www.codenet.ru/progr/dos/int_0026.php
240 1069334
Начал учить этот ваш ассемблер, потому что уже очень давно загорелся такой идеей. Но расстраивает то, что почти ничего непонятно. Вкатываюсь с ооочень большим трудом, до этого программировал на питончике. Я ведь не один такой тугой здесь? Как думаете, упорное залипание в теорию и параллельная практика дадут свои плоды? Я совсем отчаялся уже :с
241 1069379
>>069334

> почти ничего непонятно


Меньше читай, больше смотри в отладчике пошагово, что происходит.
242 1069400
Решил вкатиться в асм, наваял пузырьковую сортировку знаковых целых, а она сортирует по величине от 0x00 (ну короче без учета дополнительного кода, 0xFF считает больше чем 0x10).
https://pastebin.com/2u4g1kHY
Как бы вы переделали? И что я тут наговнокодил? (кроме отсутствия разбиения на процедуры)
243 1069409
>>069400
Забыл сказать, код для 16-битного окружения, под дос короче, сам запускаю из-под досбокса, обмазываюсь debug'ом и дебажу
244 1069697
Аноны помогите, нужно понять что делает программка через ida но я ньюфаг и хз с чего начать даже,помогите как разобраться в этом?Нужно ли полагаться на хекс рэйс или он часто наебывает?
245 1069711
>>069697

> нужно понять что делает программка через ida


Особую уличную магию.

> Нужно ли полагаться на хекс рэйс или он часто наебывает


Иногда без правки дизасма невозможно заставить его выдать корректный код. Без корректных типов переменных могут пропадать целые блоки кода. Иногда циклы превращаются в условия. Куча проблем с floating point, про SIMD вообще молчим.
246 1069712
>>069711
Ну понятно что это с практикой более менне придет , но вот с 0 что можно сделать?Нет там хоть начальных статей,гуидов
247 1069714
>>069712
Очевидные "Образ мышления IDA" (Крис Касперски, книга протухла, но в целом ничего с тех пор не поменялось), beginners.re из шапки, "The IDA Pro Book" (Крис Игл).
248 1070541
Поясните, что должна делать функция 00h прерывания 10h, а то ДосБокс это не переваривает как-то. Должна что-то делать с курсоров вроде, но я не понимаю, что именно.
249 1070629
>>070541
устанавливать видеорежим
250 1070632
>>070629
И тут я понял, что неверно прочитал и мне нужна 01h. Спасибо, иначе так бы и тупил
251 1070915
Делаю лабу с математическим процессором 80х87, нужно поднять одну хуету в степень.
Мне надо поднять x в степень а x^a.
Надо использовать:
fld x
fscale a

Я всё правильно делаю?
Ассемблер интересный, но инфы пиздец мало, простите, что у вас такое простое спрашиваю.
252 1070945
>>070915
Черт, насколько я понял - я проебался.
Выходит - мне надо будет писать функцию поднятия до степеня самостоятельно?
Степень должна быть 2*n+1
253 1070980
>>070945
Стандартный способ возведения в степень на FPU - комбинация fyl2x и f2xm1. Про логарифмы в школе рассказывали?
254 1071035
>>070980
Дружище, я ничего не помню почти с курса матана и подобного. Уделишь пару минуток и объяснишь? Буду очень благодарен.
255 1071062
>>071035
Блэт, это же школьная программа.
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.
256 1071290
>>071062

>Вместо f2xm1 можно просто шифтануть 1 влево на fyl2x.


Отмена. Хуйню написал, каюсь.
257 1071391
>>071290
>>071062
Завтра попробуй написать по этому лабу, большое спасибо!
Снимок экрана2017-10-0613-59-39.png327 Кб, 1403x708
258 1071559
Сап программач. Пытаюсь вкатиться в реверс-инжиниринг. Есть программа на С, принимаюшая ввод от пользователя в массив и выыводяшая этот массив на экран. Пытаюсь произвести переполнение стека, чтобы программа запросила ввод еще раз, но попытки с командой echo дают результат seg fault. Отладчик при этом показывает, что в стеке якобы выделяется гораздо больше памяти для массива чем 2 байта. Что я делаю не так?
259 1071742
>>071559
компилируешь со включённым stack protector'ом
260 1071757
Как то раз баловался ollydbg'ром с одним проприетарным софтом и заметил, что по коду разбросаны JMP'ы, которые сбивают ассемблерный листинг. Типа вот ты шел по инструкциям,
10: MOV EAX EBX
16: PUSH 0xFF
18: CALL [ECX]
22: JMP 27
26: SUB ECX, 0xFFFF
28: INC [EAX]
...
И вот после JMP 25 у тебя следующая инструкция уже та, которую ты в листинге не видел, и вместо
26: SUB ECX, 0xFFFF
28:INC [EAX]

ты видишь уже

27: call kernel32.dll:0x1048
31: MOV ECX, 0x15
35:JMP 41

Это и есть виртуализация, или это какая то другая контр-реверсинговая мера?
261 1071765
>>071742
Насчет stack protector`а: как он отключается/включается? При компиляции были флаги m32, ggdb и mpreferred-stack-boundary=2.
262 1071767
>>071757
Это очень примитивное запутывание control flow. Возьми иду, она на такое не ведется, и зделоет тебе 26: db байтики, 27: call. Виртуализация - это когда полезная нагрузка представлена инструкциями виртуальной машины, а код, который ты видишь в дизасм - мусор, перемешанный с кодом самой виртуальной машины.

>>071765
Внезапно -fno-stack-protector
263 1071774
>>071767
Большое спасибо.
264 1071776
>>071767
Что тогда с программной точки зрения представляет собой виртуализация? Я знаю концепцию в теории: есть виртуальная машина, у которой свой набор инструкции, которые неким образом сопоставляются реальным инструкциям. И как это реализуется? Всё, что мне приходит в голову - это типа я беру сырые байты кодовой секции, хуярю их функцией byte Virtualize(byte), которая, например, добавляет 1 к каждому байту исходников, потом логику девиртуализации компилирую в .dll, потом в исходники добавляю вызов byte devirtualize(byte, DWORD EIP) из либы с "виртуальной машиной", но по моему я неправильно себе представляю это, потому что уж слишком это уёбищно, чтобы быть правдой.

Может есть какой нибудь ресурс, где на простом насколько это допустимо в данной тематике было бы проиллюстрировано виртуализирование на примере какого нибудь калькулятора?
265 1071802
>>071776

> И как это реализуется?


Ты вообще представляешь как виртуальная машина работает? Напиши сначала простую вм в вакууме. Какой-то набор инструкций, какой-то массив с байткодом (вручную напишешь какой-нибудь 99 bottles of beer, например) и бесконечный цикл, который выбирает следующую инструкцию, исполняет ее и переходит к следующей (или к какой-то иной, если это было ветвление или вызов функции).

Собственно, для виртуализованного кода ты так же пишешь примерно такую же вм. Затем берешь функцию в машинном коде, берешь ее байты, дизассемблируешь, разбиваешь на базовые блоки (грубо говоря, последовательности без ветвлений), инструкции в каждом базовом блоке преобразуешь в инструкции вм, в конце втыкаешь вызовы вм для перехода между базовыми блоками (т.к., скорее всего размер байткода вм будет не равен размеру машинного кода, из которого ты его генерировал). Байткодом затираешь функцию или кладешь байткод в отдельную секцию - похуй. Вместо вызова фукнции втыкаешь вызов вм с адресом входного базового блока. Ну это если без обфускации и антиотладки. Для упрощения своей жизни пилишь кастомный линкер, говоришь компилятору separate functions for linker и работаешь с объектными файлами, а не с исполняемым. Далее тебе становится очевидно, что дизассемблирование - неудобный подход, и логическим развитием будет написание бэкенда к llvm, чтобы сразу генерировать виртуализированный код.
sage 266 1071808
>>071802

> добавляет 1 к каждому байту исходников


Это обфускация, не виртуализация. Виртуализация подразумевает, что твоя вм байтики выполняет (они инструкции, команды, блять). И нет,

> инструкции, которые неким образом сопоставляются реальным инструкциям


Не обязательно. Одна инструкция вм может реализовываться хоть мегабайтами кода вм. Ты можешь без проблем придумать для себя инструкцию http_download_file и написать для нее в вм соответствующий обработчик.
Снимок экрана2017-10-0710-37-34.png298 Кб, 1285x703
267 1071881
Несколько вопросов:
1. Как эта программа получает ввод с клавиатуры, если в дизассемблере ни одного прерывания не видно?
2. Если они все же есть, то как до них добраться? Запустил программу в edebugger, а функция return_input и находящийся в ней gets завершились и все. Даже окно терминала ни разу не вылезло для запроса ввода. А ведь еще при учебе в шараге при отладке с помощью Turbo Debugger какой-нибудь простенькой программы с вводом с клавиатуры появлялось окно терминала, потом происходил ввод одного символа и отладка продолжалось дальше. Поэтому третий вопрос:
3. Какая настройка/опция отвечает за поведение отладчика описанное выше?
268 1071885
>>071881

> прерывания


Ты в юзермоде. Единственное твое прерывание - это сисколл. Он надежно спрятан внутри функций, вызываемых функцией gets.

> Если они все же есть, то как до них добраться


ЗАЧЕМ?

> edebugger


Наверняка какое-нибудь говно. Наверняка оно отбирает у программы stdin. У тебя на скрине gdb, кто тебе мешает поставить брейкпоинт на return_input?
269 1071886
>>071881
И еще 1 вопрос отвалился: поясните пожалуйста за "ширину" стека. В интернете пишут что ширина стека составляет то 2 байта, то 4 байта. Просто последовательность команд чисто для примера push1,push2 кладет мне в стек по адресу N цифру 1, а по адресу [N-4] кладет цифру 2, хотя для этих цифр должно хватать 1 байта, следовательно почему не происходит варианта типа цифра 1 по адресу N, а цифра 2 по адресу [N-1] ?
270 1071887
>>071885
А как мне отлаживать через gdb? просто запрашивается ввод когда я ввожу run, а содержимое регистров параллельно с этим не выводится на экран. А после завершения программы состояние регистров мне ничего говорить не будет.
271 1071889
>>071886

> ширину стека


Есть размер, ширины нет.

> push1,push2


push - инструкция 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.

>>071887
Ставь брейкпоинты (break) в нужное место перед run, ходи по инструкциям (step, next). И вообще, man gdb.
272 1071892
>>071889
А разве такой подход к стеку не ведет к тому, что стек может быть равномерно забит значениями, для которых хватило бы и 1 байта, т.е. такой подход ведь никак не экономит оперативную память.

Кстати, понял как работать с gdb и попутно понял что это офигеть какой неудобный отладчик. Ощущение что под линукс удобный отладчик с GUI хрен найдешь.
sage 273 1071904
>>071892

> т.е. такой подход ведь никак не экономит оперативную память.


Еще раз: невыровненный доступ, возникающий из-за хранения байтов и двордов вплотную - это дорого, причем дорого для всех переменных вызываемой функции и ее потомков. При этом экономия на передаче небольших целочисленных констант (это будет какой-нибудь enum или bool) - копеечная. Даже в программах с глубокой вложенностью вызываемых функций ты наэкономил бы максимум какой-нибудь сраный килобайт. В x86-64 ты вообще ничего не наэкономишь, потому что твой байт с большой вероятностью будет передан в 64-битном регистре. Некоторый смысл мог быть при рекурсии, но глубокая рекурсия на системном стеке - зло.
274 1071914
Есть ли инструменты для программирования сразу в машинном коде? С возможностью писать макросы и т.д.
275 1071916
>>071914

> сразу в машинном коде


Хекс-редактор?

> макросы


Ассемблер?

На flatassembler.net есть fasmg - это ассемблерный движок, не привязанный к конкретной архитектуре. Хуй знает, что тебе нужно.
276 1071919
>>071916

>Хуй знает, что тебе нужно.


Возможность манипулировать с опкодами, как с ассемблерными коммандами. Например, представить опкод одной комманды в виде функции от другого опкода. В ассемблере можно заменять исходные комманды их логическими эквивалентами, хочется чего-то похожего, но с 16-ричными опкодами и не только логикой, но и любыми функциями, н-р арифметикой.
277 1072162
>>071919
Ну посмотри на fasmg все же. Когда видишь его впервые, синтаксис кажется слегка странным, если не писал на фасме до этого, но если привыкнуть - вполне норм. Примеры в комплекте, написано оно на себе самом.
Снимок экрана2017-10-1314-58-57.png420 Кб, 1918x818
278 1074935
Снова вкатывающийся в отладку программ. Есть программа принимающая ввод в буфер величиной 2 байта и 1 раз выводящая его. Мне таки удалось заставить программу вывести буфер 2 раза, а не один результат пикрелейтед путем тупого подбора т.к.я не очень умею в линуховые отладчики они все консольные и жутко неудобные, но дело не в этом. Вопрос: судя по дизассемблированному виду функция return_input выделяет вначале стеку 36 байт, тогда почему для выхода из фрейма стека и перезаписи сохраненного ebp и адреса возврата потребовалось 18 байт? И еще: в gdb есть разница между выводом десятичной десятки и шестнадцатеричной?
279 1075036
>>074935

> я не очень умею в линуховые отладчики


Можешь отлаживать идой через gdbserver, хотя отладчик в IDA тоже неудобным кажется после OllyDbg.

> почему для выхода из фрейма стека и перезаписи сохраненного ebp и адреса возврата потребовалось 18 байт


Потому что аргумент gets адресуется относительно ebp, а не esp. Передается ebp-10, плюс 4 байта на сохраненный ebp, плюс 4 байта на адрес возврата.

> в gdb есть разница между выводом десятичной десятки и шестнадцатеричной


Не понял вопроса.
image.png11 Кб, 222x156
280 1075208
Что думаете про реверс-инжиниринг игр с целью геймхака и самого геймдева в общем. Актуально ли и нужно ли кому-нибудь. Сколько ещё проживёт эта индустрия? Идется речь про реверсинг/разработку многопользовательских видеоигр.
281 1075239
>>075208
За деньги - только если тебя с этого прет. Если не прет - заебешься, проклянешь айти и уйдешь в дворники. Без денег аналогично. А в целом актуально и нужно.
2.png5 Кб, 652x426
282 1082933
Хотел вот поизучать ДОС, скопипастил кодик на С, который должен блокировать нажатие клавиши. Ничего не работает (пикрел, https://pastebin.com/gJpdrs5K). Потом скопипастил кодик, который выдает инфу о системе, ОЗУ, ПЗУ - какие-то ебанутые значения получаются. А так хочется вкатиться в эту древнюю тему, но ничего не получается. Подскажи ньюфагу, как ему быть.
.png321 Кб, 1193x485
283 1082965
asm тред? подписался
284 1083038
>>082933
Твоя паста протухла.
285 1083076
>>083038
То есть кодик никак не запустить с досбокса?
286 1083087
>>083038
У него там макака ссылку пошатала. Скобку с точкой убери.
287 1083105
>>083076
Должно работать в досбоксе. Только а) для активации тебе надо нажать хоткей, который он тебе предлагает, б) блокирует оно клавишу "3", а если нужны другие - гугли таблицы сканкодов и меняй сканкод в начале исходника. Можешь допилить и сделать антиспеллчекер (вставлять опечатки или заменять введенные слова на другие).
288 1083216
Есть одна прошивка для 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 логотип.
Как вычисляется эта контрольная сумма?
бин.JPG33 Кб, 791x138
289 1083252
>>083216
про binwalk напиздел, поставил из репы, получил другой ответ
290 1083300
>>083216
Что-то совсем тебя не понял. Это точно CRC32? Ты смог получить это значение на не изменённой прошивке? Явно там не весь файл проверяется, а только сами данные без заголовка (хотя это не точно).

>Модификация файла с последующим приведением crc32 к исходному виду не помогает


Вот эта фраза мне не понятна. Ты изменил файл, но оставил неизменным контрольную сумму?
Подключайся по отладочному интерфейсу к устройству (JTAG что-ли называется) и смотри, как проверяется контрольная сумма. Может и в файле ещё где-то есть места, где проверяется целостность файла.
291 1083491
>>083300
crc32 можно привести к любому значению за счёт 4 dummy байт.
Помимо того crc считается для каждого отдельного раздела кроме ресурсов и для целого бинарнка. Получить записанное в прошивке значение у меня не получается, это вполне может быть экзотический полином для crc32 или результат обычного crc32/16 инвертирован/реверсирован/сдвинут, это я пытаюсь выяснить. Я попробовал трюк с приведением crc32 к исходному просто чтобы исключить последнее предположение.

Я менял значение случайных байт в различных частях прошивки, увеличивал/уменьшал размер в конца с начала чтобы определить границы проверки.
Если снять дамп микросхемы, его можно превратить в файл прошивки для usb обрезав хвост после контрольной суммы и дав ему правильное имя.
На плате есть UART, но полезной информации кроме тех. данных платы он не выплёвывает
В итоге мы имеем
1.Файл проверяется целиком, любое изменение в любом месте/размере ведёт к ошибке.
2. Проверочная сумма считается для целого файла на этапе сборки, затем записывается в хвост в виде 2-4 байт, затем файл подгоняется dummy байтами под исходную сумму. Это привычная практика для файлов с вшитой кс.
3. JTAG не вывден, даже если бы был, делать мне там нечего. Есть теоретический дебаг/прошивка через i2c/uart.
Так то мне ничего не мешает внести изменения в бинарник, зашить его через SPI и забыть, если конечно прошивка не проверяет себя при запуске. Мне просто любопытно как организована проверка целостности и как её обойти.
292 1083504
>>083491

>Помимо того crc считается для каждого отдельного раздела кроме ресурсов


*зачастую, не обязательно в данном случае
Короч, у кого есть предложения, открываю конкурс по окирпичиванию моего телевизора. сделайте мод отличный от оригинала который зальётся по usb.
293 1083508
Почему никто не вкладывает денег в разработку игрового движка на ассемблере, тут одни плюсы, высокая производительность, более качественная графика, для меньшего геморроя можно поддерживаемые процессоры начиная от i3 и выше.
Посмотрите на демосцены какой там охуеный графон в 64К.
Для простоты разработки можно использовать высокоуровневые макросы но не везде.

Как по вашему идея?
Какие трудности могут возникнуть?
Сколько времени уйдет чтобы дойти до уровня UE4?
Была ли такая идея на кикстартере?
294 1083514
>>083508

> Почему никто не вкладывает денег в разработку игрового движка на ассемблер


Потому что писать медленно, модифицировать сложно, а практического смысла нет.

> высокая производительность


В теории. На практике компилятор знает лучше тебя, и у него больше возможностей (например, автоматическая оптимизация по результатам профилирования - на сколько проходов тебя хватит вручную?).

> более качественная графика


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

> какой там охуеный графон в 64К


Практически все даже не на Си - на крестах! И даже 4К многие на Си.

> Сколько времени уйдет чтобы дойти до уровня UE4?


Обоснование: пока пишешь - поддерживаемое железо уйдет в небытие, и ты будешь начинать с нуля снова и снова.

>>083491
Ты прошивку-то реверсить пробовал? Чего гадать, если можно взять дамп и посмотреть на код USB-бутлоадера? Только лучше именно дамп, чтобы не ебаться с распаковкой.
ida huida.JPG55 Кб, 600x374
295 1083542
>>083514
Дамп=прошивка+настройки в хвосте.
Какой бы фс/сжатием эта прошивка не пользовалась, binwalk определить не может.

>Ты прошивку-то реверсить пробовал?


> IDA особенно не помогает


Читай внимательнее.
Не знаю что я делаю не так, но читаемого кода очень мало. в основном всё текстовые строки без кросс отсылок. Единственное где вообще получилось найти касающийся USB_isp и crc кусок - в прошивке под другой процессор tsumv29. Алгоритм проверки там такой же, ибо файлом от 29 можно окирпичить 59. появилась зацепка, строка "golden crc". Но как я понял это как раз и есть механизм записи контрольной суммы файла в сам файл.
296 1083558
>>083542

> Дамп=прошивка+настройки в хвосте.


Ну кто-то же ее читает и распаковывает!

> Какой бы фс/сжатием эта прошивка не пользовалась, 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.

> но читаемого кода очень мало. в основном всё текстовые строки без кросс отсылок


Есть даташит хотя бы на семейство чипа? Там точно мипсы? (Хотя вроде как регистры репортит вполне себе мипсовые). Код вообще на исполняемый не похож, куда ни ткнись.
sage 297 1083560
>>083558

> по 0x78e8 в распакованном куске


В самом файле прошивки, прошу прощения.
sage 298 1083564
>>083558
Еще попались:

> Wrong hash key


> Wrong Chip ID


> Auth OK


> Auth NG

299 1083770
>>083558

>Datasheet..MIPS


Даташита нет. Даже то что это mstar чип я выяснил по уликам в коде и uart инфе. это вполне может быть не mips. Это скорее догадка. Из инфы существует схема и пинаут.

>Ну кто-то же ее читает и распаковывает!


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

Потыкал файл свопом с разными настройками, получил mysql compresed data и криптопарашу. Заодно binwalk после свопа начал определять код как Arm. РАзный своп даёт немного больше читаемого кода.
sage 300 1083823
>>083770

> это вполне может быть не mips


Я тут погуглил еще, и нашелся мануал по сборке бутлоадера под это дело (по крайней мере одно имя файла со скриншота в бинарнике есть):
https://wenku.baidu.com/view/7faa4869a6c30c2258019e25.html
Если поискать по csdn, то найдутся и другие мануалы по сборке, все они настолько же ебнутые (colinux и т. д.) и все предлагают поставить mipsisa32-elf, что как бы намекает.

На pudn лежат исходники бутлоадера от более старой прошивки (по слову mstar ищутся), они в принципе помогли бы составить общее впечатление о прошивке в целом. Есть аккаунт? Мой стух. Если знаешь живой поисковик по облаку baidu вроде умершего wangpanhezi, можешь там поискать. Очень часто всплывают даташиты и инструменты для прошивки.
301 1083960
А есть ли телеграм-конфа этого треда?
302 1083963
>>083960
Адекватные люди не пользуются говномессенджерами, которые привязаны к телефону. Вот если ты жаббер-конфу создашь, можно и набежать.
303 1083966
>>083963

> которые привязаны к телефону


> Подразумевая, что номер никому не виден

304 1083971
>>083966

>подразумевая, что номера хранит база

image.png57 Кб, 250x200
305 1083972
Создание конфы по этому треду в Telegram Messanger. Если создавать, то я думаю не паблик-конфу сперва. Или есть еще варианты?
306 1083974
>>083971
Можно сразу IRC-канал захуярить, лол.
307 1083982
>>083972
Алсо, нужно хотя бы 5-15 желающих людей поднять такую конференцию. Если такое число наберется, то можно будет создавать. Желающие решившие поддержать идею — напишите свои юзернеймы в ответ.
308 1084057
>>083982

>15 желающих людей поднять такую конференцию


хз, зачем это. сидеть там и ололокать? задрачивать самообразование можно и в оффлайне, а для пары вопросов в сутки и тредика хватит
sage 309 1084080
>>084057
Двачую.
310 1084109
>>015083 (OP)

> Программируете микроконтролёры, пишете драйвера для ОС, а то и саму ОС? Вам сюда.


Ну ок, сюда так сюда.

Что такого ОС делает с дисками, что с ними потом нельзя работать через int 13h?
INT 13h AH=00h: Reset Disk Drive не помогает.

Переход из защищенного в реальный режим делаю корректно.
311 1084136
Есть прога, шифрующая бд blowfishем, в зашифрованном виде пароль остается в файле "ini". Можно как-то дизассемблированием достать пароль?
312 1084137
>>084136
Хуй знает, бинарник выложи.
314 1084397
>>083972

>Создание конфы по этому треду в Telegram Messanger.


Нахуй не нужно, инфа там тонет, общаться там всё равно что пердеть в вечность. А эти треды заархивируем и приложим к первому, так что даже через века ньюфани будут читать наш FAQ и восхищаться нашими знаниями.
>>084109

>Что такого ОС делает с дисками


Какая ОС, мы должны угадать?
Нихрена в этом не понимаю, считаю, что ОС тебя озалупила в режим виртуального V86 и подкладывает тебе эмулированных хуйцов. И весь твой реальный режим эмулирован, и int 13h, даже небо, даже деление на ноль.
123.png22 Кб, 676x364
315 1084417
Экзешник упакован upx'ом. Стал гуглить, как распаковать. Там с помощью ollydbg надо найти OEP, но что-то у меня уже на этом шаге косяк.
>>084271-кун
316 1084426
>>084417

> Аноним 30/10/17 Пнд 08:46:20 №1084417


>


Читай статьи Нарвахи, он там подробно обьясняет как работать с этим отладчиком.
317 1084459
>>083770

> это вполне может быть не mips


Вот исходник того, что было пожато дефлейтом:
https://github.com/caxyu/mstar6a918/tree/master/code/MBoot_Napoli_TVOS/sboot/src/macaw12
Судя по синтаксису инструкций, строкам в бинарнике и названиям файлов, это какое-то отродье OpenRISC на асике, но мой дизасм его не жрет, да и статистика показывает что-то больше похожее на 16-битные опкоды. Возможно, опкоды изменены. Кроме того, в дереве исходников овердохуя всяких интересных вещей, вплоть до загрузчика на базе 8051 - ребята там развлекались по-полной.

>>084417

> Стал гуглить, как распаковать


Внезапно upx -d filename (понадобится UPX 2.x, его несложно нагуглить или собрать из исходников). Алсо, там пароль ведь для открытия настроек, а не для файла. Или я что-то делаю неправильно? Алсо, там два exe, чем они отличаются?
318 1084477
>>084459
Кажется, экзешник HT не нужен, бд открывались с другого. Вот еще одна такая же база расшифрованная:
https://drive.google.com/open?id=0B5YHle7vjDgVU1Z1bC1yUDZYRUU

Там в password.txt я пароль расшифрованный указал.
319 1084510
>>084397

>Какая ОС, мы должны угадать?


Ленсук.

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


Нет, я с помощью kexec загружаю свой бинарь, ему ленсук передаёт всё управление и сам завершается полностью.
320 1084749
>>084459
Кстати, по этой ерунде в Password никак его не достать?
321 1084771
Треда конкретно по микроконтролерам не нашел, поэтому спрошу здесь. В универе препод предложил запрограмировать микроконтролер avr для регулятора напряжения асинхронного двигателя. На чем лучше писать, си или асм, мой опыт программирования это хелловорды на джаве и вебговно. С чего вообще начать изучение этой темы, и какой ресурс для этого лучше всего? Сайтов и книг много, где-то советуют асм, где-то C.
322 1084791
>>084771
С асма начинать проще, и асм все равно нужен будет рано или поздно, но если у тебя одноразовая учебная задача, можно и на си склепать, не погружаясь.
323 1084800
>>084749
В инишнике по первой ссылке 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".

В принципе можно написать банальный брут по известному открытому тексту.
Если еще что-то нужно - пиши, базу иды пока не удаляю.
324 1084815
>>084800
Как ты вообще это расшифровываешь?
sage 325 1085097
>>084815
Ну охуеть. А второй абзац я для кого писал?
326 1085205
>>084815
Удваиваю вопрос.
327 1085254
>>085097
Не очень понятно, через что / какими инструментами прогнать строчку в Password, чтобы получилось это 1202201320072010?
328 1085277
>>085254
Охуеваю еще больше. Мы тут в треде про реверсинг или где? Может, мы еще и не программисты? Бери любимый язык программирования и пиши код (у меня были Python 3 + родной base64 с предварительной трансляцией в стандартный алфавит + blowfish из pip).
329 1089524
>>015083 (OP)

>


Совсем запутался с адресацией в двубайтовом массиве.
В di нужен адрес на элемент в массиве.
Изначально в di - адрес на первый элемент.
lea di, array
затем:
1) cmp word ptr arr[bx], word ptr di //сравниваю два байта из массива по смещению bx со значением по адресу di(но тут я походу проебался где-то)
2) lea di, arr[bx] - вот тут тоже.
330 1089539
>>089524

>1) cmp word ptr arr[bx], word ptr di //сравниваю два байта из массива по смещению bx со значением по адресу di(но тут я походу проебался где-то)


>


сделал так:
mov ax, word ptr [di]
cmp word ptr arr[bx], ax
И заработало. Есть вариант лучше? Без задействования регистров в одну строку?
331 1089542
>>089524

> cmp word ptr arr[bx], word ptr di


Так нельзя. В инструкциях x86 только один операнд может обращаться к памяти.

> 2) lea di, arr[bx] - вот тут тоже


Тут все норм (кроме ебучего нелогичного синтаксиса адресации). Если не компилируется, попробуй lea di,[arr+bx]
332 1089549
>>089542

>кроме ебучего нелогичного синтаксиса



А что конкретно?
Так надо было?
lea di, array

Идейно просто было так:
в di и si получить адреса, и их обменять. но потом я понял что проебался ибо адреса в памяти менять то нельзя.

Все вроде работает. Доделал.

>>089542

>Так нельзя. В инструкциях x86 только один операнд может обращаться к памяти.


>


Понял, спасибо
333 1089552
>>089549

> А что конкретно?


Вот в фасме логичный синтаксис - есть обращение к памяти (или его имитация в lea) - вся хуйня всегда в квадратных скобках, снаружи только тип. Нет обращения - просто втыкаешь имя переменной. И никаких offset, addr, ptr и прочей хуйни. Просто:
mov ax,[di]
cmp [bx],ax
и
lea di,[arr+bx]
Програмный реверс мехатроники и прочей мелкой поебени, которую не предполагается подключать к компьютеру вообще никогда 334 1090307
Сап реверсач. Не так давно в мои руки попала одна хуйнюшка - моторчик из здоровенного напольного МФУ - которую я был бы не прочь реверснуть. Сразу скажу, аппаратный реверс обсуждать не буду, всё же это нерелейтед, и с таким нужно идти в /ra/. Предположим, что его я уже сделал, ну то есть разобрался, какой пин коннектора за что отвечает. Предположим, также, что я создал подходящий переходник с какого-нибудь COM-порта.
Что делать дальше? Как реверсить систему комманд мотора, хотя, я бы даже сказал, сервопривода, так как эта штука имеет свою собственную печатную плату, и при этом предполагается, что она будет подключаться к материнской плате МФУ. Да и сам внешний вид коннектора намекает на то, что там больше пинов, чем просто плюс и минус, то есть какие-то данные между материнкой и платой мотора передаются.
Собственно, способы подобного реверса имеются? Спецификации мотора, положим, найти я могу, но то не интересно.
336 1090338
>>090307

>Предположим, что его я уже сделал, ну то есть разобрался, какой пин коннектора за что отвечает.


А больше может ничего и не нужно. Например, простейшие контроллеры двигателей управляются без команд как таковых. Один провод направление, а по фронту сигнала на другом проводе двигатель делает шаг.
В любом случае начинать необходимо с поиска схемы, если схему найти не удается то искать документацию на отдельные микросхемы. Иначе будет неизвестно даже что там за микроконтроллер/процессор. Если устройство в рабочем состоянии, то можно посмотреть осциллографом сигналы на этом разъеме.
337 1090339
>>090336
Только перед тем как тыкать логический анализатор, стоит узнать хотя бы уровни сигналов.
338 1097380
Тредик, не умирай. Бамп.
339 1097710
Есть несколько модулей ядра .ko и функция в одном из них. Как найти все вызовы этой функции из каких-либо модулей?
# OP 340 1097724
>>097380
Хули так рано бампать? Я бампну по окончании месяца.
341 1098183
>>015083 (OP)
Необходимо перекрыть прерывание таймера. И сделать установку и удаление обработчика используя аргументы командной строки.
И использовать мультиплексорное прерывание.

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

Вот я не могу понять:
mov ah,*
mov al,0 ; функция проверки установлен ли обработчик
int 2FH

Что в регистр ah пихать то.
342 1098300
>>098183
Вроде разобрался.
343 1098394
Даже не знаю, где спрашивать. Хочу сделать ассемблерную вставку в сишный код, т.к. нужно ловить ногодрыг от ведомого устроства, что стандартными методами, внезапно, оказалось нетривиальной задачей я еще молчу про синхронизацию и выдержку интервала времени по RTC-таймеру, которые компилятор заботливо "оптимизирует", из-за чего после каждой сборки на ножки вылазит какая-то хуйня вместо расчетного интервала, ибо компилятор GCC и используется AT&T-подобный синтаксис. Что должно быть:
Загрузка в регистр адреса, по которому располагается регистр для ногодрыга как забить сюда PERIPH_BASE+GPIOA_BASE+GPIO_ODR в душе не ебу, пришлось клеить так
Загрузка в другие два регистра собственно значений для ногодрыга конкретной ногой
Запись значения из регистра по адресу.

Как это правильно оформить?
344 1098410
>>098394
Судя по названиям регистров это STM32. С этим тебе скорее в /ra/.

>нужно ловить ногодрыг от ведомого устроства


Так делается только в простейшем случае. Для вариантов чуть посложнее в таймерах есть модуль сравнения/захвата. В совсем сложных случаях - пересылка ПДП из GPIO в память.

>которые компилятор заботливо "оптимизирует"


Это потому что Си не знаешь. Для того чтобы компилятор не "выкидывал" код, нужно использовать volatile.
hvCV6KjTjoU.jpg98 Кб, 960x960
345 1098432
>>098410
Простейший пока потому, что лепить сразу в кучу все на прерывания займёт достаточно много времени - хочу для начала получить рабочую модель "на пальцах", а уж потом заняться её перетрушиванием. Инты и пдп довольно простые вещи, но работоспособность вперёд.

>Это потому что Си не знаешь.


Есть такое, да. Я в железо хочу, а не в Си, поэтому в душе не ебу, как делать те или иные вещи, которые опытному сишнику на раз-два.
Честно говоря - в душе ебал этот Си с его кучей несовместимых между собой компиляторов, каждую конкретную хуйню приходится по часу шарить в гугле, нет бы предоставить тот же ассемблер, но с возможностью не грузиться вопросами "R2 и R3 трогать нельзя, R0 щас заюзаем, а что там R3? звуки шуршания листингом в поисках последнего использования регистра, каждый проект приходится править, чтоб он начал собираться gcc, а от эвоного инлайн асма с синтаксисом AT&T но при этом типичным расположением операндов я вообще в осадок выпал - это при том, что собсно AS из гнутого тулчейна жрет вполне себе человеческий код безо всяких процентов и амперсандов с кавычками и двоеточиями.
346 1098499
>>098432
Из твоих портянок нихера не понятно, что же это у тебя за задача такая нетривиальная, но я если она связана с портами и временем, я бы постарался сделать строго на таймерах, тем более, что в stm они прекрасные. Ещё можно использовать DMA, бывает задорно получается.

Ещё замечу, что за десять лет дрочения контроллеров у меня не было ни одного случая, чтобы задачу io нельзя было нормально решить на С.
2017-11-25180704.png75 Кб, 1962x720
347 1098514
>>098499
В конкретном случае я просто пытался проверить, насколько резво стмка умеет дрыгать ногами. Вменяемого результата добился только когда выкинул к ебеням большую часть писанины, оставив только ногодрыг.
Чуть более глобально - ловить ACK от геймпада с выдержкой задержки перед следующим пакетом, 5й канал. В итоге вкуривал, какие же задержки реально выходят.
А, хер с ним. В итоге проц ещё и дрыгает ногой там, где в коде этого вообще не подразумевается, даже полное стирание пару раз прогнал. Обидно, конечно, что нельзя просто так взять и написать в линеечку код, который просто возьмёт и заработает, придётся въезжать на прерываниях.
348 1100402
что можно прочитать покороче про директивы ассемблера, ну то говно с точкой. писать умею, инструкции брать ясно где, секции понятно что - мне бы собрать в кучу это всё.

ещё я не очень понял такую штуку, чем ассемблеры отличаются? я так понял, спецификация по процессору определяет и его ассемблер, тогда почему получился синтаксис ГАС? причём я так понял, под другие архитектуры там всё как у всех.
349 1100404
ну и наверно директивы, это главное чем отличаются ассемблеры, в этом плане мне интересен такой момент: как писать портируемые смещения в структурах - какие-нибудь алиасы или что-то такое.
350 1100433
>>043476

>Проигрывать можно бесконечно :^)


Ну, то что такой лузер как ты бесконечно проигрывает - это норма
351 1100787
>>059225
http://codenet.ru/progr/asm/tasm/ Очень сурово.
Тут же и про директивы есть (кто-то в начале тренда спрашивал).
352 1101025
>>015083 (OP)
Какие можно взять компиляторы для ARM и MIPS под винду, чтобы удобненько проходить книгу Юричева?
353 1101181
>>101025
Виртуалбокс с линуксами возьми. Хотя можно и просто шланг для винды (clang --target=mips -S -с foo.c тебе будет вполне достаточно, либы и хедеры не нужны).
354 1101330
>>101181

>clang --target=mips -S -с foo.c


Почему после ввода clang main.c --target=armv7 возникает ошибка fatal error 'stdio.h' file not found?
355 1101427
>>101330
Потому что у тебя нет хедеров для 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директория, но оно все равно не слинкуется, нужны остатки тулчейна. Ну можешь тот же линаро скачать так-то.
356 1104807
Ребят, подскажите, в чем прикол. Компилирую все в экзешник, под стек отвел 100h.
Я в секции .data объявляю строку, например string db 'string $'.
При компиляции lea dx,string , тасм превращает мое lea в mov dx, offset string (экономит байт). Собстно вопрос: почему в отладчике я получаю mov dx,[0000] ? Тасм не учитывает, что при запуске exe в [0000] будет не string, а PSP? Что исправить? Я не понимаю, что делаю не так
sage 357 1105160
>>104807
Потому что сегмент загрузи. Я хуй знаю, как в ваших тасмах, достаточно ли там assume или нужно явно сказать mov ds,DATA. А если хочешь, чтобы все в одном сегменте валялось, зделой .com, model tiny, вся хуйня.
358 1105249
Добрый день/вечер/ночь, господа.

Хочу вкатиться, открываю beginners.re из шапки, а там прямо в первой главе, как говорится, с места в карьер, и где-то к 50й странице уже становится тяжко и непонятно. Так и должно быть, или мне лучше почитать дополнительную литературу/статьи?
359 1105251
>>105249
Ах да, навыки в программировании C (начальный уровень), а так же C# присутствуют.
360 1105678
>>105249

>beginners.re


Как я понял, beginners.re это сайт описывающий технику обратной разработки, предполагая, что изучающий уже знаком с инструментарием языка ассемблера и его особенностями. Посмотри сайты ниже в ОП-посте. Ну или сам погугли какой-нибудь "ASM для чайников". Поищи на вики статьи про такие понятия, как "сегментная адресация", "регистры процессора" и прочее.
361 1105748
>>084426
>>015083 (OP)
ОП, ты незаслуженно забываешь в шапку добавлять Нарваху. Как практический курс по дебагеру для новичков оч удобно и наглядно.
https://mega.nz/#!Bc9VVAYC!Vk6CFlW6VIoskLNgDKXbsL6FacDQeOKe6LX92wNicKY
sage 362 1105980
>>105748
А курс кто-нибудь перепилил на x64dbg и современные ОС, или там по-прежнему XP и первая олька?
363 1106041
>>105980
дык ольки под 64 и нет. Это перевод в виде Chm внутри и олька и плагины и CrackMe, на ехелабе подобрал когда то.
А так как курс под начинающих - смысл перепиливать - с этим разберется как есть - дальше уже сам материал найдет, если будет интересно.
364 1106044
>>105980
п.с. вроде когда пробегался - всё под вин 7/8/10 более менее работало без проблем.
# OP 365 1106395
>>105748

>ОП, ты незаслуженно забываешь в шапку добавлять Нарваху


Если бы я знал о его существовании... Как бы намекаю
>>015083 (OP)

>Шапка треда в процессе пополнения, пока так.


В следующий раз добавлю.
Бессменный ОП этого треда
366 1106526
Помогите вспомнить.

В какой-то старой книге или статье Криса Касперски было упоминание про книгу инженера то ли Интел, то ли другой компании.

Описание книги было примерно такое: "корпорация выдавливает из инженера все соки, а затем выкидывает на помойку".
367 1106531
>>106526
Еле нагуглил.
368 1106954
Двач, не поможешь ньюфагу?
Недавно заинтересовался реверс-инжинирингом и в качестве первой жертвы выбрал известного в узких кругах бота для игры.
На первый взгляд все было очень просто, и даже с околонулевыми знаниями я вскоре смог запустить основное окно несмотря на неправильный ключ (который должен сверяться на сервере бота). Однако, к игровым серверам оно по-прежнему отказывалось подключаться.
Оказалось, что сначала проверяется статус нужного сервера (пик1), а в случае его доступности активируется функция проверки некоего ключа авторизации (пик2), которая уже выше моего понимания. Интересно, что если ссылку оттуда вставить в браузер и изменять переменные, то значение ключа будет меняться только при редактировании v1, которая скорее всего является айпишником сервера. Возникает вопрос, зачем тогда вообще нужен правильный ключ.
Еще больше вопросов вызывает переменная "HuyZhaet". Кроме прикрепленных скринов она встречается несколько десятков раз в различных функциях, и всегда окружена подобными конструкциями.
Подскажите хоть примерно что дальше делать, у меня даже предположений нет.

Ссылка на мои изыскания, если кому интересно: http://rgho.st/private/8p5MxgZnR/633d5f0ad2d83d1afa68d7bbdf4c1afe
Ссылка на установщик с оффсайта: http://rakbot.ru/download
369 1107158
>>106954

>Еще больше вопросов вызывает переменная "HuyZhaet". Кроме прикрепленных скринов она встречается несколько десятков раз в различных функциях, и всегда окружена подобными конструкциями.


Это вызов виртуальной функции в C++. Судя по тому, что этой переменной ничего не присваивается, она глобальная. Смотри, где создаётся (легко найти по конструкции вида mov global_var, eax) и восстанавливай виртуальную таблицу. Там и должна быть интересующая тебя функция проверки ключа.

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


Нет. Там ясно видно, что это функция типа sprintf и первым параметром передаётся auth_in в создаваемом url. Подозреваю, что это берётся из первого запроса. Запусти Wireshark и посмотри.
370 1107685
>>105249
Смотри сюда:
http://octopuslabs.io/legend/blog/sample-page.html
https://tuts4you.com/e107_plugins/download/download.php?action=view&id=2876
Самый простой способ вкатиться. По второй ссылке в первых уроках аффтар учит азам АСМа.
371 1107816
>>107685
Я в asm вкатывался
Калашников - Ассемблер - это просто (морально устарело, но на XP и в DOSBox всё работает, для наглядного использования годно)
и
http://asmworld.ru/uchebnik/
372 1107817
>>107685
так это же Нарваха, выложенный чуть выше.
373 1107820
>>107817
Нет, не он. Посмотри внимательнее.
374 1107945
анончики, насколько быстро можно вкатиться в байтоебство, чтобы хотя бы суметь проанализировать простенький пакет в вайршарке. много ли вы получаете профита от асма, если не используете его в работе. Всмысле стоит ли его изучать как хобби?
375 1107946
>>107945

Зависит от ассемблера. В целом ассемблер как отдельные команды - простой.

> много ли вы получаете профита от асма, если не используете его в работе. Всмысле стоит ли его изучать как хобби?



Можно например оптимизировать функции на других языках, глядя в ассемблерный выхлоп:

https://godbolt.org/
376 1107955
>>107946
интересно, и часто такая оптимизация используется?
377 1107957
>>015083 (OP)
OP, ЯД с Крисом - твой? если да - предлагаю заменить Образ мышления IDA, тут вот оригинальный исходный DOC для издатесльства лежит, только некоторых иллюстраций не хватает, зато все листинги как надо. _https://rutracker.org/forum/viewtopic.php?t=272818
# OP 378 1108104
>>107957
Увы, не мой, добавлю рядом.
379 1111184
Ребят, а расскажите о перспективах заработка и сложности найти работу
380 1111414
>>111184
Перспектив никаких, работать негде. Реверсеры требуются разве что в АВ компаниях, всё остальное нелегально.
381 1111429
>>111414
А что по асм?
382 1111487
>>111429
Выбор чуть больше, но суть та же.
383 1111700
>>015358
Дел, ты просто не умеешь, вот и всё. Как я, например, не умею в патчи бинарников. Короче, всё от навыков зависит.
384 1111701
>>015370
Вот опять, хипстарок защищает своё глючное поделие только потому что умеет в него. Нода хороша только для сборки фронтенда -- и то, лишь потому, что можно простить ей все глюки зависимостей сотен пакетов на локальной машине.
385 1111702
>>015370
Боль тебе будет нести всё, что ты не умеешь, лошара
9407.jpg76 Кб, 640x479
386 1111721
Помню, в 2001 работал (начинающим тогда юникс админом) в конторе, которая пилила, помимо прочего, полулегальный рекламный малварь -- после установки прога заменяла рекламу во всех браузерах на свою и даже корректировала поисковую выдачу. Сейчас уже не у кого спросить, как они это делали, а интересно: каким образом можно перехватить ответ от сервера в браузер (при том, ssl) и заменить в нём пару параметров?
387 1111728
>>111721

>каким образом можно перехватить ответ от сервера в браузер


Самый простой способ - прокси-сервер. Скорее всего, именно это и было.

>при том, ssl


>в 2001


Нунизнаю. Но это тоже решается очень просто своим корневым сертификатом в системе и того же прокси-сервера.
388 1113533
Товарищи аноны, читаю "Архитектура компьютера" Э. Таненбаума, и что-то я не совсем понимаю тему про "Упорядочение байтов", в чем, собственно профиты систем с обратным порядком следования и/или систем с прямым порядком?
389 1113672
>>113533
Чтобы корпоративный клиент не мигрировал с PDP-7 на IBM S/360, а купил PDP-11.
390 1113683
>>113672
То есть это делается просто для того, чтобы существовало различие между архитектурами?
391 1113687
>>113683
Как и разделители каталогов и символы перевода строки.
Google, фатальный недостаток вот это вот всё.
392 1113742
>>113533
https://softwareengineering.stackexchange.com/questions/95556/what-is-the-advantage-of-little-endian-format
Тлдр:
На ранних pipelined (хз что это) процессорах little-endian улучшал производительность. Big-endian удобочитаем человеками.
В другом месте пишут что эти форматы ни для чего не нужны. Наверное сейчас это наследие 60х
393 1113747
>>113742

>pipelined (хз что это)


Вычислительный конвейер. Как пример, пока работает АЛУ, можно параллельно считывать следующую инструкцию из памяти. Я не понимаю как порядок байт может улучшить производительность.

>>113533
Какой-то порядок байт все равно должен быть. Оба варианта практически равноценны, какой выбрать? Это как порядок бит при передаче по последовательному интерфейсу.
394 1113825
>>113747
Может дело в каких-то инструкциях, которым в little-endian нужно меньше тактов, чтобы что-то проверить. Например четность
395 1113884
>>113747
Вот оно че, михалыч

OK, here's the reason as I've had it explained to me: Addition and subtraction

When 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.
sage 396 1113957
>>113884
Сейчас аргумент про длиную арифметику потерял смысл: длинную арифметику реализуют не массивами байтов, а массивами слов, и порядок байтов в слове никак не влияет на реализацию, лишь бы сами слова располагались в порядке little-endian.

Зато есть другой аргумент: компиляторы достаточно часто при работе с переменными типа char или short int кладут временные результаты в полноразмерное слово (int или long int) - это быстрее, а при необходимости (например, при возврате байта из функции) читают оттуда только первые один-два байта. С big-endian такие финты не пройдут: вместо простого чтения по указателю потребовалось бы прибавление офсета, а заодно и само чтение было бы по невыровненному адресу. Алсо, некоторые любят делать магиюписать говнокод вида uint32_t foo = 0x11223344; ∗(uint16_t ∗) foo = 0xffff, который теряет всякий смысл на big-endian машине.
397 1114388
>>113957
Про такую магию где-то пишут или самому надо доходить?
398 1114796
>>114388
В любой книге по C, в разделах про типы переменных и про указатели.
399 1114876
пиздец везет тем кто шарит в реверсинге, всегда хотел заниматься им, но никогда не было времени нормально изучить это. В итоге 30 лвл пишу гавно на джаве.хотя платят много, но не интересно нисколько Парни как вы находите время на лоу левел? Это у вас как хобби или работа?
400 1114879
>>114876

>Парни как вы находите время на лоу левел?


Открой для себя RetDec:
http://blog.avast.com/avast-open-sources-its-machine-code-decompiler
http://www.opennet.ru/opennews/art.shtml?num=47741
http://github.com/avast-tl/retdec
401 1115046
>>114879
RetDec одинаково некачественный и бесполезный. Не стоит потраченного времени и тех десятков гигов оперативки, которая требуется, чтобы прожевать им что-нибудь сложнее хелловорлда.
402 1115056
>>084417

> Стал гуглить, как распаковать


https://2ch.hk/pr/res/1015083.html (М)

'''
Decompress

All UPX supported file formats can be unpacked using the -d switch, eg. upx -d yourfile.exe will uncompress the file you've just compressed.
'''
404 1115137
>>105980
Начинающему x64 нахуй не нужен. Лишний раз голову морочить.
405 1115555
А как всякие дебаггеры примитивные получают состояние процессора (регистры, стек, команды)? От ос ведь? А как можно получить доступ ко всему этому без ОС? С помощью каких механизмов это происходит?
406 1115561
>>115555
Там какие-то дополнительные регистры и прерывания есть. Не забивай голову. Ты что, пишешь операционные системы?..
407 1115621
>>115561
Да интересно вдруг стало.
Тоже подумал про прерывания.
sage 408 1115822
>>115621
Ну смотри, ОС переключает задачи по прерыванию (по прерыванию таймера, по исключению и т. д.). При переключении задачи ОС сохраняет/восстанавливает регистры в контекст выполнения (кусок памяти, привязанный к потоку выполнения) банально через push/pusha или mov [dest],reg, ну или там через всякие fxsave для FPU/SSEx.

Когда в отлаживаемом процессе возникает исключение (например, когда выполнение дошло до брейкпоинта - брейкпоинты вызывают исключение), ОС видит, что к процессу подключен отладчик, и вместо того, чтобы прибить процесс, она переключает задачу на какую-нибудь другую (например, на этот самый отладчик) и сигнализирует отладчику об этом событии. При этом на отлаживаемую задачу ОС перестает переключаться (т.е., останавливает ее), пока отладчик явно не скажет, что все ок, и можно продолжать.

А теперь, что касается твоего вопроса: раз отлаживаемый процесс остановлен, значит, его состояние сохранено в контексте выполнения и не меняется. А раз оно там сохранено, то по запросу отладчика ОС может это состояние прочитать или изменить.
409 1115834
>>115822
О, спасибо огромное!
Теперь картинка сложилась.
А аппаратные точки генерируют прерывание или исключение? Помню я читал у нарвахи про их отличие от виртуальных брейкпоинтов. Если не ошибаюсь, то с их помощью, в частности, обходят обходят программы, проверяющие, отлаживают ли их.
231.PNG10 Кб, 575x191
410 1116349
Фикс мелтдауна для шиндовс весит 231 Мб. Кто-нибудь ковырялся в нем? Сколько модулей ядра они там переделали?
411 1116350
>>116349
Полный список чего они в этом багфиксе перекомпилировали:
http://download.microsoft.com/download/4/6/E/46EE95B4-7B13-4157-BAD1-854D4FA4855A/4056894.csv
412 1117036
Про мелтдаун и спектру
https://www.securitylab.ru/analytics/490642.php
413 1117119
>>117036
Эту парашу спамят по всему интернету. Зарепортил мудака.
414 1117218
>>117119
Ты про статью или про уязвимость?
415 1117295
Здесь обсуждают ту самую уязвимость на уровне физической микроархитектуры процессоров Intel? А что там насчёт неё?
416 1117318
>>117295
Выше дал статью же
417 1117445
>>117318
Почитал. И не понимаю, почему всем не похуй. Если эта заплатка КОКОКО СНИЖЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ ДО 30% ОТ НАЧАЛЬНОГО УРОВНЯ то нахер оно нужно? Вот если бы вскрылась уязвимость в процессорах какого-нибудь сетевого оборудования, типа кисок или хуйвеев, вот это была бы проблема. Впрочем, там инфа соточка бэкдуров дохера. Главное, чтобы они не попали в открытый доступ, в руки васянов.
# OP 418 1117460
>>117218
Про статью вестимо.
>>117445

>СНИЖЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ ДО 30% ОТ НАЧАЛЬНОГО УРОВНЯ то нахер оно нужно?


Нахер тебе тогда вообще защищённая ОС? Сиди на параше без разделения прав, получишь прибавку в скорости в 100%.

>И не понимаю, почему всем не похуй.


Жабаскрипт в броузере может прочитать все твои пароли от архивов с ЦП, и тебе не похуй?
419 1117467
>>117460
Антивирус защитэ.
sage 420 1117478
>>117460

> Жабаскрипт в броузере может прочитать все твои пароли


Не может. В браузерах уже успели похерить точность performance.now (снова!), так что все измерения скорости доступа превращаются в гадание на кофейной гуще. Тащемта даже не в браузерах на более-менее загруженной системе это тоже гадание на кофейной гуще с охуительной скоростью уровня байт-в-секунду.
# OP 421 1117563
>>117467
Нет.
>>117478
Осталось только обновить мой устаревший браузер, так как ничего нового на XP всё равно не идёт.

>Тащемта даже не в браузерах на более-менее загруженной системе это тоже гадание на кофейной гуще с охуительной скоростью уровня байт-в-секунду.


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

Кстати вопрос. Функция CmpGetAcpiBiosInformation возвращает в переданном ей аргументе структуру с трёх элементов:
boot_arch
pm_profile
flags
которые добывает из АCPITable FADT
Ни у кого нет мыслей, что это за структура, или мне придмывать свою?

Ёбаный обу когда будет нормальная капча?
422 1117575
>>015083 (OP)
Прорвался через 7 слоёв капчи к вам ИТТ!
Хочу вкатиться в GAS на Линухе.
Что посоветуете? Хоть что-нибудь на русском есть?
Алсо, AT&T синтаксис для пацанов, да?
sage 423 1117597
>>117575

> Хочу вкатиться в GAS на Линухе.


Странное желание.

> Алсо, AT&T синтаксис для пацанов, да?


Для дебилов, как и сам GAS.
424 1117704
>>117597

> что-то странное


> дебильное


У тебя трудная жизнь, да?
# OP 425 1117779
>>117704
У сажа-куна действительно было трудное детство, и он немного грубоват, но тему знает, и в отношении GAS и AT&T он полностью прав.
426 1117783
>>105748
Нарваха еще же по IDA писал статьи, их как раз сейчас на васме переводят.
427 1117788
Как обычно делается привязка к флешке?
Тяжело ли ее потом убрать?
428 1117824
>>117779
Может, хоть ты пояснишь, что с ними не так, и что лучше использовать?
Вообще, у вас тут только тред реверс-инжиниринга, так?
Вы тут игры взламываете и порнуху рипаете, или тут есть программисты на ASM'е?
429 1117835
>>117824
Синтаксисы intel и at&t это просто представление мнемониками байтов в памяти. Мне нравится интеловский синтаксис тем, (один из плюсов) что порядок записи аргументов команды одинаков с высокоуровневыми языками. Т.е mov ax, 100
Можно записать как
int ax = 100
В at&t это выглядит как
mov 100, ax
431 1117844
>>117835
Согласен с этим, в т.ч. и в функциях стандартной либы обычно сначала идёт dest.
А что бы ты мне посоветовал?
432 1117854
>>117844
Я вот быстро поискал https://stackoverflow.com/questions/9347909/can-i-use-intel-syntax-of-x86-assembly-with-gcc

Похоже с флагом можно компилировать в GAS интеловски синтакс. Но вот как с библиотеками это законтачится - я не знаю. Так как я себе поставил дос с tasm'ом для обучения и никаких либ не использовал.
1515514076044.jpeg1,9 Мб, 2096x1552
433 1117878
Можете обоссывать меня. Но я сразу скажу, что в шараге нам так ничего и не пояснили, а я как последний лох проебал 800р, наткнувшись на мошенника, который обещал помочь. Анон, у меня уже нет денег, ты моя последняя надежда, может найдется не равнодушный. TASM, 16-битный ассемблер.
434 1117887
>>117854
Нормально всё будет, там всё модульно, GAS всё распарсит.
Короче, ты мне посоветовал другой синтаксис, ок, учту.
435 1117895
>>117878
https://pastebin.com/JNL423hL
На свой страх и риск
436 1117897
>>117887
да научишься с одним, на другой легко будет перескочить)
437 1117973
>>117878
В 19 строчке замени [ds+si] на [ds+si-1]
438 1117977
>>117973

> mov ax,[ds+si] ;Загружаем байтик



Ты уже обосрался - загрузил вордик. Дальше даже не смотрел.
439 1117991
>>117878

mov si, offset S
cld

lodsb ;; load string length from first byte of S into AL
mov di, si
xor cx, cx
mov cl, al ;; CX = S string length

read_char:
lodsb
cmp al, 'A' ;; >= 'A'
jl wrong_char
cmp al, 'Z' ;; <= 'Z'
jg wrong_char
or al, 32 ;; lowercase it
wrong_char:
stosb
loop read_char
440 1117993
>>117977
Это тонкое место, но тасму, если не ошибаюсь, похуй
441 1117994
>>117977
Или тасм возьмет из памяти ворд?
442 1117998
>>117994

Таки ворд, или надо movzx al, byte ptr [hooy]

> cmp ax,'A'


B тут не CMP а SUB если уж потом с 25 сравнивать собрался, но это не разрушит AX

За один бранч сравнение 'A' <= x <= 'Z' делается примерно так:
movzx dx, al
sub dx,'A'
cmp dx,'Z'-'A'
ja wrong_char

Кароче садись, два =)
443 1118003
>>117998
Поспешишь - сделаешь как я))
Мысли наложились и я забыл шо заменил sub на cmp
Не хотел вычитать, потому что пришлось бы прибавлять 'A'

P.S спасибо за объяснение ошибок
444 1118544
>>117563

>Ни у кого нет мыслей, что это за структура, или мне придмывать свою?


Нашёл, это _MSAcpiInfo, как ни странно.
image.png4,6 Мб, 2096x1552
445 1118545
Ребята, спасибо, с третьим вроде разобрался. А как сделать первое? Оно же легкое. Помогите плиз
446 1118868
>>015083 (OP)
Посоветуйте справочник по ассемблеру Интел, чтобы открыть, например, про lodsw, и все про нее прочитать
447 1118886
>>118868
http://ref.x86asm.net/x86reference.xml
попробуй этот (должен быть здоровым)
sage 448 1118910
>>118868
Intel SDM, том второй. Больше, чем написано там, ты нигде не найдешь. Даже псевдокод есть для каждой инструкции.
1515741341855.jpg981 Кб, 884x2520
449 1118956
Правильно я сделал первое, не?

>>118545 вот задание
450 1118959
>>118956
Если ответ сошелся, то правильно)
451 1118964
>>118959
Бля, не, я в dx там заношу, а он потом значение меняет. Как занести в переменную?
452 1119043
>>118964
Чтобы промежуточный результат сохранить? Толкай в стек, например (push регистр). Или загрузи в ненужный регистр (какой-нибудь ES)
Безымянный.png9 Кб, 889x594
# OP 453 1122038
Ёбанный Обу когда будет нормальная капча?
Можете пояснить за функцию VfZwDeleteBootEntry. Если смотреть на код отладочной х86 венды (или WRK), то получается пикрил. Внимание, вопрос. Что за переменная var_1C, и на кой она там нужна? Применив все свои недюжинные скиллы в брутфорсе исходного кода, получил такой код, который компилится байт-в-байт, но всё равно не понимаю, что там задумывалось.
NTSTATUS
NTAPI
VfZwDeleteBootEntry (
IN ULONG Id
)
{
NTSTATUS Status;
if ( VfZwShouldCheck(_ReturnAddress()) )
{
try
{
Status = STATUS_SUCCESS;
}
except (VfZwExceptionFilter(GetExceptionInformation())) {
NOTHING;
}
}
Status = ZwDeleteBootEntry(Id);
return Status;
}
454 1122478
IDA отказывается открывать либу. Верно определяет тип либы, начинает загружать, почти мгновенно говорит, что не может считать сектор X. При этом указанный номер соответствует номеру байта, следующего за концом файла.
Не помню точно формулировку ошибки, что-то вроде "Could not read file at sector XXXXXXXX, continue?" (ошибка всё равно не гуглится).
В чём может быть дело?
455 1122494
>>122478
Возможно, антиотладочные приёмы. Что за либа? Если это защита от кряка крупной игры, или другой дорогой софт, то ничего удивительного.
2018-01-1918-25-34.png74 Кб, 949x786
456 1122499
>>122494
Как это вообще может работать?
Там же просто код, ида же его не выполняет, чтоб он мог себя защищать. Она просто пытается прочесть байты.
457 1122502
>>122499
ИДА пытается прочитать эти байты и понять, куда они ведут. При использовании некоторых хаков можно добиться разного поведения кода для процессора и с точки зрения иды, то есть процессор будет исполнять валидную инструкцию, а ида неправильно её дешифрует и попытается заглянуть за границу файла.
Ах да, некоторые либы на самом деле являются указателями на функции в дллке, и не содержат кода. Попробуй посмотреть ей 7зипом, лол.
458 1122504
>>122502
Когда работал с оверлеями, ида не ругалась, когда, например, вызывала функцию за пределами адресного пространства этого файла, а просто помечала адрес красным. Или ты не об этом?
459 1122506
>>122502
Вообще это либы из psyq SDK для первой плейстейшен.
ДЛЛ'ок тут в принципе никаких нет.
Агрх.
460 1122510
>>122504

> Или ты не об этом?


Да я сам ХЗ о чём. Просто читал покойного Криску про наёбывание ИДЫ.
>>122506

>ДЛЛ'ок тут в принципе никаких нет.


И я про что. Что ты там дизассемблировать собрался, текст вида
имя_либы.dll имя_функции
461 1122515
>>122510
Либо ты несёшь хуйню, либо я тупой. Эти либы статически линкуются с проектом, в них должен быть код, причем тут динамические либы?
462 1122517
>>122515

>Эти либы статически линкуются с проектом


Я конечно должен был угадать это по скриншоту. Или ты думаешь, я тут же брошусь качать твой СДК?
463 1122520
>>122517
Сорри.
Это вообще моя догадка, я и самим сдк так-то пользоваться не намерен, у меня обратный процесс.
Могу скинуть либу.
464 1122523
>>122520
Ну давай.
465 1122531
>>122523
http://puu.sh/z56hX/566b9fa9ce.LIB
LIBC.LIB

Мануал говорит, что это Standard C Library.
Консольке нужны и дефолтные функции сишки.
466 1122566
>>122478
Известная проблема. Это сломали в 6.8 вроде. Возьми предыдущую.
467 1122570
>>122566
Бля, а я как раз пробовал только 6.8 и 7. Чому в 7 не починили?
sage 468 1122572
>>122566
Я тебе ильфак чтоли? Откуда мне знать? Никто не репортил? Никому не нужно? Напиши свой лоадер всего семейства (CPE, EXE, OBJ, BIOS и т. д.) или возьми 6.5. Лоадер на питоне пишется за пару часов.
469 1122577
>>122572
Ну охуеть. Это ты плагин к иде имеешь ввиду?
sage 470 1122581
>>122577
Ну да. Рандомная статья из гугла: https://darklabs.squarespace.com/blog/2016/7/25/simple-ida-loader
Что за игру реверсишь?
471 1122591
>>122570

>7


Лол, только узнал, что седьмая версия утекла.
472 1122593
>>122581
Chrono Cross
Не обоссывай.
sage 473 1122599
>>122593
Мы знакомы. Можешь обоссывать.
# OP 474 1122600
>>122591
IDA 7.0.torrent
@
C:\Program Files\IDA 7.0\ida64.exe Не является приложением Win32
@
Патчишь байтики подсистемы PE заголовка
@
Запускаешь на хрюше
Ильфак- пидарас.
475 1122606
>>122599
Да я так и знал.
Даже хотел написать "pe", выйди из сумрака.
476 1122608
>>122606
Макаба съела звёздочки, ну ты понил.
sage 477 1122613
>>122600
А потом один из плагинов захочет современный API, не сможешь вызвать какой-нибудь fstat64 из новой ucrt и что-нибудь тебе сломает. Ильфак не пидорас, это скорее к Microsoft претензии. Но все равно версии в заголовке не просто так сделали.
478 1122615
>>122599
Ты один из моих идолов так-то. Рассказываю о тебе окружающем как о легенде.
479 1122617
>>122615
*окружающим
# OP 480 1122621
>>122613
Код исключения:0xC0000005
Сведения об исключении:Потоком была предпринята попытка прочитать или записать данные на виртуальный адрес, к которому он не имеет соответствующего доступа.
Сведения о куче:Присутствующие

Сука.
481 1122630
>>122572
Сейчас попробую с 6.5.

Вообще охуеть конечно — иметь десять версий под разные подзадачи.
482 1122642
Если тебе по какой-то причине неприятно/неудобно более тесно общаться, то я буду рад и анонимной помощи здесь. Потому что мне помогает либо никто, либо ты.
ss+(2018-01-19+at+11.38.01).png70 Кб, 1589x858
483 1122649
>>122630
C 6.5 открылось всё. Есть смысл ебаться с загрузчиком, чтоб пользоваться 7.0 или и так сойдёт?

Вообще охуеть конечно, даже есть все названия.

Это ж можно просто сопоставлять названия с доками и реверсить не вслепую! Я кончил.
484 1122798
Не хотел вызывать щитшторм на свою голову, но как в edb-debugger сделать запуск программы с аргументом, чей текст находится в файле? Я говорю об аналоге из gdb типа run < arg.txt

Просто хочется толкового gui-отладчика, а как только ищу адекватные отладчики под линукс, то напрашивается или какой-нибудь voltron производные от gdb, которые еще напильником надо обрабатывать, да еще не на всех дистрах нормально работают или этот edb.
u.jpg28 Кб, 340x340
sage 485 1123049
>>122798

> Просто хочется толкового gui-отладчика


IDA + gdbstub/gdbserver/whatever.
486 1123202
>>117783
оо! это прекрасная новость!
487 1123482
Анон, чем дебажить NASM на винде?
488 1123542
>>123482
Да любым отладчиком, разве есть принципиальная разница?
489 1123550
>>123542
NASM генерирует только отладочные символы CodeView8 для Win32. Я не знаю ни одного дебаггера, умеющего их читать (кроме самого CodeView, очевидно).
А конвертер cv2pdb у меня не завёлся с готового бинарника. Компилировать его вручную я не хочу.
490 1124455
Ньюфаг в треде. Есть %программа_нейм% заранее скомпилированная с флагами -fno-stack-protector и -execstack с помощью gcc. В проге изначально нет проверки на размер введенных данных. Если запускать прогу через gdb и использовать при вводе строку с определенным количеством символов и payload`ом, то payload успешно запускается. Если просто запускать программу в терминале, то та же самая строка с payload`ом приводит к сегфолту. В чем дело? Имеет место быть ASLR?
491 1124498
>>122600
А что за байтики? Просто меняешь win64 заголовок на корректный с точки зрения формата pe?
мимоиюнь
492 1124533
>>124498
Типа того. Правлю версии минимальной ОС и подсистемы.
493 1125416
Пишу бинарный транслятор из MIPS в x86. Что делать с недостатком регистров? Складывать всё в стэк?
494 1125539
>>125416
А что же ещё. Неплохо было бы анализировать частоту использования и складывать в долгий ящик редко используемые регистры, но это больше для динамической рекомпиляции подходит, где можно собрать актуальную статистику.
495 1125547
>>125539
Как-то неудобно выходит, это ж придется ещё записывать куда-нибудь в кучу, где какие регистры сохранены (а тогда уж проще для таблицы регистров и выделить значение в куче, но это уже совсем какая-то эмуляция получается).
sage 496 1125775
>>125416
>>125547

> Складывать всё в стэк?


Да.

> это ж придется ещё записывать куда-нибудь в кучу, где какие регистры сохранены (а тогда уж проще для таблицы регистров и выделить значение в куче


Хранить регистры в куче бессмысленно. Тебе их между вызовами функций сохранять, а раз ты их все равно сохраняешь в какой-то стек (эмулированный или родной x86), то зачем куча? К тому же, если одна из целей - это натравливание HexRays на результат, то с глобальными переменными результат получается отвратительным. Лучше забудь, что в x86 вообще есть какие-то там регистры и создавай в каждой функции фрейм стека с 32 (ну или меньше) переменными reg_0...reg31. Все действия будешь делать с ними, а x86-регистры будешь использовать только для хранения операндов инструкций, загружая их непосредственно перед инструкцией. Увидишь последовательно выгрузку-загрузку одной и той же переменной - удаляешь. По скорости все это не так ужасно, как кажется - tinycc тому пример. А уже потом поверх этого будешь писать register allocator, выделяя регистры под "горячие" переменные, если захочешь.

> но это уже совсем какая-то эмуляция получается


Никуда не денешься. Тебе все равно придется носить с программой либо кусок своего транслятора, либо эмулятор. Потому что никакая IDA тебе все цели непрямых переходов не найдет. А значит, некоторые такие переходы будут крашить программу. А чтобы не крашилось, нужно инструментировать непрямые call и jmp, проверяя, попадаешь ли ты в начало базового блока. Если цель перехода попадает не в начало базового блока, либо вообще вне базового блока, тогда такой код придется либо транслировать на лету, либо эмулировать. Да, при следующей итерации трансляции эта конкретная позиция пофиксится, но ты никогда не сможешь быть уверен, что пофиксил всё.

Почему не в ARM?
497 1125781
>>125775

>Почему не в ARM?


А почему да?
Чтоб почти нативно было.
Какие плюсы/минусы подводные камни?
sage 498 1125782
>>125781
Ёбли меньше.
499 1125786
>>125775
Лол, чот я только сейчас понял, что call/jmp могут вести в разные места из одного и того же кода.
500 1125788
>>125786
Может ты еще и классическую статью не читал? Почитай, это наиболее годное введение. http://www.gtoal.com/sbt/
501 1125789
>>125788
Спасибо.

Не читал офк.
Вообще на всю эту тему очень мало чего гуглится, либо гуглится плохо.
Или я просто тупой.
Скорее всего.
502 1125801
>>125788
Дай ещё полезных материалов, времени для чтения у меня очень много.
504 1141225
>>122613
так кст и есть, пробовали уже))
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 8 марта 2018 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски