Покопался в логах, короче засада. Это походу не решаемая задача без наглядного графа,
прикинул как его реализовать.
На том семпле сыпет 11к pushf, найти нужный пока нереал, это если проверка идет через флаги.
Посмотрел ввод данных:
Посмотреть вложение 1391
- ожидаемо идет линейная выборка p-code с ветвлениями в нем. Откинул последние два десятка страниц с лин. выборкой(справа). Так тоже ничего не выйдет.
Такого рода задачи, где нет датасета нечем решать
Про рандом так никто не ответил, есть ли смысл попытаться отключить?
Можно искать еще таким способом:
1) Найти все pushfd
2) Прочитать состояние флагов
4) Пробежатся по коду и найти все call-ы и jmp-ы, потом отсеить повторяющие call-ы и jmp-ы(можно обойтись и без этого, хотя нужно, так ты исключишь множество повторении)
5) Зависти счетчик для каждого pushfd и считать сколько раз он вызывается на каждом участке кода
6) И искать флаги в тех местах, где меньше все он вызывался определив это по счетчику
Ну, соответственно нужно написать свой отладчик, чтобы читать флаги и ставить бряки на каждом pushfd
Можно счетчик сделать при помощи бряков, это если не использовать call, jmp.
Если call r32 такие, и jmp r32 , то на них можно тоже поставить бряки и ловить все адреса на которые прыгает и вызывает.
Если это протектор, то может стоять защита на целостность кода, тогда тебе нужно будет читать постояно все регистры чтобы определить адрес участка памяти, который читает CRC калькулятор и стирать бряк в том месте, где он читает, потом ставить обратно.
Проблема только в том, что это очень медленно, но работает.
Логично, зачем сталобыть программе читать свой код, значит это какая-то защита.
В любом случае будь зашифрованный адрес или нет, все равно раноли поздно протектор адрес положет в регистр, потому как это требует синтаксис языка ассемблера
Будь там ModRM вида lea, mov, stosb и тд все равно узнаешь.
Главное решить вопрос с защитой целостности кода, а остальное это ерунда, тогда можно многое узнать.
Вариантов множество, это только один из них.
Можно при помощи счетчиков найти еще участки кода(где pushfd), которые не вызываются, достаточно отсеить все нули в счетчике.
Все зависит от конкретной задачи!!
Есть один трюк, который я нашел путем долгого лазанью в VMProtect, при помощи которого можно быстро выходить с долгих, бесконечных jmp-ов циклов. Ну я его потом покажу, потому как нужно показывать его, может видео скорее всего запишу покажу. Работает на 99%.
Немножко кодинга и трюк работает.
Я щас как раз занимаюсь
https://www.elcomsoft.ru/archpr.html этой программой, там защиту поменяли.