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

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


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

Создано: 19 октября 2017 13:52 · Поправил: mak
· Личное сообщение · #1



Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework based on QEMU.

Unicorn offers some unparalleled features:

Multi-architecture: ARM, ARM64 (ARMv8), M68K, MIPS, SPARC, and X86 (16, 32, 64-bit)
Clean/simple/lightweight/intuitive architecture-neutral API
Implemented in pure C language, with bindings for Crystal, Clojure, Visual Basic, Perl, Rust, Ruby, Python, Java, .NET, Go, Delphi/Free Pascal, Haskell and Pharo.
Native support for Windows & *nix (with Mac OSX, Linux, *BSD & Solaris confirmed)
High performance via Just-In-Time compilation
Support for fine-grained instrumentation at various levels
Thread-safety by design
Distributed under free software license GPLv2


Последний мастер - --> Link <--
Последний релиз Version 1.0.2-rc4 (30.06.2020) - --> Link <--

Code:
  1. Version 1.0.2-rc4
  2.  
  3. This version fixes some issues and improves over v1.0.2-rc3.
  4.  
  5. No longer require Python to build
  6. Fix recursive UC_HOOK_MEM callbacks for cross pages access
  7. Remove UC_ERR_TIMEOUT, so timeout on uc_emu_start() is not considered error
  8. Added UC_QUERY_TIMEOUT to query exit reason
  9. Fix UAF when deleting hook while in hook callback
  10. Ensure that hooks are unaffected by a request to stop emulation.
  11. Fix block hooks being called twice after an early exit from execution.
  12. Fix binding install on python2 (MacOS)
  13. X86:
  14. Support read/write STn registers
  15. Support read/write X64 base regs
  16. ARM64:
  17. Support some new registers


Сборка - следуем указанию в --> Link <--

Code:
  1.  MINGW64 /n
  2. $ cd msys64/unicorn
  3.  
  4. @PC MINGW64 /n/msys64/unicorn
  5. $ ./make.sh cross-win64
  6. cd qemu && \
  7. ./configure --cc="x86_64-w64-mingw32-gcc" --extra-cflags="-DUNICORN_HAS_X86 -DUNICORN_HAS_ARM -DUNICORN_HAS_M68K -DUNICORN_HAS_ARM64 -DUNICORN_HAS_MIPS -DUNICORN_HAS_MIPSEL -DUNICORN_HAS_MIPS64 -DUNICORN_HAS_MIPS64EL -DUNICORN_HAS_SPARC " --target-list="x86_64-softmmu, arm-softmmu, m68k-softmmu, aarch64-softmmu, mips-softmmu, mipsel-softmmu, mips64-softmmu, mips64el-softmmu, sparc-softmmu,sparc64-softmmu," --disable-stack-protector

*Если MINGW64 Портабельный то здесь нужно указать полный путь с названием диска $ cd c:/msys64/unicorn

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


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


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

Создано: 28 августа 2019 08:30 · Поправил: DenCoder
· Личное сообщение · #2

