Advertisement
cephurs

tweetcrypt.py via @MrXors

Sep 19th, 2013
660
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 32.61 KB | None | 0 0
  1. #!/usr/bin/python
  2. import sys
  3. import time, os, getpass
  4. import urllib2, re, random
  5. class bcolors:
  6.     LIGHT_GREEN = '\033[36m'
  7.     OKBLUE = '\033[94m'
  8.     BLUE = '\033[34m'
  9.     WARNING = '\033[93m'
  10.     FAIL = '\033[91m'
  11.     ENDC = '\033[0m'
  12.     LIGHT_RED = '\033[31m'
  13.     GREEN='\033[32m'
  14.     BROWN='\033[33m'
  15.     GRAY='\033[37m'
  16.     def disable(self):
  17.         self.LIGHT_GREEN = ''
  18.         self.OKBLUE = ''
  19.         self.BLUE = ''
  20.         self.WARNING = ''
  21.         self.FAIL = ''
  22.         self.ENDC = ''
  23.         self.LIGHT_RED = ''
  24.         self.GREEN=''
  25.         self.BROWN=''
  26.         self.GRAY=''
  27. def banners(selections):
  28.     selections=selections
  29.     a=bcolors.BLUE+'''
  30. ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ _________
  31. ||T |||w |||e |||e |||p |||C |||r |||y |||p |||t |||       ||
  32. ||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_______||
  33. |/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_______\|
  34.     '''+bcolors.ENDC
  35.     b=bcolors.BLUE+('''
  36.    ______)              )   ___                  
  37.   (, /                 (__/_____)                
  38.     /  _   _  _   _ __   /       __      __  _/_
  39.  ) /   (_(/ _(/__(/_/_)_/       / (_(_/_ /_)_(__
  40. (_/              .-/   (______)    .-/.-/        
  41.                 (_/               (_/(_/        
  42.     ''')+bcolors.ENDC
  43.     c=bcolors.BLUE+'''
  44. ""8""                          8""""8                          
  45.  8   e   e  e eeee eeee eeeee 8    " eeeee  e    e eeeee eeeee
  46.  8e  8   8  8 8    8    8   8 8e     8   8  8    8 8   8   8  
  47.  88  8e  8  8 8eee 8eee 8eee8 88     8eee8e 8eeee8 8eee8   8e  
  48.  88  88  8  8 88   88   88    88   e 88   8   88   88      88  
  49.  88  88ee8ee8 88ee 88ee 88    88eee8 88   8   88   88      88  
  50.     '''+bcolors.ENDC
  51.     d=bcolors.BLUE+'''
  52. _______ _  _  _ _______ _______  _____  _______  ______ __   __  _____  _______
  53.   |    |  |  | |______ |______ |_____] |       |_____/   \_/   |_____]    |  
  54.   |    |__|__| |______ |______ |       |_____  |    \_    |    |          |  
  55.     '''+bcolors.ENDC
  56.     e=bcolors.BLUE+'''
  57. 888888 Yb        dP 888888 888888 88""Yb  dP""b8 88""Yb Yb  dP 88""Yb 888888
  58.  88    Yb  db  dP  88__   88__   88__dP dP   `" 88__dP  YbdP  88__dP   88  
  59.  88     YbdPYbdP   88""   88""   88"""  Yb      88"Yb    8P   88"""    88  
  60.  88      YP  YP    888888 888888 88      YboodP 88  Yb  dP    88       88  
  61.     '''
  62.     if selections == 'a':
  63.         print a
  64.     if  selections == 'b':
  65.         print b
  66.     if selections == 'c':
  67.         print c
  68.     if selections == 'd':
  69.         print d
  70.     if selections == 'e':
  71.         print e
  72.     print bcolors.GREEN+"Created By @MrXors"+bcolors.ENDC
  73. rando=str(random.choice('abcde'))
  74. banners(rando)
  75. try:
  76.     import gnupg
  77.     pass
  78. except ImportError:
  79.     print "Run Setup.py To Install the Correct Mods."
  80.     sys.exit()
  81. try:
  82.     import tweepy
  83.     pass
  84. except ImportError:
  85.     print "Run Setup.py To Install the Correct Mods."
  86.     sys.exit()
  87. try:
  88.     import pastebin_python
  89.     pass
  90. except ImportError:
  91.     print "Run Setup.py To Install the Correct Mods."
  92.     sys.exit()
  93. try:
  94.     import pynotify
  95.     pass
  96. except ImportError:
  97.     print "Run Setup.py To Install the Correct Mods."
  98.     sys.exit()
  99. def start_up():
  100.     try:
  101.         os.mkdir('conf')
  102.     except OSError:
  103.         pass
  104.     pass
  105.     #try:
  106.     #   os.mkdir(str(config.gpghome_dir))
  107.     #except OSError:
  108.     #   pass
  109.     #pass
  110.     try:
  111.         os.mkdir('logs/')
  112.     except OSError:
  113.         pass
  114.     try:
  115.         os.mkdir('logs/old_gpg')
  116.     except OSError:
  117.         pass
  118.     try:
  119.         os.mkdir('logs/archive')
  120.     except OSError:
  121.         pass
  122.     try:
  123.         os.system('touch logs/downloads')
  124.     except OSError:
  125.         pass
  126.     try:
  127.         os.system('touch logs/request')
  128.     except OSError:
  129.         pass
  130.     #try:
  131.     #   os.system('touch keys/public_key')
  132.     #except OSError:
  133.     #   pass
  134.     pass
  135.     try:
  136.         os.system('touch conf/__init__.py')
  137.     except OSError:
  138.         pass
  139.     pass
  140.     try:
  141.         os.system('touch conf/settings.py')
  142.     except OSError:
  143.         pass
  144.     pass
  145.     try:
  146.         set_data=open('conf/settings.py', 'r')
  147.         new_set_data=set_data.readlines()
  148.         key_ans_count=0
  149.         for line in new_set_data:
  150.             if 'gpghome_ans' in line:
  151.                 #print line
  152.                 key_ans_count=key_ans_count+1
  153.                 break
  154.             else:
  155.                 pass
  156.             #   print "NO DATA"
  157.         if key_ans_count == 1:
  158.             pass
  159.         else:
  160.  
  161.             print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Setting Up TweepCrypt For First time useage!"+bcolors.ENDC
  162.             print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Please Have Dev Keys From Twitter \& PasteBin Ready to Continue!"+bcolors.ENDC
  163.             print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"If You Don't Have Any Keys just run (\"python tweepcrypt.py -g\") After Running This!"+bcolors.ENDC
  164.             gpg_home_dir=raw_input(bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Enter Your FULL PATH for GPG Keys (\"/root/dir/to/gpg\") : "+bcolors.ENDC)
  165.             email_ans=raw_input( bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Enter Your Email Address: "+bcolors.ENDC)
  166.             pbin_dev_ans=raw_input(bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Enter Your PasteBin Development Keys located in http://pastebin.com/api: "+bcolors.ENDC)
  167.             twit_consumer_key_ans=raw_input( bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Enter Your Twitter CONSUMER_KEY: "+bcolors.ENDC)
  168.             twit_consumer_secret_ans=raw_input(bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Enter Your Twitter CONSUMER_SECRET: "+bcolors.ENDC)
  169.             twit_access_key_ans=raw_input( bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Enter Your Twitter ACCESS_KEY: "+bcolors.ENDC)
  170.             twit_access_secret_ans=raw_input( bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Enter Your Twitter ACCESS_SECRET: "+bcolors.ENDC)
  171.             print  bcolors.LIGHT_RED+"TweepCrypt.py WILL NOT WORK WITH OUT THE CORRECT KEYS FROM TWITTER & PASTEBIN !"+bcolors.ENDC
  172.             time.sleep(0.1)
  173.             setting=open('conf/settings.py', 'a+')
  174.             setting.write('#!/usr/bin/python\n\
  175. gpghome_ans=0\n\
  176. #######################################################\n\
  177. #GPG PASSWORD DONT STORE IT HERE. LAZY ASS.\n\
  178. gpgpasswd=""\n\
  179. #######################################################\n\
  180. #Destroy Twitter Message with Encryption Link.\n\
  181. #destroy=0\n\
  182. ######################################################\n\
  183. #Your Email Address or Email Address of your Public Key\n\
  184. email=\"'+str(email_ans)+'\"\n\
  185. ####################################################\n\
  186. #Location Of your Gpg Keys the default is ~/.gnupg/\n\
  187. gpghome_dir=\"'+str(gpg_home_dir)+'\"\n\
  188. ##############################################\n\
  189. #PasteBin Key \n\
  190. #Go to http://pastebin.com/api once you have Created an account with pastebin.com\n\
  191. pastebin_key=\"'+str(pbin_dev_ans)+'\"\n\
  192. #####User Name and Password Not Needed.\n\
  193. pastebin_username="None"\n\
  194. pastebin_passwd="None"\n\
  195. ###############################################\n\
  196. #Twitter Keys\n\
  197. #Go To dev.twitter.com\n\
  198. #Select your account in the top right corner of the screen and select "My Applications"\n\
  199. ###Click "Create New Application"\n\
  200. ##### Name = Whatever Name You Want\n\
  201. ##### Description = Whatever Name You Want\n\
  202. ##### WebSite URL = I Use https://twitter.com\n\
  203. ##### CallBack URL = I Use https://twitter.com\n\
  204. ##### Check Yes You Agree To TOS\n\
  205. ########## Once App is Created Select it in My Applications\n\
  206. ########## Click on the Settings tab\n\
  207. ########## Check the Box the say Read, Write and Direct Messages\n\
  208. ########## Check The Box That Says "Allow this application to be used to Sign in with Twitter"\n\
  209. ########## Click Update This Twitter Application\n\
  210. ################### Go To the Details TAB and Scroll Down To Create My Access Token\n\
  211. ############## Now You Should See \n\
  212. ########## CONSUMER_KEY\n\
  213. ########## CONSUMER_SECRET \n\
  214. ########## ACCESS_KEY \n\
  215. ########## ACCESS_SECRET\n\
  216. ##########\n\
  217. ##########COPY AND PASTE THEM IN THERE CORRECT LOCATION RIGHT HERE\n\
  218. CONSUMER_KEY =\"'+str(twit_consumer_key_ans)+'\"\n\
  219. CONSUMER_SECRET =\"'+str(twit_consumer_secret_ans)+'\"\n\
  220. ACCESS_KEY =\"'+str(twit_access_key_ans)+'\"\n\
  221. ACCESS_SECRET =\"'+str(twit_access_secret_ans)+'\"\n')
  222.             setting.close()
  223.     except OSError:
  224.         pass
  225.     pass
  226.     from conf import settings as config
  227.     try:
  228.         os.mkdir(str(config.gpghome_dir))
  229.     except OSError:
  230.         pass
  231.     pass
  232. start_up()
  233. from conf import settings as config
  234. from optparse import OptionParser
  235. from pastebin_python import PastebinPython
  236. from pastebin_python.pastebin_exceptions import PastebinBadRequestException, PastebinNoPastesException, PastebinFileException
  237. from pastebin_python.pastebin_constants import PASTE_PUBLIC, PASTE_PRIVATE, EXPIRE_10_MIN, EXPIRE_1_DAY, EXPIRE_1_HOUR
  238. from pastebin_python.pastebin_formats import FORMAT_NONE, FORMAT_PYTHON, FORMAT_HTML
  239. #Class for App
  240.  
  241. def getpassword():
  242.     passwd=getpass.getpass()
  243.     return passwd
  244. def user_to_text():
  245.     user_to_msg=raw_input(bcolors.GREEN+"Who would you like to Message: "+bcolors.ENDC)
  246.     without_at=re.compile(r'@(.*)')
  247.     clean_user=without_at.findall(user_to_msg)
  248.     try:
  249.         return clean_user[0]
  250.     except IndexError:
  251.         return user_to_msg.lower()
  252. class noti(object):
  253.     """docstring for noti"""
  254.     def __init__(self, img_tod, title, arg, sec):
  255.         super(noti, self).__init__()
  256.         self.img_tod=img_tod
  257.         self.title=title
  258.         self.arg=arg
  259.         self.sec=sec
  260.         if pynotify.init('noti class'):
  261.             n = pynotify.Notification(title, arg, img_tod)
  262.             n.set_timeout(sec)
  263.             n.show()
  264. class Paste_Bin(object):
  265.     """docstring for Paste_Bin"""
  266.     def __init__(self):
  267.         super(Paste_Bin, self).__init__()
  268.         self.pastebin_key= config.pastebin_key
  269.         self.pastebin_username=config.pastebin_username
  270.         self.pastebin_passwd=config.pastebin_passwd
  271.         self.pbin = PastebinPython(api_dev_key=self.pastebin_key)
  272.     def Post_Paste_From_File(self, filename):
  273.         '''
  274.         createPaste(api_paste_code, api_paste_name='', api_paste_format='', api_paste_private='', api_paste_expire_date='')
  275.         '''
  276.         self.filename=filename
  277.         try:
  278.             paste_link=self.pbin.createPasteFromFile(filename, 'TweepCrypt', FORMAT_PYTHON, PASTE_PUBLIC, EXPIRE_1_DAY)
  279.             if 'Post limit, maximum pastes per 24h reached' in paste_link:
  280.                 comment="Paste Failed "+time.ctime()
  281.                 return comment
  282.             else:
  283.                 print paste_link
  284.                 hm=re.compile(r'http://pastebin.com/(.*)')
  285.                 hrmm=hm.findall(str(paste_link))
  286.                 if hrmm[0] == None:
  287.                     pass
  288.                 else:
  289.                     if len(hrmm[0]) < 3:
  290.                         pass
  291.                     else:
  292.                         return hrmm[0]
  293.         except PastebinBadRequestException as e:
  294.             print e
  295.         except PastebinFileException as e:
  296.             print e
  297.         pass
  298.     def Post_Paste_From_CmdLine(self, cmd):
  299.         '''
  300.         createPaste(api_paste_code, api_paste_name='', api_paste_format='', api_paste_private='', api_paste_expire_date='')
  301.         '''
  302.         self.cmd=cmd
  303.         try:
  304.             paste_link=self.pbin.createPaste(str(cmd), 'TweepCrypt Test', FORMAT_PYTHON, PASTE_PUBLIC, EXPIRE_1_DAY)
  305.             print paste_link
  306.         except PastebinBadRequestException as e:
  307.             print e
  308.         except PastebinFileException as e:
  309.             print e
  310.         pass
  311. class gnupghome(object):
  312.     """docstring for gnupghome"""
  313.     def __init__(self, homedir):
  314.         super(gnupghome, self).__init__()
  315.         self.homedir=homedir
  316.         self.gpg=gnupg.GPG(gnupghome=homedir)
  317.     def gen_keys(self, typeE="RSA", length=1024, namereal="", namecom="", namemail=""):
  318.         self.typeE=typeE
  319.         self.length=length
  320.         self.namereal=namereal
  321.         self.namecom=namecom
  322.         self.namemail=namemail
  323.         input_data=self.gpg.gen_key_input(key_type=str(typeE), key_length=int(length), name_real=str(namereal), name_comment=str(namecom), name_email=str(namemail), expire_date=0, passphrase=getpassword())
  324.         print bcolors.LIGHT_RED+"[+]"+bcolors.ENDC+bcolors.WARNING+"This Will Take A Few Minutes, Do Other Task To Create Entropy."+bcolors.ENDC
  325.         key=self.gpg.gen_key(input_data)
  326.         pass
  327.     def list_uids(self):
  328.         keys=self.gpg.list_keys()
  329.         self.uids=[]
  330.         for line in keys:
  331.             self.uids+=[line['uids']]
  332.         return self.uids
  333.     def list_all(self):
  334.         keys=self.gpg.list_keys()
  335.         self.public_fingerprints=[]
  336.         self.uids=[]
  337.         for line in keys:
  338.             self.public_fingerprints+=[line['fingerprint']]
  339.             self.uids+=[line['uids']]
  340.         return self.uids, self.public_fingerprints
  341.     def whoami(self):
  342.         keys=self.gpg.list_keys()
  343.         self.uid=[]
  344.         for line in keys:
  345.             self.uid+=line['uids']
  346.         return self.uid[0]
  347.     def export_my_pubkey(self):
  348.         keys=self.gpg.list_keys()
  349.         self.public_finger=keys[0]['fingerprint']
  350.         return self.public_finger
  351.     def exportkeys(self, fingerprint_ID):
  352.         self.fingerprint_ID=fingerprint_ID
  353.         pub_key=self.gpg.export_keys(fingerprint_ID)
  354.         return pub_key
  355.     def importK(self, keys):
  356.         self.keys=keys
  357.         resu=self.gpg.import_keys(keys)
  358.         return resu.results[0]['ok'][:]
  359.     def encryptFiles(self, recip, encrypt_data, outputfile):
  360.         self.outputfile=outputfile
  361.         self.encrypt_data=encrypt_data
  362.         self.x=open(encrypt_data, 'rb')
  363.         self.recip=recip
  364.         data=self.gpg.encrypt_file(self.x, recipients=recip, passphrase=config.gpgpasswd, output=outputfile, always_trust=True, armor=True)
  365.         return outputfile
  366.         pass       
  367.     def decryptFiles(self, darg, desired_filename):
  368.         self.desired_filename=desired_filename
  369.         self.darg=darg
  370.         public_key=0
  371.         gpg_message=0
  372.         moved=0
  373.         public_key_check=open(darg, 'r')
  374.         message_check=str(public_key_check.readlines()[0])
  375.         public_key_check.close()
  376.         if '-----BEGIN PGP PUBLIC KEY BLOCK-----' in message_check:
  377.             public_key=public_key+1
  378.         if '-----BEGIN PGP MESSAGE-----' in message_check:
  379.             gpg_message=gpg_message+1
  380.         if public_key == 1:
  381.             os.rename(darg, 'PublicKey.pub')
  382.             moved=moved+1
  383.             pass
  384.         else:
  385.             pass
  386.         if gpg_message == 1:
  387.             with open(darg) as f:
  388.                 decrypted_data=self.gpg.decrypt_file(f, passphrase=str(config.gpgpasswd), always_trust=True, output=str(desired_filename))
  389.                 time.sleep(0.2)
  390.                 if decrypted_data.ok == False:
  391.                     print decrypted_data.stderr
  392.                     print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"Decryption Failed, Message Not Decrypted."+bcolors.ENDC
  393.                     pass
  394.                 else:
  395.                     if decrypted_data.ok == True:
  396.                         print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Message Decrypted"+bcolors.ENDC
  397.                         pass
  398.                     else:  
  399.                         pass
  400.                 pass
  401.         else:
  402.             pass
  403.         if moved == 0:
  404.             return "DING"
  405.         else:
  406.             if moved == 1:
  407.                 return "DONG"
  408. class tweet(object):
  409.     """docstring for tweet"""
  410.     def __init__(self):
  411.         super(tweet, self).__init__()
  412.         self.CONSUMER_KEY = config.CONSUMER_KEY
  413.         self.CONSUMER_SECRET = config.CONSUMER_SECRET  
  414.         self.ACCESS_KEY = config.ACCESS_KEY  
  415.         self.ACCESS_SECRET = config.ACCESS_SECRET  
  416.         self.auth = tweepy.OAuthHandler(self.CONSUMER_KEY, self.CONSUMER_SECRET)
  417.         self.auth.set_access_token(self.ACCESS_KEY, self.ACCESS_SECRET)
  418.         self.api = tweepy.API(self.auth)
  419.     def me(self):
  420.         time.sleep(0.1)
  421.         return self.api.me().name
  422.     def my_image_url(self):
  423.         x=self.api.me()
  424.         return str(x.profile_image_url)
  425.         pass
  426.     def verify_twitter_friend(self, user_name):
  427.         self.user_name=user_name
  428.         find_friend=self.api.me()
  429.         for line in find_friend.followers():
  430.             if user_name.lower() == line.screen_name.lower():
  431.                 return bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"They Do Follow You."+bcolors.ENDC
  432.             else:
  433.                 pass
  434.         pass
  435.     def direct_msg(self):
  436.         self.directMessages=self.api.direct_messages()
  437.         self.frank=[]
  438.         self.bank=[]
  439.         for line in self.directMessages:
  440.             if 'TweepCrypt:' in line.text:
  441.                 self.frank+=[line.text]
  442.                 self.bank+=[line.sender_screen_name]
  443.             else:
  444.                 pass
  445.         return self.frank
  446.     def direct_req_msg(self):
  447.         self.directMessages=self.api.direct_messages()
  448.         self.frank=[]
  449.         self.bank=[]
  450.         for line in self.directMessages:
  451.             if 'TweepCrypt Request:' in line.text:
  452.                 self.frank+=[line.text]
  453.                 self.bank+=[line.sender_screen_name]
  454.                 pass
  455.             else:
  456.                 pass
  457.         return self.frank, self.bank
  458.     def direct_verify(self):
  459.         self.direct_v=self.api.direct_messages()
  460.         self.banks=[]
  461.         for line in self.direct_v:
  462.             if 'TweepCrypt:' in line.text:
  463.                 self.banks+=[line.sender_screen_name+ " " + line.text]
  464.                 pass
  465.             else:
  466.                 pass
  467.         return self.banks
  468.     def send_dm(self, USER, MSG):
  469.         self.USER=USER
  470.         self.MSG=MSG
  471.         try:
  472.             self.api.send_direct_message(screen_name=str(USER), text="TweepCrypt: "+str(MSG))
  473.         except tweepy.error.TweepError:
  474.             return "Message Not Sent"
  475.         pass
  476.     def send_req(self, USER, MSG):
  477.         self.MSG=MSG
  478.         self.USER=USER
  479.         try:
  480.             self.api.send_direct_message(screen_name=str(USER), text="TweepCrypt Request: "+str(MSG))
  481.         except tweepy.error.TweepError:
  482.             return "Message Not Sent"
  483.         pass
  484.     def download_image(self, twitter_username):
  485.         self.twitter_username=twitter_username
  486.         coldp=self.api.search_users(str(twitter_username))
  487.         ff=coldp[0]
  488.         if str(ff.screen_name.lower()) == str(twitter_username.lower()):
  489.             imgg=str(ff.profile_image_url)
  490.             return imgg
  491.         else:
  492.             pass
  493. def dwd_my_tweet_img(url):
  494.     if os.path.isfile('conf/my_img'):
  495.         pass
  496.     else:
  497.         url=str(url)
  498.         get=urllib2.urlopen(url)
  499.         s=open('conf/my_img', 'w')
  500.         s.write(get.read())
  501.     pass
  502. def dwd_tweet_img(url):
  503.     url=str(url)
  504.     get=urllib2.urlopen(url)
  505.     s=open('user_img', 'w')
  506.     s.write(get.read())
  507.     pass
  508. def download_gpgmsg(url, user_name):
  509.     webFile = urllib2.urlopen(url)
  510.     current_time=time.ctime()
  511.     find_current=re.compile(r'\d\d.\d\d.\d\d')
  512.     digit_time=find_current.findall(str(current_time))
  513.     dd=time.ctime().split(" ")
  514.     ddd=str(dd[1]+"_"+dd[3]+"_"+dd[4]+"_"+dd[5])
  515.     filename =ddd+'.gpg_pastebin_download'
  516.     localFile = open(os.path.abspath('.')+"/logs/"+user_name+"/"+user_name+"_"+filename, 'w')
  517.     localFile.write(webFile.read())
  518.     pass   
  519. def logger(input_data):
  520.     input_data=input_data
  521.     data_safe=open('logs/downloads', 'a+')
  522.     data_safe.write(str(input_data)+"\n")
  523.     data_safe.close()
  524.     pass
  525. def verify_lnk(input_data):
  526.     input_data=input_data
  527.     match_count=0
  528.     data_safe=open('logs/downloads', 'a+').readlines()
  529.     for line in data_safe:
  530.         if input_data in line:
  531.             match_count=match_count+1
  532.         else:
  533.             pass
  534.     if match_count > 0:
  535.         return "VERIFIED"
  536.     else:
  537.         return "NOPE"
  538. def user_folder(user_name):
  539.     try:
  540.         os.mkdir('logs/'+str(user_name.lower()))
  541.         log=open('logs/'+str(user_name.lower())+"/"+'data.log', 'a+')
  542.         log.write(time.ctime()+"\n")
  543.         time.sleep(0.5)
  544.         log.close()
  545.     except:
  546.         log=open('logs/'+str(user_name.lower())+"/"+'data.log', 'a+')
  547.         log.write(time.ctime()+"\n")
  548.         time.sleep(0.5)
  549.         log.close()
  550.     pass
  551. def main():
  552.     dwd_my_tweet_img(tweet().my_image_url())
  553.     gpg=gnupghome(config.gpghome_dir)
  554.     if os.path.isfile(str(config.gpghome_dir)+'/public_key'):
  555.         pass
  556.     else:
  557.         www_d=open(str(config.gpghome_dir)+'/public_key', 'w')
  558.         try:
  559.             www_d.write(gpg.exportkeys(gpg.export_my_pubkey()))
  560.         except IndexError:
  561.             print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"NO GPG KEYS FOUND!!!"+bcolors.ENDC
  562.             gen_key_ans=raw_input("Create GPG Keys ?: Y or N: ")
  563.             if str(gen_key_ans.lower()) == 'y':
  564.                 print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Generating Keys"+bcolors.ENDC
  565.                 type_ans=raw_input("Enter Type: RSA, DSA: ")
  566.                 length_ans=raw_input("Enter Length: 1024, 2048: ")
  567.                 twitter_name_ans=raw_input("Enter Name: User Twitter Name with No @, ex(mrxors, cryptdev, moxie): ")
  568.                 comment_ans=raw_input("Enter Comments For Account: ex(DEV ACCOUNT, TEST, TWITTER GPG): ")
  569.                 gpg.gen_keys(str(type_ans.upper()), int(length_ans), str(twitter_name_ans), str(comment_ans), str(config.email))
  570.                 print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Keys Generated!"+bcolors.ENDC
  571.                 www_d.write(gpg.exportkeys(gpg.export_my_pubkey()))
  572.             else:
  573.                 pass
  574.         www_d.close()
  575.     def request(user_to_request):
  576.         user_to_request=user_to_request
  577.         log_data=open('logs/request', 'r')
  578.         log_data_read=log_data.readlines()
  579.         for line in log_data_read:
  580.             if str(user_to_request) in line:
  581.                 print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"Request For GPG Public Key Already Sent"+bcolors.ENDC
  582.                 sys.exit()
  583.             else: pass
  584.         print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"PUBLIC KEY FOR USER NOT FOUND"+bcolors.ENDC
  585.         print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"SENDING GPG PUBLIC KEY REQUEST TO @"+str(user_to_request)+bcolors.ENDC
  586.         ans_for_pub=raw_input(bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Would You Like To Send A Request For A Public Key and send Your Pub Key? Y or N: "+bcolors.ENDC)
  587.         if ans_for_pub.lower() == 'y':
  588.             if os.path.isfile(str(config.gpghome_dir)+'/public_key'):
  589.                 pass
  590.             else:
  591.                 www=open(str(config.gpghome_dir)+'/public_key', 'w')
  592.                 www.write(gpg.exportkeys(gpg.export_my_pubkey()))
  593.                 www.close()
  594.             tweet().send_dm(str(user_to_request), str(Paste_Bin().Post_Paste_From_File(str(config.gpghome_dir)+'/public_key')))
  595.             logs_for_req=open('logs/request', 'a+')
  596.             logs_for_req.write(str(user_to_request)+" Recieved a Request for a public key.\n")
  597.             logs_for_req.close()
  598.         else:
  599.             print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"Request Not Sent!"+bcolors.ENDC
  600.             sys.exit()
  601.         pass
  602.     def Check_DM_for_Kicker():
  603.         user_name_for_Decrypt=[]
  604.         directMSG=tweet().direct_msg()
  605.         for line in directMSG:
  606.             new_line=re.compile(r'TweepCrypt:(.*)')
  607.             my_add=new_line.findall(str(line))
  608.             if verify_lnk(my_add[0][1:]) == "VERIFIED":
  609.                 pass
  610.             else:
  611.                 if str(my_add[0][1:]) == 'None':
  612.                     pass
  613.                 else:
  614.                     logger(my_add[0][1:])
  615.                     for lpo in tweet().direct_verify():
  616.                         if lpo.split(" ")[2] == my_add[0][1:]:
  617.                             user_name_for_Decrypt+=[str(lpo.split(" ")[0].lower())]
  618.                             user_folder(str(lpo.split(" ")[0].lower()))
  619.                     try:
  620.                         download_gpgmsg('http://pastebin.com/download.php?i='+str(my_add[0][1:]), lpo.split(" ")[0].lower())
  621.                     except:
  622.                         print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"Did not Download!"+bcolors.ENDC
  623.         def Decrypt_downloaded_MSG():
  624.             total_msg_count=0
  625.             total_public_key_count=0
  626.             os.chdir('logs')
  627.             for line in list(set(user_name_for_Decrypt)):
  628.                 if os.path.isdir(line):
  629.                     os.chdir(line)
  630.                     if os.path.isfile('user_img'):
  631.                         pass
  632.                     else:
  633.                         dwd_tweet_img(str(tweet().download_image(str(line.lower()))))
  634.                     x=os.listdir('.')
  635.                     for files in x:
  636.                         if '.gpg' in files:
  637.                             ff=time.ctime().split(" ")
  638.                             fff=str(ff[1]+"_"+ff[3]+"_"+ff[4]+"_"+ff[5])
  639.                             decfile_name=fff+".decrypt"
  640.                             time.sleep(0.5)
  641.                             xdf=gpg.decryptFiles(files, decfile_name)
  642.                             if str(xdf) == "DONG":
  643.                                 print os.path.abspath('.')
  644.                                 total_public_key_count=total_public_key_count+1
  645.                             else:
  646.                                 try:
  647.                                     os.mkdir('../old_gpg/'+str(line))
  648.                                 except OSError:
  649.                                     pass
  650.                                 os.system('mv '+str(files)+" ../old_gpg/"+str(line)+"/"+str(files))
  651.                             try:
  652.                                 dfiles=open(decfile_name, 'r')
  653.                                 if os.path.isfile(str(os.path.abspath('.')+"/"+'user_img')):
  654.                                     try:
  655.                                         noti(os.path.abspath('.')+"/"+'user_img', "From: @"+str(line), str(dfiles.read()), 1000)
  656.                                     except:
  657.                                         print "pynotify failed read by hand"
  658.                                         pass
  659.                                 else:
  660.                                     print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"ERROR"+bcolors.ENDC
  661.                                 dfiles.close()
  662.                                 try:
  663.                                     os.mkdir('../archive/'+str(line))
  664.                                 except OSError:
  665.                                     pass
  666.                                 os.system('mv '+str(decfile_name)+" ../archive/"+str(line)+"/"+str(line)+"_"+str(decfile_name))
  667.                                 total_msg_count=total_msg_count+1
  668.                             except:
  669.                                 pass
  670.                         else:
  671.                             pass
  672.                     os.chdir('../')
  673.             os.chdir('../')
  674.             print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+ str(total_msg_count)+ bcolors.ENDC, bcolors.WARNING+ "New Messages." +bcolors.ENDC
  675.             print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+ str(total_public_key_count)+ bcolors.ENDC, bcolors.WARNING+ "New Public Key Request." +bcolors.ENDC
  676.             pass
  677.         Decrypt_downloaded_MSG()
  678.         def ck_ky(user_to_ck):
  679.             user_to_ck=user_to_ck
  680.             uids, fingerpes=gpg.list_all()
  681.             names=[]
  682.             for line in uids:
  683.                 names+=[line[0]]
  684.             if str(user_to_ck) in str(names):
  685.                 return "DING"
  686.             else:
  687.                 return "DONG"
  688.         lol=os.listdir('logs/')
  689.         for shit in lol:
  690.             if str(shit) == "old_gpg":
  691.                 pass
  692.             else:
  693.                 if ck_ky(str(shit)) == "DING":
  694.                     pass
  695.                 else:
  696.                     if os.path.isdir("logs/"+str(shit)+"/"):
  697.                         shitz=os.listdir("logs/"+str(shit)+"/")
  698.                         for line in shitz:
  699.                             if str(line) == "PublicKey.pub":
  700.                                 BOB=open("logs/"+str(shit)+"/"+str(line)).read()
  701.                                 if '-----BEGIN PGP PUBLIC KEY BLOCK-----' in str(BOB):
  702.                                     dfg=raw_input("Would You Like To Import "+str(shit.lower())+"'s"+ " Public Key? Y or N:")
  703.                                     if dfg.lower() == 'y':
  704.                                         d=gpg.importK(str(BOB))
  705.                                         if d == '1':
  706.                                             print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"KEY FROM "+str(shit)+" IMPORED SUCCESSFULLY!!"+bcolors.ENDC
  707.                                             send_pub=raw_input(bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Would You Like To Send Your Public Key? Y or N: "+bcolors.ENDC)
  708.                                             if send_pub.lower() == 'y':
  709.                                                 data_to_ck=open('logs/request', 'r').readlines()
  710.                                                 quid=0
  711.                                                 for lines_to_ck in data_to_ck:
  712.                                                     if line.lower() in lines_to_ck:
  713.                                                         print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"REQUSET ALLREADY SENT!"+bcolors.ENDC
  714.                                                         quid=1
  715.                                                         pass
  716.                                                     if quid == 1:
  717.                                                         pass
  718.                                                     else:      
  719.                                                         tweet().send_dm(str(line.lower()), str(Paste_Bin().Post_Paste_From_File(str(config.gpghome_dir)+'/public_key')))
  720.                                                         odb=open('logs/request', 'a+')
  721.                                                         odb.write(str(line.lower())+ " Recieved a Request for a public key.\n")
  722.                                                         odb.close()
  723.                                             else:  
  724.                                                 pass
  725.                                         else:  
  726.                                             pass
  727.                                     else:  
  728.                                         pass
  729.                                 else:  
  730.                                     pass
  731.                             else:
  732.                                 pass
  733.     def Killer(arg, msg_file):
  734.         msg_file=str(msg_file)
  735.         arg=arg
  736.         twitter_name=str(arg)
  737.         Verif=tweet().verify_twitter_friend(twitter_name)
  738.         if Verif == None:
  739.             print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"They Do Not Follow You , Request A Follow"+bcolors.ENDC
  740.             sys.exit()
  741.         else:
  742.             print Verif
  743.         try:
  744.             noti(str(os.path.abspath('.'))+'/conf/my_img', 'GPG Key Loaded:', gpg.whoami(), 1000)
  745.         except:
  746.             print "pynotify failed"
  747.             pass
  748.         user_folder(twitter_name)
  749.         pubcount=0
  750.         for line in gpg.list_uids():
  751.             if twitter_name in line[0].lower():
  752.                 pubcount=pubcount+1
  753.                 print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Found Possible Key:"+bcolors.ENDC, bcolors.BLUE+ line[0].lower()+bcolors.ENDC
  754.                 answer=raw_input(bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Use This Key Y or N "+bcolors.ENDC+bcolors.WARNING+">>>"+bcolors.ENDC)
  755.                 if answer.lower() == 'y':
  756.                     DMSG=re.compile(r'<(.*)>')
  757.                     DDMSG=DMSG.findall(str(line[0].lower()))
  758.                     gpg_ID=DDMSG[0]
  759.                     or_file=str(msg_file)
  760.                     if os.path.isfile(or_file) == True:
  761.                         print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"File Located"+bcolors.ENDC
  762.                         print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Encrypting File", str(or_file), "with user", str(gpg_ID), "With Twitter Name: ", str(twitter_name) + bcolors.ENDC
  763.                         eee=time.ctime().split(" ")
  764.                         eeee=str(eee[1]+"_"+eee[3]+"_"+eee[4]+"_"+eee[5])
  765.                         gpg.encryptFiles()
  766.                         tweet().send_dm(str(twitter_name), str(Paste_Bin().Post_Paste_From_File(gpg.encryptFiles(gpg_ID, or_file, 'logs/'+twitter_name+"/"+eeee+".enc_file"))))
  767.                         sys.exit()
  768.                     else:
  769.                         print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Setting Up Message..."+bcolors.ENDC
  770.                         print  str(msg_file)
  771.                         msg_file_name=str('logs/'+twitter_name+"/"+"msg.log")
  772.                         msg_te=open(msg_file_name, 'w')
  773.                         msg_te.write(str(msg_file)+"\n")
  774.                         msg_te.close()
  775.                         time.sleep(1)
  776.                         lll=time.ctime().split(" ")
  777.                         llll=str(lll[1]+"_"+lll[3]+"_"+lll[4]+"_"+lll[5])
  778.                         tweet().send_dm(str(twitter_name), str(Paste_Bin().Post_Paste_From_File(gpg.encryptFiles(gpg_ID, str(msg_file_name), 'logs/'+twitter_name+"/"+llll+".enc_msg"))))
  779.                         sys.exit()
  780.                 else:
  781.                     print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"::Exiting::"+bcolors.ENDC
  782.                     sys.exit()                 
  783.             else:
  784.                 pass
  785.         request(twitter_name)
  786.         sys.exit()
  787.     def Read_Single_DM(user_to_read):
  788.         user_to_read=user_to_read
  789.         if os.path.isfile('logs/archive/'+str(user_to_read)+'/user_img'):
  790.             pass
  791.         else:
  792.             if os.path.isfile('logs/'+str(user_to_read)+'/user_img'):
  793.                 os.system('cp logs/'+str(user_to_read)+'/user_img logs/archive/'+str(user_to_read)+'/user_img')
  794.             else:
  795.                 print "NO IMAGE"
  796.         try:
  797.             os.chdir('logs/archive/'+str(user_to_read))
  798.             msg_count=0
  799.             time.sleep(0.2)
  800.             for l in os.listdir('.'):
  801.                 if '.decrypt' in l:
  802.                     msg_count=msg_count+1
  803.                     vs=open(l, 'r')
  804.                     v=vs.read()
  805.                     try:
  806.                         noti(os.path.abspath('.')+str('/user_img'), "From: @"+str(user_to_read), v, 1500)
  807.                     except:
  808.                         print "pynotify Failed read by hand."
  809.                         pass
  810.                     vs.close()
  811.                 else:
  812.                     pass
  813.             print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+str(msg_count), "Messages From", str(user_to_read) + bcolors.ENDC
  814.             pass
  815.         except OSError:
  816.             pass
  817.     #####################################################################################################
  818.     usager = bcolors.BLUE+"\npython %prog -u [Twitter_User] [options]\npython %prog -r"+bcolors.ENDC
  819.     parser = OptionParser(usage=usager, version="%prog 1.0")
  820.     parser.add_option("-u", "--user", action="store", type="string", dest="twitterUser", help=bcolors.WARNING+"Twitter User To Decrypt/Encrypt/Read Message with NO @ sign"+bcolors.ENDC)
  821.     parser.add_option("-e", "--encrypt-message", action="store", type="string", dest="encrypted_message", help=bcolors.WARNING+"File/Message(\"string\") To Encrypt, needs -u to complete."+bcolors.ENDC)
  822.     parser.add_option("-d", "--decrypted-messages", action="store_true", dest="decrypt_message", help=bcolors.WARNING+"Read All Decrypted Messages from selected Twitter User."+bcolors.ENDC)##
  823.     parser.add_option("-r", "--read-new", action="store_true", dest="read_dm", help=bcolors.WARNING+"Collect All New Messages"+bcolors.ENDC)
  824.     parser.add_option("-g", "--gen-key", action="store_true", dest="gen_key", help=bcolors.WARNING+"Generate an Encryption Key To Communicate."+bcolors.ENDC)
  825.     (options, args) = parser.parse_args()
  826.     ###########################################################################
  827.     #Twitter Name Display
  828.     try:
  829.         print bcolors.BLUE+"@"+tweet().me()+bcolors.ENDC
  830.     except:
  831.         print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"Need An Internet Connection! or Oauth Keys for Twitter and PasteBin!"+bcolors.ENDC
  832.         parser.print_help()
  833.         sys.exit()
  834.     ##########################################################################
  835.     #Help And Args
  836.     try:
  837.         if sys.argv[1]:
  838.             pass
  839.     except IndexError:
  840.         parser.print_help()
  841.         sys.exit()
  842.     ############################
  843.     #-d
  844.     if options.decrypt_message:
  845.         if options.twitterUser:
  846.             if len(config.gpgpasswd)> 1:
  847.                 pass
  848.             else:
  849.                 config.gpgpasswd=getpassword()
  850.                 pass
  851.             Read_Single_DM(options.twitterUser.lower())
  852.         else:
  853.             print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+ "Need -u (Twitter User Name) to Complete"+bcolors.ENDC
  854.     else:
  855.         pass
  856.     ############################
  857.     #-r
  858.     if options.read_dm:
  859.         if len(config.gpgpasswd)> 1:
  860.             pass
  861.         else:
  862.             config.gpgpasswd=getpassword()
  863.             pass
  864.         Check_DM_for_Kicker()
  865.     else:
  866.         pass
  867.     #############################
  868.     #-e
  869.     if options.encrypted_message:
  870.         if options.twitterUser:
  871.             Killer(options.twitterUser.lower(), str(options.encrypted_message))
  872.         else:
  873.             print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+ "Need -u (Twitter User Name) to Complete"+bcolors.ENDC
  874.     else:
  875.         pass
  876.     #############################
  877.     #-g
  878.     if options.gen_key:
  879.         try:
  880.             if gpg.whoami():
  881.                 print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Key Found:"+bcolors.ENDC+bcolors.WARNING+str(gpg.whoami()) + bcolors.ENDC
  882.                 gen_ans=raw_input(bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.WARNING+"Would you Like to Delete Keys and Generate New Keys? Y or N: "+bcolors.ENDC)
  883.                 if gen_ans.lower() == 'y':
  884.                     type_ans=raw_input("Enter Type: RSA, DSA: ")
  885.                     length_ans=raw_input("Enter Length: 1024, 2048: ")
  886.                     twitter_name_ans=raw_in
  887.                     put("Enter Name: User Twitter Name with No @, ex(mrxors, cryptdev, moxie): ")
  888.                     comment_ans=raw_input("Enter Comments For Account: ex(DEV ACCOUNT, TEST, TWITTER GPG): ")
  889.                     gpg.gen_keys(str(type_ans.upper()), int(length_ans), str(twitter_name_ans), str(comment_ans), str(config.email))
  890.                     print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Keys Generated!"+bcolors.ENDC
  891.                 else: pass
  892.         except:
  893.             print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Generating Keys"+bcolors.ENDC
  894.             type_ans=raw_input("Enter Type: RSA, DSA: ")
  895.             length_ans=raw_input("Enter Length: 1024, 2048: ")
  896.             twitter_name_ans=raw_input("Enter Name: User Twitter Name with No @, ex(mrxors, cryptdev, moxie): ")
  897.             comment_ans=raw_input("Enter Comments For Account: ex(DEV ACCOUNT, TEST, TWITTER GPG): ")
  898.             gpg.gen_keys(str(type_ans.upper()), int(length_ans), str(twitter_name_ans), str(comment_ans), str(config.email))
  899.             print bcolors.GREEN+"[+]"+bcolors.ENDC+bcolors.BLUE+"Keys Generated!"+bcolors.ENDC
  900.  
  901. if __name__ =='__main__':
  902.     #try:
  903.     main()
  904.     #except:
  905.     print bcolors.LIGHT_RED+"[-]"+bcolors.ENDC+bcolors.WARNING+"EXITING"+bcolors.ENDC
  906.     sys.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement