Сейчас на форуме: bartolomeo, -Sanchez-, morgot, sashalogout (+5 невидимых)

 eXeL@B —› Софт, инструменты —› Capstone - The Ultimate Disassembler
<< . 1 . 2 . 3 . 4 . 5 . >>
Посл.ответ Сообщение


Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 03 марта 2017 00:47
· Личное сообщение · #1

2 марта 2017 года, была выпущена версия 3.0.5-rc2 дизассемблера Capstone.

Предыдущий релиз был в 2015 году.

Скачать:
www.capstone-engine.org/download.html

Компактный пример на питоне:
Code:
  1. # test1.py
  2. 2 from capstone import *
  3. 3 
  4. 4 CODE = b"\x55\x48\x8b\x05\xb8\x13\x00\x00"
  5. 5 
  6. 6 md = Cs(CS_ARCH_X86, CS_MODE_64)
  7. 7 for i in md.disasm(CODE, 0x1000):
  8. 8     print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))

Запуск и выхлоп:
Code:
  1. $ python test1.py
  2.  
  3. 0x1000: push    rbp
  4. 0x1001: mov rax, qword ptr [rip + 0x13b8]


Описание изменений:
www.capstone-engine.org/changelog.html

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


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 25 февраля 2018 12:19
· Личное сообщение · #2

Vamit

Вы меня походу игнорите, но не в этом суть. Ранее для тестов дизасма длин использовалась железячная фича(страничная ловушка). Только так можно было протестить на стабильность декодер - он крутился часами на рандом буфере, длина сравнивалась с тестируемым декодером. Крутившись в цикле десятки часов, оказалось что викс мотор(Malum) декодирует длину без ошибок. Остальные декодеры данный тест не проходили.

-----
vx





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 25 февраля 2018 12:37 · Поправил: Bronco
· Личное сообщение · #3

Vamit пишет:
но вывод в ГУИ неверный.

"зудис_зудис, где_ты_где_ты"
в сдк статик либ нет, намёков на апи не заметил пока, или у меня сдк не свежий, в снапе библы зудиса нет, есть парсер в сорцах отладчика.
где чего нажать, чтоб зудис проснулся?

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 25 февраля 2018 12:48
· Личное сообщение · #4

Bronco
Там исходники небольшие компилируются сразу в сам дбж.
Пока только такой вызов Zydis через командную строку dbg: zydis addr
дизасмит инструкцию по указанному адресу и выдает инфу в лог. Но в плаг можно подключить весь Zydis.

-----
Everything is relative...


| Сообщение посчитали полезным: Bronco


Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 25 февраля 2018 13:08 · Поправил: Bronco
· Личное сообщение · #5

Vamit пишет:
dbg: zydis addr

дас..феньк конечно, но в лог можно было бы и получше оформить, хотя бы так:
x64 BTC BX, 0xE7
Code:
  1.    ++++++( 1 )++++++
  2.    0000000130000023:
  3.    BTC BX, -0x19
  4.    instruction->size : 0x05 byte
  5.    CS_AC_READ | CS_AC_WRITE ( 3 )
  6.    x86->operands[0].type: X86_OP_REG
  7.    x86->operands[0].reg : X86_REG_BX
  8.    x86->operands[0].size: 0x02 byte
  9.    x86->operands[1].type: X86_OP_IMM
  10.    x86->operands[1].imm:  0xFFFFFFFFFFFFFFE7
  11.    REG WRITE:[0] X86_REG_RFLAGS (0x1b0000000002)|

mak пишет:
x64 btc bx,E7

та же самая ебала, ипать это подстава, мигрируем на зудис
хз значит надо имм сводит в инт. а что делать с имм где знака нет?
add
ахах, сюрпрайзы то не все, "BTC BX, -0x19" асмил через фейс дбг, в окне диза "btc bx,E7", куда теперь мигрировать?

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 25 февраля 2018 17:58 · Поправил: mak
· Личное сообщение · #6

Vamit пишет:
а Capstone уже почти год как не обновлялся.


Latest commit aeda70f 5 days ago

Vamit пишет:
!!!ошибка на размере 2го операнда, в итоге берется его значение FFE7 вместо требуемого E7


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

x86 - btc bx,E7
Code:
  1. cstool -d x32 "66 0F BA FB E7"
  2. 0  660fbafbe7                        btc        bx, -0x19
  3.         Prefix:0x00 0x00 0x66 0x00
  4.         Opcode:0x0f 0xba 0x00 0x00
  5.         rex: 0x0
  6.         addr_size: 4
  7.         modrm: 0xfb
  8.         disp: 0x0
  9.         sib: 0x0
  10.         imm_count: 1
  11.                 imms[1]: 0xffffffffffffffe7
  12.         op_count: 2
  13.                 operands[0].type: REG = bx
  14.                 operands[0].size: 2
  15.                 operands[1].type: IMM = 0xffffffffffffffe7
  16.                 operands[1].size: 2


x64 btc bx,E7
Code:
  1. cstool -d x64 "66 0F BA FB E7"
  2. 0  660fbafbe7                        btc        bx, -0x19
  3.         Prefix:0x00 0x00 0x66 0x00
  4.         Opcode:0x0f 0xba 0x00 0x00
  5.         rex: 0x0
  6.         addr_size: 8
  7.         modrm: 0xfb
  8.         disp: 0x0
  9.         sib: 0x0
  10.         imm_count: 1
  11.                 imms[1]: 0xffffffffffffffe7
  12.         op_count: 2
  13.                 operands[0].type: REG = bx
  14.                 operands[0].size: 2
  15.                 operands[1].type: IMM = 0xffffffffffffffe7
  16.                 operands[1].size: 2


Code:
  1. | 6A A7                        | PUSH    FFFFFFFFFFFFFFA7                                     |
  2. | 68 A7 00 00 00               | PUSH    A7                                                   |


x86 - push FFFFFFA7
Code:
  1. cstool -d x32 "6A A7"
  2. 0  6aa7                              push       -0x59
  3.         Prefix:0x00 0x00 0x00 0x00
  4.         Opcode:0x6a 0x00 0x00 0x00
  5.         rex: 0x0
  6.         addr_size: 4
  7.         modrm: 0x0
  8.         disp: 0x0
  9.         sib: 0x0
  10.         imm_count: 1
  11.                 imms[1]: 0xffffffffffffffa7
  12.         op_count: 1
  13.                 operands[0].type: IMM = 0xffffffffffffffa7
  14.                 operands[0].size: 4
  15.         Groups: not64bitmode

x64 - push FFFFFFA7
Code:
  1. cstool -d x64 "6A A7"
  2. 0  6aa7                              push       0xa7
  3.         Prefix:0x00 0x00 0x00 0x00
  4.         Opcode:0x6a 0x00 0x00 0x00
  5.         rex: 0x0
  6.         addr_size: 8
  7.         modrm: 0x0
  8.         disp: 0x0
  9.         sib: 0x0
  10.         imm_count: 1
  11.                 imms[1]: 0xa7
  12.         op_count: 1
  13.                 operands[0].type: IMM = 0xa7
  14.                 operands[0].size: 1
  15.         Groups: mode64


-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 25 февраля 2018 20:50
· Личное сообщение · #7

mak пишет:
вот новый тест на новой длл 5ти дневной давности

Ну практически всё то же самое, как были глюки, так и остались, только на х64
push А7 показывает правильно, но х64 я не смотрел, может там и раньше это работало.

-----
Everything is relative...





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 25 февраля 2018 20:50 · Поправил: Bronco
· Личное сообщение · #8

Vamit, тут наверное проще свитч тыкнуть при дизе инструкции, чем таблицы мутить, для эмуля больше же и не надо.
//исправил, так для кворда не потери данных
Code:
  1. switch (insn[i].detail->x86.operands->size)
  2. {
  3. case 1:
  4. if ((BYTE)insn[i].detail->x86.operands[1].imm < 0)
  5. sprintf(current->instruction->op_str, "%s, -0x%llx", 
  6. cs_reg_name(handle, current->instruction->detail->x86.operands->reg), 
  7. -1 * (BYTE)insn[i].detail->x86.operands[1].imm);
  8. current->instruction->detail->x86.operands[1].imm = (BYTE)insn[i].detail->x86.operands[1].imm;
  9. break;
  10. case 2:
  11. if ((WORD)insn[i].detail->x86.operands[1].imm < 0)
  12. sprintf(current->instruction->op_str, "%s, -0x%llx", 
  13. cs_reg_name(handle, current->instruction->detail->x86.operands->reg), 
  14. -1 * (WORD)insn[i].detail->x86.operands[1].imm);
  15. current->instruction->detail->x86.operands[1].imm = (WORD)insn[i].detail->x86.operands[1].imm;
  16. break;
  17. case 4:
  18. if ((DWORD)insn[i].detail->x86.operands[1].imm < 0)
  19. sprintf(current->instruction->op_str, "%s, -0x%llx", 
  20. cs_reg_name(handle, current->instruction->detail->x86.operands->reg),
  21.  -1 * (DWORD)insn[i].detail->x86.operands[1].imm);
  22. current->instruction->detail->x86.operands[1].imm = (DWORD)insn[i].detail->x86.operands[1].imm;
  23. break;
  24. case 8:
  25. if (insn[i].detail->x86.operands[1].imm < 0)
  26. sprintf(current->instruction->op_str, "%s, -0x%llx", 
  27. cs_reg_name(handle, current->instruction->detail->x86.operands->reg), 
  28. -1 * insn[i].detail->x86.operands[1].imm);
  29. current->instruction->detail->x86.operands[1].imm = insn[i].detail->x86.operands[1].imm;
  30. break;
  31. }

