Сейчас на форуме: tyns777, localhost1, vsv1, asfa (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Защищенный раб. стол
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 31 октября 2019 14:17
· Личное сообщение · #1

Здравствуйте, ув. Профессионалы! В общем провожу исследование одной интересной программы.
------------------------------------------------------------------------------------------------------------
Описание программы:
- программа написана на Delphi, ничем не запакована, из антиотладки вроде бы только IsDebuggerPresent
- назначение программы в том, чтобы воспроизводить защищенные видео-файлы.
------------------------------------------------------------------------------------------------------------
Описание защиты:
1-й слой:
- программа создает виртуальный раб. стол и уже в него помещает свой видео-проигрыватель
- на защищенном раб. столе скрыты все ярлыки, панель инструментов, системный трей... в общем все, кроме самого проигрывателя видео-файлов

2-й слой:
- программа мониторит список всех запущенных процессов и если в этом списке присутствует др. процесс, способный сделать запись видео с экрана (например, TeamViewer), то предложит закрыть его

3-й слой:
- на основе ID-компьютера и валидного ключа производит активацию курса через интернет

4-й слой:
- при воспроизведении видео с определенным интервалом времени вставляет уникальные метки, по которым можно идентифицировать пользователя

5-й слой:
- зашифрованные файлы - расшифровывает и воспроизводит в видео-проигрывателе
------------------------------------------------------------------------------------------------------------
Цель создания Темы:
- прокачать необходимые навыки исследователя, связанные с обходом 1-го слоя защиты
------------------------------------------------------------------------------------------------------------

Что уже сделано/исследовано:

Последовательность работы exe-файлов:
1. Пользователь запускает start.exe
2. start.exe запускает player.exe
3. player.exe запускает:
----restore.exe
----pctl.exe

Win API, которые используются для создания защищенного раб. стола:
см. в скрине:


Идея по обходу защиты:
- идея проста - подменить имя защищенного раб. стола, которым манипулируют api на "Default". То есть, после патча проигрыватель будет выводиться на текущий раб. стол, вместо защищенного

Сказано -> сделано:
- пропатчил все exe-файлы, в которых используется уникальное имя защищенного раб. стола на 'Default'

Тест работоспособности модифицированной программы:
- программа запускается -> выполняется -> действительно выводит окно плеера на текущий раб. стол и после этого завершается
- при выполнении не запускается процесс 'pctl.exe' (а должен запускаться)

В чем возникла сложность:
- не знаю как дальше найти причину сбоя модифицированной программы

Архив с файлами здесь --> Link <--
- чтобы протестировать пропатченные файлы следует распаковать архив с заменой в тот же каталог, где он находится:
а) start_patch.rar
б) \player\player_patch.rar




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 31 октября 2019 17:30
· Личное сообщение · #2

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

-----
EnJoy!


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


Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 31 октября 2019 18:31
· Личное сообщение · #3

Без введенного ключа ничего не закрывается и 'pctl.exe' висит. Проверь .00423A94 (ксоры-сдвиги каких-то данных в поле 16 бит) и .00431920 (напоминает црц, но это не црц, какая-то поделка, хеширующая в 32бит поле).

-----
2 оттенка серого


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

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 31 октября 2019 21:08 · Поправил: rukop84
· Личное сообщение · #4

f13nd пишет:
Без введенного ключа ничего не закрывается и 'pctl.exe' висит

это значит, что Вы тестируете оригинал, а не мои пропатченные файлы.

чтобы протестировать пропатченные файлы следует распаковать:
1) архив start_patch.rar в папку, где находится start.exe
2) архив player_patch.rar в папку player (где находятся файлы player.exe, restorer.exe, pctl.exe)

f13nd пишет:
и 'pctl.exe' висит

при выполнении моих пропатченных файлов процесс 'pctl.exe' даже не запускается (для него почему-то не вызывается CreateProcessA)




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

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

rukop84 пишет:
это значит, что Вы тестируете оригинал, а не мои пропатченные файлы


А плеер на дефолтном рабочем столе случайно оказался?

-----
2 оттенка серого




Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 31 октября 2019 21:37 · Поправил: rukop84
· Личное сообщение · #6

f13nd пишет:
А плеер на дефолтном рабочем столе случайно оказался?

очень интересно, а у меня все это дело закрывается (ОС Windows 7 32bit)

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

Добавлено спустя 1 час 14 минут
Буду выдвигать гипотезы, почему у Вас работает, а у меня закрывается. Первое наблюдение:
- у Вас плеер запускается на весь текущий рабочий стол, а у меня примерно на 1/4 (и после этого закрывается);
- когда проводил исследование приложения на использование api функций в нем была задействована WindowFromPoint (по указанной в координатах точке получает дескриптор окна). И получается, у Вас (так как окно плеера развернуто полностью) будет возвращен дескриптор окна плеера и программа корректно работает. А у меня (так как окно плеера уменьшено) будет возвращен дескриптор раб. стола, после чего произойдет исключение и программа благополучно сделает выход...

Но как проверить свою гипотезу?!




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 01 ноября 2019 00:14 · Поправил: f13nd
· Личное сообщение · #7

Да я поигрался и с теми же симптомами стало закрывать
Вот здесь ему приходит WM_QUIT, поэтому форма сразу закрывается.
Code:
  1. 004818FE  CMP DWORD PTR DS:[EDI+4],12

Мне до этого оно в одном из тредов слалось PostMessageA'м из самого player.exe (он сразу знал, что самовыпилится, но зачем-то Sleep'ом ждал), теперь приходит видимо из другого процесса.

-----
2 оттенка серого




Ранг: 42.8 (посетитель), 16thx
Активность: 0.020.06
Статус: Участник

Создано: 01 ноября 2019 02:47 · Поправил: bartolomeo
· Личное сообщение · #8

в этом протекторе можно и без активации получить исходный файл

--> Link <--

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

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 01 ноября 2019 17:41 · Поправил: rukop84
· Личное сообщение · #9

bartolomeo пишет:
в этом протекторе можно и без активации получить исходный файл

- поистине круто, что такое возможно и что есть люди способные это сделать

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

Учитель f13nd что-то я застрял с поиском и исправлением багов в программе. Можете подкинуть какие-нибудь идеи в этом направлении (как и с помощью чего это делать) из своего богатого опыта?

f13nd пишет:
004818FE CMP DWORD PTR DS:[EDI+4],12

- данный адрес не относится к решению текущей задачи, правильно я понял? (бряк на ней не срабатывает)




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 01 ноября 2019 18:35 · Поправил: f13nd
· Личное сообщение · #10

rukop84 пишет:
данный адрес не относится к решению текущей задачи, правильно я понял? (бряк на ней не срабатывает)

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

-----
2 оттенка серого




Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 01 ноября 2019 18:45 · Поправил: rukop84
· Личное сообщение · #11

А conditional log на какую api следует ставить, чтобы получить сообщение WM_QUIT?

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




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 02 ноября 2019 00:11 · Поправил: f13nd
· Личное сообщение · #12

rukop84 пишет:
А conditional log на какую api следует ставить, чтобы получить сообщение WM_QUIT?

Отправляется обычно SendMessageA(/W), PostMessageA(/W); принимается GetMessageA(/W), PeekMessageA(/W).

rukop84 пишет:
какие-то специализированные инструменты для отлова багов, генерации отчетов?

Не представляю даже о чем речь. Сам отладчик это инструмент для отлова багов. Можно трассу снять, сравнить с трассой оригинала, наверное ты про это. Но там очень вряд ли что-то можно будет выщемить. Под любой чих прога запускает новый поток, даже если от него надо только 1 оконное сообщение отправить. А еще перед инициализацией главного окна в player.exe передается управление в огромную ноповую дорожку (подразумевается, что туда должен быть помещен какой-то код). Плохая примета.

ЗЫ: я б на твоем месте просто лодырь сделал, который бы SwitchDesktop перехватывал и возвращал TRUE. Дёшево-сердито.

-----
2 оттенка серого


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

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 02 ноября 2019 10:11 · Поправил: rukop84
· Личное сообщение · #13

f13nd пишет:
ЗЫ: я б на твоем месте просто лодырь сделал, который бы SwitchDesktop перехватывал и возвращал TRUE

такое не прокатит. SwitchDesktop - эта функция только переключает управление на др. раб. стол. Др. словами, она ничего не даст: плеер все равно будет выведен на защищенный раб. стол, а управление - на текущем раб. столе.

ладно, думаю я справлюсь с задачей:
- как всегда проведу свою тысячу экспериментов и из них какие-то 2 или 3 сработают



Ранг: 43.1 (посетитель), 20thx
Активность: 0.160.29
Статус: Участник

Создано: 02 ноября 2019 14:24
· Личное сообщение · #14

rukop84, тогда перехват CreateDesktop и возвращать хендл от OpenDesktop("Default").



Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 02 ноября 2019 17:51
· Личное сообщение · #15

user99 пишет:
тогда перехват CreateDesktop и возвращать хендл от OpenDesktop("Default").

особого смысла в этом нет, к тому же подобный эксперимент уже был проведен (самый первый).

На текущий момент, чтобы все заработало следует каким-то образом сделать, чтобы окно плеера на дефолтном раб. столе запускалось бы в полностью развернутом виде... или наоборот что-то изменить в коде, чтобы достаточно было и окна плеера развернутого на 1/4




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 02 ноября 2019 23:31
· Личное сообщение · #16

Хукайте функции в рантайме. Уже полно движков, которые это могут. Вот, например, --> Detours <--. И патчить ничего не надо.

-----
Stuck to the plan, always think that we would stand up, never ran.


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

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 09 марта 2020 23:56 · Поправил: rukop84
· Личное сообщение · #17

В общем провел море тестов и экспериментов, два из которых явно и однозначно указывали на это:
Jupiter пишет:
Смотри в сторону проверки контрольной суммы


После такой обратной связи все тесты с патчами прекращаются и полностью меняется подход и тактика. Теперь все изменения в программе делаются только с помощью манипуляций значениями регистров, стека и последовательностью выполнения программы (опция в дебаггере 'New origin here'). Короче все свои действия выстраивал так, чтобы ни в памяти, ни на диске не изменялось ни одного байта программы, но при этом программа бы сделала то, что мне нужно.

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

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

Помню даже как мне уже выть и плакать хотелось от того, что я провел несколько изнурительных месяцев работая над целью, а какого-то даже минимального результата не достиг. Ну и в общем примерно за неделю до Нового 2020 Года я так устал, что решил все бросить и хотя бы пару недель отдохнуть. Но уже за 3 дня до Н.Г. снова возвратился к программе. И, О-о-о, чудо!!! 31.12.2019 мне наконец-то удалось вывести программу на дефолтный раб. стол, так чтобы она еще и корректно воспроизводила бы видео. Помню, что особой радости не было так, как был измучен затяжной и изнурительной работой. Но результат достиг, дело сделано, поэтому отмечал Н.Г. с удовольствием.

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

Ладно, это все была лирика, теперь по делу. Проверка целостности в программе реализована примерно так:
- происходит чтение с диска блоками по 4096 байт. На основе этих байт считаются md5 хеши. И дальше эти значения участвуют в вычислении адресов по которым будет выполняться программа. Таких проверок несколько для нескольких процессов многопоточной программы;
- есть еще несколько других проверок целостности, также завязанных на чтении файла с диска;
- есть и проверка ключевых процедур в памяти (например, чтобы ничего не могли сделать с процедурой, которая делает чтение проверки целостности с диска);
- есть и проверка путей файлов, которые читает программа и, наверное, многое чего еще;
- в общем, как говорится, сделано на совесть

Ну, да ладно. Немного программирования на ассемблере, инлайн патч и это все решаемо. Что и было сделано.

Сейчас столкнулся с довольно интересным явлением:
- пропатченная программа корректно выполняется в отладчике;
- корректно выполняется, если ее запустить с отладчика, а затем на EP сделать Detach and exit;
- корректно выполняется, если ее запустить с помощью API Monitor'а и в нем установить бряк на какую-нибудь api функцию (например, на IsDebuggerPresent);
- корректно выполняется, если инструкцию на точке входа зациклить и затем с помощью утилиты 'pupe' вернуть на место измененные байты

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

По поводу, дать посмотреть программу:
- ничего не выйдет. У программы есть ключи, которые привязаны к конкретному ПК. Др. словами, протестировать программу в действии у Вас не получится. Да и выкладывать пропатченную программу с такой защитой, думаю не очень корректно.



Ранг: 13.2 (новичок), 13thx
Активность: 0.28=0.28
Статус: Участник

Создано: 10 марта 2020 01:13
· Личное сообщение · #18

