eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: SDK (+8 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Критерий EP.
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 1 ноября 2018 19:37 New!
Цитата · Личное сообщение · #1

Здрасте.

Меня некоторое время небыло, за это время я немного" покопался в протекторах.

Задача:
Определение критерия EP после криптования.

Задача весьма сложна, даже очень сложна.

Доработан мотор для обката всяких пакеров/крипторов и прочих поделок. Смысл задачи - протектор бывает двух типов, это использующий кастомную загрузку, либо её не использующий. Это значит что до запуска оригинального образа выполняется иной образ, в пределах проекции. Изначально критерий, который определяет стартап адрес(EP) - абсолютная адресация. Первое событие абсолютной(AI) индирект выборки данных есть событие стартап образа. Но проблема в том, что для части протекторов есть аналогичное событие(релоцируемый образ).

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

Решение искалось из абстрагированной идеи что происходит загрузка двух идентичных модулей, это далее позволит возможно найти решение. События загрузки таких копий могут быть обнаружены лишь по адресным лимитам, те образ как единое целое не релоцируем, данные от кода не отличимы, а значит невозможно внедриться в промежуток между ними - декриптор может быть дописан лишь в конец образа, за пределы секций code/data. И таким образом может быть как то можно по последовательности выборок в память определить передачу управления на второй модуль(EP). Но это всё не точно.

Нужен свежий взгляд.


Ранг: 211.2 (наставник)
Статус: Участник

Создано: 2 ноября 2018 12:54 New!
Цитата · Личное сообщение · #2

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


Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 2 ноября 2018 14:22 · Поправил: difexacaw New!
Цитата · Личное сообщение · #3

f13nd

Спасибо что говорите очевидные вещи, но мне не нужны частные решения, я ищу общее что бы автоматикой решить. Тем более что решение в принципе возможно. Так например какой то прот(privexeprot вроде) переносит EP в буфер. В этом буфере происходит событие абсолютной адресации и это событие EP. По логу релатив ветвлений(релатив только в пределах одного кода - секции етц, так они разделяются, хотя и не всегда, возможны релатив стабы) можно найти вход в буфер и таким образом EP. Но это будет вторая EP, так как такие протекторы используют свой промежуточный образ, который так же имеет EP и попадает под тот же самый критерий(абсолютная адресация).


Ранг: 211.2 (наставник)
Статус: Участник

Создано: 2 ноября 2018 14:40 New!
Цитата · Личное сообщение · #4

Такой вот у меня "свежий взгляд". Ничто не мешает протектору заполиморфить main-функцию и вынести из основного образа, ничто не мешает оставить стек невыравненным, ничто не мешает полиморфнуть начало некоторых характерных для точки входа функций. Если универсальные критерии когда-то и были, то давно закончились по мере развития протекторов.


Ранг: 132.0 (ветеран)
Статус: Участник
Qt Developer

Создано: 2 ноября 2018 14:43 · Поправил: hors New!
Цитата · Личное сообщение · #5

difexacaw пишет:
В этом буфере происходит событие абсолютной адресации и это событие EP.


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

jmp [абсолютный адрес] ?

Но есть же упаковщики которые делают переход по относительной адресации.

Например kkrunchy 0.23 alpha --> Link <--

je [RVA] -> OEP


Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 2 ноября 2018 15:00 · Поправил: difexacaw New!
Цитата · Личное сообщение · #6

f13nd

Протекторы это унылое говно до сих пор. Оно зародилось одновременно с виксами, но последние ушли далеко, а это пишется школьниками. Морф кода там не используется. Иначе бы это называлось криптором. Из за невозможности анализа(data vs code) код покрыть невозможно, а значит он может копироваться целиком, секциями и декриптоваться так же. Авторы таких поделок не рассматривают варианты анализа, тоесть каждую выборку данных можно накопить и сформировать зависимости. Можно даже построить граф указателей(PFG), это врядле чем то поможет в данном случае.

hors

Любая EP начинается с абсолютной адресации, ей могут предшествовать релатив ветвления(если рассматривать поток инструкций или ветвлений).

> je [RVA] -> OEP

Из другой области(между исполняемыми блоками находятся RW) памяти/секции ?

Добавлено спустя 6 минут
hors

> jmp [абсолютный адрес] ?

А понял о чём вы. Не ветвление, а адресация. Тоесть апп первый раз ссылается на данные, например mov R,[AI]. Цепочка релатив ветвлений приводит к входу в регион.


Ранг: 537.4 (!)
Статус: Участник
оптимист

Создано: 3 ноября 2018 06:23 · Поправил: ClockMan New!
Цитата · Личное сообщение · #7

difexacaw пишет:
Тем более что решение в принципе возможно

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


Ранг: 1120.0 (!!!!)
Статус: Участник

Создано: 3 ноября 2018 08:09 New!
Цитата · Личное сообщение · #8

difexacaw пишет:
я ищу общее что бы автоматикой решить


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


Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 3 ноября 2018 08:22 New!
Цитата · Личное сообщение · #9

ClockMan

Почему же невозможно ?

Вот для примера взял несколько, EP исходного модуля:

Code:
  1. 00415757 call 00421820
  2. 0041575C jmp 004155D9


Первая абсолютная адресация из первой функции, 00421828: mov eax,[43D68C]. Тогда это событие EP, она находится по цепи релатив ветвлений.

ASPACK:
Code:
  1. 00489415 push 00415757
  2. 0048941A ret


UPX:
Code:
  1. 0048B609 sub esp,-80
  2. 0048B60C jmp 00415757


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

ASPROTECT:
Code:
  1. 03CC0158 lea eax,dword ptr ds:[eax+ebx]
  2. 03CC015B pop esp
  3. 03CC015C jmp eax


- ветвление из буфера.

PRIVEXEPROT:
Code:
  1. 00542949 pop eax
  2. 0054294A popfd
  3. 0054294B popfd
  4. 0054294C ret 0


PECOMPACT:
Code:
  1. 0048B3F0 pop ebx
  2. 0048B3F1 pop ebp
  3. 0048B3F2 jmp eax


ARMA:
Code:
  1. 004C1DAF call 004CF994
  2. 004C1DB4 jmp 004C1BCF


- изменяет адресацию, но выборка остаётся.

Code:
  1. 0050B904 popad
  2. 0050B905 jmp ebx


У этих передача управления ниже секции данных, куда происходит выборка. Так как загрузчик дописывается в конец образа.

Темида и обсидиум используют промежуточные модуля, так для обсид. первая выборка:
Code:
  1. 004CA279 lock dec dword ptr ds:[4CA26A]
  2. 004CA280 jmp kernel32.7C801AD9


Что в таком случае делать не ясно.


Ранг: 324.8 (мудрец)
Статус: Участник

Создано: 3 ноября 2018 09:50 · Поправил: Vamit New!
Цитата · Личное сообщение · #10

Могу дополнить ваш список:
VmProtect - релатив передача управления на ЕП оригинала (вообще-то это уже ОЕП) в самом простом случае отсутствует, в сложном случае - отсутствует и сам код в точке ОЕП, а то что вместо него записано никогда не исполняется.
Переход из протектора в юзер код активируется внутри вм и осуществляется через стек после выхода из вм - это простой случай. В сложном случае весь crtstartrup будет находиться под вм а на его оригинальном месте вы найдете только мусор.
Если ещё интересно - посмотрите Энигму...
Далее, считать безусловные переходы / возвраты через стек на ОЕП по факту точкой перехода в юзер код бесполезно, в умных протекторах он пройдет через эту точку 100500 раз прежде чем она приведет к ОЕП.
Рассматривать же его как межсегментный переход тут тоже бесполезно, протектор может разместить этот код в юзер образе, подменив им часть юзер кода.

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

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



Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 3 ноября 2018 11:26 New!
Цитата · Личное сообщение · #11

Vamit

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

Энигму сейчас глянул. В ней стартап поток два стека зачем то имеет

Код по EP не изменяется. Перед его выполнением есть большой код в модуле, там очень много абсолютных выборок, это первый образ самого протектора. На второй(исходный) модуль ветвление:

Code:
  1. 0060F4E0 lea eax,dword ptr ds:[esi+6117E0]
  2. 0060F4E6 mov byte ptr ds:[eax],0
  3. 0060F4E9 mov esp,ecx
  4. 0060F4EB popad
  5. 0060F4EC popfd
  6. 0060F4ED ret


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

Добавлено спустя 3 минуты
> например старт приложения через TLS

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


Ранг: 53.1 (постоянный)
Статус: Участник

Создано: 3 ноября 2018 14:02 New!
Цитата · Личное сообщение · #12

Vamit
И все таки написал... Vamit я всегда вами восхищался... извините..


Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 3 ноября 2018 14:17 New!
Цитата · Личное сообщение · #13

BlackCode

Чушь он написал. Привёл пример энигма прот который общим образом резолвился за минуты, его загрузка заняла больше времени чем снятие лога.

Формулировка задачи:

AI-df критерий EP, при условии что область выполняется впервые и по адресам, ниже которых небыло W-df. Тоесть задача сводится к разделению единого региона памяти на области на основе выборки. Тогда это позволит исключить первый образ, задача решаема.

Добавлено спустя 6 минут
> Сообщение посчитали полезным: Gideon Vi, mak, BlackCode

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


Ранг: 537.4 (!)
Статус: Участник
оптимист

Создано: 4 ноября 2018 00:25 New!
Цитата · Личное сообщение · #14

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

Vamit пишет:
Далее, считать безусловные переходы / возвраты через стек на ОЕП по факту точкой перехода в юзер код бесполезно, в умных протекторах он пройдет через эту точку 100500 раз прежде чем она приведет к ОЕП

Можно приблизительно определить точку входа чекай EIP и DATA , eip всегда выше DATA секции, плюс секция кода расположенна за PE секцией


Ранг: 1120.0 (!!!!)
Статус: Участник

Создано: 4 ноября 2018 06:46 New!
Цитата · Личное сообщение · #15

difexacaw, я, наверное, не буду спорить. У меня нет достаточных знаний, чтобы решить задачу, которую ты ставишь за приемлемое время. Решишь не на уровне poc-а, ну честь тебе и хвала, без базара.


Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 4 ноября 2018 07:04 · Поправил: difexacaw New!
Цитата · Личное сообщение · #16

ClockMan

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

Добавлено спустя 4 минуты
> eip всегда выше DATA секции

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

Добавлено спустя 50 минут
Gideon Vi

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

pecompact:


{ Атач доступен только для участников форума } - EP.7z

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



Ранг: 1120.0 (!!!!)
Статус: Участник

Создано: 4 ноября 2018 09:48 New!
Цитата · Личное сообщение · #17

difexacaw пишет:
пока решение не ясно


так это я и имел ввиду, говоря о песце. За бортом остаются vmp (для которого, кстати, сырки желательны, а не обязательны. Да и причем тут вообще сырки?), темида, обсид, etc. Во всех этих случаях требуется индивидуальный подход и костыли. Ты же хочешь решать вопрос автоматом.


Ранг: 537.4 (!)
Статус: Участник
оптимист

Создано: 4 ноября 2018 10:45 New!
Цитата · Личное сообщение · #18

difexacaw пишет:
На этапе распаковки есть лишь одна область памяти, секций нет

Это в вашей тузле? чего вам мешает чекнуть ре хидер и дёргнуть адресацию и размер первой секции, и сверять их в своей тузле?


Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 4 ноября 2018 11:32 · Поправил: difexacaw New!
Цитата · Личное сообщение · #19

Gideon Vi

Темида и обсид после отработки своего модуля штатно передают управление на EP, нужно лишь скипнуть первую EP. Темида если правильно помню морфит EP в буфер, но остаётся AI и событие EP происходит там. Это один прот, который очень тормозной, он долго крутится, толи это какой то косяк с таймерами(крутит rdtsc пол часа ничего не делая), толи намеренная задержка.

> Во всех этих случаях требуется индивидуальный подход и костыли.

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

ClockMan

> чего вам мешает чекнуть ре хидер

А вы вообще отладчиком какие либо протекторы/пакеры етц открывали ?
Если бы вы это делали, то знали бы что всегда хидер битый, невалид. Он не нужен для работы, это делается что бы затруднить анализ пе тулзами.

Добавлено спустя 21 минуту
Gideon Vi

> Ты же хочешь решать вопрос автоматом.

Понятно что вы думаете что решение не может быть найдено. Это так, но не в случае трека выборки данных. Я не спроста этот критерий выбрал ключевым событием. Такая выборка может быть отслежена лишь визором, никаким иным путём, соответственно при обычном подходе и задача NP. Но не в этом случае.

Добавлено спустя 1 час 29 минут
Арчи, я заметил что вы туже задачу пытались поднять. Ваш ник светится в тулзе peid. Судя по тому что ни в каком пакере EP не может быть найдена, вы задачу не решили.


Ранг: 584.1 (!)
Статус: Модератор
Research & Development

Создано: 4 ноября 2018 13:14 New!
Цитата · Личное сообщение · #20

Indy

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

Примеры:
- статистический анализ
- детект простейших методов базового крипта (все, включая Themida/ASProtect/ASPack - примерно об одном и том же xor/add/sub)
- анализ упакованных данных после декриптора: распространённых и эффективных методов сжатия не так много, их можно проанализировать заранее
- анализ кода на соответствие паттернам

Та же компрессия в большинстве случаев реализована на базе Lempel-Ziv (Лемпеля-Зива), реализаций масса, но их оптимизированные версии или версии, реализованные в конкретных пакерах, очень легко детектируются после декрипта.

Основные ограничения твоего подхода (как я их вижу):
- Требование универсальности (хотя эта универсальность тоже условная, см. ниже про привязку к реализации)
- Исключительно динамическое выполнение
- Жёсткая привязка к конкретным реализациям архитектуры Windows (категорически не работает на Wine, например. Всегда "Unhandled page fault on read access to 0x00000000 at address 0x0"), но кросс-платформенность и переносимость тебя особо не интересует, как я понимаю.


Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 4 ноября 2018 15:20 · Поправил: difexacaw New!
Цитата · Личное сообщение · #21

Jupiter

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

> - Жёсткая привязка к конкретным реализациям архитектуры Windows

Пилилось под нт и соответственно обработка под эту ось запилена. В линуксах это не заведётся и заводится не должно. Как минимум там разные ядерные сервисы. В линуксе до сих пор дос-подобные интерфейсы инт80.

> Unhandled page fault on read access to 0x00000000 at address 0x0

Такого не должно происходить. Вероятно причина в разнице сегментных значений, хоть они и сохраняются в динамике. А есчо возможно что проблема в сервисных интерфейсах, так как событие инт80 не обрабатывается(на нт данного прерывания нет).

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


Ранг: 1988.9 (!!!!)
Статус: Модератор
retired

Создано: 4 ноября 2018 18:36 New!
Цитата · Личное сообщение · #22

difexacaw пишет:
Арчи, я заметил что вы туже задачу пытались поднять. Ваш ник светится в тулзе peid.

Эммм, хороший вопрос. Фиг его знает, чего там ник светится. Не помню уже, может помогал чем.

Что касается сабжа, действительно работал с этим. Но каких-то своих аббревиатур в топике столько, что часть разобрать ещё можно, типа AI-absolute indirect, но в итоге понять описание критерия
difexacaw пишет:
AI-df критерий EP, при условии что область выполняется впервые и по адресам, ниже которых небыло W-df.

не представляется возможным. Что за df, понятия не имею. В итоге я не стал ломать мозг в попытках разобраться, что имеется в виду. Из опыта можно сказать, что 95%, да даже 99%, пакеров и протекторов можно автоматически разрешить, но 100% нет, ввиду того, что обязательно найдётся кто-то хитрожопый, кто пишет прямо в секцию кода свой код, который сделает и AI и что хочешь ещё, а потом уже его перезапишет реальным кодом или даже так и оставит там свой код. Если критерий написать по-русски, могу попробовать вспомнить, кто так делает, но это очень давно было, не обещаю. VMP так может, насколько помню. И да, доступ к исходникам ему не нужен, так что выкидывать его из рассмотрения не вижу оснований.

| Сообщение посчитали полезным: 4kusNick, =TS=



Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 4 ноября 2018 19:07 · Поправил: difexacaw New!
Цитата · Личное сообщение · #23

Archer

Data Fetch", выборка данных. К примеру обращение к IAT это тоже событие EP, AI R-DF, eg: call [disp32].

> могу попробовать вспомнить, кто так делает

Интересно, поэтому и спросил, как вы это решали.

> VMP так может, насколько помню.

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

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



Ранг: 324.8 (мудрец)
Статус: Участник

Создано: 4 ноября 2018 19:32 · Поправил: Vamit New!
Цитата · Личное сообщение · #24

Данный прот в принципе покрывает весь код через сурки.
Третий уже человек говорит, что vmp ничего через сурки не покрывает, его протектору сурки никогда и не были нужны, но если вы хотите завиртуализовать юзер функции то нужен хотя бы map файл с адресами функций, но это уже отношения к протектору кода не имеет - это чистая вм виртуализация.


Ранг: 301.7 (мудрец)
Статус: Участник

Создано: 4 ноября 2018 19:39 · Поправил: difexacaw New!
Цитата · Личное сообщение · #25

Vamit

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

Ранг: 44.8 (посетитель)
Статус: Участник

Создано: 4 ноября 2018 20:37 New!
Цитата · Личное сообщение · #26

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


Ранг: 297.2 (наставник)
Статус: Участник

Создано: 4 ноября 2018 21:02 New!
Цитата · Личное сообщение · #27

difexacaw пишет:
мне не нужны частные решения, я ищу общее что бы автоматикой решить.


Несчастный коллега ты наш! Математики ещё в начале прошлого века доказали, что общее решение для разнотипных задач невозможно!

Что с языком-то до сих пор? По-русски понятно так и не научился писать?


Ранг: 584.1 (!)
Статус: Модератор
Research & Development

Создано: 4 ноября 2018 22:25 New!
Цитата · Личное сообщение · #28

DenCoder
Постарайся не переходить на личности.

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



Ранг: 537.4 (!)
Статус: Участник
оптимист

Создано: 5 ноября 2018 00:31 New!
Цитата · Личное сообщение · #29

Archer пишет:
Если критерий написать по-русски, могу попробовать вспомнить, кто так делает

ASPROTECT с регой сначало в секцию кода,потом опять в тело прота difexacaw пишет:
А вы вообще отладчиком какие либо протекторы/пакеры етц открывали ?
Если бы вы это делали, то знали бы что всегда хидер битый, невалид. Он не нужен для работы, это делается что бы затруднить анализ пе тулзами.

не в первый раз


Ранг: 1011.4 (!!!!)
Статус: Участник

Создано: 5 ноября 2018 00:43 · Поправил: reversecode New!
Цитата · Личное сообщение · #30

на EP изменение энтропии
вычисляется динамически на большой выборке
. 1 . 2 . >>
 eXeL@B —› Программирование —› Критерий EP.
Эта тема закрыта. Ответы больше не принимаются.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS