Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Miasm defcon russia 23

903 views

Published on

defcon russia 23

Published in: Technology
  • Be the first to comment

Miasm defcon russia 23

  1. 1. July 2015 How to add new arch in miasm mslc university
  2. 2. miasm ✤ Фреймворк для reverse engineering написаный на Python ✤ Реализованы ассемблер, дизассемблер, транслятор в промежуточное представление, символьное выполнение и симулятор c JIT ✤ Умеет упрощать выражения (деобфускация) ✤ Умеет генерировать запросы к STP ✤ Жутко медленный :(
  3. 3. Текущие задачи RE. Почему не IDA? ✤ Анализ новых архитектур со всем существующим набором инструментов и методов ✤ Нужна деобфускация ✤ Нужно анализировать связку библиотек в одном адресном пространстве ✤ Нужно анализировать разные версии одной библиотеки (bindiff) ✤ Нужно декомпилировать в С (большие проекты) ✤ Нужно проверять какие значения могут быть у переменных ✤ Data mining
  4. 4. Что такое дизассемблер? ✤ декодирование бинарных данных в соответсвующие имеющие смыслы поля (опкоды, аргументы и т.п.) ✤ визуальное представление этих полей
  5. 5. Что такое ассемблер? ✤ синтаксический анализ текста ✤ выделение из нее идентификаторов ✤ кодирование их в двоичную форму
  6. 6. Что такое симулятор? ✤ хранение контекста выполнения (регистры, память) ✤ обновление контекста (выполнение команды) ✤ while True:
 inst = get_instruction(PC)
 execute_instruction(inst, context)
  7. 7. Что такое символическая запись? ✤ Запись в виде математической формулы ✤ add R1, R2
 mul R1, 4
 add R1, 0x100 ✤ R1: ((R1_init+R2_init)*4)+0x100
  8. 8. Шаблон архитектуры commit d8b79aeb6e92de3df0abd03d6de30cc439952dfe Author: snk <snk@ctf.su> miasm2/analysis/machine.py | 10 +++- miasm2/arch/hc16/__init__.py | 4 ++ miasm2/arch/hc16/arch.py | 131 ++++++++++++++++++++++++++ miasm2/arch/hc16/disasm.py | 10 ++++ miasm2/arch/hc16/regs.py | 32 +++++++++++ miasm2/arch/hc16/sem.py | 36 ++++++++++++ test/arch/hc16/arch.py | 41 ++++++++++++++ test/arch/hc16/sem.py | 54 ++++++++++++++++++
  9. 9. Самый минимум ✤ Добавить запись об архитектуре в
 miasm2/analysis/machine.py ✤ Определить регистры в
 miasm2/arch/hc16/regs.py ✤ в miasm2/arch/hc16/arch.py
 class instruction_hc16(cpu.instruction)
 class mn_hc16(cpu.cls_mn) ✤ Зарегистрировать дизасемблер (прослойка к дефолтному)
 miasm2/arch/hc16/disasm.py ✤ Зарегистрировать транслятор в IR
 miasm2/arch/hc16/sem.py ✤ Тесты!
  10. 10. Первые команды ✤ def hc16_op(name, fields, args=None, alias=False):
 dct = {"fields": fields, "alias":alias}
 if args != None:
 dct['args'] = args 
 type(name, (mn_hc16,), dct) ✤ hc16_op("nop", [bs(‘0010011101001100')]) ✤ hc16_op("ldab", [bs(‘01110101’), imm8])
  11. 11. Первые команды DEMO
  12. 12. Аргументы инструкции ✤ class m32r_reg(cpu.reg_noarg, cpu.m_arg):
 reg_info = gpregs
 parser = reg_info.parser ✤ class m32r_imm(cpu.imm_noarg):
 parser = cpu.base_expr
 def fromstring(self, s, parser_result=None)
 def decode(self, v)
 def encode(self)
  13. 13. Аргументы инструкции ✤ arg_R = cpu.bs(l=4, cls=(m32r_gpreg,)) ✤ arg_dR = cpu.bs(l=4, cls=(m32r_deref_reg,)) ✤ arg_pcdisp8 = cpu.bs(l=8, cls=(m32r_pcdisp8,), fname="pcdisp", order=-1) ✤ arg_imm8 = cpu.bs(l=8, cls=(m32r_imm8,), fname="imm", order=-1)
  14. 14. Аргументы инструкции DEMO
  15. 15. Символьное выполнение ✤ @sbuild.parse
 def add(Rdest, Rsrc):
 Rdest = Rdest + Rsrc ✤ Все :)
  16. 16. Символьное выполнение ✤ def bc(target):
 next = ExprId(ir.get_next_instr(instr))
 PC = target if C else next
 IRDst = PC
 
 def ld(ir, instr, Rdest, Rsrc):
 instr_ir = []
 Rmem = instr.get_mem_expr(Rsrc).arg
 instr_ir.append(ExprAff(Rdest, ExprMem(Rmem)))
 if instr.is_post_inc():
 instr_ir.append(ExprAff(Rmem, ExprOp('+', Rmem, ExprInt(int32(4)))))
 return instr_ir, []

  17. 17. Символьное выполнение DEMO

×