Поставь int3 на call ExitProcess, законфи дебагер JIT, crash, смотри на callstack как ты туда попал.

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

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

Создано: 10 марта 2020 05:32
· Личное сообщение · #19

Это часом не vMix? А то по описанию сильно похоже



Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 10 марта 2020 12:21 · Поправил: rukop84
· Личное сообщение · #20

friend пишет:
Поставь int3 на call ExitProcess, законфи дебагер JIT, crash, смотри на callstack как ты туда попал.

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

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

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

Добавлено спустя 2 часа 14 минут
Кстати, может кто знает какой-нибудь хороший туториал по работе со thread'ами, которые создает программа. Интересует как их исследовать, изучать. Нарваха в своих руководствах говорит, что работа со средами это, мол, отдельная тема, но дальше, чем просто их замораживание он не идет.

Может в природе есть какие-то специализированные иструменты по мониторингу thread'ов?!



Ранг: 13.2 (новичок), 13thx
Активность: 0.28=0.28
Статус: Участник

Создано: 10 марта 2020 17:11
· Личное сообщение · #21

крэш будет когда ты инт вставишь



Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 10 марта 2020 18:32
· Личное сообщение · #22

friend пишет:
крэш будет когда ты инт вставишь

Можно вот в этом месте по подробней?
Как это делается? Надо пропатчивать файл kernel32, который у меня в системе? Сама система Windows после таких вмешательств не полетит ли?



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

Создано: 11 марта 2020 06:59
· Личное сообщение · #23

Не надо, полетит



Ранг: 13.2 (новичок), 13thx
Активность: 0.28=0.28
Статус: Участник

Создано: 12 марта 2020 00:58
· Личное сообщение · #24

rukop84 пишет:
Сама система Windows после таких вмешательств не полетит ли?

Полетит. Надо патчить вызов в твоём модуле, на то и писал "call Exitprocess", смотри не патчь импорт.
Увидел через какие процедуры апп выходит, поставь инты на них, смотри что делают. Нудно просто.

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

В конце концов вопрос ведь чем отличается среда аппа под дебагом от чистого старта.

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

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 12 марта 2020 13:54 · Поправил: rukop84
· Личное сообщение · #25

Ага, теперь кажется уяснил суть метода. Осталось потестить на практике.

friend, если интересно, то пока ожидал Вашего разъяснения методики придумал свой аналог тестирования. Суть его в том, что вместо патча на int3 я использовал патч eb fe, а затем просто аттачился дебаггером к зацикленному процессу и смотрел call stack.

По результатам пока следующее:
1. api функция ExitProccess - не сработала, также как и др. (TerminateProcess, ExitThread, TerminateThread...). А вот функция DestroyWindow уже начала давать какие-то ответы

Добавлено спустя 1 час 23 минуты
friend, а есть ли у Вас идеи как можно доработать Вашу методику, чтобы крэш происходил не после 1-го вызова целевой api функции? Др. словами, чтобы 1-й раз функция выполнялась как надо, а далее срабатывал бы крэш?

Добавлено спустя 1 час 47 минут
rukop84 пишет:
Осталось потестить на практике

протестировал я метод:
- после крэша и открытия программы в отладчике остановка происходит вовсе не на int 3 и даже не в этой процедуре, и даже в стеке нет ни одной процедуры в которой был установлен int 3!!!

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

Ну, да ладно. Думаю, я справлюсь. Как говорят: дорогу осилит идущий



Ранг: 13.2 (новичок), 13thx
Активность: 0.28=0.28
Статус: Участник

Создано: 12 марта 2020 22:04
· Личное сообщение · #26

Нда я не подумал что их кастомный СЕХ хэндлер инты ловить то будет, наверно по этому не там где надо и тормозит.
DestroyWindow разве процессы закрывает?

rukop84 пишет:
чтобы крэш происходил не после 1-го вызова

Хуки ставить надо. Тыж инлайнит научился? Найди место в коде с нулями и напиши поверх вызова что хочешь хукать, что то вроде этого:
jmp CHECK
RET:
...
CHECK:
pushad
mov eax, [mesto]
cmp eax, 1
je VTOROJVYZOV
mov [mesto], 1
popad
call OriginalProcedure
jmp RET
VTOROJVYZOV:
eb fe

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

Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 12 марта 2020 22:22 · Поправил: rukop84
· Личное сообщение · #27

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

