<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>@anonim2272367846</title><generator>teletype.in</generator><description><![CDATA[@anonim2272367846]]></description><link>https://teletype.in/@anonim2272367846?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=anonim2272367846</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/anonim2272367846?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/anonim2272367846?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 13 May 2026 20:49:25 GMT</pubDate><lastBuildDate>Wed, 13 May 2026 20:49:25 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@anonim2272367846/AKo0kuN1Vyf</guid><link>https://teletype.in/@anonim2272367846/AKo0kuN1Vyf?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=anonim2272367846</link><comments>https://teletype.in/@anonim2272367846/AKo0kuN1Vyf?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=anonim2272367846#comments</comments><dc:creator>anonim2272367846</dc:creator><title>Пробив по getcontact не сливая свой номер телефона.</title><pubDate>Sat, 07 May 2022 08:13:48 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/bf/0b/bf0b113f-6f1b-4820-ab0d-7e9a6c2226a6.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/0a/48/0a48b018-e1bb-4d16-ac95-adcf7160a611.webp"></img>Сегодня я вам расскажу как пробить инфу о человеке зная его номер телефона и с помощью GetContact.]]></description><content:encoded><![CDATA[
  <figure id="G3fF" class="m_column">
    <img src="https://img1.teletype.in/files/0a/48/0a48b018-e1bb-4d16-ac95-adcf7160a611.webp" width="1082" />
  </figure>
  <p id="qJfx">Сегодня я вам расскажу как пробить инфу о человеке зная его номер телефона и с помощью GetContact.</p>
  <p id="BLs4"><strong>GetContact — приложение, которое копирует себе все контакты, записанные в телефоне, а также позволяет узнать, как тот или иной номер записан у пользователей приложения. При первом запуске GetContact просит доступ к телефонной книге. Полученные данные отправляются на серверы разработчика.</strong></p>
  <h2 id="4WHi"><strong>                      УСТАНОВКА на termux</strong></h2>
  <p id="HU9n"></p>
  <pre id="55aO">$ apt update
$ apt upgrade
$ pkg install git -y
$ pkg install python
$ git clone https://github.com/kovinevmv/getcontact
$ cd getcontact
$ pip3 install -r requirements.txt
$ cd src
$ python main.py -p номер для поиска
пример: (python main.py -p 79998895763)</pre>
  <p id="i2it"><strong>дополнительную информацию моно найти на  <a href="https://github.com/kovinevmv/getcontact" target="_blank">GitHub.</a></strong></p>
  <p id="PHVz"><strong>Наш проект - <a href="https://t.me/+IEXpIFkco2BjODYy" target="_blank">канал .</a></strong></p>
  <p id="UA4S"><strong>Удачи, мамкины хацкеры.</strong></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@anonim2272367846/54627fgyudsy782387</guid><link>https://teletype.in/@anonim2272367846/54627fgyudsy782387?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=anonim2272367846</link><comments>https://teletype.in/@anonim2272367846/54627fgyudsy782387?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=anonim2272367846#comments</comments><dc:creator>anonim2272367846</dc:creator><title>Пробив по getcontact не сливая свой номер телефона.</title><pubDate>Sat, 07 May 2022 08:07:13 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/bf/0b/bf0b113f-6f1b-4820-ab0d-7e9a6c2226a6.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/0a/48/0a48b018-e1bb-4d16-ac95-adcf7160a611.webp"></img>Сегодня я вам расскажу как пробить инфу о человеке зная его номер телефона и с помощью GetContact.]]></description><content:encoded><![CDATA[
  <figure id="Z49E" class="m_column">
    <img src="https://img1.teletype.in/files/0a/48/0a48b018-e1bb-4d16-ac95-adcf7160a611.webp" width="1082" />
  </figure>
  <p id="mWyg">Сегодня я вам расскажу как пробить инфу о человеке зная его номер телефона и с помощью GetContact.</p>
  <p id="GH1Z"><strong>GetContact — приложение, которое копирует себе все контакты, записанные в телефоне, а также позволяет узнать, как тот или иной номер записан у пользователей приложения. При первом запуске GetContact просит доступ к телефонной книге. Полученные данные отправляются на серверы разработчика.</strong></p>
  <p id="7mEU">УСТАНОВКА на termux</p>
  <pre id="SM2M">$ apt update
