Сейчас на форуме: bartolomeo, -Sanchez-, morgot, sashalogout (+5 невидимых) |
eXeL@B —› Софт, инструменты —› Capstone - The Ultimate Disassembler |
<< . 1 . 2 . 3 . 4 . 5 . >> |
Посл.ответ | Сообщение |
|
Создано: 03 марта 2017 00:47 · Личное сообщение · #1 2 марта 2017 года, была выпущена версия 3.0.5-rc2 дизассемблера Capstone. Предыдущий релиз был в Скачать: Компактный пример на питоне: Code:
Запуск и выхлоп: Code:
Описание изменений: Version 3.0.5-rc2 March 2, 2017 Release 3.0.5-RC2 is a release candidate version, with important fixes in the core & several bindings. Library Fix build for Visual Studio 2012 Fix X86_REL_ADDR macro Add CS_VERSION_MAJOR, CS_VERSION_MINOR, CS_VERSION_EXTRA Better support for embedding Capstone into Windows kernel drivers Support to embedded Capstone into MacOS kernel Support MacOS 10.11 and up Better support for Cygwin Support build packages for FreeBSD & DragonflyBSD Add a command-line tool "cstool" Properly handle switching to Endian mode at run-time for Arm, Arm64, Mips & Sparc X86 Some random 16-bit code can be handled wrongly. Remove abundant operand type X86_OP_FP Fix instructions MOVQ, LOOP, LOOPE, LOOPNE, CALL/JMP rel16, REPNE LODSD, MOV *AX, MOFFS, FAR JMP/CALL Add X86_REG_EFLAGS for STC and STD Fix instruction attributes for SYSEXIT, MOVW, ROL, LGS, SLDT Rename registers ST0-ST7 to be consistent with asm output Arm Properly handle IT instruction Fix LDRSB Fix writeback for LDR Fix Thumb BigEndian setup Fix arith extender Fix writeback for LDR Rename enum arm64_mrs_reg to arm64_sysreg PowerPC Print 0 offset for memory operand Sparc Fix POPC instruction Python binding Better PyPy support Add __version__ Better support for Python 3 Fix CS_SKIPDATA_CALLBACK prototype Cast skipdata function inside binding to simplify the API Java binding Better handle input with invalid code PowerShell binding New binding ----- EnJoy! | Сообщение посчитали полезным: Abraham, plutos, oldman, nice, DenCoder |
|
Создано: 29 сентября 2017 01:10 · Поправил: sefkrd · Личное сообщение · #2 difexacaw пишет: У дизасма есть две совершенно не связанные задачи. Первая это декодер инструкций, который предоставляет базовую инфу - наличие MRM, SRC/DST операндов, флаги и регистры(IN/OUT) etc. Вторая это текстовый вывод мнемоник. Обычно нужна вторая задача, но для неё подходит вообще любой дизасм, лучше/хуже оценивается по текстовому выхлопу. Для первой задачи важен профайл и гибкость мотора, что он может раскодировать. Есно для первой задачи никакая портабельность смысла не имеет. Для второй задачи смысла не и имеет профайл. Ну докторская ведь.. Добавлено спустя 25 минут plutos Находясь в директории capstone-3.0.5-rc3/ или какой там бранч, просто Code:
а потом Code:
Code:
Добавлено спустя 37 минут plutos пишет: куда устанавливается Capstone? В моем выхлопе видно.. Чё не так: свой листинг сюда.. Debian 9 (Stable) | Сообщение посчитали полезным: plutos |
|
Создано: 30 сентября 2017 01:44 · Личное сообщение · #3 Уважаемый sefkrd! Большое спасибо за помощь! Кажется все получилось! Ну и еще, так на всякий случай, спрошу: какой ну уже самый верный способ проверить все ли работает так как нужно? Я на всякий случай сделал sudo ./tests/test* => вижу перечень платформ, code and disasm. Значит все робит? ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 30 сентября 2017 22:02 · Поправил: sefkrd · Личное сообщение · #4 |
|
Создано: 30 сентября 2017 23:34 · Поправил: plutos · Личное сообщение · #5 sefkrd пишет: Значит все робит? Ага.. Да нет, блин, что-то не так... cstool: Command not found. Боюсь, что у меня какие-то нелады с PATH environmental variable, или как оно на FreeBSD называется. К примеру: COMPILE.TXT: NOTE: The core framework installed by "./make.sh install" consist of following files: /usr/include/capstone/capstone.h У меня: /usr/local/include/capstone/capstone.h /usr/include/capstone/x86.h У меня: /usr/local/include/capstone/x86.h Ну и так далее, все остальные в /usr/local/include/capstone /usr/include/capstone/arm.h /usr/include/capstone/arm64.h /usr/include/capstone/mips.h /usr/include/capstone/ppc.h /usr/include/capstone/sparc.h /usr/include/capstone/systemz.h /usr/include/capstone/xcore.h /usr/include/capstone/platform.h /usr/lib/libcapstone.so (for Linux/*nix) У меня: /usr/local/lib/libcapstone.so /usr/lib/libcapstone.a У меня: /usr/local/lib/libcapstone.a Из-за этого и make не может найти библиотеку capstone LIBNAME = capstone test1: test1.o ${CC} $< -O3 -Wall -l$(LIBNAME) -o $@ Так что делать в таком случае? Reinstall, с указанием каких-то специфических options and locations или просто тупо перенести все файлы в /usr/include/capstone? Но это может еще более запутать и без того запутаную ситуацию. Спасибо за помощь и терпение! ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 01 октября 2017 00:09 · Поправил: sefkrd · Личное сообщение · #6 ldconfig.. Железяку в reboot, если неделями работает.. /usr/local/bin/cstool че покажет? plutos пишет: просто тупо перенести все файлы Симлинки попробуй из /usr/local/ в /usr (sudo ln -s) | Сообщение посчитали полезным: plutos |
|
Создано: 01 октября 2017 03:05 · Личное сообщение · #7 sefkrd пишет: В терминале: cstool x64 769490903457 root@plutos: ~/../capstone3.0.5-rc3/cstool # ./cstool x64 799490903457 => результат точно совпадает с вашим на картинки. Но если покинуть этот гостепреимный folder, то cstool не найден. В /usr/local/bin/cstool этого стула нет! Видимо что-то с путями не так. Буду копать. Спасибо за помощь! ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 18 октября 2017 09:53 · Поправил: Bronco · Личное сообщение · #8 По Юникорну темы пока нет, а автор тот же, попробую сюда. Хз как его дебажить, в сорцах только хидеры и статические либы. Проблема в том что не могу понять, как он мапит инстр с указателями на память, где базовый регистр RIP. Code:
раскодированный указатель равен "0x146FEA1CA",юникорн мне возвращает в R9 = 0x00000001414acda5 add RIP = R9 + x86->operands[1].mem.disp - instruction->size// 0x144781000 (база раздела) получается что при мапинге дисплейшен не пересчитывают. а скорее всего борода здесь uc_mem_write(uc_engine *uc, uint64_t address, const void *bytes, size_t size); можно пересчитать disp в структуре капстона, можно переписать opstr инструкции, но байткод инстр в структуре от этого не меняется. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. | Сообщение посчитали полезным: plutos |
|
Создано: 24 октября 2017 02:59 · Поправил: plutos · Личное сообщение · #9 Пытаюсь на cygwin64 собрать пример, приведенный здесь: http://www.capstone-engine.org/lang_c.html. Capstone установлен успешно, все библиотеки и capstone.h на своих местах. Когда я run "make" on commandline: то после строчки из makefile cc test1.o -O3 -Wall -lcapstone -o test1 вылетает с ошибкой: /usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../lib/capstone.lib(cs.o):cs.c:.text+0x1): undefined reference to `__ms_vsnprintf' /usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../lib/capstone.lib(cs.o):cs.c:.text+0x1): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__ms_vsnprintf' collect2: error: ld returned 1 exit status Makefile:6: recipe for target 'test1' failed make: *** [test1] Error 1 Помогите, кто может! ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 24 октября 2017 07:06 · Личное сообщение · #10 |
|
Создано: 24 октября 2017 10:04 · Личное сообщение · #11 plutos пишет: undefined reference to `__ms_vsnprintf' Черным же по белому пишут, что неизвестная ссылка и стало быть функция не найдена. Ищет msvcrt которой нет в никсах, поэтому либо в статике линкуйте проект или явно указывайте опцией платформу под которую собираете. | Сообщение посчитали полезным: plutos |
|
Создано: 24 октября 2017 19:34 · Поправил: sefkrd · Личное сообщение · #12 shellstorm Согласен - кросс-компиляция.. plutos Из COMPILE.TXT: (6) Compile on Windows with Cygwin To compile under Cygwin gcc-mingw-w64-i686 or x86_64-w64-mingw32 run: - To compile Windows 32-bit binary under Cygwin, run: $ ./make.sh cygwin-mingw32 - To compile Windows 64-bit binary under Cygwin, run: $ ./make.sh cygwin-mingw64 Resulted files libcapstone.dll, libcapstone.dll.a & tests/test*.exe can then be used on Windows machine. Удачи! | Сообщение посчитали полезным: plutos |
|
Создано: 24 октября 2017 23:06 · Поправил: plutos · Личное сообщение · #13 shellstorm пишет: Ищет msvcrt которой нет в никсах, поэтому либо в статике линкуйте проект или явно указывайте опцией платформу под которую собираете. Спасибо за ответы! Я в вопросах кросс-компиляции сильно плаваю, точнее, больше тону... Возможно ли дать развернутый пример, а еще лучше подправленый makefile? sefkrd пишет: - To compile Windows 32-bit binary under Cygwin, run: $ ./make.sh cygwin-mingw32 - To compile Windows 64-bit binary under Cygwin, run: $ ./make.sh cygwin-mingw64 Все вроде бы так и делал, а результат - сами видите. Алтернативный вариант: Забудем на минуту про cygwin64. Я собрал capstone на Visual Studio 2015 без проблем. Все libraries and header на месте. Помогите сообразить пример makefile для данного случая (тот же source file). Т.е. как собрать этот же test.c под Windows. У меня заклинило и не работает ничего!!! ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 25 октября 2017 10:55 · Личное сообщение · #14 sefkrd пишет: make.sh cygwin-mingw32 make.sh gcc решает, без проблем собирается в win\nix или явно указать nix | Сообщение посчитали полезным: plutos |
|
Создано: 28 октября 2017 01:54 · Личное сообщение · #15 что бы не оставлять вопрос открытым (может кому-нибудь и пригодится): при сборке использовать ./make.sh gcc как и советовал shellstorm. После этого пример собирается без ошибок. ----- Give me a HANDLE and I will move the Earth. | Сообщение посчитали полезным: sefkrd |
|
Создано: 28 октября 2017 19:33 · Личное сообщение · #16 |
|
Создано: 16 февраля 2018 17:32 · Личное сообщение · #17 при дизасме выделенного кода под дбгх64, в инструкциях с "mem.base == X86_REG_RIP", отрицательный дисплейшен. Умножить на -1, не проблема, непонятно что я не так делаю. Code:
и ещё. при наличии инструкции, которая "ломает" листинг, дизасм только до неё. как обходить не валидные опкоды? ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 16 февраля 2018 17:34 · Поправил: ajax · Личное сообщение · #18 |
|
Создано: 16 февраля 2018 17:47 · Личное сообщение · #19 |
|
Создано: 16 февраля 2018 17:49 · Поправил: Bronco · Личное сообщение · #20 ajax, это получается 2 дизасма, долго. я могу тыкнуть счётчик, суммируя размер каждой инструкции добавленной в список, и сравнить его с выделенным размером на выходе, но в капстон я не влезу, просто укажу адрес такой бяки и всё. и надо смотреть как это мистер делает, ведь не валидный опкод уже есть. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 16 февраля 2018 18:44 · Поправил: difexacaw · Личное сообщение · #21 ajax Не на границу страницы, на границах проц вычислял размер инструкции. Дизасм не должен быть привязан к адресам, занимаемым инструкциями. Иначе он отваливается. Для каждой ветви должен быть независимый от других граф. Если вы выполните ветвление не на гранулярность инструкции, а на некоторое смещение, то возникнет корреляция у любого дизасма, который пытается анализить код, как ида например. Нормально такой код должен быть отображён в нескольких рядом стоящих окнах Либо как всегда нужно указать начало для дизасма, который отображается в одном окне. Если же включается обычный анализер графов, как в любом софте, то он неизбежно глюкнет, так изначально парсер привязан к адресам. ----- vx |
|
Создано: 16 февраля 2018 23:42 · Личное сообщение · #22 |
|
Создано: 25 февраля 2018 10:40 · Поправил: Vamit · Личное сообщение · #23 Баги Capstone на операндах типа X86_OP_IMM, думаю для х64 будет аналогично ГУИ dbg: инструкция: 00FCEC83 | 66 0F BA FB E7 | btc bx,E7 | полный выхлоп Capstone: id:52 name:btc addr:00FCEC83 len:5 dump:66,0f,ba,fb,e7 prefix:00,00,66,00 opcode:0f,ba,00,00 mnem:btc params:bx, -0x19 groups:none rex:00 modrm:fb sib:00 size=4 xopcc:0 ssecc:0 avxcc:0 avxsae:false avxrm:0 operands:2 1 - reg:8.bx size:2 avxbc:0 avxzom:false 2 - imm:FFFFFFE7 size:2 avxbc:0 avxzom:false !!!ошибка на размере 2го операнда, в итоге берется его значение FFE7 вместо требуемого E7 для сравнения выхлоп Zydis: btc bx, 0xE7 size: 5, id: 55, opcount: 3 operand 1 (size: 16, access: read+write, visibility: explicit) "bx", register: bx operand 2 (size: 8, access: read, visibility: explicit) "0xE7", immediate: 0x000000E7 operand 3 (size: 32, access: write, visibility: hidden) "eflags", register: eflags Как бороться с такими глюками Capstone, они на всех imm операндах - его размер выдается по размеру данных инструкции и расширяется со знаком, в этом примере override size = 2 (word). Для инструкции btc еbx, ... второй операнд будет FFFFFFE7 Такие глюки на всех битовых инструкциях, инструкциях сдвига и возможно на других... ----- Everything is relative... |
|
Создано: 25 февраля 2018 10:53 · Поправил: Bronco · Личное сообщение · #24 |
|
Создано: 25 февраля 2018 11:25 · Поправил: difexacaw · Личное сообщение · #25 |
|
Создано: 25 февраля 2018 11:37 · Личное сообщение · #26 Для меня вывод в строку на втором месте, т.к. данные в первую очередь нужны для статического эмулятора инструкций, а для него E7 и FFE7 совсем не одно и то же. Пока вижу выход сделать таблицу всех битовых инструкций и инструкций сдвига с операндом imm8, а все остальные инструкции будут работать правильно, т.к. имеют sign-extended до размера данных imm операнд. В принципе получится небольшая таблица на 14 инструкций (bt, btc, btr, bts, rcl, rcr, rol, ror, sal, sar, shl, shr, shld и shrd). ----- Everything is relative... |
|
Создано: 25 февраля 2018 11:40 · Поправил: Bronco · Личное сообщение · #27 difexacaw, в сдк есть только капстон, + либа капстона в снапе лежит. думаешь надо тянуть диз кседа за собой? по кседу у меня вопрос по асм двигу, если таковой есть заливай, буду пробовать, ибо титан с бриджем уже достали, а либа кседпарсе непонятно что, по апи там только валидность чекают. Vamit пишет: FFE7 совсем не одно и то же. согласен, но борода кажется из-за типа данных в структуре , тут по ходу всё расширяют до х64, не зависимо от размера первого операнда. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 25 февраля 2018 11:43 · Поправил: difexacaw · Личное сообщение · #28 Vamit Никакой диз не поддерживает весь набор, кроме кседа. Не удивительно впрочем, софт от производителя железок самый лучший. > Пока вижу выход сделать таблицу всех битовых инструкций Набор столь толстый и не логичный, что реализация с нуля бессмысленна. Даже если вы потратите кучу времени, оно будет работать не корректно - глючить и бажить. Для полноценной реализации вам придётся досконально изучить всю архитектуру. Это не реальная задача и её может решить только автор(производитель) архитектуры. Для стандартной раскодировки в визоре я использовал деза, как лучший по профайлу. Когда требовалось декодировать расширенные наборы я использовал ксед. Никакой другой диз не пригоден - они либо тормозные, либо не полноценные, либо анстаб. ----- vx |
|
Создано: 25 февраля 2018 11:54 · Поправил: Vamit · Личное сообщение · #29 Bronco пишет: в сдк есть только капстон Не правда, там есть и Zydis и он выводит инфу в окно дизасма. И Zydis постоянно обновляется, последнее было 3 дня назад, а Capstone уже почти год как не обновлялся. Добавлено спустя 3 минуты Bronco пишет: тут по ходу всё расширяют до х64, не зависимо от размера первого операнда Расширение и должно быть иначе sign-extended операнды будут неправильные, но размер операнда должен строго соответствовать размеру его данных. ----- Everything is relative... |
|
Создано: 25 февраля 2018 11:58 · Личное сообщение · #30 |
|
Создано: 25 февраля 2018 12:11 · Поправил: Vamit · Личное сообщение · #31 А вот ещё один глюк: 00FCEC83 | 6A A7 | push FFFFFFA7 формат инструкции push imm8 На ней уже врут оба дизасма и Capstone и Zydis. Хотя тут Zydis прав, т.к. размер операнда выставил в byte, но вывод в ГУИ неверный. Добавлено спустя 2 минуты difexacaw пишет: Тут есть моя тема про выбор лучшего дизасма Без ссылки на тему это ни о чем. ----- Everything is relative... |
<< . 1 . 2 . 3 . 4 . 5 . >> |
eXeL@B —› Софт, инструменты —› Capstone - The Ultimate Disassembler |