Bronco
Примерно, как я эмулил VMOV. Читаем доку на проц по инструкциям, пишем декодинг, ставим хук на каждую инструкцию, где по опкодам выделяем содержащую регистр инструкцию, эмулим, регистр запоминаем где-нить внутри. Костыль, конечно, но временная мера, если очень надо
Code:
  1. #coding=iso-8859-1
  2.  
  3. from __future__ import print_function
  4. from unicorn import *
  5. from unicorn.arm_const import *
  6. #from capstone.arm_const import *
  7. #from allins import *
  8. #import idaapi
  9. #import idautils
  10. #import idc
  11. from cmnFuncs import *
  12.  
  13. #A1 encoding
  14.  
  15. def getDwField(dw, e, s = -1):
  16.          if(== -1): return (dw >> e) & 1
  17.                  
  18.          if(< s or s < 0): return 0
  19.                  
  20.          return (dw >> s) & ((2 << (- s)) - 1)
  21.  
  22. #own version of Replicate()
  23. def Replicate(val, bits):
  24.          return val | (val << bits)
  25.  
  26. def Rep8Bit8Times(imm8, n = 0):
  27.          if(== 7): return (imm8 & 1) * 0xff
  28.          return (Rep8Bit8Times(imm8 >> 1, n + 1) << 8) | (imm8 & 1) * 0xff
  29.  
  30. def AdvSIMDExpandImm(op, cmode, imm8):
  31.          if((cmode & 0xe) == 0): return Replicate(imm8, 32)
  32.          if((cmode & 0xe) == 2): return Replicate(imm8 << 8, 32)
  33.          if((cmode & 0xe) == 4): return Replicate(imm8 << 16, 32)
  34.          if((cmode & 0xe) == 6): return Replicate(imm8 << 24, 32)
  35.          if((cmode & 0xe) == 8): return Replicate(Replicate(imm8, 16), 32)
  36.          if((cmode & 0xe) == 0xa): return Replicate(Replicate(imm8 << 8, 16), 32)
  37.          if(cmode == 0xc): return Replicate((imm8 << 8) | 0xff, 32)
  38.          if(cmode == 0xd): return Replicate((imm8 << 16) | 0xffff, 32)
  39.  
  40.          if(cmode == 0xe):
  41.                  if(op == 0): return Replicate(Replicate(Replicate(imm8 << 8, 8), 16), 32)
  42.                  return Rep8Bit8Times(imm8)
  43.          
  44.          if(op == 0):
  45.                  #imm8<7>:NOT(imm8<6>):Replicate(imm8<6>,5):imm8<5:0>:Zeros(19)
  46.                  imm32 = (((imm8 & 0x80 | 0x40) << 24) - ((imm8 & 0x40) << 19)) | ((imm8 & 0x3f) << 19)
  47.                  return Replicate(imm32, 32)
  48.          
  49.          #imm8<7>:NOT(imm8<6>):Replicate(imm8<6>,8):imm8<5:0>:Zeros(48)
  50.          return (((imm8 & 0x80 | 0x40) << 56) - ((imm8 & 0x40) << 48)) | ((imm8 & 0x3f) << 48)
  51.          
  52. #return value:
  53. #        1 - test passed
  54. #        0 - test not passed
  55. #        -1 - UNDEFINED
  56. #надо реализовать аналогичную версию с возвращением типа инструкции, а не тестом, та или нет инструкция
  57. #под код по маске попадают сразу несколько инструкций, не только VMOV
  58. #зависит от op и cmode
  59. #но пока так
  60. def emu_vmov_imm(dw, mu = None):
  61.          code = 0xf2800010
  62.          mask = 0xfeb80090
  63.          
  64.          if((dw & mask) != code): return 0
  65.                  
  66.          op = getDwField(dw, 5) #op = dw<5>
  67.          cmode = getDwField(dw, 11, 8) #cmode = dw<11:8>
  68.          
  69.          if(op == 0):
  70.                  if((cmode & 1) and (cmode & 0xc) != 0xc): # VORR imm
  71.                         return 2
  72.          elif(cmode != 0xe): # other encodings
  73.                  return 3
  74.          
  75.          Q = getDwField(dw, 6) #Q = dw<6>
  76.  
  77.          Vd = getDwField(dw, 15, 12) #Vd = dw<15:12>
  78.          if(== 1 and (Vd & 1) == 1):
  79.           return -1
  80.          
  81.          if(mu is None): #тест пройден
  82.                  return 1
  83.          
  84.          #эмуляция
  85.          D = getDwField(dw, 22) #D = dw<22>
  86.          d = (<< 4) + Vd
  87.  
  88.          #i = dw<24>, imm3 = dw<18:16>, imm4 = dw<3:0>
  89.          i = getDwField(dw, 24)
  90.          imm3 = getDwField(dw, 18, 16)
  91.          imm4 = getDwField(dw, 3, 0)
  92.          imm8 = (<< 7) | (imm3 << 4) | imm4
  93.          imm64 = AdvSIMDExpandImm(op, cmode, imm8)
  94.          
  95.          #In AArch 32 state
  96.          #Smaller registers are packed into larger registers
  97.          #D16-D31 pack into Q8-Q15. For example, D16 and D17 pack into Q8
  98.          mu.reg_write(UC_ARM_REG_D0 + d, imm64)
  99.          if(== 1):
  100.                  mu.reg_write(UC_ARM_REG_D0 + d + 1, imm64)
  101.                  imm128 = Replicate(imm64, 64)
  102.                  print("VMOV Q%d, 0x%x" %(/ 2, imm128))
  103.                  val = (mu.reg_read(UC_ARM_REG_D0 + d) << 64) | mu.reg_read(UC_ARM_REG_D0 + d + 1)
  104.                  if(val != imm128): print("Values distincts")
  105.          else:
  106.                  print("VMOV D%d, 0x%x" %(d, imm64))
  107.                  val = mu.reg_read(UC_ARM_REG_D0 + d)
  108.                  if(val != imm64): print("Values distincts")
  109.  
  110.          return 4
  111.  
  112. #res = emu_vmov_imm(Dword(ScreenEA()))
  113.  
  114. #if(res == 1): print("This is VMOV")
  115. #elif(res == 0): print("This is not known Advanced SIMD instruction")
  116. #elif(res == 2): print("This is VORR")
  117. #elif(res == 3): print("This is Advanced SIMD instruction of other encoding")
  118. #elif(res == 4): print("VMOV emulation done")
  119. #elif(res == -1): print("Undefined")