Мне требуется в определенные участки кода (в те места, где я отключал нежелательные процедуры) вставить программные задержки. Тесты с программой говорят следующее:
1. если в том месте, где должна быть программная задержка сделать прерывание с помощью HBP, а потом дальше продолжить выполнение, то программа корректно работает
2. если же в этом месте вместо hbp реализовать инлайн патч и сделать программную задержку с помощью функции Sleep, то программа благополучно закроется

Прошу участников высказывать свои идеи как реализовать программную задержку в описанном случае и почему не работает задержка с методом Sleep?!!!

Доп. информация для участников, которая возможно могла бы помочь в решении задачи:
- синхронизация по таймингу реализована в программе с помощью функций GetTickCount, и двух процессорных функций QueryPerformanceCounter и QueryPerformanceFrequency




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

Создано: 12 марта 2020 22:32
· Личное сообщение · #28

rukop84

А где семпл, ссылки битые.

-----
vx




Ранг: 16.6 (новичок), 1thx
Активность: 0.030.16
Статус: Участник

Создано: 12 марта 2020 22:43 · Поправил: rukop84
· Личное сообщение · #29

difexacaw пишет:
А где семпл, ссылки битые.

Профессор ядра difexacaw, семпл Вы не сможете потестить:
- там ключи и привязка к конкретному ПК

----------------------------------------------------------------------------------------------------------------------------------
Добавлено спустя 2 часа 22 минуты
rukop84 пишет:
и почему не работает задержка с методом Sleep?!!!

в общем кажется до меня начало доходить что требуется.

Немного повторюсь с исходными данными для др. участников:
1. Пользователь запускает ПРОЦЕСС_01;
2. ПРОЦЕСС_01 запускает дочерний ПРОЦЕСС_02:
----это основной процесс;
----в нем сосредоточено все ДОБРО и вся АНТИОТЛАДКА, в общем почти вся защита;
----а еще этот процесс постепенно создает около 20 thread'ов;
3. ПРОЦЕСС_02 запускает еще два др. процесса: ПРОЦЕСС_03 и ПРОЦЕСС_04

Мне требуется сделать программную задержку для всего ПРОЦЕССА_02, включая и те 20 tread'ов, которые он создает. То есть, когда я делаю задержку для всего ПРОЦЕССА_02, я даю свободно выполниться трем др. процессам (ПРОЦЕССУ_01, ПРОЦЕССУ_03 и ПРОЦЕССУ_04).

А получается, что функцией Sleep я ввожу в спячку не весь ПРОЦЕСС_02, а только thread №1 с именем Main!!!

Добавлено спустя 14 часов 15 минут
----------------------------------------------------------------------------------------------------------------------------------
Немного более конкретизирую задачу:
- мне нужно сделать, чтобы ПРОЦЕСС_02 до своей точки входа загружался как можно дольше, чтобы дать возможность ПРОЦЕССУ_01 (который его запустил) свободно выполниться.
Предлагайте, пожалуйста, свои идеи как это можно реализовать!!!
----------------------------------------------------------------------------------------------------------------------------------

Одно интересное наблюдение за выполнением программы:
1. зациклил я инструкцией ebfe начало одной из защитных процедур и запустил программу на выполнение. По логике ожидал, что получу ее полностью зацикленной в этой точке.
2. ан нет: программа оказалось зацикленной в точке и все равно корректно выполнилась (за счет реализации своих алгоритмов многопоточности)!!!




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

Создано: 14 марта 2020 10:11
· Личное сообщение · #30

rudbkop84

> А получается, что функцией Sleep я ввожу в спячку не весь ПРОЦЕСС_02, а только thread №1 с именем Main!!!

Ожидание может быть двух типов, либо асинхронное на основе системного времени, либо синхронное между потоками. В первом случае можно тормознуть все потоки NtSuspendProcess. Но для этого нужен второй процесс что бы разморозить. Иначе нужно локально для процесса изменить сис время. А это сложно сделать из за ядерного счётчика(USD, GetTickCount()).

> Предлагайте, пожалуйста, свои идеи как это можно реализовать!!!

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

-----
vx


| Сообщение посчитали полезным: rukop84
. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Защищенный раб. стол
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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