Статья AVPass — инструмент для обхода антивируса на Android

Приветствую, в этой статье я хочу показать инструмент, который позволит препятствовать обнаружению вредоносного ПО антивирусом на платформе Android.

upload_2017-8-1_22-6-26.png


AVPass – в первую очередь, это инструмент для определения моделей систем обнаружения вредоносных программ Android (т. е. Антивирусного программного обеспечения) и обхода логики их обнаружения с использованием принятой информации в сочетании с методами обфускации APK. AVPass не ограничивается функциями сканирования, он может определять правила обнаружения, используя их для маскировки любых вредоносных программ Android под обычные приложения, автоматически преобразуя двоичный файл APK. Чтобы предотвратить утечку логики приложения во время преобразования, AVPass предоставляет режим имитации, он отправляет фрагменты фальшивого вредоносного кода для проверки возможностей антивируса и на основе полученных данных модифицирует вредоносное ПО.

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

AVPass предлагает несколько полезных функций для преобразования любого вредоносного ПО Android, для обхода AV обеспечения. Ниже перечислены основные возможности AVPASS:
  • APK обфускация с более чем 10 модулями
  • Функциональный вывод для системы обнаружения с использованием индивидуальной обфускации
  • Точное определение AV системы с использованием 2k факториального эксперимента
  • Целенаправленная обфускация, для обхода конкретной системы обнаружения
  • Поддержка безопасных запросов с использованием режима имитации
Установка:
Код:
git clone https://github.com/sslab-gatech/avpass
./install-dep.sh
upload_2017-8-1_22-6-58.png


Внесение изменений в настройки, осуществляется путем изменения конфигурационного файла:
Код:
cd src/
nano conf.py
upload_2017-8-1_22-7-23.png


Запуск обфускации определенного приложения:
Код:
python gen_disguise.py -i example.apk individual
upload_2017-8-1_22-7-48.png


Обфускация с использованием предполагаемых правил:
Код:
python gen_disguise -i example.apk withrule  -o output_dir
Зависимости:
  • apktool:
  • numpy:
  • PIL:
  • magic:
  • python-utils:
  • vt:
Информация:

Разработчики добавляют новые функции (Java reflection, complicate string encryptor), для повышения результативности. К сожалению, новые модули несовместимы с некоторыми предыдущими модулями. При тестах были выявлены некоторые ошибки. Поскольку Java reflection скрывает все имена методов, модуль pcm (сменщик пакетов / класса / метода) может инициировать ошибку при запуске obfuscation APK. Чтобы решить эту проблему, мы предоставим модуль pc (package / class) только для обфускации пакетов и имен классов, после использования Java reflection.

До релиза разработчики не рекомендуют использовать Java reflection с модулем pcm.

На этом, все. Спасибо за внимание.
 

Dmitriy Dmitriev

New member
30.10.2022
3
0
BIT
0
Помогите проблему решить,до этого проблема была с line 5 тоесть не был установлен numpy,теперь же ошибка с line 132
---------------------------------------------------------------------
python gen_disguise.py -i client.apk individual
Traceback (most recent call last):
File "gen_disguise.py", line 5, in
import numpy as np
File "/usr/lib/python2.7/dist-packages/numpy/init.py", line 132
raise ImportError(msg) from e
Нашёл решение, нужно зайти в файл gen_disguise.py и в удалить пятую строку с import numpy as np
 

Dmitriy Dmitriev

New member
30.10.2022
3
0
BIT
0
Нашёл решение, нужно зайти в файл gen_disguise.py и в удалить пятую строку с import numpy as np
вот что теперь выдаёт :/
---------------------------------------------
Код:
python gen_disguise.py -i client.apk individual           
[*] Decoding apk file to smali
Input file (./client.apk) was not found or was not readable.
python refl.py -f temp_obfus.apk reflect -c no;
Java reflection for all api invokes in an apk
[*] Decoding apk file to smali
Input file (./temp_obfus.apk) was not found or was not readable.
[*] Loading Smali files list
[*] Decoding apk file to smali
Input file (./temp_obfus.apk) was not found or was not readable.
Traceback (most recent call last):
  File "refl.py", line 712, in <module>
    ref.load_source(True)
  File "refl.py", line 548, in load_source
    self.tree = ET.parse(self.target + '/AndroidManifest.xml')
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1182, in parse
    tree.parse(source, parser)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 647, in parse
    source = open(source, "rb")
IOError: [Errno 2] No such file or directory: 'temp_obfus/AndroidManifest.xml'
python strp.py -f temp_obfus.apk string -c no;
Perturb this APK file
[*] Decoding apk file to smali
Input file (./temp_obfus.apk) was not found or was not readable.
Traceback (most recent call last):
  File "strp.py", line 404, in <module>
    strp.load_source(True)
  File "strp.py", line 266, in load_source
    self.tree = ET.parse(self.target + '/AndroidManifest.xml')
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1182, in parse
    tree.parse(source, parser)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 647, in parse
    source = open(source, "rb")
IOError: [Errno 2] No such file or directory: 'temp_obfus/AndroidManifest.xml'
python strp.py -f temp_obfus.apk variable -c no;
Change variable name
[*] Decoding apk file to smali
Input file (./temp_obfus.apk) was not found or was not readable.
Traceback (most recent call last):
  File "strp.py", line 414, in <module>
    strp.load_source(True)
  File "strp.py", line 266, in load_source
    self.tree = ET.parse(self.target + '/AndroidManifest.xml')
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1182, in parse
    tree.parse(source, parser)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 647, in parse
    source = open(source, "rb")
IOError: [Errno 2] No such file or directory: 'temp_obfus/AndroidManifest.xml'
python res.py  -f temp_obfus image -c no;python res.py  -f temp_obfus resxml -c no -n yes;
Traceback (most recent call last):
  File "res.py", line 22, in <module>
    from res_xml import * # contain xml and nullify
  File "./modules/res_xml.py", line 4, in <module>
    import magic
ImportError: No module named magic
Traceback (most recent call last):
  File "res.py", line 22, in <module>
    from res_xml import * # contain xml and nullify
  File "./modules/res_xml.py", line 4, in <module>
    import magic
ImportError: No module named magic
Generating client_obfus.apk
I: Using Apktool 2.2.3
Exception in thread "main" brut.androlib.AndrolibException: brut.directory.DirectoryException: java.nio.file.NoSuchFileException: temp_obfus
        at brut.androlib.Androlib.readMetaFile(Androlib.java:259)
        at brut.androlib.Androlib.build(Androlib.java:271)
        at brut.androlib.Androlib.build(Androlib.java:264)
        at brut.apktool.Main.cmdBuild(Main.java:231)
        at brut.apktool.Main.main(Main.java:84)
Caused by: brut.directory.DirectoryException: java.nio.file.NoSuchFileException: temp_obfus
        at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:55)
        at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:38)
        at brut.directory.ExtFile.getDirectory(ExtFile.java:52)
        at brut.androlib.Androlib.readMetaFile(Androlib.java:255)
        ... 4 more
Caused by: java.nio.file.NoSuchFileException: temp_obfus
        at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
        at java.base/sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
        at java.base/sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:149)
        at java.base/sun.nio.fs.LinuxFileSystemProvider.readAttributes(LinuxFileSystemProvider.java:99)
        at java.base/java.nio.file.Files.readAttributes(Files.java:1764)
        at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1259)
        at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:733)
        at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:850)
        at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:248)
        at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:177)
        at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:191)
        at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:53)
        ... 7 more
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!