-----
IZ.RU


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


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

Создано: 28 августа 2019 11:11
· Личное сообщение · #3

Bronco пишет:
хз как это эмулить, получать то не от куда


Code:
  1. /* 0F 01 D0 */
  2. void BX_CPP_AttrRegparmN(1) BX_CPU_C::XGETBV(bxInstruction_c *i)
  3. {
  4. #if BX_CPU_LEVEL >= 6
  5.   if(! BX_CPU_THIS_PTR cr4.get_OSXSAVE()) {
  6.     BX_ERROR(("XGETBV: OSXSAVE feature is not enabled in CR4!"));
  7.     exception(BX_UD_EXCEPTION, 0);
  8.   }
  9.  
  10.   // For now hardcoded handle only XCR0 register, it should take a few
  11.   // years until extension will be required
  12.  
  13.   if (ECX != 0) {
  14.     if (ECX == 1 && BX_CPUID_SUPPORT_ISA_EXTENSION(BX_ISA_XSAVEC)) {
  15.       // Executing XGETBV with ECX = 1 returns in EDX:EAX the logical-AND of XCR0
  16.       // and the current value of the XINUSE state-component bitmap.
  17.       // If XINUSE[i]=0, state component [i] is in its initial configuration.
  18.       RDX = 0;
  19.       RAX = get_xinuse_vector(BX_CPU_THIS_PTR xcr0.get32());
  20.     }
  21.     else {
  22.       BX_ERROR(("XGETBV: Invalid XCR%d register", ECX));
  23.       exception(BX_GP_EXCEPTION, 0);
  24.     }
  25.   }
  26.   else {
  27.     RDX = 0;
  28.     RAX = BX_CPU_THIS_PTR xcr0.get32();
  29.   }
  30. #endif
  31.  
  32.   BX_NEXT_INSTR(i);
  33. }


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


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


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

Создано: 28 августа 2019 15:55
· Личное сообщение · #4

DenCoder пишет:
если очень надо

прежде чем постить, конечно же погрузился в талмуд..))
но мониторить на хуке, по ходу в первую очередь надо не саму инструкцию "XGETBV", а то что раньше переключало контекст AVX(XSAVE/XRSTOR). А в стыренном теле под виртой этого нет.
если с первым битом регистра xcr0 понятно, при саппорте проца и ОС, он всегда равен зеро, то со вторым битом я пока не разобрался. В энуме uc_x86_insn, набор AVX есть, но видимо это тупо пошло прицепом из энума диза.
Собственно для полноценной эмуляции цпу в юникорне дофуя чего ещё нужно, а у меня задача тупо хапнуть трассу с конкретного стыренного тела. Чтобы процесс эмуля не завершался, чего то надо тыкнуть в EDX, и переступить инструкцию...

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





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

Создано: 23 октября 2019 19:05
· Личное сообщение · #5

хм...обновился

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


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


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

Создано: 27 декабря 2019 01:42
· Личное сообщение · #6

Unicorn Engine tutorial - --> Link <--

In this tutorial you will learn how to use Unicorn Engine by solving practical exercises. There are 4 exercises and I will solve the first exercise for you. For the others I am providing hints and solutions, which you can obtain by clicking the spoiler buttons.

Fast FAQ:

What is Unicorn Engine?
It is an emulator. Not usual though. You don’t emulate whole program or system. Also, it doesn’t support syscalls. You have to map memory and write data into it manually, then you can start the emulation from a chosen address.

When is it useful?
You can call an interesting function from the malware, without creating a harmfull process
CTF’s
Fuzzing
Plugin for gdb that predicts the future, for example further jumps.
Emulating obfuscated code.
What do I need to have installed for this tutorial?
Unicorn Engine with python binding
A disassembler

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


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


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

Создано: 11 апреля 2020 19:15
· Личное сообщение · #7

хм.. по ходу рид_врайт для XMMWORD в 2 захода по 64 бита.
получается что для YMMx будет 4?
это такая фича, или косяк, или где то в настройках?

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





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

Создано: 18 мая 2020 14:18 · Поправил: Bronco
· Личное сообщение · #8

в свежем релизе всё таки что то пофиксили.
была пара семплов, сейчас на них всё тип-топ.
но у меня посыпались UC_MEM_FETCH, на обычных переходниках.
как то uc_mem_map_ptr работает не так, как раньше.
Code:
  1. в листинге отдладчика
  2. SGDT TWORD PTR DS:[0x000000014A23E324]
  3. при нажатие спейса
  4. SGDT TBYTE PTR DS:[0x000000014A23E324]
  5. капс
  6. SGDT [RIP - 0xB8FC89]

типа камень в огород зудиса.
асм джит енкодит только выхлоп капса.
странно конечно, ибо tword ptr в джите прописан.
кейстоун энкодит с tbyte ptr, и с fword ptr, билдер с++ только pword ptr.
в общем пиздец синхронизация...)))
вопрос по сабжу, что не так настроил (uc_x86_mmr), или SGDT эмулить надо самому?
чтобы заполнить структуру uc_x86_mmr юзаем интрик _sgdt(&gdtr);
----------
XGETBV - уникорн до сих пор не знает длины, ловить на хуках бесполезно.
с такой длинной uc_mem_read выдаёт ошибку, и нифуя не читает.
регистров XCR0&XCR1 то же не наблюдается...
пока решение старое, если даёт длину ого-го, подключать капс и костылить..
Code:
  1.          unsigned int ecx = 0;//XCR0 or XCR1?
  2.          uc_reg_read(uc, UC_X86_REG_ECX, &ecx);
  3.          unsigned __int64 rax = _xgetbv(ecx);
  4.          uc_reg_write(uc, UC_X86_REG_EAX, &rax);
  5.          rax = 0;
  6.          uc_reg_write(uc, UC_X86_REG_EDX, &rax);
  7.          uint64_t rip = address + 3;
  8.          uc_reg_write(uc, UC_X86_REG_RIP, &rip);

ну и наверно риторический вопрос, нафуя нужны рег CR0 -CR10, если запрос доступен только в режиме ядра, и то не для всех регистров?

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


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


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

Создано: 31 мая 2020 12:41
· Личное сообщение · #9

Version 1.0.2-rc4

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

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


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

Ранг: -13.0 (нарушитель), 8thx
Активность: 0.24=0.24
Статус: Участник

Создано: 31 мая 2020 19:20
· Личное сообщение · #10

