background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Malware's LAST Stand: SELF-DELETION"

input logo icon
Теги видео
|

Теги видео

crow
hacking
maldev
winapi
c++
programming
malware development
malware
virus
tutorial
how to
pentesting
penetration testing
kali
windows
win32 api
security
hack
hacked
developing malware
making malware
making viruses
pentester
red teaming
red team
offsec
oscp
certification
research
developing
hacker
active directory
blue team
ad hacking
ad
binexp
binary exploitation
compsci
computer science
computer
pc
linux
os
operating system
2023
fun
live
memes
trending
evasion
development
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:02
что у вас зудит, в
00:00:04
этом видео мы собираемся
00:00:06
рассмотреть некоторые способы, которыми вредоносное ПО
00:00:07
пытается скрыть себя или усложнить
00:00:09
вам, надоедливому аналитику, задачу изучим и
00:00:12
проанализируем его, мы посмотрим, как
00:00:14
вредоносное ПО может реализовать функции защиты от отладки или
00:00:16
анализа или даже
00:00:18
уничтожить себя, если обнаружит, что
00:00:21
вы ищете куда-то, где, по его мнению,
00:00:22
вам быть не следует, это очень классная
00:00:23
штука и вы знаете, что это видео
00:00:24
само по себе может случайно последовать этому примеру
00:00:26
и сделать косплей с самоудалением из-за
00:00:28
тематики, и насколько
00:00:29
YouTube презирает
00:00:31
подобные видео, поэтому обязательное
00:00:33
предупреждение об отказе от ответственности. Это видео предназначено исключительно
00:00:36
для образовательных целей путем
00:00:38
освещения этих видео. методы, мы раскроем,
00:00:39
как определенные вредоносные программы обманывают или обходят
00:00:42
антивирусы или аналитики, а также
00:00:44
аналитики, о которых мы поговорим об антивирусах
00:00:46
и edrs, но в этом видео мы не собираемся рассказывать,
00:00:48
как их обойти, заткнитесь,
00:00:51
чтобы вы знали об этом. эту внутреннюю
00:00:54
работу, и вы можете следить за ней,
00:00:55
никогда не используйте эти методы или что-либо еще,
00:00:56
что вы можете найти в сообщениях блога моего канала
00:00:58
в Интернете или что-то еще, в
00:01:00
злонамеренных целях и проверяйте только те
00:01:02
вещи, на которые у вас есть явное письменное
00:01:04
разрешение, и мы не будем слишком много внимания
00:01:06
уделяем обходу антивируса, но мы
00:01:07
обязательно кратко поговорим об этом, поскольку
00:01:09
мы уже затронули тему защитных
00:01:10
мер, вы знаете, на самом деле это довольно
00:01:12
распространенный вопрос, но я часто это слышу,
00:01:14
почему вы хотите начать изучать
00:01:15
разработку вредоносных программ? это не
00:01:17
только для преступников, я имею в виду, что
00:01:18
хорошего в вредоносном ПО, ну, как
00:01:20
однажды сказал великий философ Диоген, как
00:01:22
еще, черт возьми, вы должны защищаться
00:01:24
от чего-то, если вы не хотите знать, на
00:01:26
что способна вышеупомянутая вещь?
00:01:28
из-за ограничений, в которых они находятся,
00:01:30
и, что наиболее важно, во-вторых, как это работает, мы
00:01:33
изучили вещи, которые не сеют хаос, каламбур
00:01:35
предназначен не для того, чтобы сеять хаос
00:01:37
невиновным, а для того, чтобы понять, что
00:01:39
делают плохие парни, чтобы мы могли сделать наши
00:01:41
защитные решения намного лучше
00:01:42
вот почему вы даже увидите, что некоторые из этих
00:01:44
техник подробно обсуждаются
00:01:46
в реальных защитных решениях, таких как,
00:01:48
например, Sentinel, не потому, что
00:01:49
они пытаются выстрелить себе в
00:01:50
ногу, а потому, что, опять же,
00:01:52
вам важно понять
00:01:53
что-то почти сразу. интимный уровень,
00:01:55
чтобы уничтожить его, иначе как
00:01:57
вы можете защитить себя от него? Это еще
00:01:58
не все с точки зрения аудита и
00:02:00
проверки чьей-либо безопасности.
00:02:01
Мы также разрабатываем собственное вредоносное ПО,
00:02:04
чтобы дать нашим клиентам наилучшие шансы на
00:02:06
правильное тестирование, если вы попытаетесь загрузите mimikats
00:02:08
Rubius MSF полезные нагрузки Venom или что-нибудь,
00:02:11
что имеет такую ​​​​жесткую подпись, тогда
00:02:13
да, скорее всего, ваши клиенты
00:02:14
это обнаружат, но как насчет чего-то,
00:02:15
что еще не было подписано, а что
00:02:17
насчет чего-то специального и неизвестного, это
00:02:18
чертовски большая вещь, которую можно просто
00:02:20
исключить из своего Не
00:02:21
думаете ли вы, что именно здесь разработка вредоносных программ
00:02:23
действительно велика или, по мнению большинства, даже
00:02:24
необходима в красной команде? Тонна наших
00:02:26
наступательных инструментов тщательно каталогизирована
00:02:29
и обнаруживается прямо из коробки, и именно здесь в
00:02:32
игру вступает набор навыков разработки вредоносных программ, но Я,
00:02:35
но я отвлекся, просто знаю, что мы
00:02:38
изучаем это только как этические хакеры, и
00:02:40
использовать это злонамеренно не разрешено,
00:02:42
и я не делаю и никогда не одобряю
00:02:44
такой глупый шаг, я имею в виду, что он в любом случае использует
00:02:46
ваши силы для хороших парней, не так ли?
00:02:54
слышишь это,
00:03:01
мистер крыса, я садио, что не так, у меня
00:03:05
душевная боль, йо, почему, приятель, что происходит,
00:03:07
все кажутся такими хорошими и так
00:03:09
далеко опережают события, а я тем временем
00:03:12
здесь пытаюсь выяснить, что
00:03:13
заставило Microsoft так поступить подожди, ладно,
00:03:16
ты говоришь мне, что ты совершенно заблудился,
00:03:18
ты даже не знаешь, с чего начать
00:03:20
разработку вредоносных программ, и самое главное,
00:03:21
ты полный новичок, я хотел, чтобы ты
00:03:23
сказал так, крыса, представляющая Академию Maldev,
00:03:26
ушла, мистер крыса, это дни, когда вы остались
00:03:28
позади, потому что Мальдивская Академия - это
00:03:31
совершенно новая учебная платформа, основанная на модулях,
00:03:33
основанная двумя легендами в этой
00:03:35
области, мистер доктор и ноль, вы
00:03:37
превратитесь из своего нынешнего
00:03:39
затруднительного положения в бога, крысу среди людей,
00:03:42
учебные модули - это организованный по
00:03:44
линейному принципу, вы начнете изучать
00:03:46
экстремальные основы, такие как основы C
00:03:48
и API Windows для API, перехватывающих
00:03:50
системные вызовы, антиобнаружение, вплоть
00:03:52
до некоторых сумасшедших вещей, таких как точки останова оборудования,
00:03:54
ntdll, отключение пользовательских
00:03:56
обработчиков протоколов и многое другое. запланировано на
00:03:58
будущее, вы получите доступ к виртуальной
00:04:00
машине со всеми
00:04:02
уже настроенными необходимыми инструментами, а также исходным
00:04:03
кодом модулей, там
00:04:05
постоянно обновляются, и на будущее запланировано очень много всего,
00:04:06
процветающее
00:04:08
сообщество Discord заполнено до краев с
00:04:10
замечательными людьми, которые постоянно учатся и
00:04:12
делятся, не говоря уже обо всем, что мы
00:04:14
получаем от самих соучредителей, просто
00:04:15
случайно добавляющих лакомые кусочки там и
00:04:17
сям, и даже этот [ __ ] здесь
00:04:18
предлагает задачи, которые помогут вам создать
00:04:20
и реализовать то, что вы узнали, пожалуйста,
00:04:22
паук верните мне ключи от машины, пожалуйста, мне
00:04:23
нужно забрать сына, есть план
00:04:25
для всех, и специально для вас, замечательные
00:04:27
[ __ ], мы пошли дальше и дали вам
00:04:29
скидку 10, если вы используете код Crow 10 в течение
00:04:31
ограниченного времени, как вы можете увидеть,
00:04:33
вы полный новичок или
00:04:35
опытный ветеран паприки, каждый может получить
00:04:36
что-то от академии, большое спасибо
00:04:38
Maldive Academy за любезную
00:04:40
поддержку этого видео, поскольку кто-то
00:04:41
в настоящее время проходит модули. Я
00:04:42
искренне рекомендую его еще раз,
00:04:44
обязательно ознакомьтесь с прикрепленным комментарием.
00:04:45
ниже или по первой ссылке в
00:04:46
описании, чтобы получить скидку 10 на свой заказ,
00:04:48
используя Code Crow 10, сейчас, мистер крыса, как
00:04:51
насчет того, чтобы мы вернулись к видео,
00:04:53
крыса, не сейчас, [ __ ], я тоже делаю свое собственное место,
00:04:56
ах, сначала идеальные
00:04:59
иностранные
00:05:00
[Музыка]
00:05:02
вещи нужно поговорить о том, что
00:05:05
вообще такое AVS и как они работают, после
00:05:07
этого мы кратко рассмотрим
00:05:08
различия между типичным антивирусным
00:05:10
решением и EDR. Вероятно, вы
00:05:13
уже знаете, что такое антивирус, поскольку
00:05:15
они распространены в поп-культуре или
00:05:16
еще лучше, может быть, вы даже можете назвать
00:05:18
парочку таких, о, я имею в виду, как эта
00:05:21
замечательная удивительная [ __ ], антивирус — это
00:05:24
защитное решение,
00:05:26
специально разработанное для обнаружения и
00:05:27
удаления вредоносного программного обеспечения с вашего
00:05:29
устройства. Защитник Windows — пример
00:05:31
антивируса, возможно, один из самые
00:05:33
известные примеры, помимо таких, как Нортон
00:05:35
или что-то в этом роде, он делает кучу
00:05:37
причудливых хэштегов, пытаясь
00:05:40
защитить вашу задницу от опасных
00:05:42
язычников, мы рассмотрим некоторые из распространенных
00:05:43
способов, которыми он вас защищает, но, вообще
00:05:45
говоря, антивирус использует следующие
00:05:47
четыре измерения для слабоумия для
00:05:51
защитных мер: антивирус
00:05:54
прочитает или просканирует ваш файл и сравнит его с
00:05:56
базой данных известных сигнатур, чтобы увидеть, является ли то, что у
00:05:58
вас есть, вредоносным или нет.
00:06:00
Эти сигнатуры могут быть известными хэшами
00:06:02
некоторых вредоносных программ, которые ваш
00:06:04
отец сравнивается с, чтобы увидеть,
00:06:05
есть ли совпадение, которое позволило бы антивирусу
00:06:06
узнать: «О, эй, этот файл вредоносный,
00:06:08
подождите минутку, этот файл вредоносный, или
00:06:11
его можно даже проверить на предмет
00:06:12
заранее определенных характеристик или
00:06:14
атрибутов известного вредоносного ПО или правил,
00:06:16
которым соответствует ваш файл, если вас
00:06:18
тоже помечают таким образом, эти
00:06:19
характеристики и правила могут быть
00:06:21
чем-то вроде удобочитаемых строк,
00:06:22
некоторой последовательностью байтов, самим типом файла,
00:06:24
размером файла, тонной
00:06:26
других метаданных и т. д. и
00:06:28
т. п., некоторые из вас, ботаников, могут
00:06:30
подумать, почему бы и нет. мы просто постоянно используем
00:06:31
сами хэши файлов для проверки на наличие вредоносных программ,
00:06:33
и мне очень нравится,
00:06:35
как в этом сообщении в блоге Sentinel one
00:06:36
говорится, что обнаружение басов с лучшей сигнатурой
00:06:38
предлагает ряд преимуществ по сравнению с
00:06:40
простым сопоставлением хэшей файлов сначала с помощью
00:06:43
подписи, которая Сопоставляет
00:06:44
общие черты среди образцов. Аналитики вредоносного ПО
00:06:46
могут нацеливаться на целые семейства
00:06:48
вредоносных программ, а не просто на один образец.
00:06:50
Обнаружение на основе сигнатур, несмотря на его
00:06:52
распространенность, не лишено
00:06:54
недостатков, поэтому давайте будем хулиганами и укажем на
00:06:55
его ненадежность. Обнаружение на основе сигнатур номер один
00:06:57
в первую очередь работает только
00:06:59
хорошо. если у вас есть сигнатура, с которой вы можете
00:07:02
сравнить свой ублюдочный файл,
00:07:04
во-вторых, хотя это намного лучше, чем
00:07:06
просто сравнение хэшей, все равно довольно
00:07:07
легко избежать обнаружения на основе сигнатур,
00:07:09
просто немного подправив свое вредоносное ПО,
00:07:11
да, в те дни, когда вредоносное ПО
00:07:13
вышло медленнее чем мои видео, поэтому
00:07:14
хранить базу данных сигнатур,
00:07:17
содержащую хеши и правила для этих
00:07:18
программ эмоций, было довольно эффективно
00:07:20
для прогулки, однако запятая при той скорости, с
00:07:23
которой в наши дни появляются вредоносные программы,
00:07:24
просто неэффективно или невозможно
00:07:26
писать эффективные сигнатуры для всех этих
00:07:28
уникальных образцы вредоносных программ, которые появляются здесь,
00:07:29
полиморфные вредоносные программы действительно блестят,
00:07:32
поскольку вся предпосылка полиморфных
00:07:33
вредоносных программ заключается в создании вредоносных программ, которые
00:07:35
постоянно меняют свои идентифицируемые
00:07:37
функции, чтобы избежать обнаружения.
00:07:40
Сегодня прямо сейчас в прямом эфире вы можете выстрелить в
00:07:43
свой компьютер из Desert Eagle на
00:07:44
расстоянии сотен метров да какое-то новое
00:07:46
уникальное вредоносное ПО, о котором никто никогда даже не
00:07:48
слышал, вероятно, в любом
00:07:50
случае достигнет его первым. Это настолько распространено
00:07:52
сейчас, не говоря уже о том, что если
00:07:54
набор правил сигнатур является общедоступным, то это всего лишь вопрос
00:07:56
времени, когда разработчики вредоносных программ начнут танцевать
00:07:58
или адаптироваться. И наконец, что
00:07:59
не менее важно, тот факт, что большинство атак
00:08:01
в настоящее время в любом случае являются беспожарными, а это означает,
00:08:03
что вместо того, чтобы сбрасывать полезную нагрузку
00:08:04
на диск, который можно очень легко
00:08:06
обнаружить, вы, скорее всего, будете
00:08:07
выполнять свою полезную нагрузку в памяти, никогда не
00:08:09
прикасаясь к ней. диск с этим урезанным
00:08:11
обнаружением на основе сигнатур, которое основано на
00:08:13
файлах, так что, как вы можете видеть, со всеми
00:08:15
этими моментами и многим другим, которые я
00:08:17
даже не рассмотрел, обнаружение на основе сигнатур. Это не так, в конце концов, это
00:08:19
определенно
00:08:21
лучше, чем ничего не использовать, и
00:08:23
провайдеры AV будут используйте их, но давно прошли те
00:08:25
времена, когда вы могли просто обойти
00:08:26
кого-то, просто полагаясь на это. Это
00:08:28
подводит нас к эвристическому обнаружению
00:08:35
с обнаружением на основе сигнатур,
00:08:37
теперь мы можем перейти к сути и
00:08:38
ксилофонам этих механизмов обнаружения
00:08:41
для борьбы с кислыми попробуйте
00:08:43
обнаружение на основе сигнатур, оставленное в сарлакке,
00:08:45
который находится у вас во рту, принята эвристическая модель,
00:08:47
и, согласно Kaspersky
00:08:49
Casper Sky, в соответствии с этим она
00:08:51
специально разработана для обнаружения подозрительных
00:08:53
атрибутов или характеристик, которые можно
00:08:55
найти в неизвестных новых вирусах и
00:08:57
модифицированных версиях существующие потоки, а
00:08:59
также известные образцы вредоносного ПО, а это
00:09:02
именно то, чего не хватало обнаружению на основе статических сигнатур,
00:09:04
так что это круто и
00:09:06
все такое, но как это хорошо работает?
00:09:07
под общим термином
00:09:10
эвристического обнаружения есть две волны: статическое
00:09:12
эвристическое обнаружение и динамическое
00:09:13
эвристическое обнаружение статическая эвристика
00:09:15
это метод, посвященный анализу файлов.
00:09:18
Файл, о котором идет речь, декомпилируется,
00:09:21
чтобы его исходный код можно было протестировать
00:09:22
на наличие известных вирусов в эвристической
00:09:25
базе данных. Если часть этого
00:09:26
кода проверки соответствует базе данных, то она
00:09:28
помечается как динамическая эвристика в этом
00:09:30
методе. файл находится в песочнице и изолирован,
00:09:32
чтобы увидеть, что он делает и как он
00:09:34
выполняется, не подвергая
00:09:36
риску остальные системные устройства или сети.
00:09:38
В этом разделе мы не ищем
00:09:40
явно сам файл, а что он
00:09:42
делает или не делает t do И т. д., когда
00:09:44
он запускается, основное внимание здесь уделяется поведению.
00:09:47
Когда вы начинаете свой
00:09:49
путь этического хакерства, вы, несомненно,
00:09:50
столкнетесь с ситуациями, когда вам придется либо
00:09:52
просто закодировать свою полезную нагрузку, либо
00:09:53
что-то еще, чтобы доставить вредоносное ПО на свою
00:09:55
цель, и пока оно отлично подходит для
00:09:56
преодоления этих надоедливых статических обнаружений, но
00:09:58
многие люди забывают, что существует
00:09:59
совершенно другой метод эвристики,
00:10:01
который имеет дело с поведением.
00:10:03
Для вас как хакера это не будет иметь большого значения, если вы сможете
00:10:04
обойти статическое обнаружение только для себя. в конечном итоге вы получите
00:10:06
некоторую подпись и промежуточную
00:10:08
полезную нагрузку, например, обратную оболочку от MSF
00:10:10
Venom или что-то в этом роде, не говоря уже о том, что
00:10:11
ваша цель подключается к вам в
00:10:13
каком-то произвольном отчете через TCP, все
00:10:15
волей-неволей. Я думаю, вы снова поняли, к чему я
00:10:17
клоню, это очень высокий уровень,
00:10:18
но нам необходимо
00:10:20
немного рассказать об AVS и их причудах. Ваше желание провести
00:10:23
некоторые исследования, а также есть много
00:10:24
ресурсов по антивирусам, их
00:10:26
манерам, их причудам, их
00:10:28
токсичным особенностям и всему такому, так что давайте будем
00:10:30
предельно ясны. здесь я не призываю
00:10:31
всех вас удалить свои
00:10:32
антивирусы и Gamer Rebellion, потому что
00:10:35
вы думаете, что я осуждаю все AVS, конечно,
00:10:37
некоторые AVS лучше других, но
00:10:39
это не моя точка зрения, нет, совсем нет, нам
00:10:41
разрешено быть критическими и указывать выявить
00:10:43
недостатки вещей, которые должны
00:10:44
нас защищать, если это означает, что мы можем работать
00:10:46
над тем, чтобы сделать его лучше, и некоторые AVS
00:10:48
довольно прилично защищают большинство
00:10:49
людей, если я скажу, что большинство людей уже
00:10:51
достаточно кибергигиеничны с самого начала, так что
00:10:53
это довольно легко обойти Defender
00:10:56
в его нынешнем виде, но я бы предпочел иметь
00:10:58
что-то, чем быть голым и обнаженным на
00:11:00
отвратительном фронте заплесневелых сточных вод, который представляет собой
00:11:02
общедоступный Интернет, при этом
00:11:04
важно отметить, что
00:11:05
антивирус не без своей вины,
00:11:07
очевидно, прав помимо
00:11:09
эвристического уклонения от статических и
00:11:11
динамических, похоже, что в наши дни
00:11:13
с современными угрозами AV может быть просто
00:11:15
недостаточно, или это просто генератор ложных
00:11:17
срабатываний, например, один из моих лучших
00:11:19
друзей на свете или на кого вам следует пойти,
00:11:21
подписаться прямо сейчас однажды показал
00:11:22
простую программу, которая просто печатает
00:11:24
итерации, и меня пометило огромное сообщение,
00:11:26
но чертов инжектор снова был в порядке, в этом
00:11:28
нет ничего идеального, но вы можете видеть, как
00:11:30
AV иногда просто тает, когда дело доходит до
00:11:31
неизвестных угроз, и это отстой,
00:11:33
потому что Анонные угрозы в первую очередь вызывают
00:11:35
наибольшую озабоченность у большинства сотрудников и
00:11:37
работодателей, особенно когда речь идет о
00:11:38
крупных компаниях, и из-за этого AV
00:11:40
может показаться довольно тусклым, с одной стороны, из-за
00:11:42
всех моментов, которые мы упомянули
00:11:44
до сих пор, а с другой, потому что AVS
00:11:46
действительно предназначен для модель для каждого устройства,
00:11:47
которая не очень помогает
00:11:49
организациям с инфраструктурой,
00:11:51
состоящей из сотен, если не тысяч
00:11:53
устройств или конечных точек, и это подводит
00:11:55
нас к edrs
00:12:00
[Музыка],
00:12:01
ну, в любом случае, с чего начинать конечную точку,
00:12:03
можно сказать, что все, что
00:12:04
связано к сети - это конечная точка,
00:12:06
если у вас много
00:12:07
ноутбуков, смартфонов, серверов, удаленно
00:12:09
управляемых pip viper или еще чего-то, это
00:12:11
все конечные точки, а tldr и EDR - это
00:12:14
этот парень с симптомами ярости турбо-роида
00:12:17
и все такое, и EDR обычно делает
00:12:19
все, что AV уже делает это, но
00:12:20
с гораздо большей жестокостью и большей
00:12:23
эффективностью, тогда как антивирус
00:12:25
в первую очередь имеет дело с известными угрозами, которые, опять же, можно
00:12:27
просто обойти с помощью полиморфных
00:12:28
методов. edrs больше ориентированы на
00:12:30
обнаружение неизвестных подозрительных угроз, а
00:12:33
также известных угроз, которые являются частью
00:12:34
реальных угроз. культ обнаружения времени, и у них
00:12:37
гораздо более широкая поверхность защиты,
00:12:38
поскольку вся цель состоит в том, чтобы предоставить
00:12:40
командам безопасности централизованную зону, из
00:12:42
которой они могут отслеживать
00:12:43
движения злоумышленника, как если бы они занимались серфингом на плече,
00:12:45
и, что наиболее важно, они пытаются
00:12:47
защитить массу устройств, некоторые edrs даже
00:12:49
используют алгоритм искусственного интеллекта или машинного обучения,
00:12:51
похоже, что самый занудный программист, о котором
00:12:52
вы когда-либо говорили, учился на их
00:12:54
усилиях, чтобы улучшить и
00:12:57
точность edr, чтобы ограничить количество ложных
00:12:58
срабатываний, но это не означает, что вы не
00:13:00
получите ложных срабатываний
00:13:01
конечно, вы это сделаете, и некоторые решения EDR,
00:13:03
такие как Sentinel 1, даже утверждают, что искусственный интеллект и
00:13:05
машинное обучение эффективно идентифицируют
00:13:07
нулевые дни и многое другое, и это
00:13:09
видео не предназначено для
00:13:10
псевдозащитного видео со списком уровней решений, поэтому
00:13:13
вам настоятельно рекомендуется пойти вы можете узнать больше
00:13:14
об этом самостоятельно, но некоторые
00:13:16
способы, которыми эти защитные меры
00:13:18
выполняют свои защитные задачи, действительно
00:13:20
очень интересны. Антивирус
00:13:23
также действительно дополняет EDR, поэтому вы можете увидеть, что AVS
00:13:25
и edrs используются вместе для
00:13:28
защиты. с учетом сказанного достаточно
00:13:30
теории, что это видео и так длинное,
00:13:32
и мы даже не запрограммировали ни
00:13:33
одной строки кода, поэтому давайте
00:13:35
посмотрим на некоторые методы, которые мы
00:13:36
можем использовать. Помните, что безопасность - это не то,
00:13:38
что может просто будьте откровенны, но
00:13:39
есть продукты, да, однако
00:13:41
сама безопасность - это образ мышления, поэтому, разобравшись с этим в общих чертах,
00:13:43
давайте выясним, как мы можем связываться
00:13:45
с некоторыми аналитиками. Мы хотим
00:13:47
максимально усложнить жизнь аналитикам,
00:13:49
когда создаем наше вредоносное ПО, и
00:13:50
это подводит нас к наша первая
00:13:51
техника антианализа
00:13:53
[Музыка]
00:13:57
наверняка большинство из вас уже знают, в
00:14:00
чем прав отладчик, это просто
00:14:01
вещи, которые позволяют вам изучить, что происходит
00:14:03
внутри приложения, а как
00:14:05
аналитик вы хотите иметь возможность исследовать
00:14:06
вредоносное программное обеспечение и вы, как правило,
00:14:08
будете делать это через
00:14:09
отладчик, проблема в том, что
00:14:11
вредоносное ПО с ограниченными возможностями часто будет делать все
00:14:13
возможное, чтобы сделать вашу жизнь как аналитика
00:14:14
абсолютной помощью. Вредоносное ПО обычно хочет
00:14:16
сделать все возможное, скрываясь от вас и двух.
00:14:18
если оно обнаружено, то проверьте его как
00:14:21
можно сложнее. Хуже всего то, что
00:14:23
самые базовые реализации этого
00:14:25
антиотладочного поведения, которое использует вредоносное ПО,
00:14:27
могут быть выполнены с помощью всего лишь одной
00:14:29
функции, однако есть и другие способы
00:14:31
сделать это, определенно говоря об этом,
00:14:32
давайте Посмотрите на эту чрезвычайно простую
00:14:34
реализацию. Очень простая проверка, которую
00:14:36
мы можем сделать, чтобы узнать, происходит ли отладка,
00:14:37
заключается в использовании функции с метким названием is debugger
00:14:39
Present, вот как это может
00:14:41
выглядеть, потому что мы знаем, что эта
00:14:43
функция вернет true, если она отлаживается
00:14:45
дефугировано или ложно, если это не так, мы можем
00:14:47
настроить такую ​​проверку и увидеть, что
00:14:49
если отладчик отсутствует, мы можем
00:14:51
запустить нашу сверхопасную вредоносную программу,
00:14:54
какого черта вы пытаетесь
00:14:56
начать апокалипсис, я понимаю, мы делаем
00:14:58
вредоносное ПО и всякое [ __ ], но окно сообщения W, поскольку
00:15:01
ваша полезная нагрузка не такая уж и экстремальная,
00:15:03
вы агрессивны, ох, черт, да, извините, я
00:15:06
забегаю вперед,
00:15:09
ладно, хорошо, так что мы увидим, что если мы просто
00:15:12
запустим эту программу после ее компиляции, она станет
00:15:13
гипервредной. код
00:15:15
будет выполнен, однако, если мы начнем с
00:15:18
его отладки, и помните, что вы можете сделать
00:15:19
это с помощью любого отладчика, вам не нужно
00:15:20
просто использовать Visual Studio, мы видим, что
00:15:22
наша вредоносная программа стреляет сама по себе и не
00:15:23
запускается, поэтому вы можете это увидеть это очень просто, и
00:15:25
это всего лишь одна функция, и это круто,
00:15:27
и все, но вам также следует поставить себя
00:15:28
на место защиты, подумайте о том,
00:15:30
что может подумать аналитик, если он попытается
00:15:31
отладить вашу программу и увидит это, так что это еще
00:15:33
одна менее подозрительная вещь, которую вы
00:15:35
можно сделать, если присутствует отладчик, и
00:15:36
заставить программу запустить что-нибудь
00:15:37
совершенно безобидное, например, заставить
00:15:39
конденсаторы материнской платы вашей цели
00:15:40
взорваться, хорошо, давайте продолжим,
00:15:42
теперь это кажется очень простым и очень
00:15:44
простым, и это потому, что,
00:15:45
однако, это так, как вы могли догадаться по теперь,
00:15:47
когда ваша вредоносная программа вызывает функцию, например,
00:15:49
присутствует ли внутри нее [ __ ], это
00:15:51
чертовски подозрительно и даже не смешно,
00:15:53
окей, это похоже на то, как грабитель банка пытается
00:15:55
выяснить, сколько камер
00:15:56
в банке, спрашивая чертовых
00:15:58
охранников, так как Что касается более незаметного
00:16:01
подхода, мы фактически будем делать
00:16:03
то же самое, за исключением более низкого уровня,
00:16:05
например, чтобы не направлять
00:16:07
на себя гигантский светодиодный прожектор игровой комнаты. Еще одна небольшая
00:16:10
альтернатива функции отладчика.
00:16:12
Скажем, вы хотите проверить, является ли другая
00:16:13
функция удаленный что-то, что вы
00:16:15
не запускали, вы можете вызвать
00:16:16
функцию проверки присутствия удаленного отладчика, которая
00:16:18
делает то же самое, и вот
00:16:20
как это может выглядеть, и еще одна вещь,
00:16:21
которую вы могли бы сделать, это вызвать
00:16:23
функцию ntapi более низкого уровня, называемую anti-
00:16:26
процесс запроса информации, чтобы получить некоторую
00:16:27
информацию о процессе, включая
00:16:29
указатель на нашу структуру PEB целевого процесса,
00:16:31
но мы очень
00:16:32
скоро рассмотрим этот процесс, не волнуйтесь, если это не
00:16:34
сбивает с толку прямо сейчас, потому что мы
00:16:35
очень скоро углубимся в эту тему. эта
00:16:37
функция и другие функции в
00:16:39
расширении будут иметь гораздо больше смысла, как только
00:16:40
мы рассмотрим две жизненно важные структуры,
00:16:42
связанные с процессами и потоками, зная, что
00:16:44
эти структуры позволят нам понять,
00:16:45
как эти функции проверки отладки даже
00:16:47
работают для начала, и вам лучше
00:16:49
волноваться прямо сейчас потому что мы собираемся
00:16:51
начать реверс-инжиниринг
00:16:52
[Музыка]
00:16:56
на этом этапе вы должны быть хорошо
00:16:58
знакомы с тем, что такое процесс и
00:17:00
поток, если нет, посмотрите первое
00:17:02
видео из нашей серии о разработке вредоносных программ,
00:17:04
нам нужно поговорить о том, что такое
00:17:06
PEB и вкладка и как некоторые
00:17:08
функции, такие как наличие отладчика или
00:17:09
получение последней ошибки, сводятся к чтению
00:17:11
значений из этих структур, когда
00:17:12
процесс создается, и основной поток
00:17:14
запускается и выполняется, и все такое,
00:17:16
есть эта очень важная структура, в которой
00:17:18
хранится некоторая информация об этом.
00:17:20
поток, и эта структура называется
00:17:22
блоком среды потока, из этой
00:17:24
структуры мы можем видеть некоторых членов
00:17:25
в ней, вы можете увидеть много этой интересной
00:17:27
информации, вы помните, как в последнем
00:17:28
видео мы использовали API получения последней эры, чтобы
00:17:31
сообщить нам об ошибке коды, которые мы можем
00:17:32
найти в документации, пока они получают
00:17:34
функцию последней ошибки, все, что она делает, это считывает
00:17:36
значение с вкладки в последнем
00:17:38
элементе значения ошибки, это все, что она делает, вы
00:17:40
можете увидеть это прямо здесь, вы можете увидеть, как
00:17:42
некоторые из этих API Windows функции просто в
00:17:44
конечном итоге читают эти очень примитивные
00:17:46
структуры, они не являются примитивными в
00:17:47
смысле сложности или ее отсутствия,
00:17:49
поверьте мне, эти структуры могут быть очень-
00:17:51
очень сложными, но с точки зрения того, как рано
00:17:52
они появились, возможно, Primal было бы
00:17:54
лучшим словом, ну, это это здорово, но давайте
00:17:56
углубимся, где именно находится структура,
00:17:58
в памяти Windows
00:18:00
есть определенные регистры, которые всегда будут
00:18:02
содержать ссылку на вкладку и, как
00:18:03
следствие, структуру pep, о которой мы
00:18:05
скоро поговорим, эти
00:18:06
структуры хранятся в регистрах сегментов fs и GS
00:18:08
используемый регистр
00:18:10
определяется архитектурой, на которой
00:18:12
вы работаете. В 32-разрядной версии структура вкладок
00:18:14
будет расположена в регистре сегмента fs
00:18:16
по смещению 18. В 64-разрядной версии
00:18:19
она расположена в регистр сегмента Gs
00:18:21
со смещением 30. Также обратите внимание, что в
00:18:24
32-битном сценарии вы можете услышать, что TI — это
00:18:26
блок информации о потоке, а
00:18:27
Tib также известен как teb. Эти
00:18:30
термины взаимозаменяемы, это одно и
00:18:32
то же, если мы повторите, что функция получения последней
00:18:34
ошибки сводилась к тому, как
00:18:36
она читается с вкладки. Если мы посмотрим на
00:18:37
саму функцию текущей вкладки NT, мы
00:18:40
можем пойти на шаг ниже и посмотреть, что
00:18:42
делает эта функция, как и следовало ожидать,
00:18:43
да, это буквально просто указатель из
00:18:45
регистр fs со смещением 18, который, как
00:18:47
мы знаем, находится там, где находится вкладка, если бы это было
00:18:50
в 64-битной версии, это было бы ключевым словом Regis
00:18:53
со смещением 30. поскольку на него
00:18:55
ссылается регистр fs, мы знаем,
00:18:56
что это для 32-битной версии. Еще одна вещь, которую
00:18:58
вы можете заметить, это то, как
00:19:00
выглядит структура вкладок Barren, когда вы просматриваете
00:19:01
msdn, по сравнению с тем, как вы вручную сбрасываете
00:19:03
ее из чего-то вроде отладчика Wind, вы
00:19:05
получаете ее с такого сайта, как Virginius, и
00:19:06
первое, что мы замечаем, это то, насколько она
00:19:08
крошечная. здесь и после того, как мы
00:19:10
заметили, что мы видим, что многие из
00:19:12
этих полей просто зарезервированы,
00:19:14
и Microsoft, как я обнаружил, делает это для
00:19:16
многих недокументированных вещей, см.
00:19:18
Microsoft не особенно любит, когда мы
00:19:19
делаем это и
00:19:21
пачкаем руки вещи более низкого уровня, которые он
00:19:23
не любит, когда мы копаемся, когда мы в
00:19:25
конечном итоге заменим
00:19:26
отлаживаемую функцию нашей собственной
00:19:28
альтернативой, мы увидим, что Microsoft
00:19:29
не рекомендует это, и они скажут
00:19:31
вам не использовать ее таким образом из
00:19:33
их С другой стороны, довольно легко понять, почему
00:19:34
они это делают, если, во-первых, негласное
00:19:36
правило недокументированных внутренних компонентов заключается в том, что
00:19:38
они могут и в конечном итоге, скорее всего,
00:19:40
изменятся без предварительного предупреждения, а некоторые
00:19:42
структуры получают новое топливо с новой
00:19:44
версией Windows, и множество номеров системных вызовов
00:19:46
меняют то, что версии, и мы
00:19:47
сделаем небольшое предупреждение о спойлере и посмотрим на
00:19:50
структуру pep из msdn, чтобы увидеть,
00:19:51
что на самом деле означает зарезервированное слово,
00:19:53
и просто сначала они
00:19:54
предупреждают, что структура может быть изменена
00:19:56
в будущих версиях Windows, а затем
00:19:57
для всех зарезервированные участники, они просто
00:19:59
говорят, что они зарезервированы для внутреннего использования
00:20:01
операционной системой, это, по
00:20:03
сути, дело Microsoft, и я просто
00:20:04
перефразирую здесь, эй, [ __ ], мы не
00:20:06
хотим, чтобы ты возился с этими вещами,
00:20:07
оставь это проклятому компьютеру, чтобы
00:20:09
справиться с этим. склонен к изменениям
00:20:10
без предупреждения, как и в случае с большинством
00:20:12
низкоуровневых недокументированных вещей,
00:20:14
останавливает ли это нас, нет, вовсе не
00:20:16
в попытке консолидировать наше
00:20:19
обучение, что мы собираемся сделать, это
00:20:20
создать новый проект, в котором мы создаем
00:20:22
собственную версию функции получения последней ошибки,
00:20:25
которую мы использовали в
00:20:27
предыдущем видео, когда создавали
00:20:29
инжектор, и собираемся сделать это, чтобы
00:20:31
точно понять, как работает эта функция
00:20:33
и как вкладка связана со
00:20:35
всеми мы находимся в основе всего
00:20:37
этого, поэтому мы можем просто начать с создания
00:20:38
нового проекта, но поскольку
00:20:40
в этом проекте мы собираемся использовать сборку, нам
00:20:41
придется выполнить небольшую
00:20:43
настройку. Чтобы
00:20:44
наш проект, как вы знаете, мог использовать
00:20:47
ассемблер, поэтому в
00:20:48
первую очередь нам нужно щелкнуть правой кнопкой мыши по нашему
00:20:50
проекту, перейти к созданию зависимостей и
00:20:52
созданию настроек в этом меню в
00:20:55
этом поле, что мы собираемся сделать, это
00:20:56
Включите это, чтобы мы могли использовать ассемблер в
00:20:58
нашей программе, и теперь у нас будет
00:21:00
возможность выбрать
00:21:02
опцию ассемблера Microsoft Macro для любых файлов сборки,
00:21:05
которые мы решим добавить в наш проект,
00:21:06
говоря о том, что мы собираемся сделать,
00:21:07
это создайте файл сборки, который
00:21:09
получит для нас вкладку, а затем прочитайте это
00:21:11
последнее значение ошибки в случае сбоя функции,
00:21:13
которую мы собираемся намеренно сделать неудачной,
00:21:15
просто чтобы доказать нашу точку зрения,
00:21:16
вызовите этот последний error.asm и прежде чем мы
00:21:19
сможем фактически начать включив это, мы
00:21:21
должны убедиться, что он настроен правильно,
00:21:22
поэтому щелкните правой кнопкой мыши по этому элементу и перейдите к свойствам,
00:21:24
и если этот тип элемента еще не
00:21:26
выбран как ассемблер макросов Microsoft,
00:21:28
иногда это может быть для меня, в данном
00:21:30
случае это уже все, что у вас есть.
00:21:32
нужно перейти в раскрывающееся меню и найти его.
00:21:34
Если вы не включили максимальный
00:21:36
выбор в зависимостях сборки проекта,
00:21:38
этот параметр не будет
00:21:39
отображаться, поэтому сначала убедитесь, что он включен,
00:21:41
прежде чем пытаться это сделать, а затем выберите его,
00:21:42
как только это будет сделано, вам следует можно
00:21:44
начать сейчас, к сожалению, это не
00:21:46
будет ассемблер 101 или
00:21:49
введение в программирование на ассемблере, при этом
00:21:50
я постараюсь изо всех сил
00:21:52
объяснить, что происходит, пока
00:21:54
вы все еще знаете, как сделать все компактным, и
00:21:56
что мы собираемся делать сначала создадим
00:21:58
раздел кода для нашей ассемблерной программы,
00:21:59
а затем в этом разделе кода мы
00:22:01
начнем создавать процедуру, которую
00:22:03
вы можете воспринимать как небольшую
00:22:04
функцию, которую мы собираемся начать с
00:22:06
создания процедуры, которая получает tab
00:22:07
и помещает его в регистр, а затем,
00:22:09
после того, как мы выполним эту процедуру,
00:22:11
мы создадим новую процедуру, в которой
00:22:13
мы извлекли этот последний
00:22:15
элемент или поле значения ошибки из вкладки,
00:22:26
поэтому здесь мы переместили
00:22:29
адрес вкладки, расположенной в
00:22:31
G, зарегистрируйте смещение 30 в
00:22:32
Rax, поэтому мы фактически только что получили
00:22:35
вкладку, и где-то в дальнейшем вы
00:22:38
можете увидеть, что люди не используют никакого
00:22:39
смещения, когда получают вкладку, и это
00:22:40
совершенно нормально вы также можете сделать это так,
00:22:42
поскольку в этой статье говорится, что это не
00:22:43
принято делать, но вы можете это сделать, и
00:22:45
во всех смыслах и целях это должно
00:22:47
работать нормально, просто если вы
00:22:48
ссылаетесь на него сами или получаете фактический
00:22:50
элемент самой вкладки затем это позволяет использовать
00:22:52
другие вещи, такие как арифметика указателей
00:22:54
и тому подобное, но мне просто нравится
00:22:55
делать это таким образом, поэтому мы
00:22:56
собираемся сделать это, определив эту процедуру,
00:22:58
теперь мы можем начать создавать другую
00:22:59
процедуру, которая будет получать это последнее
00:23:02
значение ошибки из на вкладке
00:23:19
с этим сделано мы можем использовать
00:23:21
ключевое слово end, чтобы сообщить ему, что мы закончили
00:23:24
с этим, и давайте поговорим об этой
00:23:25
процедуре, поэтому в пользовательской ошибке мы
00:23:27
определяем процедуру, в которой
00:23:28
мы сначала удаляем или просто создаем чистый
00:23:30
лист для этого регистра, потому что он
00:23:32
будет зорбирован сам по себе, он
00:23:33
обнулится, а затем мы вызываем эту
00:23:35
процедуру, поэтому помните, что мы
00:23:37
здесь делаем, это получаем домашнее животное или, извините, вкладку
00:23:38
после того, как мы получим вкладку, что мы мы собираемся
00:23:40
переместить вкладку, расположенную в Rex.
00:23:42
Причина, по которой мы выбрали 68 для перемещения в
00:23:44
регистр eax, заключалась в том, что 68 находится по смещению,
00:23:47
по которому находится этот последний элемент значения ошибки,
00:23:49
и это тот код ошибки, который мы
00:23:51
получаем, и мы можем видите, что это
00:23:53
длинный тип U или длинный тип U, поэтому мы
00:23:55
собираемся сделать указатель на слово d, о, да,
00:23:58
это должно быть завершающей процедурой, теперь
00:24:00
что мы можем сделать, это создать файл C, в котором
00:24:02
мы фактически будем использовать эти два
00:24:03
процедуры и так прямо из сборки.
00:24:05
Разве это не круто, и не волнуйтесь слишком
00:24:07
сильно, вы можете найти весь этот код, о котором
00:24:09
мы говорили в этом видео, в
00:24:10
описании на моем GitHub, он будет
00:24:13
там, так что не волнуйтесь слишком много, хорошо,
00:24:14
теперь давайте сделаем наш файл C в порядке, и я
00:24:17
также мне не нравится помещать все свои
00:24:18
включения и все в мой файл C, поэтому
00:24:20
я собираюсь также создать
00:24:21
заголовочный файл, которого у вас нет на
00:24:22
самом деле ты этого не делаешь, но мне просто нравится делать
00:24:24
это вот так, я включу все
00:24:26
библиотеки, которые нам понадобятся,
00:24:27
так как мы делаем кучу
00:24:28
дерьма для Windows, которое нам придется включить
00:24:29
заголовок Windows, а также еще один заголовок, о
00:24:31
котором мы поговорим, как только я его включу,
00:24:32
поэтому причина, по которой я включил
00:24:34
внутренний заголовок, заключается в том, что без
00:24:36
внутреннего заголовка нам придется предоставить
00:24:38
наши собственные структуры для вкладки и
00:24:40
PEB и другие могут оказаться очень утомительными,
00:24:42
но я настоятельно рекомендую вам сделать это просто
00:24:44
для того, чтобы вы лучше поняли
00:24:46
эти структуры и то, что эти
00:24:47
структуры требуют дальше. Я просто собираюсь
00:24:49
выложить некоторые из этих макросов, которые
00:24:51
я использовал. использовать Lifesavers для отладки,
00:24:53
хорошо,
00:24:54
теперь очень хорошо, чтобы использовать
00:24:56
процедуры сборки, которые мы определили
00:24:58
в файле сборки, нам придется
00:24:59
использовать внешнюю клавиатуру, чтобы сообщить этой
00:25:02
программе, что она должна получить
00:25:03
ее откуда-то еще. конкретно
00:25:04
отсюда,
00:25:09
поэтому мы хотим, чтобы эта функция возвращала
00:25:11
точку на вкладку, потому что это то, что
00:25:13
мы делаем, мы получаем вкладку, поэтому
00:25:15
я просто установил это как тип данных, и она
00:25:16
не принимает аргумент или что-то в этом роде
00:25:18
мы просто закроем это,
00:25:19
выполнив void внутри круглых скобок,
00:25:21
следующее - это внешняя пользовательская ошибка,
00:25:27
поэтому причина, по которой это слово d, заключается в том, что
00:25:30
если мы вернемся к этому или любому другому
00:25:32
объекту, из которого вы удалите вкладку, она
00:25:34
исчезнет. чтобы показать вам это как тот тип, который вам
00:25:36
нужен, правильный или беззнаковый длинный, и мы
00:25:38
уже знаем, что слово d - это просто
00:25:40
причудливый способ сказать беззнаковый длинный, поэтому
00:25:43
вместо слова d вы могли бы
00:25:44
просто поместить его туда, но я имею в виду, что это
00:25:46
на ваше усмотрение, я просто сделаю это,
00:25:48
давайте начнем с печати
00:25:50
значения вкладки после того, как мы ее получим,
00:25:52
просто чтобы убедиться, что мы действительно получили
00:25:53
вкладку, после чего мы намеренно
00:25:54
сделаем функцию невыполненной и причину, по которой
00:25:56
мы Мы делаем это потому, что хотим
00:25:57
сравнить нашу пользовательскую функцию ошибок с чем-
00:25:59
то, что, как мы знаем, будет
00:26:00
работать как функция получения последней ошибки, так что
00:26:02
давайте сделаем это,
00:26:11
хорошо, я знаю, что такое форматирование выглядит безумным
00:26:14
и сумасшедшим, но это именно
00:26:15
то, как мне нравится форматировать мои структуры или
00:26:18
функции и любые значения, которые
00:26:21
в них хранятся, например, мои дескрипторы моих процессов
00:26:23
и потоков, а также дескрипторы модулей
00:26:25
или адресов функций. Мне нравится
00:26:27
это делать, и этого не должно быть,
00:26:30
поэтому мы собираемся распечатать
00:26:31
значение вкладки здесь, давайте на самом деле
00:26:33
просто посмотрим, работает ли это очень быстро,
00:26:35
окей, круто, да, это действительно круто, поэтому мы
00:26:38
можем увидеть, что она работает, это
00:26:39
адрес вкладки на данный момент, где
00:26:40
никто не знаком с открытием дескрипторов
00:26:43
процессов, вот что мы мы собираемся
00:26:44
сделать, за исключением того, что в этом случае мы
00:26:45
намеренно сделаем его неудачным, поэтому для
00:26:47
значения PID мы собираемся установить что-то
00:26:49
совершенно неправильное,
00:26:55
внешнее,
00:26:59
так что это не будет законным
00:27:00
идентификатором процесса, и поэтому оно будет потерпеть неудачу, и
00:27:02
мы уже знаем, какое значение ошибки ожидать,
00:27:03
потому что мы говорили об этом
00:27:05
раньше, помните, если вы не
00:27:06
понимаете, о чем я говорю, вернитесь к
00:27:08
другим видео и посмотрите их, которые мы знаем
00:27:09
из нашего предыдущего раза что мы получили
00:27:12
неправильный параметр для этой функции, она
00:27:14
вернет следующий код ошибки,
00:27:15
она вернет ошибку, недопустимый
00:27:18
параметр, код ошибки, который представляет собой всего лишь
00:27:20
десятичное число 87 или шестнадцатеричное число 57, и это значение,
00:27:23
которое мы будем искать.
00:27:24
посмотрим, возвращает ли наша функция то же самое, что и именно
00:27:25
поэтому, почему
00:27:29
я получил это возвращение, за исключением
00:27:31
отказа с самого начала, что
00:28:03
и это должно быть так, и что мы
00:28:05
делаем, мы собираемся проверить,
00:28:07
идет ли это быть нулевым, а это будет,
00:28:08
мы знаем, что будет, потому что,
00:28:09
если эта функция когда-либо даст сбой, то, что она
00:28:11
вернет, будет нулевым, в случае, если
00:28:13
она неизбежно завершится неудачей, мы скажем:
00:28:15
окей, она не удалась, это хорошо,
00:28:17
не надо Не волнуйтесь, а затем мы собираемся
00:28:18
распечатать значение нашей пользовательской
00:28:19
функции ошибок, а затем значение из
00:28:21
функции получения последней ошибки, и если эти два значения
00:28:22
совпадают, мы увидим, что они совпадают, наша
00:28:24
функция будет работать правильно,
00:28:26
в противном случае что-то пошло бы не так. неправильно, и просто
00:28:28
распечатайте, каким на самом деле
00:28:29
должно быть значение, чтобы мы могли
00:28:30
устранить неполадки, давайте запустим это и посмотрим, что
00:28:32
произойдет, круто, хорошо, так что да, это работает
00:28:34
отлично, мы получаем значение 57, и оно
00:28:37
печатает значение 57, которое работает
00:28:38
фантастически, и это не просто
00:28:40
случайность, говоря, что мы хотели получить доступ к
00:28:42
привилегированному процессу, например, к
00:28:44
системному процессу, на который будет
00:28:45
ссылаться идентификатор процесса, равный четырем.
00:28:47
Мы ожидаем, что это будет
00:28:49
код ошибки 5 для доступ запрещен, так что
00:28:52
давайте посмотрим, работает ли это, это работает
00:28:54
невероятно, и да, просто чтобы
00:28:56
доказать это, пять - это доступ к девяти, так что да,
00:28:58
это работает правильно, потрясающая штука,
00:29:01
еще один важный элемент, который мы можем видеть
00:29:03
в структуре вкладок, - это
00:29:05
структура PEB, и это это очень, очень
00:29:07
печально известная и блестящая структура как для разработчиков вредоносных программ, так
00:29:09
и для аналитиков. Вы будете
00:29:11
часто видеть эту ссылку по мере продвижения в
00:29:13
своем путешествии.
00:29:18
Блок среды процесса - это
00:29:20
структура, очень похожая на вкладку, он
00:29:22
дает вам представление текущего режима пользователя
00:29:24
процесс, у него много
00:29:26
членов, и он может позволить вам выяснить
00:29:27
много интересных вещей, которые мы видим, что в 32-битных
00:29:30
системах pep можно найти из ванны
00:29:32
по смещению 30. другими словами, мы
00:29:35
можем найти структуру pep на 32-битных
00:29:36
системах в регистре сегмента фс по
00:29:39
смещению 30. как вы думаете, что это
00:29:40
для 64-битной, давайте на секунду,
00:29:41
давайте просто угадаем,
00:29:44
что иностранное правильно, на 64-битной оно будет
00:29:46
расположено в Gs регистр сегмента со
00:29:48
смещением 60. Теперь, что делает эту
00:29:50
структуру такой особенной, давайте посмотрим на
00:29:52
некоторые сценарии: вы хотите
00:29:53
выяснить, какие аргументы командной строки
00:29:54
были переданы процессу, этот член говорит вам,
00:29:56
что вы хотите выяснить, какие библиотеки DLL
00:29:58
и модули имеют был загружен вашим
00:29:59
процессом, ну, это не дальше этого,
00:30:01
и есть еще один член, в
00:30:03
частности, который будет в
00:30:04
авангарде наших целей, - это
00:30:06
ошибка в члене, этот член находится в
00:30:08
PEB по смещению двух, поэтому вы знаете,
00:30:11
как я упомянул, что присутствует отладчик,
00:30:13
просто считывает значение из
00:30:15
структуры pep, хотя я не лгал,
00:30:16
посмотрите на это, мы получаем структуру pep,
00:30:18
которая просто будет считывать
00:30:19
значение из одного из этих сегментных
00:30:20
регистров в зависимости от того, на какой архитектуре,
00:30:22
а затем он проверяет, является ли
00:30:24
отлаживаемый элемент из этой структуры и является ли
00:30:26
он логическим, он отлаживается или
00:30:27
нет, и мы видим, что все это время
00:30:29
эта функция просто считывала значение,
00:30:30
и вместо вызова этого отладчика
00:30:32
мы можем вместо этого просто запрограммируйте
00:30:33
что-то очень похожее, чтобы мы
00:30:35
не вызывали суперподозрительный API, и
00:30:37
есть много других способов, которыми мы можем это сделать.
00:30:38
Один общий способ - сделать
00:30:40
следующее в файле c или C plus plus,
00:30:41
правильно, мы просто даем здесь PEB мы читаем
00:30:43
значение из регистра GS со
00:30:45
смещением 60, которое, как мы теперь знаем, является pep в
00:30:47
64-битной версии. Мы приводим это к указателю на
00:30:50
эту структуру pep, чтобы наш pep
00:30:52
теперь позволял нам взаимодействовать с pep, а
00:30:54
затем и с его членами. Итак, давайте начнем
00:30:55
с проверки значения отлаживаемого
00:30:57
члена и посмотрим, отлаживаемся ли мы
00:30:59
или нет, помните, что это именно то, что
00:31:00
функция win API делала все это время, и
00:31:02
теперь, как и ожидалось, если мы запустим ее без
00:31:04
отладки, она сообщит нам об этом. как
00:31:06
таковой, однако, если мы запустим
00:31:08
опцию отладчика, он сообщит нам, что мы
00:31:10
отлаживаемся, и все это без вызова
00:31:11
функции отладчика. Теперь еще одна вещь, которую
00:31:13
мы могли бы сделать, это просто получить бодрость духа напрямую,
00:31:15
используя сборку в нашей программе, хорошо,
00:31:16
вот что мы получим началось с какой-то
00:31:18
ерунды, связанной со сборкой PEB, что мы
00:31:20
собираемся сделать, так это получить бодрость
00:31:22
прямо от сборки, к счастью, мы
00:31:24
уже рассмотрели, как подготовить наш проект
00:31:27
к разработке сборки, поэтому я
00:31:29
собираюсь пропустить это и это
00:31:31
довольно стандартная штука из вкладки,
00:31:33
вместо того, чтобы получать вкладку, мы
00:31:34
собираемся просто получить бодрость, а затем
00:31:35
получить отлаживаемый элемент из
00:31:38
этого PEB, так что давайте сделаем это
00:31:56
хорошо в нашем файле сборки, начнем
00:31:58
работать код,
00:32:23
очевидно, кажется хорошим, мы знаем, что
00:32:24
этот член представляет собой просто размер Char или
00:32:27
размер укуса, поэтому мы делаем
00:32:29
указатель укуса, о, мы получаем PEB, а
00:32:31
затем мы проверяем расчленение и
00:32:32
какой бы член это ни был, мы отсюда мы собираемся
00:32:34
что-то сделать, так что помните, поскольку
00:32:35
мы используем azim, нам придется
00:32:37
вызвать его извне,
00:32:45
хорошо, вы должны понимать, почему мы
00:32:48
предварительно сталкиваемся с этими двумя, хорошо, давайте
00:32:49
настроим основную функцию,
00:32:56
и я уверен это можно упростить,
00:32:57
вместо того, чтобы ни в коем случае не быть
00:32:59
экспертом в программировании на ассемблере,
00:33:13
и у нас также будет полезная нагрузка здесь, и
00:33:15
это глупо, прямо здесь, поэтому я могу
00:33:16
использовать окно сообщения W, если я хочу, чтобы с
00:33:28
этим все было в порядке, мы должны быть хорошо,
00:33:30
давайте начнем это регулярно
00:33:33
ах, черт возьми, да, круто, мы видим,
00:33:37
что он не отлаживается правильно, что
00:33:39
он будет выполнять нашу полезную нагрузку, однако, если
00:33:41
мы начали с
00:33:44
обнаруженным отладчиком-отладчиком и все это без
00:33:46
вызова is отладчика, мы просто
00:33:48
как бы эмулируем эта функция с использованием
00:33:50
сборки Straight Up, это круто,
00:33:52
и в этом я с вами на одном уровне,
00:33:54
окей, на самом деле не имеет значения, получим ли мы
00:33:56
PEB вот так, вместо использования
00:33:57
раздутой функции Win API, потому что
00:34:00
аналитик увидит это линия и все,
00:34:02
что обычно ссылается на
00:34:05
регистр GS со смещением 60 или fs со
00:34:08
смещением 30, приличный аналитик будет знать, что на
00:34:10
PEB ссылаются или
00:34:11
где-то заполняется, так что опять же, это всего лишь
00:34:14
один метод, который вы можете использовать, теперь
00:34:16
возникает вопрос, это очень просто для нас,
00:34:18
поскольку мы отлаживаем нашу собственную программу,
00:34:19
но как, черт возьми, мы можем проверить,
00:34:21
включен ли отлаживаемый элемент
00:34:23
для другого процесса, которым мы не
00:34:24
владеем, позвольте мне познакомить вас с
00:34:26
функцией получения информации о запросе NT, которую я выиграю Я не буду
00:34:28
подробно рассматривать эту функцию, так как это будет
00:34:30
вашим домашним заданием из этого видео, хотя
00:34:31
обратите внимание, что вам придется
00:34:32
коснуться вашего NT API ntdll, понимая, что
00:34:35
вы можете получить информацию о
00:34:36
процессе, включая PEB целевого
00:34:38
процесса, и как только вы если у вас есть желание, вы
00:34:39
просто сможете проверить
00:34:41
отлаживаемое значение, чтобы увидеть, отлаживается ли удаленный
00:34:42
процесс или нет,
00:34:44
это оставлено в качестве упражнения, которое вы можете
00:34:46
выполнить, а теперь давайте обсудим, как мы,
00:34:48
аналитики и разработчики, могли бы быть в состоянии
00:34:50
обойти эту технику антианализа
00:34:51
с помощью исправлений,
00:34:58
что, если мы хотим быть анти-
00:35:00
анти-отладчиками, хорошо, что, если мы хотим
00:35:02
надеть наши маленькие синие
00:35:04
кольца-фонарики и запустить какое-то вредоносное ПО во время
00:35:06
его отладки, но это надоедливо
00:35:08
и он продолжает завершаться до того, как мы сможем
00:35:09
что-либо сделать, но бойтесь, что, как вы уже знаете,
00:35:11
большинство этих антиотладочных
00:35:13
функций или чего-то еще просто сводятся к
00:35:15
PEB со смещением двух I.E
00:35:17
отлаживаемого элемента, поэтому все эти
00:35:19
функции просто читают это значение чтобы
00:35:20
проверить, установлено ли для него единицу, поэтому, если наша
00:35:22
вредоносная программа делает то же самое, мы можем
00:35:23
просто исправить этот член до нуля и заставить
00:35:25
вредоносную программу думать, что она не
00:35:27
отлаживается, хотя на самом деле это так. Я
00:35:28
сделаю это для локального процесса, но
00:35:30
логика та же самая для удаленного
00:35:31
целевого процесса, но опять же я оставлю это
00:35:33
для вас, чтобы вы могли с ними повозиться, и
00:35:34
теперь мы собираемся делать это на сборке.
00:35:36
Самое замечательное в этом
00:35:37
исправлении сборки - это то, что 95 наших
00:35:40
основная работа для нас уже сделана
00:35:41
здесь, мы получаем бодрость, единственное, что
00:35:43
нам нужно сделать сейчас в сборке, это проверить,
00:35:45
является ли отладка нулевой или
00:35:47
нет, и если она не равна нулю, мы перейдем к
00:35:48
другому разделу этого кода который мы
00:35:50
запрограммируем, поэтому сначала
00:35:51
мы собираемся проверить, равен ли e x
00:35:54
нулю или нет,
00:35:55
и если он не равен нулю, мы собираемся построить
00:35:57
график перехода 0 к этому разделу патча, который
00:35:59
мы собираемся запрограммировать.
00:36:07
и вот, что мы бы сделали, это
00:36:09
заставили бы бодрость духа перезаписать то, что там есть при
00:36:11
делении на ноль,
00:36:12
эффективно исправляя это, поэтому, если
00:36:13
вредоносное ПО должно было определить, отлаживается оно
00:36:15
или нет, если оно проверяет отладку,
00:36:16
оно не будет появятся в таком виде,
00:36:18
и они собираются обойти
00:36:19
проверку, так что давайте сначала посмотрим, как мы можем
00:36:20
это запрограммировать здесь. Я думаю, нам следует
00:36:22
изменить имя этого, потому что это может
00:36:24
запутать, если мы
00:36:26
попытаемся сделать это так Я просто назову его
00:36:27
ped Patcher или что-то в этом роде,
00:36:32
теперь мы будем делать классическую небольшую
00:36:34
проверку элементов вкладки вместо проверки
00:36:35
отладчика. Помните, что,
00:36:37
честно говоря, он делает то же самое,
00:36:47
и потому что мы хотим, чтобы наше вредоносное ПО работало,
00:36:48
даже если мы вносим исправления. если по
00:36:50
какой-то причине домашнее животное, являющееся ошибкой, не
00:36:52
установлено на ноль, после этого патча вернет
00:36:54
выход Exit
00:37:02
Foreign,
00:37:03
да, мы сможем проверить до
00:37:05
и после, поэтому мы увидим, что если мы запустим
00:37:06
его с помощью отладчика, все пойдет чтобы обнаружить,
00:37:08
что он отлаживается, очевидно, правильно,
00:37:09
но после этого он перейдет в нашу
00:37:11
процедуру PEB Patcher, которая
00:37:14
проверит его, чтобы увидеть, будет ли он установлен
00:37:15
на ноль или нет, и если он не установлен на
00:37:17
ноль, это означает, что он отлажено,
00:37:19
я собираюсь перейти к этой области исправлений и
00:37:21
исправить ее, после чего она должна распечатать,
00:37:23
что следует переименовать их,
00:37:26
теперь давайте посмотрим,
00:37:30
хорошо, так удивительно, что мы начали с
00:37:33
отладчика, мы видим, что отладчик
00:37:35
в данный момент работает, посмотрим, как он
00:37:36
отлаживается и затем он попадает в патч
00:37:38
и исправляет его, на этом этапе
00:37:40
вредоносное ПО не становится мудрее и запускается,
00:37:42
позволяя нам проанализировать его теперь, я знаю, что
00:37:45
это то, что мы программируем
00:37:47
сами, многие из вас могут
00:37:48
задаться вопросом, братан, почему ты программируешь
00:37:50
это и почему вы сообщаете нам эту
00:37:51
бесполезную информацию. Я имею в виду, что у вас буквально
00:37:53
есть исходный код вредоносного ПО, если
00:37:55
вы контролируете, запускается оно или нет. Я
00:37:57
понимаю, о чем вы говорите, и причину, по которой
00:37:58
я учу вас этому, как бесполезному. как
00:38:00
может показаться, это потому, что даже если это
00:38:02
удаленная программа, то что-то, что вы не
00:38:04
запускаете или не имеете контроля над
00:38:07
тем, как вы собираетесь это делать, это точно так же,
00:38:08
но мы закончили с этим
00:38:09
сейчас, и мы Вы можете видеть, что мы только что
00:38:11
реализовали специальный патчер и
00:38:13
сборку, которая действительно забавна,
00:38:20
прежде чем углубляться в эти тайные
00:38:22
знания, давайте посмотрим, что произойдет, если мы
00:38:24
попытаемся удалить файл, когда он
00:38:26
где-то открыт или используется в данный момент, с которым
00:38:28
вы, вероятно, столкнулись это до того,
00:38:29
как ты пытаешься что-то удалить,
00:38:30
но оно где-то используется, где, черт возьми,
00:38:32
этот файл используется, думаешь ты
00:38:34
про себя, проклиная компьютеры
00:38:36
на одном дыхании, ну да, ты не
00:38:38
можешь удалить файл, если он
00:38:39
где-то открыт или во время использования мы можем продемонстрировать это
00:38:42
таким образом, или мы можем даже сделать это с
00:38:43
самим API Windows и посмотреть, какой
00:38:45
код ошибки мы получим, и на
00:38:48
что мы обречены, если наше вредоносное ПО
00:38:50
обнаружит, что оно отлаживается, осуждаем ли мы,
00:38:51
суждено ли нам оставить его? в
00:38:53
руках этого жалкого чуть не стошнило
00:38:55
оставь это в руки аналитиков
00:38:56
этих язычников ну конечно нет
00:38:58
иначе видео бы закончилось тут мы
00:39:00
рассмотрим реально крутую технику
00:39:01
антианализа саморазвода и для того чтобы
00:39:04
это сделать нам нужно очень быстро поговорить
00:39:05
о NTFS. Я знаю, это кажется
00:39:07
совершенно неожиданным, но
00:39:09
это имеет смысл, не волнуйтесь. NTFS или
00:39:12
файловая система новой технологии - это файловая
00:39:13
система, которую использует ОС Windows, они предлагают такие
00:39:15
функции, как файлы и
00:39:17
права доступа к папке, сжатие, шифрование, жесткие
00:39:19
ссылки, символические ссылки и транзакционные
00:39:21
операции в NTFS, когда вы создаете файл,
00:39:23
он представлен записью в
00:39:26
главной таблице файлов или mft, и для
00:39:28
каждой записи файла mft выделяет
00:39:30
для нее определенный объем пространства, но в
00:39:32
этом выделенном пространство
00:39:34
находятся атрибуты файла, взгляните на некоторые
00:39:35
из них, все они довольно круты сами по
00:39:36
себе, но мы собираемся
00:39:38
обратить особое внимание на
00:39:40
атрибут данных нашего файла, это
00:39:42
содержимое нашего файла это данные
00:39:44
наших файлов, и почему я поднимаю этот вопрос? В
00:39:45
NTFS есть действительно классная вещь,
00:39:47
которую я умею, а именно возможность
00:39:50
определять свои собственные альтернативные потоки данных,
00:39:51
что означает, что вы можете иметь скрытую информацию
00:39:53
или даже весь скрытый исполняемый файл.
00:39:56
в новом потоке данных в, казалось бы,
00:39:58
невинном файле, так что давайте посмотрим на
00:39:59
это. Я думаю, что лучший способ
00:40:01
выяснить, что представляют собой эти альтернативные
00:40:02
потоки данных, — это просто пойти дальше и
00:40:04
возиться с ними, и что мы будем
00:40:06
делать мы создадим скромный текстовый файл, в котором
00:40:08
не будет ничего интересного, но мы спрячем
00:40:11
в нем некоторые данные, а затем обсудим
00:40:12
некоторые мелочи об альтернативных
00:40:14
потоках данных, например, как мы будем
00:40:16
их искать или добираться туда, когда время пришло, поэтому
00:40:18
давайте начнем с создания простого
00:40:20
файла «Я не знаю»,
00:40:24
поэтому, когда мы открываем этот блокнот, мы в
00:40:26
настоящее время открываем здесь файл hello.txt,
00:40:27
если бы мы просто написали наше
00:40:29
обычное сообщение и сохранили его. это наш
00:40:31
файл, поэтому мы можем просто сделать,
00:40:33
а затем подождать, забыли,
00:40:35
так что да, если бы мы напечатали это, мы
00:40:37
получили бы исходное сообщение, но что, если бы мы
00:40:39
сделали то же самое, за исключением того, что мы записали в
00:40:41
альтернативный поток данных, давайте посмотрим, что
00:40:43
это будет выглядеть
00:40:44
так, что мы начинаем с постановки двоеточия
00:40:46
и определения имени потока данных
00:40:48
и причины, по которой мы делаем это двоеточие. Если мы
00:40:49
посмотрим на этот пост от msdn или
00:40:52
Microsoft, мы увидим, что эти потоки
00:40:54
принимают следующую форму поэтому у нас есть
00:40:56
имя файла, имя потока и
00:40:57
тип потока, когда вы создаете обычный файл,
00:41:00
имя потока пусто, теперь это
00:41:03
просто поведение по умолчанию, это просто, если бы
00:41:05
мы должны были определить его, начните с
00:41:07
этого, у нас нет чтобы вставить
00:41:09
тип Stream, давайте сделаем,
00:41:12
позвольте мне сохранить это, и теперь мы можем видеть, эй,
00:41:15
подождите, мы написали что-то, где,
00:41:17
черт возьми, это, если мы сделаем дирк, это не
00:41:18
отображается здесь, и как же так,
00:41:21
команда, которую мы использовали для перечисления
00:41:22
каталог и включить потоки,
00:41:24
потоки данных или альтернативные
00:41:26
потоки вкладок - это то, что означает косая черта, и если
00:41:29
мы еще раз посмотрим документацию
00:41:31
для dur, мы увидим, что косая черта R - это
00:41:34
просто способ отобразить
00:41:35
альтернативные потоки данных файл в
00:41:37
нашем каталоге, и это то, что мы
00:41:38
делаем здесь, поэтому, если мы это сделаем, о, не
00:41:41
могли бы вы посмотреть, что там,
00:41:43
и так, и даже если мы откроем
00:41:45
каталог здесь, мы не увидим ничего
00:41:47
необычного, что мы не видим Я не вижу этого
00:41:49
альтернативного потока данных, и даже если мы
00:41:51
его откроем, мы просто получим обычное
00:41:53
сообщение, правильно,
00:41:56
собираемся ли мы скрыть сообщение, мы
00:41:59
рассмотрели, как мы можем их добавить, и
00:42:01
нет ограничений на то, сколько мы можем добавить, но как бы это сделать?
00:42:03
мы избавимся от этих альтернативных
00:42:05
потоков данных или как мы будем их искать.
00:42:06
Ну, есть несколько способов
00:42:07
их поиска. Номер один - использовать этот
00:42:09
инструмент Microsoft под названием потоки, который
00:42:11
будет перечислять эти потоки для вас,
00:42:13
альтернативные потоки данных и каталог
00:42:15
или файл или что-то подобное с помощью get item, как мы можем
00:42:18
видеть в блоге Malwarebytes здесь, окей,
00:42:20
или найдите все эти вещи. Способ,
00:42:22
которым мы можем удалить их, - это, прежде
00:42:25
всего, удаление исходного файла, который
00:42:27
избавит от потоков, или если мы
00:42:29
переместим файл со всеми этими потоками,
00:42:31
прикрепленными к нему, в файловую систему, отличную
00:42:33
от NTFS, потому что помните, что альтернативные
00:42:35
потоки данных, подобные этому, являются только
00:42:37
особенностью NTFS, поэтому мы могли бы просто
00:42:39
открыть свой USB здесь, и я почти уверен, что
00:42:41
это да, это X жирный, так что, по сути,
00:42:43
если мы попытаемся переместить этот файл сюда,
00:42:46
он удалит
00:42:48
из него этот альтернативный поток данных, и давайте попробуем это очень
00:42:49
быстро,
00:42:51
чтобы вы переместили файл,
00:42:53
но если я выложу его здесь,
00:42:57
альтернативного потока данных больше не будет. не
00:43:00
более того, если бы мы сделали это,
00:43:03
если бы мы переместили это, как при
00:43:05
фактическом перетаскивании, на
00:43:06
самом деле получим небольшое сообщение, поэтому давайте
00:43:08
попробуем и это,
00:43:12
вы видите, мы получаем это маленькое всплывающее
00:43:14
предупреждение, в котором говорится, вы уверены, что хотите
00:43:15
чтобы скопировать этот файл без его свойств,
00:43:16
его свойства, на которые он ссылается, -
00:43:18
это альтернативные потоки данных, и
00:43:19
мы можем сказать да, и как только мы
00:43:23
попрощаемся с альтернативными потоками данных,
00:43:28
теперь привет, запрограммируйте это, я собираюсь сделать
00:43:30
это таким образом, чтобы объединить
00:43:31
все что мы узнали на данный момент, чтобы
00:43:33
проверить, происходит ли отладка,
00:43:34
мы будем использовать наш собственный
00:43:36
детектор пабов сборки, чтобы получить последнее значение ошибки
00:43:38
в случае, если что-то пойдет не так, я буду использовать
00:43:39
нашу пользовательскую функцию получения последней ошибки, которая
00:43:41
просто читает последнее значение ошибки со
00:43:42
вкладки, вы видите, как все так
00:43:44
хорошо сочетается, хорошо, наконец-то пришло
00:43:46
время выяснить, как мы можем
00:43:48
сделать это вредоносное ПО, которое в конечном итоге
00:43:49
самоудалится, мы немного поговорили о
00:43:51
потоках данных, и это нормально
00:43:53
способ, которым мы собираемся заставить нашу
00:43:54
программу удалить себя, состоит в том, чтобы переименовать
00:43:58
поток данных по умолчанию в другое имя, а
00:44:01
затем удалить этот недавно переименованный
00:44:03
поток данных, что приведет к исчезновению нашей программы, которая будет
00:44:05
удалена даже во время ее
00:44:07
запуска, что в других обычных случаях
00:44:10
обстоятельства, которые были бы невозможны,
00:44:11
как мы видели, поэтому есть много
00:44:13
движущихся частей, мы рассмотрели только один крошечный
00:44:15
важный аспект, такой как
00:44:18
потоки данных, но это гораздо больше,
00:44:19
так что просто подождите, пока я программирую
00:44:21
это выйду, и я просто сделаю то, что
00:44:22
делаю всегда: запрограммирую что-нибудь и
00:44:24
объясню, что это такое, почему это необходимо,
00:44:26
окей, это застревает в ребятах, оно
00:44:28
будет длинным, теперь
00:44:31
я могу выбрать много имен для этого проекта большинство
00:44:33
из них, вероятно, забанят меня
00:44:34
на этом сайте, это просто шутка, я просто
00:44:37
скажу что-нибудь простое, знаете,
00:44:38
давайте назовем это «Операция, конец игры»,
00:44:43
как я уже сказал, мы собираемся сделать
00:44:44
это таким образом в в котором мы
00:44:46
объединяем все темы, затронутые в
00:44:48
этом видео, включая все, что касается
00:44:51
обработки ошибок, мы собираемся выполнить
00:44:52
специальную функцию, которую мы создали на ассемблере,
00:44:54
а затем, чтобы проверить, отлаживается ли мы
00:44:55
или нет, мы собираемся выполнить то
00:44:56
же самое, так что давайте просто подготовим наш проект
00:44:58
к максимальной разработке или
00:45:00
разработке ASM, прежде чем мы начнем делать весь
00:45:02
этот джаз,
00:45:05
хорошо, так что в нашей последней функции ошибки
00:45:07
мы уже рассмотрели это, я просто
00:45:09
собираюсь скопировать и вставить это круто и
00:45:11
для нашей в отладчике то же самое, за исключением того, что мы
00:45:13
собираемся избавиться от строки исправления
00:45:14
только потому, что вы знаете, что мы просто
00:45:16
проверяем, отлаживаемся мы
00:45:17
или нет прямо сейчас, поэтому у нас есть две
00:45:19
специальные функции сборки, теперь мы можем
00:45:21
прямо сейчас, что мы могли бы сделать, это хорошо, сначала
00:45:23
я собираюсь добавить свои макросы и все такое,
00:45:28
хорошо, поэтому первое, что мы хотим
00:45:30
сделать, это определить новое имя для нашего
00:45:34
потока данных, хорошо,
00:45:36
хорошо,
00:45:41
помните, каков синтаксис потоков,
00:45:43
а затем мы собираемся или извне
00:45:45
Определим наши функции,
00:45:47
что я собираюсь сделать дальше, так это превратить
00:45:49
функцию проверки отладки в отдельную
00:45:51
функцию, чтобы мы могли просто вызывать ее внутри
00:45:52
Main,
00:45:54
все в порядке, здесь очень стандартно, мы
00:45:56
просто проверяем, можем ли мы происходит
00:45:57
отладка, если мы отлаживаемся, это
00:45:58
вернет true как Bull или
00:46:01
вернет false, так что давайте просто выполним основную
00:46:03
настройку,
00:46:11
давайте просто посмотрим, что это вернет, давайте
00:46:13
начнем с отладки, почему это
00:46:15
не удалось, ради Бога,
00:46:18
Foreign
00:46:20
[Музыка]
00:46:21
так теперь, если мы запустим это, мы сможем
00:46:23
увидеть, что оно работает правильно, без
00:46:25
отладки, ничего не отлаживается, если оно
00:46:28
не отлаживается,
00:46:30
мы заставим его выполнить нашу полезную нагрузку или
00:46:33
начать отладку, и мы идем в случае, если
00:46:35
наша программа обнаружит, что это
00:46:37
отлажено, у нас
00:46:39
здесь будет запущена функция самоудаления, или, я
00:46:42
думаю, нам даже не нужно
00:46:43
здесь ничего возвращать, потому что мы собираемся, чтобы
00:46:44
наша функция справилась с этим,
00:46:46
давайте начнем хорошо работать над нашей функцией самоудаления
00:46:54
давайте просто начнем инициализировать некоторые
00:46:56
вещи, хорошо, мы расслабимся и не будем
00:46:58
волноваться, мы поговорим об этом.
00:47:00
Они необходимы нам для определения,
00:47:01
потому что мы собираемся их использовать, поэтому
00:47:03
мы начнем делать это на один, поэтому
00:47:04
сначала в этой функции мы собираемся
00:47:06
получить дескриптор нашего файла, и
00:47:08
из-за этого нам придется
00:47:09
инициализировать дескриптор файла, затем
00:47:11
мы просто собираемся привести наш поток
00:47:13
сюда в широкий диаграмму только для того, чтобы
00:47:16
мы могли использовать ее с нашими функциями позже,
00:47:17
что мы также собираемся сделать, это взять
00:47:19
размер пути нашего файла, и мы
00:47:22
говорим о двух, потому что мы хотим получить
00:47:24
размер пути для y Char, хорошо, теперь мы
00:47:26
собираемся поговорить о некоторых из
00:47:28
них, мы видим, что есть указатель
00:47:29
на структуру информации о переименовании файла, которую
00:47:32
мы инициализировали для узла P. Информация о переименовании файла вот
00:47:34
как это выглядит, и
00:47:36
тогда вы, вероятно, поймете, почему мы
00:47:38
используя это здесь, как вы можете видеть, оно
00:47:40
содержит целевое имя, в которое
00:47:42
следует переименовать исходный файл, поэтому, поскольку
00:47:43
мы собираемся использовать эту функцию,
00:47:45
мы собираемся снабдить ее
00:47:46
инфраструктурой переименования файлов, и здесь вы
00:47:48
можете увидеть это есть длина имени файла
00:47:50
и само имя файла, и это то, что
00:47:52
мы собираемся использовать для изменения имени
00:47:53
файла, но если мы прокрутим вниз
00:47:55
для этого элемента или поля имени файла, мы
00:47:58
увидим, что это может быть одно из
00:47:59
следующих значений: абсолютный путь, например
00:48:01
относительный путь к текущему
00:48:03
каталогу процесса или новое имя
00:48:06
файлового потока NTFS, начинающееся с двоеточия, вы
00:48:09
видите, что мы собираемся здесь сделать, поэтому
00:48:11
мы включаем это следующим, это даже не
00:48:13
слово, у нас есть такое расположение файлов
00:48:16
информация теперь, что, черт возьми, это
00:48:18
информация о расположении файлов, а также, прежде чем
00:48:20
перейти к этому, у нас есть этот размер переименования,
00:48:23
и это просто размер этой
00:48:25
структуры с размером
00:48:28
имени потока данных нашего потока, и это просто
00:48:30
для некоторых пространственных вещей после и что это
00:48:32
информация о расположении файла, мы видим, что
00:48:34
здесь есть только файл удаления Bool,
00:48:37
поэтому, как и в msdn,
00:48:40
эта структура просто указывает,
00:48:42
следует ли файл удалять или не использовать, только
00:48:44
когда мы используем эту функцию, мы видели
00:48:46
это уже второй раз это
00:48:47
будет наш основной оператор, и мы
00:48:50
видим, что если мы установим для этого параметра значение True,
00:48:52
информация о расположении файла пометит файл для
00:48:54
удаления, когда мы закроем его дескриптор,
00:48:56
поэтому, во-первых, мы сделаем следующее: Я
00:48:58
выделю буфер для некоторых структур
00:49:00
только для информации о переименовании файлов, просто чтобы
00:49:02
убедиться, что все работает,
00:49:03
нет никаких вещей, связанных с памятью, и я буду использовать
00:49:06
эти маленькие разделители комментариев, я думаю,
00:49:08
просто для того, чтобы нам было проще, потому что
00:49:09
это будет довольно длинная
00:49:11
программа,
00:49:13
поэтому здесь мы видим, что мы
00:49:15
вызываем Heap alloc. Первый
00:49:17
параметр - это просто дескриптор кучи,
00:49:19
из которой будет выделена память,
00:49:20
вы можете получить ее из ящика кучи или получить
00:49:22
функцию кучи процесса, что и является
00:49:24
мы делали это, это
00:49:25
параметры выделения, второй параметр,
00:49:27
и если мы создаем кучу вашей памяти, она
00:49:29
в основном выделяет память, но затем
00:49:31
инициализирует ее нулем, а затем последний
00:49:33
параметр - это количество байтов, которые мы
00:49:35
также выполним некоторую проверку ошибок, потому что Я
00:49:37
хочу использовать нашу функцию, и это
00:49:39
также хорошо на тот случай, если что-то пойдет
00:49:40
не так, так что я также буду засорять
00:49:43
это кучей подобных отладочных отпечатков
00:49:46
просто потому, что я хочу, чтобы это было как
00:49:48
можно более ясно, если вас раздражает
00:49:51
сколько я это выкладываю, просто
00:49:52
это для ясности в обычной
00:49:55
программе, такой как эта, я бы не стал, не
00:49:57
думаю, что у меня было бы так много, но да,
00:49:58
выделите немного памяти для информационной структуры переименования файла,
00:50:01
которая просто
00:50:03
комбинация информации о переименовании файла и
00:50:05
нового потока, так что это немного больше,
00:50:07
чем этот следующий файл, мы просто также
00:50:09
очистим некоторые структуры, которые вы знаете, просто
00:50:11
чтобы подготовить их и подготовить к использованию,
00:50:13
все в порядке, так что я говорю мы собираемся
00:50:15
очистить некоторые структуры, а затем
00:50:16
обнулить память, а
00:50:21
также обнулить информационную структуру расположения файлов, и после этого
00:50:23
мы готовы использовать все эти вещи, поэтому
00:50:25
сначала Я хочу установить для этого
00:50:27
члена этот логический элемент из
00:50:29
инфраструктуры размещения файлов, чтобы он просто был
00:50:31
установлен в значение true, чтобы мы могли
00:50:33
указать, что файл будет
00:50:34
удален или должен быть удален, хорошо,
00:50:36
давайте сделаем это в первую очередь
00:50:39
так что да, установите файл на удаление, вот и
00:50:40
поехали, и мне жаль, что я не кодирую
00:50:42
это до конца. Я попытаюсь
00:50:44
объяснить строку для линусов, если я
00:50:46
это сделаю, это видео буквально сразу получит 14
00:50:48
мировых рекордов. Что касается длины
00:50:49
мультимедиа, то редактировать его немного сложно,
00:50:51
так что ладно, дальше мы собираемся сделать
00:50:54
это в информации о переименовании файла, здесь
00:50:57
мы собираемся инициализировать те два
00:50:59
элемента, которые нам нужно было сделать, если вы
00:51:00
помните, что там Здесь следует отметить две вещи:
00:51:05
длину имени файла и само имя файла, и
00:51:07
это две следующие вещи, которые мы
00:51:08
собираемся установить, давайте разберемся с этим
00:51:11
правильно, чтобы вы могли сначала увидеть первые вещи,
00:51:13
мы устанавливаем длину этого участника
00:51:16
длина имени файла равна размеру нашего нового
00:51:18
потока, который на данный момент, как вы знаете, находится прямо
00:51:20
здесь,
00:51:22
вот здесь, мы идем после того, что мы
00:51:24
собираемся сделать, это взять этот новый поток, а
00:51:26
затем прямо над именем файла, так что
00:51:28
по сути, мы перезаписываем
00:51:30
имя файла нашим потоком данных, и как только мы это
00:51:32
сделаем, мы можем распечатать значение
00:51:34
этого члена, чтобы посмотреть, что
00:51:36
теперь все будет в порядке, после чего мы собираемся
00:51:39
получить текущий имя файла,
00:51:42
копия памяти RTL — это просто очень
00:51:46
прославленная версия копии памяти, вы,
00:51:48
по сути, просто копируете часть памяти из
00:51:50
места назначения, помещая ее в свой
00:51:51
источник, но вы также должны определить, насколько
00:51:53
она велика, это, по сути, то, что мы
00:51:54
делаем правильно, мы пытаюсь взять нашего нового
00:51:56
участника потока и перезаписать или скопировать его
00:51:58
на этого участника по этому адресу. Я
00:52:01
надеюсь, что это имеет смысл. Далее нам нужно
00:52:02
получить текущее имя файла, и это
00:52:04
только для нас позже, вы знаете, что
00:52:07
мы' Мы работаем с широкими диаграммами, и это
00:52:08
простой способ получить
00:52:10
полный путь к файлу,
00:52:12
содержащему указанный модуль, поэтому, если
00:52:14
первый параметр, если мы установим его равным нулю, он
00:52:16
просто получит путь к исполняемому
00:52:18
файлу текущий процесс, который
00:52:20
мы хотели сделать, а затем второй
00:52:23
параметр — это место, где мы сохраняем этот путь,
00:52:25
который будет иметь размер нашего пути,
00:52:27
какое-то странное имя, но я думаю, как
00:52:29
вы можете видеть, мы получаем полностью
00:52:31
определенный путь исполняемого файла, и
00:52:34
мы помещаем его сюда, и если это
00:52:36
не удается, мы снова можем использовать нашу прекрасную пользовательскую
00:52:38
функцию ошибок и распечатать
00:52:40
значение, теперь это то место, где оно начинает
00:52:41
становиться сочным, так что вот что
00:52:43
произойдет здесь: мы собираемся чтобы получить
00:52:45
дескриптор этого файла после того, как мы получим
00:52:47
дескриптор этого файла или этого файла,
00:52:49
мы собираемся использовать для него эту функцию, чтобы
00:52:51
установить информацию о файле с помощью
00:52:53
функции дескриптора, она устанавливает информацию о файле
00:52:54
для указанного файла, чтобы мы могли видеть
00:52:57
первый параметр — это дескриптор
00:52:59
файла, второй —
00:53:00
класс информации о файле, это тип
00:53:02
информации, которую мы хотим изменить
00:53:03
или установить для нашего файла, а затем еще множество
00:53:06
других вещей, о которых мы поговорим, давайте
00:53:07
посмотрим для второго параметра, так что
00:53:08
класс перечисления для этой информации о файле по
00:53:11
дескриптору, их так много,
00:53:13
есть информация об имени файла, файл этой
00:53:14
информации о позиции, помните, что это просто
00:53:16
установка его для удаления, а затем есть
00:53:18
также информация о переименовании файла, куда, черт
00:53:21
возьми, он делся посмотрите на информацию о переименовании файла, что
00:53:23
мы собираемся делать, когда вызываем
00:53:24
эту функцию, и мы устанавливаем информацию о переименовании файла
00:53:27
для этой информации о файле по классу дескриптора,
00:53:29
мы просто собираемся установить
00:53:31
имя файла, чтобы мы получили дескриптор
00:53:33
файл, который мы вызываем, устанавливает информацию о файле по
00:53:35
его дескриптору, и он будет использовать
00:53:38
информационную структуру переименования файла, и мы
00:53:40
собираемся предоставить длину нашего имени файла
00:53:41
и наше имя файла, и наше
00:53:43
имя файла теперь является просто альтернативным потоком данных
00:53:44
после вот что мы делаем, мы
00:53:47
закрываем дескриптор после этой функции, мы
00:53:50
делаем это, потому что именно так мы действительно
00:53:52
подтверждаем наши изменения с помощью этого, потому что
00:53:54
эта функция установит информацию для
00:53:56
файла или внесет в него изменения, а
00:53:59
затем, в зависимости от того, что мы делаем, иногда
00:54:00
это работает, когда мы закрываем его дескриптор,
00:54:03
чтобы действительно кристаллизовать это изменение, поэтому
00:54:05
после того, как мы закроем дескриптор,
00:54:06
мы собираемся открыть
00:54:07
для него другой дескриптор, и как только мы это сделаем, изменение
00:54:09
будет сделано, и мы собираемся чтобы
00:54:10
открыть дескриптор этого файла, в котором есть
00:54:12
альтернативный поток данных, теперь давайте
00:54:14
начнем с этого,
00:54:17
поэтому мы начнем с правильного получения дескриптора
00:54:19
файла, мы собираемся, именно здесь мы
00:54:21
начинаем фактический процесс переименования, который мы
00:54:23
используем Создать файл. Первый параметр — это
00:54:25
имя файла, в котором мы указываем
00:54:27
размер пути, который к настоящему моменту был бы
00:54:29
заполнен именем файла модуля get.
00:54:31
Помните, что он будет сохранять полный
00:54:32
путь к нему в размере пути, и мы
00:54:34
используем его здесь, когда вы Вы делаете
00:54:36
операцию удаления файла следующим образом. Минимальный
00:54:37
объем прав доступа, который вам нужен, — это
00:54:40
удаление и синхронизация, и это то,
00:54:42
что мы здесь предоставляем, поэтому вам нужно
00:54:43
это удаление в следующий раз, и давайте
00:54:45
посмотрим на эту функцию в msdn, теперь мы мы
00:54:48
собираемся предоставить ему чтение общего доступа к файлам,
00:54:49
это просто установка
00:54:50
режима общего доступа к файлу, он просто сообщает вам, к чему
00:54:52
вам разрешен доступ или нет, поэтому, если мы
00:54:54
сделаем что-то вроде чтения общего доступа к файлам, что
00:54:56
мы и сделали, мы' разрешено открывать
00:54:58
операции с файлом или запрашивать
00:55:00
доступ на чтение, в противном случае ни один процесс не сможет открыть
00:55:02
файл или устройство, если он запрашивает повторный доступ, и это то,
00:55:05
что у нас здесь, следующий
00:55:07
параметр - это просто этот атрибут, все
00:55:09
в порядке, так что этот параметр здесь, где
00:55:12
он говорит открыть существующий, поэтому
00:55:13
интересно узнать об этом, это именно то, что
00:55:15
происходит в случае, если файл не
00:55:17
существует или уже существует, что вы
00:55:19
хотите, чтобы эта функция делала, мы
00:55:21
собираемся открывать файл только в том случае, если он существует, поэтому
00:55:23
там написано, что команда «открыть существующее» открывает файл или
00:55:25
устройство, только если оно существует, поэтому
00:55:27
мы собираемся использовать его здесь, а
00:55:29
остальные два — это просто без флагов и
00:55:31
атрибутов, и этот файл шаблона, который
00:55:32
нам не нужен, помните, что это
00:55:34
файл создания одна из единственных функций Win API,
00:55:37
которые я видел до сих пор, которые на
00:55:38
самом деле возвращают недопустимое значение дескриптора, поэтому
00:55:41
мы устанавливаем его на это,
00:55:42
а затем мы хотим распечатать наш маленький
00:55:45
дескриптор файла, а затем мы говорим, что я
00:55:47
думаю это следует называть переименованием,
00:55:49
возможно, лучше, я об
00:55:50
этом говорил, поэтому мы правильно используем эту функцию,
00:55:52
мы собираемся установить информацию
00:55:54
об этом файле, мы получаем дескриптор
00:55:56
файла, который мы ему даем, а затем используем
00:55:58
переименование файла информация, это парень с
00:56:01
именем файла, правильным именем файла и
00:56:03
размером имени файла, и это то, что мы
00:56:05
здесь устанавливаем, поэтому после этого мы бы
00:56:07
фактически предоставили нашему файлу
00:56:10
поток данных и установили его для него и
00:56:12
фактически вытолкнули изменения в кавычках,
00:56:14
снятии кавычек, обновляют этот файл, чтобы
00:56:16
вы на самом деле знали, происходит ли это изменение, мы
00:56:18
закрываем его дескриптор, потому что этой
00:56:20
функцией вы устанавливаете в него изменение, и
00:56:21
оно в значительной степени изменится при выходе или
00:56:23
изменится при закрытии дескриптора, и вот
00:56:25
что мы сделайте это после того, как мы закроем
00:56:27
его дескриптор, у него будет этот новый
00:56:28
альтернативный поток данных,
00:56:30
внешний
00:56:34
для удаления здесь, но это здесь,
00:56:36
этот совершенно новый раздел, вот где мы на
00:56:38
самом деле, что, черт возьми, это сейчас, это
00:56:41
момент, когда мы фактически удаляем
00:56:43
файл, поэтому здесь происходит то, что
00:56:45
мы снова получим дескриптор
00:56:46
файла, потому что на этом этапе мы
00:56:48
уже обсуждали это, изменения
00:56:50
будут установлены после
00:56:51
закрытия дескриптора, чтобы он обновлял его, и теперь,
00:56:53
когда мы открываем снова дескриптор этой функции, у нас
00:56:55
есть дескриптор файла с
00:56:56
альтернативным потоком данных, вот и все,
00:56:57
а затем мы собираемся использовать
00:56:59
эту функцию еще раз, за ​​исключением того, что вместо
00:57:01
переименования информации мы делаем
00:57:02
следующее: информацию о расположении файла, и если мы
00:57:04
помним информацию о расположении файла, все, что он
00:57:06
делает, это устанавливает файл или помечает файл для
00:57:09
удаления, и мы уже установили для него значение
00:57:10
True, так как мы уже установили для него значение
00:57:13
True, что произойдет сейчас, это
00:57:14
собираюсь запустить это, и если это сработает,
00:57:16
он установит файл для удаления,
00:57:18
как и на самом деле, потому что мы не
00:57:20
делали этого здесь, все, что мы сделали, это установили для этого
00:57:22
члена структуры значение true, но вот
00:57:24
где мы на самом деле находимся выталкивание
00:57:26
этого изменения или попытка внести это
00:57:27
изменение, а затем, как только это будет сделано,
00:57:28
помните, потому что это похоже на установку
00:57:30
информации о файле с помощью обработки изменений, вид
00:57:31
работы, когда вы выходите, мы собираемся
00:57:33
закрыть дескриптор этого, и к тому времени, как только
00:57:35
мы закроем это дескриптор файла должен
00:57:37
был быть удален, и мы также просто выполняем
00:57:39
обычную очистку кадра, выделенного
00:57:40
теплового буфера и все такое. Я
00:57:42
закрываю дескрипторы файла, и на этом все, вот и все,
00:57:43
это вся
00:57:45
наша программа, знаю ли я, что это выглядит немного безумно,
00:57:48
возможно, это из-за
00:57:49
кучи отладочных отпечатков, но потратьте пару секунд,
00:57:52
чтобы пересмотреть его, если вы
00:57:53
этого не понимаете, это не так уж и безумно, как только
00:57:56
вы поймете, что происходит, и все
00:57:57
действительно прояснится, как только вы войдете в глубина
00:57:59
с этими функциями, и вы действительно
00:58:01
понимаете альтернативные отрасли и
00:58:03
прочее, что мы можем сделать сейчас с этой
00:58:04
созданной функцией, это нормально, отладчик
00:58:06
отсутствует, выполните нашу полезную нагрузку, но если
00:58:09
отладчик присутствует, мы удалимся самостоятельно, поэтому
00:58:11
давайте сделаем это,
00:58:15
тогда это уже завершится для нас, поэтому нам
00:58:17
не нужно этого делать, и теперь, если мы запустим
00:58:19
это, о боже мой, я так взволнован
00:58:20
этим, хорошо, поэтому, если мы запустим это нормально,
00:58:22
оно запустит наше вредоносное ПО, потому что
00:58:24
мы не отлаживаем он
00:58:27
смотрит на это право, правильно выполняет выход из нашей полезной нагрузки,
00:58:29
и теперь, если мы запустим это
00:58:31
с помощью отладчика, давайте посмотрим, какой
00:58:32
результат мы получим
00:58:33
[Музыка]
00:58:35
окей, все в порядке, да, черт возьми, это
00:58:39
выглядит так круто, поэтому мы начинаем, как в
00:58:41
пабе, мы проверили наличие отладчика,
00:58:43
мы видим, что мы отлаживаемся, и
00:58:44
поскольку мы отлаживаемся, мы собираемся
00:58:46
остановить DeLay Итак, что происходит с
00:58:47
самозадержкой, правильно, мы выделяем
00:58:49
кучу для информации об имени файла, мы очищаем
00:58:51
структуры после того, как мы закончили, мы
00:58:53
установили файл на удаление, мы не вносим
00:58:55
это изменение, а просто устанавливаем эту
00:58:56
информацию о расположении файла. Логическое значение, запомните на
00:58:58
True, после этого мы меняем
00:59:00
имя, длину имени файла, я думаю, да
00:59:03
ладно, я распечатал это неправильно позвольте мне
00:59:04
просто хорошо, да, не имя файла имя файла,
00:59:07
извините за это, так что игнорируйте это, я просто
00:59:09
запущу это снова, установите имя файла этой
00:59:11
структуры в наш альтернативный поток данных,
00:59:13
а затем мы перезаписали этот исходный
00:59:16
наш новый поток вот здесь, и
00:59:19
он распечатывается странно, но вы понимаете
00:59:20
суть, а затем мы получаем текущее
00:59:22
имя файла, оно просто будет
00:59:23
заполнено здесь, мы получаем имя файла,
00:59:26
которое мы помещаем в эту переменную здесь,
00:59:28
размер, неправильно названный, я знаю, но что угодно, а
00:59:30
потом мы сразу начинаем процесс переименования,
00:59:32
сначала мы получаем дескриптор файла, это
00:59:34
первый дескриптор, который мы получили для
00:59:36
файла, а затем начинаем его переименовывать, что
00:59:37
происходит здесь: мы используем установку
00:59:40
информации о файле по дескриптору с
00:59:42
классом дескриптора, и это как раз то, где мы выталкиваем
00:59:44
имя и длину нашего потока данных
00:59:47
вправо, и после этого мы закрываем
00:59:49
дескриптор, чтобы отправить изменение, и все
00:59:50
готово, мы снова получаем дескриптор этого, за исключением того, что на
00:59:52
этот раз вместо этого мы используем информацию о расположении файла,
00:59:54
которая пометит его для
00:59:57
удаление, потому что мы уже установили
00:59:58
для него значение true, и как только это будет
01:00:00
сделано, все, что нам нужно сделать, это закрыть
01:00:02
дескриптор еще раз, чтобы отправить изменение,
01:00:03
и оно должно было удалить файл,
01:00:05
давайте посмотрим это в действии, я имею в виду, что
01:00:07
мы видели прогон, но давайте на самом деле посмотрим
01:00:09
это в действии, хорошо, так что если мы запустим это
01:00:10
нормально,
01:00:11
круто, круто, круто, вот и наш
01:00:15
исполняемый файл, теперь давайте запустим это с помощью
01:00:17
отладчика, скажем, мы сейчас аналитик,
01:00:19
я хотел это увидеть, хорошо, я хочу
01:00:20
отладить это, давайте посмотрите, что он делает,
01:00:24
он просто удаляет себя, он ушел,
01:00:27
его больше нет, давайте сделаем это еще раз, извините,
01:00:30
о, это как минимум слишком быстро, прежде чем вы
01:00:32
сможете, окей, он удаляется слишком быстро, прежде чем мы
01:00:34
успеем поместить это в таблицу, просто
01:00:39
поместите это туда, просто чтобы мы возьми немного
01:00:40
буферного времени, хорошо, посмотри на это правильно, это
01:00:42
прямо здесь, и теперь это типа о,
01:00:44
нажмите Enter, чтобы выйти,
01:00:47
оно ушло туда еще раз, вот оно там, оно
01:00:52
там, нажмите Enter, чтобы выйти,
01:00:58
ребята, вот и все, вот и все, что нужно,
01:01:00
это так круто, это такая
01:01:03
невероятная вещь, как будто все это будет
01:01:05
сделано, чтобы добраться до этой точки, мы
01:01:07
изучили внутреннюю работу
01:01:09
PEB и ванны, а затем NTFS,
01:01:12
потоки данных и все это в сочетании в эту
01:01:14
замечательную
01:01:15
пару. методов борьбы с отладкой,
01:01:17
о которых мы буквально только что
01:01:19
говорили, ну, это даже близко не то
01:01:20
количество, которое вы можете найти в
01:01:22
модулях курса Maldive Academy, поэтому еще раз
01:01:24
обязательно ознакомьтесь с первой ссылкой в
01:01:26
описании или прикрепленным комментарием
01:01:27
ниже, чтобы получите скидку 10 на свой заказ и начните
01:01:30
становиться мастером борьбы с отладкой прямо
01:01:31
сейчас, а также повышайте свои навыки
01:01:33
профессионального разработчика вредоносного ПО. Еще
01:01:35
раз огромное спасибо Maldive
01:01:36
Academy за спонсирование этого видео, и
01:01:38
это подводит нас к концу видео.
01:01:39
ребята, большое спасибо за просмотр. Я
01:01:41
знаю, что голова Cannon должна была
01:01:42
быть Maldef, часть 3, но я хотел
01:01:44
выпустить это видео до этого, чтобы
01:01:46
немного порадовать вас всех, и не волнуйтесь,
01:01:47
Мальдивы, часть 3, рано или поздно выйдет.
01:01:49
но сейчас я снова впадаю в
01:01:50
спячку, увидимся
01:01:52
[Музыка]