$ apt upgrade
$ pkg install git -y
$ pkg install python
$ git clone https://github.com/kovinevmv/getcontact
$ cd getcontact
$ pip3 install -r requirements.txt
$ cd src
$ python main.py -p номер для поиска
пример: (python main.py -p 79998895763)</pre>
  <p id="uYb5"><strong>дополнительную информацию моно найти на  <a href="https://github.com/kovinevmv/getcontact" target="_blank">GitHub.</a></strong></p>
  <p id="RukM"><strong>Наш проект - <a href="https://t.me/+IEXpIFkco2BjODYy" target="_blank">канал .</a></strong></p>
  <p id="yWdl"><strong>Удачи, мамкины хацкеры.</strong></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@anonim2272367846/GWxo_8XzpVD9423</guid><link>https://teletype.in/@anonim2272367846/GWxo_8XzpVD9423?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=anonim2272367846</link><comments>https://teletype.in/@anonim2272367846/GWxo_8XzpVD9423?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=anonim2272367846#comments</comments><dc:creator>anonim2272367846</dc:creator><title>Виды хакерство и как с ними бороться.</title><pubDate>Sat, 30 Apr 2022 13:01:49 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/8a/d9/8ad92981-2a2a-4475-be76-0a1ac6c13a48.png"></media:content><description><![CDATA[Здравствуйте, дорогие подписчики канала softboom.Сегодня я расскажу вам о способов взлома вашего устройства.]]></description><content:encoded><![CDATA[
  <nav>
    <ul>
    </ul>
  </nav>
  <p id="T0Yz">Здравствуйте, дорогие подписчики канала <strong><em><a href="https://t.me/+IEXpIFkco2BjODYy" target="_blank">softboom.</a></em></strong>Сегодня я расскажу вам о способов взлома вашего устройства.</p>
  <hr />
  <p id="btTb">                                                                                   статья от <a href="https://t.me/nubik_nn" target="_blank">Nubika</a></p>
  <p id="h0qK">1.Начнем мы пожалуй с простого Брутфорса (или <strong>метод «грубой силы»</strong>, англ. brute force) — метод решения математических задач. Относится к классу методовпоиска решения исчерпыванием всевозможных вариантов[en]. Сложность полного перебора зависит от количества всех возможных решений задачи. Если пространство решений очень велико, то полный перебор может не дать результатов в течение нескольких лет или даже столетий.</p>
  <p id="kDPL">Проще говоря вы запускаете программу, которая подбирает все возможные пароли к аккаунту вашей жертвы пока не найдет подходящий.Защититься можно создав длинный пароль от 20 символов, включая заглавные буквы (так же можно запустить программу со своими паролями).</p>
  <p id="11sT">Чтобы проверить достаточно ли вы защищены, , достаточно зайти <a href="https://password.kaspersky.com/ru/" target="_blank">на этот сайт</a> и написать свой пароль, сайт покажет надежность вашего пароля.</p>
  <p id="Izrq"></p>
  <p id="XLDp"></p>
  <p id="9jMC"></p>
  <p id="Rbc4">2.<strong>Фи́шинг</strong> (англ. phishing от fishing «рыбная ловля, выуживание»[1]) — вид интернет-мошенничества, целью которого является получение доступа к конфиденциальным данным пользователей — логинам и паролям. Это достигается путём проведения массовых рассылок электронных писем от имени популярных брендов, а также личных сообщений внутри различных сервисов, например, от имени банков или внутри социальных сетей. В письме часто содержится прямая ссылка на сайт, внешне неотличимый от настоящего, либо на сайт с редиректом. После того как пользователь попадает на поддельную страницу, мошенники пытаются различными психологическими приёмами побудить пользователя ввести на поддельной странице свои логин и пароль, которые он использует для доступа к определённому сайту, что позволяет мошенникам получить доступ к аккаунтам и банковским счетам.</p>
  <p id="jsEx">Фишинг — одна из разновидностей социальной инженерии, основанная на незнании пользователями основ сетевой безопасности: в частности, многие не знают простого факта: сервисы не рассылают писем с просьбами сообщить свои учётные данные, пароль и прочее.</p>
  <p id="3y5Y">Простыми словами вы создаете ложный сайт похожий на действительный, затем отправляете жертве, когда жертва ведет пароль и логин, вы получите их.Чтобы не стать жертвой надо не переходить по неизвсетным ссылкам </p>
  <p id="B4Ay">Туториал как создать фишинг сайт у нас на <a href="https://t.me/+IEXpIFkco2BjODYy" target="_blank">канале.</a></p>
  <p id="1NTJ"></p>
  <p id="FK8x"></p>
  <p id="S5xY"></p>
  <p id="nNpp">3. Перехват сообщений.</p>
  <p id="sowk">Суть данного способ а заключается в том, что 3-лица могут получить доступ к смс вашего мобильного номера.Обычно звонят в сервис мобильной связи и предлгают оператору эту услугу за сумму от 15000 рублей, таким образом можно взломать и телеграмм аккаунт, если у вас не стоит <strong>2FA (Двухфакторная аутентификация).</strong></p>
  <p id="qBXR">Чтобы защититься от подобного взлома надо поставить пароль на свою сим-карту , но будьте осторожны если забудете пароль от сим-карты (и сим-карта не оформлена на вас) вы рискуете потерять доступ к нему навсегда.</p>
  <p id="QBzm">Поставить пароль на сим-карту на<a href="https://support.apple.com/ru-ru/HT201529" target="_blank">айфоне</a>и на <a href="https://androidnik.ru/kak-ustanovit-pin-kod-na-sim-kartu-v-androide/" target="_blank">андоиде.</a></p>
  <p id="kFWf"></p>
  <p id="Fy8v"></p>
  <p id="LtNu"></p>
  <p id="Ljxr">4. <strong>Ботнет</strong> (англ. botnet, МФА: [ˈbɒtnɛt]; произошло от слов <em>ro<strong>bot</strong></em> и <em><strong>net</strong>work</em>) — компьютерная сеть, состоящая из некоторого количества хостов с запущенными ботами — автономным программным обеспечением. Чаще всего бот в составе ботнета является программой, скрытно устанавливаемой на устройство жертвы и позволяющей злоумышленнику выполнять некие действия с использованием ресурсов заражённого компьютера. Обычно используются для нелегальной или неодобряемой деятельности — рассылки спама, перебора паролей на удалённой системе, атак на отказ в обслуживании (DoS- и DDoS-атаки).</p>
  <p id="bXxm">Иными словами вы внедряете в устройства жертвы вирус( <a href="https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%BE%D1%8F%D0%BD%D1%81%D0%BA%D0%B0%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0" target="_blank">троян </a>) и получаете удаленный доступ. мануал как сделать троян в <a href="https://t.me/+IEXpIFkco2BjODYy" target="_blank">нашем канале.</a></p>
  <p id="oIkg"></p>
  <p id="yaeh"></p>
  <p id="apgr"></p>
  <p id="QeFi">5. DOS и DDOS атаки.</p>
  <p id="ni4e">DoS — хакерская атака на вычислительную систему с целью довести её до отказа, то есть создание таких условий, при которых добросовестные пользователи системы не смогут получить доступ к предоставляемым системным ресурсам, либо этот доступ будет затруднён.</p>
  <p id="iL0g">В кратце это виртуальное «нападение» на сайт или веб-сервер с целью перегрузки его максимальных мощностей, что, как правило, приводит к временному прекращению доступа к атакуемому сайту или целой группе сайтов. </p>
  <p id="dvJi"></p>
  <p id="XEdm"></p>
  <p id="fHp7">Не забудьте <a href="https://t.me/+IEXpIFkco2BjODYy" target="_blank">подписаться на канал</a></p>
  <p id="CRrl">удачи, Мамкины хацкеры.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@anonim2272367846/fblRiRthp533712</guid><link>https://teletype.in/@anonim2272367846/fblRiRthp533712?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=anonim2272367846</link><comments>https://teletype.in/@anonim2272367846/fblRiRthp533712?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=anonim2272367846#comments</comments><dc:creator>anonim2272367846</dc:creator><title>Как взломать Айфон обычной гифкой ?</title><pubDate>Sat, 30 Apr 2022 11:39:08 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/ca/b7/cab79e22-bb39-4ff2-a9af-d21d5161ebbf.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/27/d9/27d97fd2-2b14-4717-9dfc-b7ef643ae507.png"></img>Подробнейшая лекция, в которой мы рассказываем, как работает эксплоит zero-click для iMessage]]></description><content:encoded><![CDATA[
  <p id="G61I">Подробнейшая лекция, в которой мы рассказываем, как работает эксплоит zero-click для iMessage</p>
  <figure id="ITJd" class="m_column">
    <img src="https://img3.teletype.in/files/27/d9/27d97fd2-2b14-4717-9dfc-b7ef643ae507.png" width="1920" />
  </figure>
  <p id="uyrz">Всем салют, дорогие друзья!<br />В изра­иль­ской NSO Group соз­дали <strong>экс­пло­ит для iMessage</strong>, на­делав­ший мно­го шума. С помощью именно это­го экс­пло­ита <strong>тро­ян Pegasus</strong> был внед­рен в телефо­ны пуб­личных деяте­лей и полити­ков. Apple уже по­дала иск на NSO. <strong>Одна­ко оста­вим в сто­роне полити­ку — в этой статье мы сос­редото­чим­ся на самом экс­пло­ите, тем более что он прос­то взрыв­ной!</strong> <u>Заража­ет девай­сы без учас­тия юзе­ра, укры­вает­ся внут­ри GIF и вклю­чает в себя кро­шеч­ный вир­туаль­ный компь­ютер.</u></p>
  <hr />
  <h2 id="NSO">NSO</h2>
  <p id="Eru7">На­чало тому, о чем мы будем говорить, было положе­но в августе 2016 года, ког­да изра­иль­ская ком­пания NSO Group, спе­циали­зиру­ющаяся на киберо­ружии, раз­работа­ла и выпус­тила шпи­онское ПО Pegasus, пред­назна­чен­ное для зараже­ния мобиль­ных устрой­ств под управле­нием Android и iOS. <strong>«Пегас» был спо­собен читать тек­сто­вые сооб­щения, отсле­живать звон­ки и мес­тополо­жение, собирать пароли, получать информа­цию с мик­рофона и камеры, а так­же дос­туп к лич­ной информа­ции поль­зовате­ля.</strong></p>
  <p id="Oc1J">Тот ста­рый «Пегас» 2016 года исполь­зовал экс­пло­ит «одно­го нажатия» (one-click). То есть, ког­да поль­зователь‑жер­тва получал на свой смар­тфон «заряжен­ное» сооб­щение, что­бы акти­виро­вать под­ложен­ный сюр­приз, ему нуж­но было что‑то сде­лать, нап­ример клик­нуть по ссыл­ке. Зараже­ния было лег­ко избе­жать — дос­таточ­но было не нажимать на что попало.</p>
  <figure id="z3OG" class="m_column">
    <img src="https://st768.s3.eu-central-1.amazonaws.com/12b6f117cb0affa76a781a44d8e40023/24581/pic01.jpg" width="870" />
    <figcaption>При­меры фишин­говых СМС</figcaption>
  </figure>
  <p id="AQoU">В июле 2021 года уда­лось изу­чить экс­пло­ит «нулево­го нажатия» для iMessage, обна­ружен­ный на смар­тфо­не акти­вис­та из Саудов­ской Ара­вии. <strong>Экс­пло­ит работал вооб­ще без учас­тия поль­зовате­ля и сра­баты­вал сам — хакеру дос­таточ­но лишь отпра­вить полез­ную наг­рузку в мес­сен­дже­ре.</strong></p>
  <hr />
  <h2 id="ОПАСНЫЙ-ПРИЕМ">ОПАСНЫЙ ПРИЕМ</h2>
  <p id="rj9O">Вход­ная точ­ка «Пегаса» в iPhone — при­ложе­ние <strong>iMessage</strong>. Это зна­чит, что ата­кующе­му дос­таточ­но знать телефон­ный номер или Apple ID жер­твы.</p>
  <p id="lZ6Z">В iMessage есть натив­ная под­дер­жка GIF-ани­мации. Прис­ланная в чат гиф­ка вос­про­изво­дит­ся в цик­ле бес­конеч­но. Как толь­ко iMessage получа­ет сооб­щение, еще до его вывода на экран вызыва­ется метод в про­цес­се <code>IMTranscoderAgent</code>. Он, в свою оче­редь, выпол­няет­ся за пре­дела­ми песоч­ницы <strong>BlastDoor</strong>. При этом в парамет­ре метода переда­ется любое изоб­ражение с рас­ширени­ем gif. Вот таким обра­зом:</p>
  <p id="iTAk"><code>[IMGIFUtils copyGifFromPath:toDestinationPath:error]</code></p>
  <p id="y1oK">Это при­мер кода на язы­ке Objective-C. Пос­мотри на селек­тор. Здесь, веро­ятно, было намере­ние прос­то ско­пиро­вать файл GIF перед редак­тирова­нием поля счет­чика цик­лов, но семан­тика это­го метода иная. Внут­ри он исполь­зует API CoreGraphics, что­бы отоб­разить исходное изоб­ражение в новый GIF-файл по задан­ному пути. Одна­ко то, что файл име­ет рас­ширение gif, вов­се не озна­чает, что он на самом деле гиф­ка.</p>
  <p id="N4mb">Биб­лиоте­ка ImageIO при­меня­ется, что­бы опоз­нать фор­мат фай­ла и про­ана­лизи­ровать его, но при этом пол­ностью игно­риру­ет его рас­ширение. При исполь­зовании это­го трю­ка с «под­дель­ными гиф­ками» более 20 гра­фичес­ких кодеков ста­новят­ся потен­циаль­ными жер­тва­ми для ата­ки нулево­го нажатия в iMessage. Некото­рые из них очень слож­ны и сос­тоят из сотен тысяч строк кода. Огромное прос­транс­тво для хакер­ской сме­кал­ки!</p>
  <blockquote id="D4DR">С iOS 14.8.1 (26 октября 2021 года) Apple огра­ничи­ла фор­маты в ImageIO, дос­тупные из про­цес­са <code>IMTranscoderAgent</code>. Так­же инже­неры ком­пании пол­ностью уда­лили код для дос­тупа к GIF из <code>IMTranscoderAgent</code> с вер­сии iOS 15.0 (20 сен­тября 2021 года), вмес­те с тем пол­ностью перене­ся декоди­рова­ние GIF внутрь BlastDoor.</blockquote>
  <hr />
  <h2 id="PDF-ВНУТРИ-GIF">PDF ВНУТРИ GIF</h2>
  <p id="5cjd">В NSO исполь­зовали дыру «под­дель­ный GIF», что­бы через нее заюзать уяз­вимость в пар­сере CoreGraphics PDF.</p>
  <p id="yHgp">Дол­гие годы фор­мат PDF был излюблен­ной целью для атак — он дос­тупен вез­де и обла­дает дос­таточ­ной слож­ностью. При­ятный бонус для хакеров — под­дер­жка JavaScript внут­ри PDF. CoreGraphics PDF не интер­пре­тиру­ет JavaScript, тем не менее NSO уда­лось най­ти в нед­рах пар­сера кое‑что не менее мощ­ное.</p>
  <hr />
  <h2 id="ЭКСТРЕМАЛЬНОЕ-СЖАТИЕ">ЭКСТРЕМАЛЬНОЕ СЖАТИЕ</h2>
  <p id="Gs3h">В кон­це девянос­тых мало у кого был ста­биль­ный и быс­трый интернет, боль­шинс­тво юзе­ров доз­ванива­лись к про­вай­деру по dial-up и работа­ли на смеш­ных сей­час ско­рос­тях. Да и дис­ки не отли­чались боль­шими емкостя­ми, поэто­му сжа­тие дан­ных было важ­ной тех­нологи­ей. PNG, JPEG и GIF нам зна­комы и по сей день, но были и дру­гие.</p>
  <p id="1Gaq">Фор­мат <strong>JBIG2</strong> пред­назна­чал­ся для сжа­тия монох­ромных изоб­ражений (где пик­сели могут быть толь­ко чер­ными или белыми). Он при­менял­ся в офис­ных ска­нерах высокой ценовой катего­рии, таких как Xerox WorkCenter.</p>
  <figure id="V4Ps" class="m_custom">
    <img src="https://st768.s3.eu-central-1.amazonaws.com/12b6f117cb0affa76a781a44d8e40023/24580/xerox.png" width="700" />
    <figcaption>Xerox WorkCenter</figcaption>
  </figure>
  <p id="lYUJ">Ес­ли лет десять‑двад­цать тому назад тебе доводи­лось исполь­зовать фун­кцию «ска­ниро­вания в PDF» на подоб­ном устрой­стве, в получав­шихся у тебя PDF, ско­рее все­го, был поток JBIG2.</p>
  <p id="hTMT">При­меча­тель­но, что эти фай­лы даже при дос­той­ном раз­решении ска­ниро­вания занима­ли все­го нес­коль­ко килобай­тов. JBIG2 исполь­зует два метода для дос­тижения такого мощ­ного сжа­тия. Сей­час мы их обсу­дим. <strong>Толь­ко не думай, что мы тут отвлек­лись на какую‑то побоч­ную ерун­ду, — все это име­ет непос­редс­твен­ное отно­шение к экс­плу­ата­ции дыры в iMessage!</strong></p>
  <h3 id="Техника-1:-сегментация-и-замещение">Техника 1: сегментация и замещение</h3>
  <p id="C5Gl">Тек­сто­вый документ, осо­бен­но написан­ный на язы­ках с неболь­шими алфа­вита­ми (англий­ский или, к при­меру, рус­ский), сос­тоит из мно­жес­тва час­то встре­чающих­ся сим­волов. Вмес­те бук­вы, диак­ритику, зна­ки пре­пина­ния и про­чие загогу­лины называ­ют гли­фами.</p>
  <p id="ic93">JBIG2 пыта­ется сег­менти­ровать каж­дую стра­ницу на гли­фы, а затем исполь­зует прос­тое сопос­тавле­ние с образцом, что­бы выделить гли­фы, которые выг­лядят оди­нако­во.</p>
  <figure id="l9Ih" class="m_custom">
    <img src="https://st768.s3.eu-central-1.amazonaws.com/12b6f117cb0affa76a781a44d8e40023/24579/letter-e.png" width="352" />
    <figcaption>Со­пос­тавле­ние с образцом поз­воля­ет най­ти все фор­мы, в дан­ном слу­чае все бук­вы e</figcaption>
  </figure>
  <p id="J6TO">При этом JBIG2 ничего не зна­ет о самих гли­фах и не пыта­ется рас­позна­вать их и сопос­тавлять с алфа­витом (OCR). Кодиров­щик JBIG2 прос­то ищет свя­зан­ные области пик­селей и груп­пиру­ет похожие.</p>
  <p id="WfYY">При этом алго­ритм сжа­тия заменя­ет все дос­таточ­но похожие на вид области копи­ей толь­ко одной из них.</p>
  <figure id="5tZJ" class="m_custom">
    <img src="https://st768.s3.eu-central-1.amazonaws.com/12b6f117cb0affa76a781a44d8e40023/24578/replacing-e.png" width="327" />
    <figcaption>За­мена всех вхож­дений одной копи­ей гли­фа поз­воля­ет дос­тичь высоких коэф­фици­ентов сжа­тия</figcaption>
  </figure>
  <p id="23C3">В таком слу­чае текст по‑преж­нему прек­расно чита­ется, одна­ко объ­ем хра­нимой информа­ции ста­новит­ся мень­ше. Вмес­то того что­бы хра­нить дан­ные о пик­селях всей стра­ницы, для их отоб­ражения нуж­на толь­ко сжа­тая вер­сия «ссы­лоч­ного гли­фа» для каж­дого сим­вола и отно­ситель­ные коор­динаты мест, где дол­жны быть раз­мещены его копии. При рас­паков­ке алго­ритм рас­став­ляет гли­фы по мес­там, как бы рисуя ими на хол­сте.</p>
  <p id="uJNg">Та­кой под­ход таит в себе сущес­твен­ный недос­таток: кри­вой кодиров­щик может слу­чай­но спу­тать похожие на вид сим­волы. А это при­водит к печаль­ным пос­ледс­тви­ям. Для нас в дан­ном слу­чае эти проб­лемы не важ­ны — раз­ве что ими мож­но объ­яснить поч­ти пол­ное вымира­ние JBIG2.</p>
  <h3 id="Техника-2:-уточняющее-кодирование">Техника 2: уточняющее кодирование</h3>
  <p id="BJTl">Итак, резуль­тат сжа­тия на осно­ве под­ста­нов­ки отоб­ража­ется с потеря­ми. То есть пос­ле сжа­тия и рас­паков­ки вывод на вид не будет в точ­ности соот­ветс­тво­вать вво­ду. Поэто­му JBIG2 под­держи­вает и сжа­тие без потерь, в которое вхо­дит про­межу­точ­ный этап «сжа­тия с мень­шими потеря­ми».</p>
  <p id="X6yd">В этом слу­чае допол­нитель­но исполь­зует­ся информа­ция о раз­нице меж­ду замещен­ным гли­фом и исходным — тоже, конеч­но же, сжа­тая. Вот при­мер, показы­вающий раз­личия меж­ду замещен­ным сим­волом сле­ва и исходным сим­волом без потерь посере­дине.</p>
  <figure id="OuIl" class="m_custom">
    <img src="https://st768.s3.eu-central-1.amazonaws.com/12b6f117cb0affa76a781a44d8e40023/24577/xor-e.png" width="267" />
    <figcaption>Ис­поль­зование опе­рато­ра XOR на рас­трах для вычис­ления мас­ки раз­ности изоб­ражения</figcaption>
  </figure>
  <p id="sz6t">В при­мере выше кодиров­щик сох­раня­ет мас­ку раз­ности, показан­ную спра­ва, затем во вре­мя рас­паков­ки она под­верга­ется опе­рации XOR с заменен­ным сим­волом, что­бы вос­ста­новить точ­ные пик­сели, сос­тавля­ющие исходный сим­вол.</p>
  <p id="aBnm">Вмес­то того что­бы пол­ностью кодиро­вать всю раз­ность за один раз, это мож­но сде­лать поэтап­но, при этом на каж­дой ите­рации исполь­зует­ся логичес­кий опе­ратор (один из AND, OR, XOR или XNOR) для уста­нов­ки, сбро­са или перек­лючения битов.</p>
  <p id="EOn2">Каж­дый пос­леду­ющий шаг уточ­нения приб­лижа­ет конеч­ный резуль­тат к ори­гина­лу, и это поз­воля­ет кон­тро­лиро­вать потери качес­тва при сжа­тии. Реали­зация этих шагов уточ­няюще­го кодиро­вания очень гиб­кая. А еще здесь есть воз­можность читать зна­чения, уже при­сутс­тву­ющие в рабочей области вывода. А это, как ты уже, воз­можно, догады­ваешь­ся, ведет нас к пол­ноте по Тьюрин­гу... Но сна­чала нуж­но погово­рить про важ­ную уяз­вимость.</p>
  <hr />
  <h3 id="ПОТОК-JBIG2">ПОТОК JBIG2</h3>
  <p id="70c5">Боль­шая часть декоде­ра CoreGraphics PDF — это проп­риетар­ный код Apple, но реали­зация JBIG2 взя­та из про­екта <a href="https://www.xpdfreader.com/download.html" target="_blank">Xpdf</a>, исходный код которо­го находит­ся в сво­бод­ном дос­тупе.</p>
  <p id="4lPa">Фор­мат JBIG2 пред­став­ляет собой набор сег­ментов, который мож­но рас­смат­ривать как серию команд рисова­ния — они выпол­няют­ся пос­ледова­тель­но за один про­ход. Ана­лиза­тор CoreGraphics JBIG2 под­держи­вает 19 раз­личных типов сег­ментов, которые вклю­чают такие опе­рации, как опре­деле­ние новой стра­ницы, декоди­рова­ние таб­лицы Хаф­фма­на и визу­али­зация рас­тро­вого изоб­ражения с задан­ными коор­дината­ми.</p>
  <p id="XMZL">Сег­менты пред­став­лены клас­сом <code>JBIG2Segment</code> и его под­клас­сами <code>JBIG2Bitmap</code> и <code>JBIG2SymbolDict</code>. <code>JBIG2Bitmap</code> пред­став­ляет собой пря­моуголь­ный мас­сив пик­селей. Его поле дан­ных ука­зыва­ет на зад­ний буфер, содер­жащий повер­хность для рен­дерин­га. <code>JBIG2SymbolDict</code> груп­пиру­ет бит­мапы. А целевая стра­ница пред­став­лена как <code>JBIG2Bitmap</code> и сос­тоит из отдель­ных гли­фов. На сег­менты (<code>JBIG2Segment</code>) мож­но ссы­лать­ся по номеру, а век­торный тип <code>GList</code> хра­нит ука­зате­ли на все сег­менты. Что­бы най­ти сег­мент по его номеру, <code>GList</code> ска­ниру­ется пос­ледова­тель­но.</p>
  <blockquote id="Jprg">Кста­ти, если ты сей­час про­читал сло­во «джи‑лист» неп­равиль­но и раз­веселил­ся, как дет­садовец, то пос­тарай­ся скон­цен­три­ровать­ся, нас ждут куда более инте­рес­ные откры­тия.</blockquote>
  <hr />
  <h2 id="УЯЗВИМОСТЬ">УЯЗВИМОСТЬ</h2>
  <p id="DuW7">Уяз­вимость пред­став­ляет собой клас­сичес­кое целочис­ленное перепол­нение при сопос­тавле­нии ссы­лоч­ных сег­ментов. Вот два сег­мента кода, которые дела­ют его воз­можным.</p>
  <p id="LbkS"><code>Guint numSyms; // (1)</code></p>
  <p id="I2S9"><code> numSyms = 0;</code></p>
  <p id="EghE"><code> for (i = 0; i &lt; nRefSegs; ++i) {</code></p>
  <p id="rz0R"><code> if ((seg = findSegment(refSegs[i]))) {</code></p>
  <p id="hmqc"><code> if (seg-&gt;getType() == jbig2SegSymbolDict) {</code></p>
  <p id="H8V6"><code> numSyms += ((JBIG2SymbolDict *)seg)-&gt;getSize(); // (2)</code></p>
  <p id="sDLS"><code> } else if (seg-&gt;getType() == jbig2SegCodeTable) {</code></p>
  <p id="ubtm"><code> codeTables-&gt;append(seg);</code></p>
  <p id="3yux"><code> }</code></p>
  <p id="SWdR"><code> } else {</code></p>
  <p id="70Cm"><code> error(errSyntaxError, getPos(),</code></p>
  <p id="gV45"><code> &quot;Invalid segment reference in JBIG2 text region&quot;);</code></p>
  <p id="SqJB"><code> delete codeTables;</code></p>
  <p id="YZGr"><code> return;</code></p>
  <p id="qyV3"><code> }</code></p>
  <p id="jupw"><code> }</code></p>
  <p id="HxYb"><code> ...</code></p>
  <p id="jOzQ"><code> // Get the symbol bitmaps</code></p>
  <p id="KQC0"><code> syms = (JBIG2Bitmap **)gmallocn(numSyms, sizeof(JBIG2Bitmap *)); // (3)</code></p>
  <p id="BGyx"><code> kk = 0;</code></p>
  <p id="u9nX"><code> for (i = 0; i &lt; nRefSegs; ++i) {</code></p>
  <p id="inVA"><code> if ((seg = findSegment(refSegs[i]))) {</code></p>
  <p id="X2Qv"><code> if (seg-&gt;getType() == jbig2SegSymbolDict) {</code></p>
  <p id="8pGd"><code> symbolDict = (JBIG2SymbolDict *)seg;</code></p>
  <p id="6Y6h"><code> for (k = 0; k &lt; symbolDict-&gt;getSize(); ++k) {</code></p>
  <p id="qZvF"><code> syms[kk++] = symbolDict-&gt;getBitmap(k); // (4)</code></p>
  <p id="nDRT"><code> }</code></p>
  <p id="4V3f"><code> }</code></p>
  <p id="MArG"><code> }</code></p>
  <p id="Efx8"><code> }</code></p>
  <p id="U9fk">Здесь перемен­ная <code>numSyms</code> объ­явле­на как 32-бит­ное целое (смот­ри помет­ку 1). Если мы будем раз за разом добав­лять спе­циаль­но под­готов­ленные ссы­лоч­ные сег­менты (2), в кон­це кон­цов это при­ведет к перепол­нению <code>numSyms</code> до кон­тро­лиру­емо­го неболь­шого зна­чения. Это зна­чение исполь­зует­ся для выделе­ния кучи (3), из чего сле­дует, что <code>syms</code> будет ука­зывать на буфер недос­таточ­ного раз­мера. Во внут­реннем цик­ле (4) зна­чения ука­зате­ля <code>JBIG2Bitmap</code> записы­вают­ся в буфер <code>syms</code> мень­шего раз­мера.</p>
  <p id="LwyD">Без допол­нитель­ных ухищ­рений этот цикл записал бы более 32 Гбайт дан­ных в неп­ригод­ный по раз­мерам буфер <code>syms</code>, а это при­ведет к сбою. Что­бы такого не про­исхо­дило, куча обра­баты­вает­ся так, что­бы пер­вые нес­коль­ко записей из кон­ца буфера <code>syms</code> пов­режда­ли зад­ний буфер <code>GList</code>. Спи­сок <code>GList</code> хра­нит все извес­тные сег­менты и исполь­зует­ся фун­кци­ей <code>findSegments</code> для сопос­тавле­ния номеров сег­ментов, передан­ных в <code>refSegs</code>, с ука­зате­лями <code>JBIG2Segment</code>. Перепол­нение при­водит к переза­писи ука­зате­лей <code>JBIG2Segment</code> в <code>GList</code> ука­зате­лями <code>JBIG2Bitmap</code> (4).</p>
  <p id="tzBz">Так как <code>JBIG2Bitmap</code> нас­леду­ется от <code>JBIG2Segment</code>, вир­туаль­ный вызов <code>seg-&gt;getType()</code> выпол­няет­ся успешно даже на устрой­ствах, где вклю­чена про­вер­ка под­линнос­ти ука­зате­ля (она исполь­зует­ся для выпол­нения сла­бой про­вер­ки типа вир­туаль­ных вызовов). Но воз­вра­щаемый тип теперь не будет равен <code>jbig2SegSymbolDict</code>, в резуль­тате чего даль­нейшая запись не про­исхо­дит (4) и сте­пень пов­режде­ния памяти огра­ничи­вает­ся.</p>
  <figure id="5NRg" class="m_custom">
    <img src="https://st768.s3.eu-central-1.amazonaws.com/12b6f117cb0affa76a781a44d8e40023/24576/overflow.png" width="506" />
    <figcaption>Уп­рощен­ное пред­став­ление струк­туры памяти при перепол­нении кучи</figcaption>
  </figure>
  <hr />
  <h2 id="БЕСПРЕДЕЛЬНЫЙ-И-НЕОГРАНИЧЕННЫЙ-ДОСТУП">БЕСПРЕДЕЛЬНЫЙ И НЕОГРАНИЧЕННЫЙ ДОСТУП</h2>
  <p id="kYTO">Пос­ле того как сег­менты в спис­ке <code>GList</code> пов­режде­ны, хакер перехо­дит к пор­че объ­екта <code>JBIG2Bitmap</code>, пред­став­ляюще­го собой текущую стра­ницу (мес­то, где коман­ды рисова­ния выпол­няют визу­али­зацию). Про­ще говоря, <code>JBIG2Bitmap</code> — это обо­лоч­ки зад­него буфера, хра­нящие ширину и высоту буфера (в битах), а так­же зна­чение, которое опре­деля­ет, сколь­ко бай­тов хра­нит­ся для каж­дой стро­ки.</p>
  <figure id="jXRZ" class="m_custom">
    <img src="https://st768.s3.eu-central-1.amazonaws.com/12b6f117cb0affa76a781a44d8e40023/24575/layout.png" width="1070" />
    <figcaption>Струк­тура памяти объ­екта JBIG2Bitmap, показы­вающая поля segnum, w, h и line, которые были пов­режде­ны во вре­мя перепол­нения буфера</figcaption>
  </figure>
  <p id="2tD4">Ес­ли тща­тель­но струк­туриро­вать <code>refSegs</code>, они могут оста­новить перепол­нение пос­ле записи еще трех ука­зате­лей <code>JBIG2Bitmap</code> пос­ле кон­ца буфера сег­ментов <code>GList</code>. Такой под­ход поз­воля­ет переза­писать ука­затель на <code>vtable</code> и пер­вые четыре поля <code>JBIG2Bitmap</code>, пред­став­ляющих текущую стра­ницу.</p>
  <p id="rDsh">Вви­ду устрой­ства адресно­го прос­транс­тва iOS эти ука­зате­ли, ско­рее все­го, будут находить­ся во вто­рых 4 Гбайт вир­туаль­ной памяти с адре­сами от 0x100000000 до 0x1ffffffff. На девай­сах, исполь­зующих iOS, при­меня­ется пря­мой порядок бай­тов (little-endian). Это озна­чает, что поля <code>w</code> и <code>line</code> будут переза­писа­ны на 0x1 — наибо­лее зна­чимую полови­ну ука­зате­ля <code>JBIG2Bitmap</code>, а поля <code>segNum</code> и <code>h</code> заменят­ся наиме­нее зна­чимой полови­ной это­го же ука­зате­ля — слу­чай­ным зна­чени­ем, завися­щим от раз­мещения кучи и ASLR (ран­домиза­ция раз­мещения адресно­го прос­транс­тва), где‑то меж­ду 0x100000 и 0xffffffff.</p>
  <p id="56Kf">В ито­ге выходит, что целевая стра­ница <code>JBIG2Bitmap</code> получа­ет слиш­ком боль­шое зна­чение <code>h</code>. Пос­коль­ку это зна­чение исполь­зует­ся для про­вер­ки гра­ниц и дол­жно отра­жать выделен­ный раз­мер буфера стра­ницы, получа­ется эффект раз­верты­вания рабочей области для вывода изоб­ражения. Это озна­чает, что пос­леду­ющие коман­ды сег­мента JBIG2 могут читать и записы­вать память за пре­дела­ми исходных гра­ниц буфера под­дер­жки стра­ницы.</p>
  <p id="sISY">Об­работ­чик кучи так­же раз­меща­ет буфер под­дер­жки текущей стра­ницы чуть ниже непод­ходяще­го по раз­мерам буфера <code>syms</code>, поэто­му, ког­да стра­ница <code>JBIG2Bitmap</code> не огра­ниче­на, она может читать и записы­вать свои собс­твен­ные поля.</p>
  <figure id="rTIl" class="m_custom">
    <img src="https://st768.s3.eu-central-1.amazonaws.com/12b6f117cb0affa76a781a44d8e40023/24574/buffer.png" width="545" />
    <figcaption>Схе­ма памяти, показы­вающая, как неог­раничен­ный зад­ний буфер рас­тро­вого изоб­ражения может ссы­лать­ся на объ­ект JBIG2Bitmap и изме­нять поля в нем, пос­коль­ку этот объ­ект рас­положен пос­ле буфера в памяти</figcaption>
  </figure>
  <p id="E76Q">Бла­года­ря отри­сов­ке четырех­бай­товых рас­тров с пра­виль­ными коор­дината­ми мож­но про­изво­дить запись во все поля стра­ницы <code>JBIG2Bitmap</code>, а тща­тель­но выбирая новые зна­чения для <code>w</code>, <code>h</code> и <code>line</code>, мож­но записы­вать про­изволь­ные сме­щения в зад­ний буфер стра­ницы.</p>
  <p id="I9LA">На этом эта­пе уже мож­но было бы писать абсо­лют­ные адре­са памяти, если бы мы зна­ли их сме­щения в зад­нем буфере стра­ницы. Но как вычис­лить эти сме­щения? До сих пор этот экс­пло­ит дей­ство­вал очень похоже на обыч­ный экс­пло­ит тра­дици­онно­го язы­ка сце­нари­ев. В JavaScript это мог­ло бы закон­чить­ся неог­раничен­ным объ­ектом <code>ArrayBuffer</code> с дос­тупом к памяти. В таком слу­чае зло­умыш­ленник имел бы воз­можность запус­кать про­изволь­ный код на JavaScript, который бы исполь­зовал­ся для вычис­ления сме­щений и выпол­нения про­изволь­ных дей­ствий. Как это сде­лать в однопро­ход­ном пар­сере изоб­ражений?</p>
  <hr />
  <h2 id="ДРУГОЙ-ФОРМАТ-СЖАТИЯ-—-ПОЛНЫЙ-ПО-ТЬЮРИНГУ!">ДРУГОЙ ФОРМАТ СЖАТИЯ — ПОЛНЫЙ ПО ТЬЮРИНГУ!</h2>
  <p id="79Fe">Как ты пом­нишь, пос­ледова­тель­ность шагов, реали­зующих уточ­нение в JBIG2, очень гиб­кая. Шаги уточ­нения могут ссы­лать­ся как на рас­тро­вое изоб­ражение вывода, так и на любые ранее соз­данные сег­менты, а так­же отоб­ражать вывод либо на текущей стра­нице, либо на сег­менте. Хит­роум­но работая с завися­щей от кон­тек­ста деком­прес­сией уточ­нения, мож­но соз­давать пос­ледова­тель­нос­ти сег­ментов, в которых эффект будут иметь толь­ко опе­рато­ры ком­бинации усо­вер­шенс­тво­ваний.</p>
  <p id="7QAh">На прак­тике это зна­чит, что мож­но при­менять логичес­кие опе­рато­ры AND, OR, XOR и XNOR меж­ду областя­ми памяти с про­изволь­ными сме­щени­ями зад­него буфера <code>JBIG2Bitmap</code> текущей стра­ницы. И пос­коль­ку огра­ниче­ний нет, мож­но выпол­нять эти логичес­кие опе­рации с памятью с про­изволь­ными сме­щени­ями за пре­дела­ми гра­ниц.</p>
  <figure id="WwnY" class="m_custom">
    <img src="https://st768.s3.eu-central-1.amazonaws.com/12b6f117cb0affa76a781a44d8e40023/24573/memorypage.png" width="551" />
    <figcaption>Схе­ма памяти, показы­вающая, как логичес­кие опе­рато­ры могут при­менять­ся за пре­дела­ми гра­ниц</figcaption>
  </figure>
  <p id="V8aB">Это нем­ного усложнит задачу, но при желании мож­но вмес­то гли­фов работать с отдель­ными битами. В качес­тве вход­ных дан­ных мож­но подать набор команд сег­мента JBIG2, которые реали­зуют пос­ледова­тель­ность логичес­ких битовых опе­раций, при­меня­емых к стра­нице. А пос­коль­ку буфер стра­ницы не огра­ничен, эти битовые опе­рации могут работать с про­изволь­ной памятью.</p>
  <p id="paMX">С помощью дос­тупных логичес­ких опе­рато­ров AND, OR, XOR и XNOR мож­но выпол­нить любую матема­тичес­кую фун­кцию.</p>
  <hr />
  <h3 id="ВЫВОДЫ">ВЫВОДЫ</h3>
  <p id="H0qk"><strong>В JBIG2 нет воз­можнос­ти выпол­нять скрип­ты, но в сочета­нии с уяз­вимостью он может ими­тиро­вать схе­мы раз­ных логичес­ких вен­тилей, работа­ющих с про­изволь­ной памятью</strong>.<u> Так почему бы не исполь­зовать это и не соз­дать собс­твен­ную компь­ютер­ную архи­тек­туру для выпол­нения сво­их сце­нари­ев?</u></p>
  <p id="0qet"><strong>Это как раз то, что дела­ет экс­пло­ит NSO</strong>. В нем на осно­ве 70 тысяч сег­мен­тных команд реали­зова­на архи­тек­тура неболь­шого компь­юте­ра. Здесь есть регис­тры, а так­же пол­ные 64-бит­ный сум­матор и ком­паратор, которые исполь­зуют­ся для поис­ка в памяти и выпол­нения ариф­метичес­ких опе­раций. Все это работа­ет не так быс­тро, как JavaScript, но мож­но добить­ся схо­жих резуль­татов.</p>
  <p id="wmjW">Опе­рации началь­ной заг­рузки, бла­года­ря которым экс­пло­ит выходит из песоч­ницы, написа­ны целиком на этой при­чуд­ливой эму­лиру­емой эле­мен­тарной логике, соз­данной из одно­го про­хода деком­прес­сии потока JBIG2.</p>
  <p id="AUA7"><strong>Хоть деятель­ность NSO и вызыва­ет воп­росы с точ­ки зре­ния эти­ки, но нель­зя не отдать дол­жное изоб­ретатель­нос­ти этой схе­мы!</strong></p>
  <p id="n5co"></p>
  <p id="HWq0">Не забудь подписаться на наш <a href="https://t.me/+IEXpIFkco2BjODYy" target="_blank">канал</a></p>

]]></content:encoded></item></channel></rss>