Выше mak давал ссылку на > Unicorn Engine tutorial <.

Есть перевод (правда не до конца, но все же). Может кому будет интересно.
--> Первые шаги с Unicorn Engine <--

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


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

Создано: 01 июня 2020 22:14
· Личное сообщение · #11

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

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


| Сообщение посчитали полезным: SReg, dma/sty, ARCHANGEL


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

Создано: 02 июня 2020 19:38
· Личное сообщение · #12

Bronco

Объясните зачем нужна железячная эмуляция на той же самой архитектуре, что и целевое апп, ведь достаточно выполнить напрямую. Ты вот лично с этими виртами так же не осилил задачу Vamit, как все остальные. Что там было не помню, вмпрот вроде.

-----
vx





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

Создано: 02 июня 2020 20:18
· Личное сообщение · #13

difexacaw пишет:
ведь достаточно выполнить напрямую

смысл не в том как исполнять, а контроль и получение нужной инфы в процессе исполнения, и желательно быстро.
он не эмулит железо, при правильных настройках, он практически эмулит среду ОС.
твой визор 3 часа дрючил тупо загрузочный код, с одной лишь задачей, выйти на оригинальный стаб.
задачу ставили тебе, ведь ты перья распускал, да собственно и сейчас задираешься,
сабж включая ещё 2 двига (диз и асм), за 3 минуты эмулит исполнение до 300 лямов инструкций, и это с фильтрацией, рипом в бинарь и логированием.

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


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


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

Создано: 02 июня 2020 22:10 · Поправил: difexacaw
· Личное сообщение · #14

Bronco

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

> задачу ставили тебе, ведь ты перья распускал, да собственно и сейчас задираешься,
> сабж включая ещё 2 двига (диз и асм), за 3 минуты эмулит исполнение до 300 лямов инструкций

> визор 3 часа дрючил

Нет, он 4 часа при 4-х запусках крутил. 3600*1.5M/s ~ 5.3Gips

1.6M Ip/sec получается. Это пропускная способность никакая, на фолтах в км быстрее. У дий профайл был на момент запуска ~1.44M/s при всех включённых механизмах(на удивление число аналогичное, можешь сам проверить), адресной трансляции и кучи мониторов. Если бы сабж работал, то ты им бы крутил то же самое время.

Профайл бт порядка 0.15G/s, сохранение контекста его даже если снижает на порядок, то это всё равно на порядок быстрее. Причём не тупо эмуляция, а полная работа в системе. Крутни и покажи что это хоть как то работает и для чего то пригодно, msgbox ?

-----
vx





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

Создано: 03 июня 2020 12:19 · Поправил: Bronco
· Личное сообщение · #15

difexacaw пишет:
Это пропускная способность никакая, на фолтах в км быстрее.

хз...у тебя вывод в консоль или на диск, а у меня вывод в кьютвиджет, + доуевент с гуем отладчика, естественно потери тайма будут.
и если статистика по таймингу для эмуляции (исполнение) такого кол-ва строк, не превышает 2-3 минут, для меня это приемлемо.
тот же титан, растягивает это удовольствие больше чем на сутки, а может и более..., вот это реально просадка.
difexacaw пишет:
А какой толк тупо от потока инструкций, его эмуляции

у меня первичная задача получить линейный код, конкретного участка из приложения.
и я фильтрую трансферы за пределы страницы.
difexacaw пишет:
Крутни и покажи что это хоть как то работает и для чего то пригодно, msgbox ?

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

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





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

Создано: 08 июня 2020 20:57 · Поправил: difexacaw
· Личное сообщение · #16

Bronco

> у тебя вывод в консоль или на диск

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

> 2-3 минут, для меня это приемлемо.

Так у тебя за это время проходит 270Mips, это что асп запускается на столь низком числе итераций(могу тебе статистику по всем снять)

> собери и посмотри для чего можно юзать.

Зачем мне собирать всякий мусор, если можно спросить. Прямая адресная трансляция, без каких либо выгрузок контекста, прямой замер кэша - 150Mip/s. Это при совершенной реализации на IA, оптимизация врядле возможна. Сурки паблик на васм.

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