Описание:

Use code "CROW10" for 10% off your order when you checkout at Maldev Academy! https://maldevacademy.com/?ref=crow ⚠️ Disclaimer: The information presented in this video is for educational purposes only. It is not intended to be used for illegal or malicious activities. The creator and any individuals involved in the production of this video are not responsible for any misuse of the information provided. It is the responsibility of the viewer to ensure that they comply with all relevant laws and regulations in their jurisdiction. 🤖 Based on: https://twitter.com/jonasLyk/status/1350401461985955840 full credits to the author of this super cool technique: https://twitter.com/jonasLyk 💖 Support My Work https://www.patreon.com/cr0w https://ko-fi.com/cr0ww https://buymeacoffee.com/cr0w Join this channel to get access to perks: https://www.youtube.com/channel/UCMqXCTXulFWHrmd2588IqJw/join 🔖 My Socials: https://discord.com/invite/crow-academy https://www.crow.rip/crows-nest https://github.com/cr-0w https://twitter.com/cr0ww_ ❤️ Friends Mentioned: x0reaxeax: - https://github.com/x0reaxeax - https://www.youtube.com/@x0reaxeax 5pider: - https://twitter.com/C5pider - https://github.com/Cracked5pider - https://www.youtube.com/@C5pider 🎵 Music/Videos Used: Wizet, Nexon © Copyright Wizet, Nexon https://www.youtube.com/watch?v=WfMClt3K5K4 https://www.youtube.com/watch?v=S4MBzeni9Eo&t=47s https://www.youtube.com/watch?v=ms5ENyRH3Bs&t=55s https://www.youtube.com/watch?v=bBRgYIvaL00 https://www.youtube.com/watch?v=U5DIddYUWUE&t=1429s https://www.youtube.com/watch?v=N1PFETbX_1U https://www.youtube.com/watch?v=GDjvNh_20Oo Motion Graphics Video used: https://www.youtube.com/watch?v=jRn3MDxESfw YouTube Channel: https://www.youtube.com/channel/UCSd9fzv8UQBAC6vCIO-7pZw - stock images/videos: vecteezy.com, pexel 🌐 Websites Mentioned: https://maldevacademy.com/ https://www.vergiliusproject.com/ https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/pebteb/teb/index.htm https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/pebteb/peb/index.htm https://www.sentinelone.com/blog/edr-vs-enterprise-antivirus-whats-the-difference/ https://www.sentinelone.com/blog/what-is-a-malware-file-signature-and-how-does-it-work/ https://usa.kaspersky.com/resource-center/definitions/heuristic-analysis https://www.linkedin.com/pulse/what-edr-why-important-usman-shahzad The images and music used in this video are used under the principle of fair use for the purpose of criticism, comment, news reporting, teaching, scholarship, and research. I do not claim ownership of any of the images/music and they are used solely for the purpose of enhancing the content of the video. I respect the rights of the creators and owners of these images and will remove any image upon request by the rightful owner. Copyright Disclaimer under section 107 of the Copyright Act of 1976, allowance is made for “fair use” for purposes such as criticism, comment, news reporting, teaching, scholarship, education, and research. Fair use is a use permitted by copyright statute that might otherwise be infringing. 🕰️ Timestamps: 00:00 - Intro 00:32 - Disclaimer 01:10 - Why Learn Malware Development? 02:54 - Start Here! 04:57 - Antivirus 08:30 - Heuristic Detection 11:56 - EDRs 13:53 - Anti-Debugging 16:51 - Thread Environment Block 20:16 - Custom GetLastError Function 29:13 - Process Environment Block 31:16 - Custom IsDebuggerPresent Function 34:53 - PEB Patching (BeingDebugged) 38:14 - Self-Deletion 01:01:16 - Outro

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Malware's LAST Stand: SELF-DELETION"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Malware's LAST Stand: SELF-DELETION" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Malware's LAST Stand: SELF-DELETION"?mobile menu icon

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

mobile menu iconКак скачать видео "Malware's LAST Stand: SELF-DELETION" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Malware's LAST Stand: SELF-DELETION"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Malware's LAST Stand: SELF-DELETION"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

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