раньше ксед отказывал в асме, если в оп_стр было отрицательное число без знака (в 16ричном)
и вот прикол с асмом, где в инструкции с имм есть знак, я пока не знаю как разруливать.

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 25 февраля 2018 20:58
· Личное сообщение · #9

Bronco пишет:
в окне диза "btc bx,E7", куда теперь мигрировать?

Я же говорил что в окно диза выводится Zydis

Добавлено спустя 4 минуты
Bronco пишет:
где в инструкции с имм есть знак, я пока не знаю как разруливать

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

-----
Everything is relative...





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 25 февраля 2018 21:04 · Поправил: Bronco
· Личное сообщение · #10

Vamit, погоди, тут вздроч какой-то, зудис это диз, а я асемблю, причём сознательно в строке число со знаком,а в листинге дизасма, оно уже без знака.
упс...кажется вкурил, для каждого размера операнда свой предел максимального числа без знака.
для imm32 = 0x80000000, и тп.
add
Vamit,зачем так знущаться? BX - это слово, 2 байта. 0хFFE7, это тоже правильный формат, число со знаком.

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 12 апреля 2018 14:39 · Поправил: Bronco
· Личное сообщение · #11

обратил внимание что при cs_option() диз становиться шибко прожорлив с памятью.
что не так делаю? в отладчике сам файл то побольше.
выделил листинг на 3,5 мг, это порядка ляма инструкций
Code:
  1. err = cs_open(CS_ARCH_X86, (cs_mode)MODE, &cs_handle);
  2. cs_option(cs_handle, CS_OPT_DETAIL, CS_OPT_ON);
  3. count = cs_disasm_ex(cs_handle, (const uint8_t*)selectbin, (size_t)code_size, (int64_t)addr_start, (size_t)0, &insn);

после прохода апи, в памяти процесса порядка 2,5 гига.
это нормально?

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 12 апреля 2018 17:34
· Личное сообщение · #12

Bronco
Попробуй в цикле дизасмить меньшими блоками

-----
EnJoy!




Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 12 апреля 2018 18:47
· Личное сообщение · #13

Bronco пишет:
это нормально?

Да, он же, вроде, при детальном декодировании в каждую инструкцию чуть ли не из интеловских манов описание копирует.




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 12 апреля 2018 20:05
· Личное сообщение · #14

Jupiter пишет:
Попробуй в цикле дизасмить меньшими блоками

дык...)) смысл в том, чтобы всё и сразу, выделение кода ведь интерактивное.
rmn пишет:
при детальном декодировани

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 12 апреля 2018 20:23
· Личное сообщение · #15

Bronco пишет:
по самой структуре инстр, так не скажешь

Она не фиксированного размера. Выделяется необходимый буфер, в начале которого находится структура инстр (типа header), а в самой структуре хранятся указатели на данные после структуры.

| Сообщение посчитали полезным: Bronco


Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 13 апреля 2018 15:19
· Личное сообщение · #16

rmn пишет:
Она не фиксированного размера.

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 13 апреля 2018 16:46
· Личное сообщение · #17

Щас глянул - там даже без детальной инфы больше 200 байт на инструкцию выделяется.
Code:
  1. typedef struct cs_detail {
  2.          uint8_t regs_read[12];
  3.          uint8_t regs_read_count;
  4.          uint8_t regs_write[20];
  5.          uint8_t regs_write_count;
  6.          uint8_t groups[8];
  7.          uint8_t groups_count;
  8.  
  9.          union {
  10.                  cs_x86 x86;
  11.                  cs_arm64 arm64;
  12.                  cs_arm arm;
  13.                  cs_mips mips;
  14.                  cs_ppc ppc;
  15.                  cs_sparc sparc;
  16.                  cs_sysz sysz;
  17.                  cs_xcore xcore;
  18.          };
  19. } cs_detail;
  20.  
  21. typedef struct cs_insn {
  22.          unsigned int id;
  23.          uint64_t address;
  24.          uint16_t size;
  25.          uint8_t bytes[16];
  26.          char mnemonic[32];
  27.          char op_str[160];
  28.          cs_detail *detail;
  29. } cs_insn;