Консольный IPC доли секунд занимает, очём вообще речь. Гуй это очередь сообщений, апп может ждать своего сколь угодно долго. Поэтому для замеров никакие события системы не юзаются никогда я говорил.

> и я фильтрую трансферы за пределы страницы.

Через ловушки походу ?

Адресный декодер возвращает размер выборки, конечно можно юзать всякий самопал типо диз движков, но ни один из них на сколько знаю подробности по выборке не возвращает. Только ксед. Чем же ты определишь к примеру размер выборки fld, капстоном, есчо кучей примитивных дизов

- нет конечно, ставь ловушки и лови события 0,2Mip/s месяц асп придётся крутить

-----
vx





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

Создано: 09 июня 2020 03:09 · Поправил: Bronco
· Личное сообщение · #17

difexacaw пишет:
апп может ждать своего сколь угодно долго

чтоб да, так нет..))
чуть дольше, и гуй дбг может залипнуть... и....на долго, если не на совсем...))
difexacaw пишет:
Тайминг снимается всегда на потоке инструций в цикле, за исключением сервисных/прерываний и прочих системных событий.

ну это твоё утверждение, а у меня общий тайминг, до завершения текущей задачи. и ~1.5 лямов rip/c меня вполне пока устраивает.
пусть у тебя в 100 раз или более быстрее, что изменится за мои "лишние 2 минуты"?
difexacaw пишет:
Через ловушки походу ?

хз... это же не гипервизор, где надо подстраиваться под нужные события(vmexit), и зачем трапы, если в сабже rip под контролем?
difexacaw пишет:
Зачем мне собирать всякий мусор, если можно спросить.

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

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





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

Создано: 09 июня 2020 19:37 · Поправил: difexacaw
· Личное сообщение · #18

Bronco

> на порядок быстрее твоего двига.

На какой порядок, если у тебя тайминг аналогичный как при копировании в буфера. У бин трансляции на порядки выше(вся затыка в адресной трансляции, на васм есть тема - оптимальный вариант это лишь несколько уровней транс таблиц(<=3), иначе на выборке и синхронизациях профайл сядет. Все прочие существующие dbi это и близко не используют, два потока и встанет колом весь гуй и все циклы). Придлагали использовать хэш таблицы - это невозможно сделать, так как сама таблица должна покрывать всё ап.

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

-----
vx





Ранг: 77.2 (постоянный), 73thx
Активность: 0.190.15
Статус: Участник

Создано: 09 июня 2020 21:44 · Поправил: sefkrd
· Личное сообщение · #19

у меня есть конкретные замеры
??
Выложи семпл
??




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

Создано: 10 июня 2020 00:39
· Личное сообщение · #20

difexacaw пишет:
Не имеет смысла это обсуждать, у меня есть конкретные замеры, у тебя их нет.

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

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





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

Создано: 10 июня 2020 20:59 · Поправил: difexacaw
· Личное сообщение · #21

Bronco

Тоесть семпла нет!?

И остальная чушь тобой написана безосновательно, да я так и думал(профайл в точности как у дий - этого невозможно как совпадение, ты тупо взял известные цифры). Придётся самому это дерьмо собирать, загружать всякие компилеры. А после сборки это не заведётся, ты же сам выше говорил. Незачем таскать всякое дерьмо толстое, в юм достаточно прямого исполнения. Эмуляция не нужна(трансляция быстрее эмуляции, тем более в таком колхозном жирном виде).

-----
vx





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

Создано: 10 июня 2020 21:44 · Поправил: Bronco
· Личное сообщение · #22

difexacaw, мне пох, как ты коментишь мои посты, искать сказанное ранее, не буду, лучше повторюсь - я не ведусь на понты, а на дешёвые так тем более.
моя задача решается сабжем в пределах минут, хотя апп под виндой стартует до 2-3 минут, прежде чем что то отрисует.
и как семпл, он тебе вряд ли подойдёт. твой уровень это крякми не более 100 кило, с твоих же слов.
твоя задача растянута на часы, и тебе с этим жить. а эмуляция или трансляция, это уже частности.

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





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

Создано: 10 июня 2020 22:05 · Поправил: difexacaw
· Личное сообщение · #23

Bronco

> моя задача решается сабжем в пределах минут

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

> твой уровень это крякми не более 100 кило, с твоих же слов.

Очередной бред, отображением в память система занимается и 0.1M это ниочем. Прекрати курить дурь.

Если же аргумента нет, то скажи честно что слился. Это даже не новость, не ты один а сразу все.

-----
vx





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

Создано: 11 июня 2020 01:16
· Личное сообщение · #24

difexacaw пишет:
Очередной бред,

difexacaw пишет:
Прекрати курить дурь.

difexacaw пишет:
скажи честно что слился.

вот если твое_личное_наболевшее убрать, то то что останется, просто фееричное гавно, типо - в лучшем случае это всеми любимый upx
как всегда, сам придумал, сам и радуешься...
найди мне упых, который стартует больше 2х минут..
и ваще, очнись, топ про сабж, а не про задачку которую ты крутил каким то гавнокодом 4 часа не понятно за чем.

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





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

Создано: 12 июня 2020 20:16 · Поправил: difexacaw
· Личное сообщение · #25

Bronco

> который стартует больше 2х минут..

Я тебя рассматриваю как деревенского парня который как и все такие не способен к элементарным расчётам. Какая же там школа

Зная на основе данных выше скорость трассировки 1.6Mips можно всё посчитать. Вот сейчас посмотрел upx - апп не важно, визор выдаёт число инструкций до EP(AI это обружена абсолютная выборка при этом событии выведено число IP's и произошёл останов; повторные запуски не изменяют количество инструкций что значит что это статик стаб, не полиморф/метаморф и тп, он тупо fixed).

6.2Mips получается в upx до OEP.

У тебя профайл 1.6Mips, значит upx запускается ~4sec.

> 2х минут.

Соответственно это обычный примитивный софт. Тот же семпл с тем же профайлом 1.5Mips будет крутится ~1 час у тебя.

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

c5a7_12.06.2020_EXELAB.rU.tgz - upx.png

-----
vx





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 12 июня 2020 20:29
· Личное сообщение · #26

Bronco
Ты помечай хотя б сарказм, стёб и тд тегами. Смотри, что ты наделал, вот взял и запутал человека, а он теперь старается, какие-то рисунки выкладывает. Счётчик скачиваний бы прикрутить...




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

Создано: 12 июня 2020 20:50 · Поправил: difexacaw
· Личное сообщение · #27

Archer

Он приводит противоречивые данные, не реальные. На попытку обсудить технически с замерами идёт в ответ поток говна. Это мне одному ясно ?

> какие-то рисунки выкладывает.

У тебя нет инструмента что бы такой рисунок" сделать между прочим

-----
vx




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 12 июня 2020 20:55
· Личное сообщение · #28

difexacaw пишет:
У тебя нет инструмента что бы такой рисунок" сделать между прочим

Учитывая что вложения сломаны и твой png нулевого размера, думаю что есть




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

Создано: 12 июня 2020 21:04 · Поправил: difexacaw
· Личное сообщение · #29

VOLKOFF

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

--> Link <--

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

-----
vx





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

Создано: 12 июня 2020 21:20
· Личное сообщение · #30

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

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





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

Создано: 12 июня 2020 21:31 · Поправил: difexacaw
· Личное сообщение · #31

Bronco

Так что всё слив не ты первый вы все слились. Если ты приводишь стату то её непременно проверят и вычислят; да там 3-го класса математика ппц. Ты работал с апп не накрытым сложным протектором, которые крутить нужно долго.

Но суть то в ином, лишь только я могу крутить апп до условия(критерия) EP. Потому что я его сформулировал и реализовал. Ты ничего про OEP не знаешь.

-----
vx



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


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