passes: add mba scheme to Constants (and+or+add identity)
(a&b)+(a|b) = a+b, documented honestly: falls to the same symbolic
evaluator as xor/add/shift (every sub-expression is a foldable
LDC,LDC,BINOP triple), but defeats a pattern matcher hardcoded to one
opcode ("ldc,ldc,ixor = split constant"). Added to ConstantsConfig
default schemes.
Tests: mba_form_uses_and_or_add_not_a_single_binop, round-trip coverage
in int_forms_round_trip/long_forms_keep_shape.
This commit is contained in:
parent
550f62e473
commit
2b19ed6096
4 changed files with 133 additions and 10 deletions
|
|
@ -82,8 +82,14 @@ opaque-предикаты - условия, истинность которых
|
|||
- Шаблонный opaque-предикат (всегда один и тот же `A+B`) узнаётся
|
||||
паттерном - отсюда требование нескольких схем.
|
||||
|
||||
**Статус: готово** для `int`/`long` (`xor`/`add`/`shift` + opaque-предикаты);
|
||||
`float`/`double` не трогаются.
|
||||
**Статус: готово** для `int`/`long` (`xor`/`add`/`shift`/`mba` +
|
||||
opaque-предикаты); `float`/`double` не трогаются. `mba` (`(a&b)+(a|b)=a+b`,
|
||||
13.10.2026) не ломает честную оговорку выше - он раскрывается тем же
|
||||
символьным вычислителем, что и `xor`/`add`/`shift`. Разница в том, что
|
||||
бьёт: `xor`/`add` сворачиваются одним паттерном «два литерала + одна
|
||||
операция»; `mba` требует опознать саму тождество `and+or+add`, а не просто
|
||||
свернуть литералы - отсекает деобфускаторы с жёстко вшитым паттерном на
|
||||
один опкод, но не символьные вычислители.
|
||||
|
||||
## 4. Обфускация контрольного потока (`Flow`)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue