Привет всем, сегодня я с вами обсуждаю ASAR
честностьисследовать,ASAR
Не стратегия, а формат файла
Electron из asar
(Archive)да Что-то вроде Воля Несколькодокументи Оглавление Пакетв единыйдокументиз Формат архива,Предназначен для Electron Дизайн приложения. Он похож на сжатую упаковку, но имеет специальную конструкцию, облегчающую Electron Возможность напрямую архивировать ресурсы загрузки документов из этого архива без необходимости его предварительного разархивирования. использовать asar
из Ключевые преимущества включают в себя:
asar
документ в ресурсах для чтения без необходимости просматривать несколько небольших документов.asar
Пакет заменяет исходный пакет «Понятно из нескольких документов Оглавление», упрощая процесс распространения и обновления приложения.использовать MacOS из пользователей может быть очень легко понять, MacOS В приложении суффикс программаиз .app
, вы можете дважды щелкнуть, чтобы выполнить, но вы также можете щелкнуть правой кнопкой мыши -> Явное содержимое пакета идет по этому пути.
Это тоже немного похоже Linux серединаиз tar Файл — это набор файлов, объединенных вместе.
Соберите всех вместе, чтобы решить проблему длинного пути.,Также было бы лучше провести полную проверку организма.,Вам нужно только проверить это после комплектации.,Это гарантирует, что программа сможет своевременно обнаружить подделку исходного кода.
В общедоступной учетной записи открыта функция сообщения, каждый может оставить сообщение для обсуждения ~
В этой статье также представлены PDF
версиякнига及 Github
, смотрите конец статьи
Официально соедините файлы вместе или вы можете сделать что-то вроде ELF
Этот вид документа,использовать ресурс для поиска документа по смещению,Или просто создайте систему документов,Могут быть сопоставлены один за другим через ссылку,Если говорить о сути начальства,Это определенно то же самое
С официальной точки зрения существования они связаны .asar
Документ рассматривается как виртуальная система Оглавленияиздокументов. Позже официальное правительство улучшило эту функцию. Node API
и Web API
, что позволяет поддерживать этот формат вызова, но вполне возможно, что невозможно все Изменить. на поддержку, так что официальный список Понятно некоторые методы, которые можно использовать
существовать MacOS начальство,asar
Файл находится по адресу /Applications/xxx.app/Contents/Resources/app.asar
потому что Electron из специальной патч-программы, Node API например fs.readFile
и require
использовать ASAR нравитьсяиспользоватьвиртуальный Оглавление Такой же, Внутридокументтакже нравитсядасуществоватьдокументсистема内Такой же
Например, предположим, что мы существуем /path/to
В папке есть один example.asar
Сумка:
asar list /path/to/example.asar
$ asar list /path/to/example.asar
/app.js
/file.txt
/dir/module.js
/static/index.html
/static/main.css
/static/jquery.min.js
const fs = require('node:fs')
fs.readFileSync('/path/to/example.asar/file.txt')
file.txt
вставить символы flag
,проходить process.resourcesPath
Вы можете вернуть путь к ресурсу, который является текущим путем после сращивания.
После упаковки выполните его, чтобы проверить, можно ли его успешно вывести.
const fs = require('node:fs')
fs.readdirSync('/path/to/example.asar')
require('./path/to/example.asar/dir/module.js')
Модуль успешно загружен
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.loadURL('file:///path/to/example.asar/static/index.html')
успешно загружено
существовать网页середина,Можетиспользовать file:
Запрос протокола находится в файле. нравиться Node API, ASAR Архивы можно рассматривать как каталоги.
<script>
let $ = require('./jquery.min.js')
$.get('file:///path/to/example.asar/file.txt', (data) => {
console.log(data)
})
</script>
некоторыйслучайнапримерверно ASAR Чтобы проверить файл архива, нам нужно прочитать его так: "документ" читай так ASAR документ. 为此你Можетиспользоватьвстроенныйиз Нетasar
Функцияизиоригинальныйfs
модуль一模Такой жеизoriginal-fs
модуль。
const originalFs = require('original-fs')
originalFs.readFileSync('/path/to/example.asar')
Вы также можете использовать process.noAsar
установлен на true
отключить fs
пара в модуле asar
поддержка:
const fs = require('node:fs')
process.noAsar = true
fs.readFileSync('/path/to/example.asar')
Есть несколько узлов APIМожетосуществлятьдвоичныйдокумент,Напримерchild_process.exec
、child_process.spawn
иchild_process.execFile
,но толькоexecFile
поддерживатьсуществоватьASARв файлеосуществлятьдвоичныйдокумент.
потому что exec
и spawn
позволять command
заменять file
в качестве входных данных, в то время как command
дануждатьсясуществовать shell Внизосуществлятьиз
На данный момент нет Надежный метод оценки command серединада Нет существования, эксплуатируется один asar издокумента в упаковке, и даже если его удастся определить, официал все равно не может гарантировать, что его можно будет заменить без каких-либо побочных эффектов. command Путь в издокументе.
Некоторые API-интерфейсы Node при вызове распаковывают файлы в файловую систему. Помимо проблем с производительностью, могут быть обижены различные антивирусные сканеры.
你Может把использовать--unpack
Варианты, как Воля, различные документы остаются в несжатом состоянии из обходного пути. В приведенном ниже примере собственная общая библиотека модуля Node.js Воля не будет заблокирована:
$ asar pack app app.asar --unpack *.node
После запуска команды вы увидите app.asar.unpacked
Папки и app.asar
файлы создаются вместе. Нет被Пакетиздокументи app.asar
Будут заархивированы и опубликованы вместе.
Справочная статья https://www.electronjs.org/zh/docs/latest/tutorial/asar-archives
Честность ASAR — экспериментальная функция, которая существует во время проверки приложения из архива ASAR в контенте.
В настоящее время поддерживается ASAR честностьизверсиякнигаследующее
Electron >= 16.0.0
Electron >= 30.0.0
В настоящее время поддерживается только @electron/asar
Генерировать ASAR документизчестностьисследовать
существоватьasar@3.1.0
середина引入Понятноподдерживать。пожалуйста, обрати внимание,Этот пакет был перенесен на @electron/asar
所иметьверсиякнигаиз @electron/asar
Все поддерживают АСАР честность
каждый ASAR файлы содержат JSON Строка формат голова, головаиз содержит integrity
объект, этот объект содержит 16 Базовый код из hash ценность, это hash ценность – это весь ASAR документиз hash ценить также содержит массив Понятно, в котором хранятся издакаждые блоки из 16 Базовый код из hash ценить
{
"algorithm": "SHA256",
"hash": "...",
"blockSize": 1024,
"blocks": ["...", "..."]
}
кроме того,существовать ПакетElectronприложениепрограммачас,Вам необходимо определить весь заголовок ASAR в шестнадцатеричном виде.
давать возможностьASARчестностьназад,Ваше приложение изElectron программа Волясуществовать запускается для проверки хэшей изголовья архива ASAR. Если хеша нет ценить,Или хеш ценить не совпадает,Приложение программы Воля принудительно прекращено
Проверка честности ASAR в настоящее время отключена по умолчанию в существовании и может быть переключена при построении существования. EnableEmbeddedAsarIntegrityValidation
этот fuse Включить, обычно тоже нужно включить onlyLoadAppFromAsar
в противном случае проверку достоверности можно обойти через путь поиска кода приложения Electron.
const { flipFuses, FuseVersion, FuseV1Options } = require('@electron/fuses')
flipFuses(
// E.g. /a/b/Foo.app
pathToPackagedApp,
{
version: FuseVersion.V1,
[FuseV1Options.EnableEmbeddedAsarIntegrityValidation]: true,
[FuseV1Options.OnlyLoadAppFromAsar]: true
}
)
Конечно, ты можешь пройти Electron Forge
Настройка при упаковке
ASAR честностьпо твоемусуществовать Пакетчас提供изголова hash проверить ASAR Архив контента. Предоставьте хэш этого пакета из процесса верно macOS иWindows дадругойиз
Electron Forge и Electron Packager автоматически настраивают это для вас, никакой дополнительной настройки не требуется. Минимальная версия требуемой честности ASAR:
@electron/packager@18.3.1
@electron/forge@7.4.0
MacOS
Для пакета macOS вы должны существовать Пакетизаппиз. Info.plist
Среднее заполнение допустимо из ElectronAsarIntegrity
Словарный блок. Вот пример
<key>ElectronAsarIntegrity</key>
<dict>
<key>Resources/app.asar</key>
<dict>
<key>algorithm</key>
<string>SHA256</string>
<key>hash</key>
<string>9d1f61ea03c4bb62b4416387a521101b81151da0cfbe18c9f8c8b818c5cebfac</string>
</dict>
</dict>
Действительный algorithm
ценить в настоящее время SHA256
。 hash
даиспользовать Просто указаноиз algorithm
вычислить АСАРголовагетижаш
@electron/asar
Пакет опубликован getRawHeader
метод,然назад Можетверно该методиз Результаты хэшируются для создания этогоценить(Напримериспользоватьnode:crypto
модуль).
Windows
При упаковке программы платформы Windows тип должен быть указан как Integrity
、Имя ElectronAsar
из Действительная запись ресурса. Этот ресурс надо ценить JSON Кодирование из словаря, формат следующий:
[
{
"file": "resources\\app.asar",
"alg": "sha256",
"value": "9d1f61ea03c4bb62b4416387a521101b81151da0cfbe18c9f8c8b818c5cebfac"
}
]
Примеры реализации см.
Electron Packager
Код в изsrc/resedit.ts
https://github.com/electron/packager/blob/main/src/resedit.ts
существование Вот да разъяснение основных принципов Понятно, на самом деле да .asar
документизцелый и блок hash 被存储существовать .asar
изголова,конечновычислитьобщий hash Голову включать нельзя, иначе возник бы логический парадокс.
Затем передайте .asar
изголова строка вычислитьхеш получатьодинценить,之назад Воляэтотценитьсуществовать Пакет过程середина嵌入到двоичный Можетосуществлятьдокументсередина
Так что если вы включите проверку честности кода,Тогда существование будет вынуто при запуске из,такой же .asar
изголоваизhashсравниватьверно,беги, если прошло,Выйти, если не пройдено
Здесь есть некоторые вопросы, которые довольно расплывчаты. При запуске да только проверяет. .asar
документизголоваиз hash ? После прохождения даголовайижаш проверки он будет проверен дальше. .asar
целое и блок из hash
и .asar
Согласовано ли записанное содержимое?
Полный текст может быть сгенерирован после программы Пакет. .exe
Есть и такие документы .exe
существовать Установитьназад会释放一些документ
сейчассуществоватьвопросда,Затем код проверки честности ASAR изначально появился в документе.,возвращатьсядасуществовать Установитьдокументвнутрии释放назадиззапускатьдокумент(двоичный Можетосуществлятьдокумент)внутри都иметь呢?
существования В процессе поиска информации было установлено, что разработчик существования был найден пользователем существующего. 2019 Проведите обсуждение в 2017 году и скажите, что, если asar
Код изменен Electron
Обнаружил, что в данный момент проверка честности кода отсутствует. fuse Как и официальная технология, отношение официального персонала: Если злоумышленник смог изменить .asar
документ Понятно, указывающий, что злоумышленник получил Понятно системные разрешения. В это время вам следует побеспокоиться о том, издано ли это. asar не был изменен, но злоумышленник получил системные разрешения
Некоторые разработчики и Безопасность высказывают собственное мнение,Если чиновник не предоставил код, проверьте честность,Тогда злоумышленник сможет использовать подписанный код изпрограммана загрузкизлонамеренный.,Другими словами, дабелый плюс черный,Пожалуйста, перейдите по ссылке ниже для ознакомления с конкретным содержанием обсуждения.
https://github.com/electron/electron/issues/19671
сейчассуществоватьиметь Понятнокодчестностьисследовать,Воля ASAR головавычислитьполучатьиз hash ценить записывается в Понятнодвоичный документ, но да, если злоумышленник сможет изменить оба .asar
документидвоичныйдокумент,существовать .asar
Добавьте злонамеренный код в документ, сгенерируйте новый хэш, измените хэш в двойном документе, чтобы он стал новым. hash , то проверка на честность также будет обойдена
Но в это время,подпись двойного документа станет недействительной,Система проверки честности поможет асару проверить честность,Таким образом, подпись программы — это почти последняя линия защиты.
в настоящий моментиспользовать Понятно ASAR честностьизпрограммы – это большая редкость, ведь она только что вышла даже. Discord
、VSCode
Обновления такого типа выполняются относительно быстро, и приложение не имеет никаких рекомендаций. возможность
Все, что нам нужно для разработки и упаковки программы для тестирования, — это выбрать в качестве платформы Windows 11.
Непосредственно выберите официальную программу
npm init electron-app@latest my-app
Electron
версиякнига为 30.0.3
, с возможностью проверки честности кода
можно увидеть,ОткрытьDeveloper Tools устанавливаются автоматически по умолчанию.,Эффекта мы добьемся позже, внедрив злонамеренный код.,Отменить автоматические инструменты разработчика Открыть,Не похоже на злонамеренный хаха
Введите каталог программы, то есть my-app
, выполните команду установки
npm install --save-dev @electron-forge/cli
Просто нужно изменить my-app
Оглавление Внизиз forge.config.js
Просто файл
Мы обнаружили, что по умолчанию установлено значение «установлено». на true
Понятно
npm run make
существовать my-app
Недавно создано Понятно в разделе Оглавление out
Справочник, официальные советы нам Artifacts
существовать out
Оглавление Внизиз make
в каталоге
существовать out
Под папкой находятся две папки, среди которых make
В папке документов хранятся изда, скомпилированные из одного документа; Другая папка с именем программа - операционная система - архитектура с именем издокумент содержит несколько документов Оглавление, включая входной документ.
проверено,По умолчанию документ не включает процесс установки.,Он также не будет распакован для выпуска Оглавление документа.,Итак, давайте возьмем пример Multi-documentОглавлениеизпрограмма.
Когда программа откроется нормально, инструменты разработчика откроются автоматически.
предохранитель такой
существовать asar
из Github В проекте есть подробное введение. ASAR формат заголовка
| UInt32: header_size | String: header | Bytes: file1 | ... | Bytes: file42 |
{
"files": {
"tmp": {
"files": {}
},
"usr" : {
"files": {
"bin": {
"files": {
"ls": {
"offset": "0",
"size": 100,
"executable": true,
"integrity": {
"algorithm": "SHA256",
"hash": "...",
"blockSize": 1024,
"blocks": ["...", "..."]
}
},
"cd": {
"offset": "100",
"size": 100,
"executable": true,
"integrity": {
"algorithm": "SHA256",
"hash": "...",
"blockSize": 1024,
"blocks": ["...", "..."]
}
}
}
}
}
},
"etc": {
"files": {
"hosts": {
"offset": "200",
"size": 32,
"integrity": {
"algorithm": "SHA256",
"hash": "...",
"blockSize": 1024,
"blocks": ["...", "..."]
}
}
}
}
}
}
С точки зрения структуры заголовка расположение файла также определяется смещением.
Мы можем напрямую resources
Внутри app.asar
втащить 16 Чтобы импортировать Проверять, я выбираю строку существование из
Мы обнаруживаем, что помимо магического числа Понятнодокумент,Остальное — обычный текст.,Это будет легко
Справочная статья https://github.com/electron/asar
По умолчанию,ASAR
Внутреннее да читается только из, поэтому его нельзя передать напрямую. Electron
из API изменить,
Мы можем скомпилировать две копии APP, название документа остается прежним. В одном из материалов инструменты разработчика отключены, а значит да имитирует поведение злонамеренного, а затем использовать то же самое. Electron Forge
Пакет,之назадиспользовать原книганормальныйизголова Заменить или нетнормальныйизголова,Снова Воляобъединены виззлонамеренныйasarдокумент Заменить нанормальныйиздокумент,давайте посмотрим,此часпрограммаданетнормальный,да Можно ли обнаружить вмешательство?
Давайте сначала попробуем перезаписать обычный файл и посмотреть, получится ли это сделать. Что будет отображено в случае неудачи? Конечно, сделайте резервную копию исходных файлов.
Похоже, что напрямую заменить даиз не получится.
нормальный .asar
Позиция заголовка проверки файла 0x00002937
,10 Шестнадцатеричная система 10551
злонамеренный .asar
Позиция заголовка проверки файла 0x00006FF3
,10 Шестнадцатеричная система 28659
Итак, мы заменяем слова примерно,Удалите непосредственно заголовок злонамеренного документа.,之назад Волянормальныйдокументизнадеть головузлонамеренныйдокументначальствоидти
сделать что-то вроде этого,Вам все равно придется провести линию фронта в своих областях знаний.,Запуск командной строки
идти掉злонамеренный .asar
документ, остальное оставь себе
dd if=./app-evil.asar of=./app-evil-without-header.asar bs=1 skip=28659
получатьнормальный .asar
документизголова
dd if=./app.asar of=./app-header.asar bs=1 count=10551
Начать соединение двух файлов
давать возможность my-app.exe
можно увидеть,честность Проверка пройдена Понятно,Но дапрограмма не встала
Это нетрудно понять, потому что чтосуществовать Заменяем заголовок, там есть смещение, связанное с информацией, дальше надо начинать B План Понятно, я прямо модифицирую нормальныйиз app.asar
,Воля Внутри Замените пробелы на комментарии,Это не меняет размер документа,Местоположение документа также не изменилось.,Если он все еще не может начаться,Затемда Electron
Он также проверит содержимое заголовка документа.
Измените эти два пробела на //
Волямодифицированныйиз app.asar
Обложка оригинального документа
Начать заново my-app.exe
можно увидеть,Модификация прошла успешно Понятно,Инструменты разработчика не появляются,Это показывает, что проверка честности ненадежна.,攻击者完全Можетпроходить修改 app.asar
Выполнить внедрение кода
о onlyLoadAppFromAsar
этот说一Вниз Функция,Согласно официальному описанию,По умолчанию,Electron
Разработка изпрограммы поиск asar
в недокументированном порядке
при включении onlyLoadAppFromAsar
Когда, просто использовать app.asar
начальство Упоминается в интервьюиз app
Следует обратиться к Оглавлению Microsoft из VSCode
Просто даиспользоватьиз app
Оглавление
мы будемmy-app
программаиз app.asar
Изменить на default_app.asar
На этом этапе мы пытаемся открыть my-app
Окно не создается
мы проходим @electron/fuses
верноonlyLoadAppFromAsar
выполнить флип
Выполнить еще раз my-app
На этот раз проверка не удалась Понятно,此час我们已经Волязлонамеренныйизapp.asar
Обменен обратно на нормальныйиз Понятно, но проверка не удалась на честность
должен дапотому чтоначальствостолкнулось,существовать Windows Проверьте честность, чтобы получить .asar
документизадресиз,конечноэтот Forge
Понятное дело за нас сделали, но дорабатываем вручную app.asar -> default_app.asar
, бинарная программа не знает
На этом этапе мы снова проходим @electron/fuses
верно EnableEmbeddedAsarIntegrityValidation
выполнить флип
Выполнить еще раз my-app
SmoothПогруженно из default_app.asar
На этом этапе нам нужно подумать о Понятно. VSCode
нам просто нужно существованиеиз resources
Поместите один в раздел Оглавление app.asar
, возможно, можно угнать VSCode
Понятно, давай попробуем
мы модифицируем my-app-evil
Предметы, которые делают это Открытьвычислить
мы будем app.asar
Копировать в VSCode
из resources
Оглавление
Открыть VSCode
Успешно захвачено VSCode
Electron
Официальный запуск Понятно ASAR проверка честности, включив EnableEmbeddedAsarIntegrityValidation
этот fuse из способа сделать проверку программсуществовать при запуске .asar
документизчестность
Принцип работы Сразудасуществоватьсоздавать .asar
документ, вычислить документ целиком и разделить на части из hash , а затем сохраните его в определенном формате. .asar
При документировании заголовка пакет прикладной программы рассчитывает заголовок. hash ценить, затем исправить Пакет в программе приложения
Когда программа запустится, она прочитает .asar
документизголова,вычислить hash После ипрограмма внутреннего изценить выполнить вернее чем, если верно чем через Понятно, то загрузить .asar
файл для выполнения
Здесь извопросысуществовать по,программабуду только проверятьголовавычислитьназадизhash,Но он не проверит, действительна ли запись изхэшда в голове.,Поэтому, если вы измените содержимое Понятного документа,размер документа остается неизменным,Смещение не изменится (смещение существующегоголова),чтобы обойти проверку
Еще один интересный из fuse да onlyLoadAppFromAsar
,этот fuse
если закрыто,программасуществоватьнагрузка .asar
Документ будет искаться в следующем порядке: нагрузка ищет документ в первую очередь
Если предохранитель включен, только нагрузка app.asar
,所以если закрыто该 fuse
, приведет к перехвату потока выполнения
Судя по всему, последняя версия. VSCode
Вы можете добиться угона, потому что что VSCode
использоватьизда app
Оглавление
мы давайте честно проверим проблему еще раз Electron
официальное сообщение
PDF
версия
https://pan.baidu.com/s/17OilPRMxcLWwuHGV5z_Q2w?pwd=yrbq
Github
https://github.com/Just-Hack-For-Fun/Electron-Security