Bronco пишет:
но и такой мешок такскать нет желания

Зато в резюме добавишь модный сейчас пункт - bigdata




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 13 апреля 2018 20:42
· Личное сообщение · #18

rmn пишет:
добавишь модный сейчас пункт - bigdata

не полегчало..
тотал мигрейшен может выручит, но куда?

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 33.8 (посетитель), 11thx
Активность: 0.020.01
Статус: Участник

Создано: 14 апреля 2018 07:58
· Личное сообщение · #19

Bronco, используйте
Code:
  1. bool CAPSTONE_API cs_disasm_iter(csh handle, const uint8_t **code, size_t *size,uint64_t *address, cs_insn *insn);

размещая cs_insn, cs_detail на стеке.
Затем, если необходимо, конвертируйте в свои структуры, избавляясь от массивов

| Сообщение посчитали полезным: Bronco


Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 14 апреля 2018 08:47
· Личное сообщение · #20

awlost пишет:
избавляясь от массивов

феньк, мешок таскать не надо, уже хорошо, а структуру распишем

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 14 апреля 2018 21:54
· Личное сообщение · #21

Bronco, я же тебе ровно то же самое предложил в #12 )

Jupiter пишет:
Попробуй в цикле дизасмить меньшими блоками


-----
EnJoy!





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 14 апреля 2018 22:07
· Личное сообщение · #22

Jupiter,сорян, я то понял буквально, а про эту апи забыл, как то пробовал её в цикле, вроде по одной инструкции можно юзать, это дольше, но мешка такого нет..

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 18 апреля 2018 04:56
· Личное сообщение · #23

awlost пишет:
конвертируйте в свои структуры

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 14.3 (новичок), 5thx
Активность: 0.070
Статус: Участник

Создано: 18 апреля 2018 09:05
· Личное сообщение · #24

Здравствуйте) Возможно не слишком по теме, но как прикрутить этот диз к x64dbg? И стоит ли это того?




Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 18 апреля 2018 09:14
· Личное сообщение · #25

RoKZaR пишет:
но как прикрутить этот диз к x64dbg?

Оформить в виде плагина...

-----
IZ.RU




Ранг: 14.3 (новичок), 5thx
Активность: 0.070
Статус: Участник

Создано: 18 апреля 2018 09:27
· Личное сообщение · #26

Это я понял. Вопрос как реализовать?



Ранг: 9.0 (гость), 6thx
Активность: 0.030.02
Статус: Участник

Создано: 18 апреля 2018 10:18
· Личное сообщение · #27

RoKZaR пишет:
как прикрутить этот диз к x64dbg

Так он же там по дефолту используется в качестве дизасм-двига, не ? Или что изменилось ?!




Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 18 апреля 2018 10:20
· Личное сообщение · #28

Да вот интересно - зачем его прикручивать, если на странице x64Dbg он уже там? Во Features прописан как Fast disassembler (Capstone)

Добавлено спустя 2 минуты
Хотя из билдов вроде как он удалён (Remove capstone)

-----
IZ.RU




Ранг: 9.0 (гость), 6thx
Активность: 0.030.02
Статус: Участник

Создано: 18 апреля 2018 10:29
· Личное сообщение · #29

DenCoder пишет:
Во Features прописан как Fast disassembler (Capstone)

Беда, только что спросил в телеге, ответили, что используется Zydis:
_ttps://github.com/zyantific/zydis




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 18 апреля 2018 13:32
· Личное сообщение · #30

RoKZaR пишет:
И стоит ли это того?

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 14.3 (новичок), 5thx
Активность: 0.070
Статус: Участник

Создано: 18 апреля 2018 13:34
· Личное сообщение · #31

В этом и проблема. Почему нельзя выбрать Диз который хочется? Хочется испытать и выбрать для себя подходящий.


<< . 1 . 2 . 3 . 4 . 5 . >>
 eXeL@B —› Софт, инструменты —› Capstone - The Ultimate Disassembler
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати