· 7 years ago · Aug 31, 2018, 10:08 PM
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4from io import BytesIO
5from bs4 import BeautifulSoup
6from captcha_solver import CaptchaSolver
7import urllib.parse as urlparse
8import PIL.Image
9import sys
10import requests
11import random
12import uuid
13import urllib
14import gnupg
15import time
16import subprocess
17import pytesseract
18
19url = "http://dfasyuoatwcchfgd.onion/"
20
21usernames = []
22
23subjects = [
24 "Bonjour",
25 "Présentation de :username",
26 "Hola ! C'est :username",
27 ":username",
28 "Présentation",
29 "Présentation :username",
30 "Je me présente",
31 "Salut les gars",
32 "Encore un nouveau",
33 "Bien le bonjour !",
34 "Salutation !",
35 "Voici :username",
36 "Hello les potos"
37]
38
39presentations = [
40 "Je me présente je m'appelle :username et je viens ici pour faire des affaires et trouvez des bons vendeurs de cannabis, car je suis un gros fumeur de weed.\n\nVoici ma clef PGP : [code]:public_key[/code]\n\n" + "et voici la signature qui va avec : \n\n" + "[code]:signature[/code]\n\n Je ne suis pas sur d'autre forum car seul DFAS m'intéresse c'est le meilleur forum que j'ai trouvé sur le DW. Voilà j'espère pouvoir me faire ma place ici. A bientot peut-être."
41 "Salut à tous ! \n\n Je viens de voir votre forum et ça a l'air super sympa, moi c'est :username et je suis ici pour acheter des bons produits du terroir. \n Je ne suis pas encore présent sur d'autre forum. \n\n Voici ma clef pgp : :public_key \n\n et voici ma signature \n\n :signature, @+ Les gangsters",
42 "Slt.\n\n Ayy. Je viens de découvrir le Dark Web et je suis tombé sur votre forum. On m'a dit qu'ici on pouvez acheter de la cam alors j'ai fait le pleins de BTC et donc je viens faire mes courses les potos. Je sais me servir de pgp etc.... Voici ma clef : \n[code]:public_key[/code]\n, et ma signature : \n\n :signature",
43 "Yo !!!!! \n\n Putain j'ai galéré pour venir jusqu'ici !! \n\n Enfin voilà je me présente moi c'est :username les amigos chuis venu ici pr voir ce quil se trame dans ses lieux chelous et jé aussi pls de btc donc si jvois du matos sympa bah je serai acheteur voili voulou les amigos ! jé une clef pgp que voici : \n\n [code]:public_key[/code] et pour l'otographe qui va avec \n\n :signature \n\n Voilà amis de l'ombre là je prend l'apéro j'espère que je pourrai etre accepté! merci bcp",
44 "Bonjour,\n\nJe souhaite etre menbre de ce forum afin d' enrichir mes connaisances , j'éspere y decouvrir des personnes passionnées tout comme moi , avec qui je pourrais discuter , partager et faire affaires. \n\n En éspérant du reponse positive su STAFF. \n\n # :username",
45 "Bonjour, Ici pour discuté je vois une board sérieuse :)",
46 "Salut a tous, je suis :username assez connu du net et du depp sous le speudo de ange noir ou kiki bis anonymous depuis la creation en 2003 j'ai de trés bonne connaissance en informatique est hacking j'ai aussi un site internet destiné a pourir le systeme actuel ci vous désirez le lien je peu le fournir bien sur avec l'autorisation du straf ",
47 "Slt \n\njsuis la pr fR D jobs ac D person konpetente. \n g pris 2 3btc, pr acheté zatla en mass ! \n jcopi o6 D k ac une equipe a marseill 6 interessé pr Khout. \n voila pgp é 6gnatur kom demanD.\n\n [code]:public_key[/code] \n\n [code]:signature[/code]",
48 "Hello, \n\n On va faire simple, une présentation détaillée n'ayant pas sa place ici... \n Fouille dans le deep depuis un moment, recherches axées sur l'informatique.Pas la pour créer des problèmes, simplement partager et apprendre. \n Bien à vous !"
49]
50
51excluded_users = [
52 '130n',
53 'ManuLeCoq',
54 'Hachi',
55 'Spore',
56 'hamster-guerrier'
57]
58
59proxies = {
60
61}
62
63signatures = [
64 ":username pour présentation DFAS le :date",
65 "dfas, :username, le :date",
66 "signature pour présentation sur dfas de :username le :date",
67 "c'est :username pour dfas le :date"
68]
69
70with open('usernames.txt', 'r') as f:
71 for line in f.readlines():
72 usernames.append(line.strip())
73
74while True:
75 session = requests.Session()
76
77 headers = {
78 'User-agent': "Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0",
79 'Referer': url
80 }
81
82 data = {
83 'step': '1',
84 'accept_agreement': "J'accepte les conditions de ce document."
85 }
86
87 response = session.post(url + "index.php?action=register", headers=headers, data=data, proxies=proxies)
88
89 headers['Referer'] = url + "index.php?action=register"
90
91 response2 = session.get(url + "index.php?action=verificationcode;vid=register", headers=headers, proxies=proxies)
92
93 image = PIL.Image.open(BytesIO(response2.content))
94 image.save("captcha.gif")
95
96 cmd = "convert captcha.gif -morphology Dilate Rectangle:3 -negate -threshold 0 -negate -background white -alpha remove -crop 0x36-48+0 -morphology Dilate Rectangle:3 out_dfas.gif"
97
98 print (subprocess.call(cmd, shell=True))
99
100 captcha_str = pytesseract.image_to_string(PIL.Image.open("out_dfas.gif"), config="--oem 1 -l Latin")
101
102 print ("Captcha : ", captcha_str)
103
104 #solver = CaptchaSolver('browser')
105 #raw_data = open('captcha.gif', 'rb').read()
106 #captcha_str = solver.solve_captcha(raw_data)
107
108 username = ""
109
110 while len(username) < 3:
111 username = random.choice(usernames)
112 if username in excluded_users:
113 username = ""
114
115 print ("Username: ", username)
116
117 def random_string(string_length=10):
118 random = str(uuid.uuid4())
119 random = random.upper()
120 random = random.replace("-","")
121 return random[0:string_length]
122
123 password = random_string(10)
124
125 gpg = gnupg.GPG()
126
127 input_data = gpg.gen_key_input(
128 key_type="RSA",
129 key_length=1024,
130 name_email=username + '@gmail.com',
131 passphrase='passphrase',
132 )
133
134 pgp = gpg.gen_key(input_data)
135 ascii_armored_public_keys = gpg.export_keys(pgp.fingerprint)
136 date = time.strftime('%d/%m/%Y')
137
138 signature = random.choice(signatures)
139 signature = signature.replace(":username", username)
140 signature = signature.replace(":date", date)
141
142 signed_data = str(gpg.sign(signature, passphrase='passphrase', keyid=pgp.fingerprint, detach=False))
143
144 data = {
145 'registration': '',
146 'user': username,
147 'passwrd1': password,
148 'passwrd2': password,
149 'email': random_string(10) + "@gmail.com",
150 'allow_email': 'on',
151 'customfield[cust_pgp]': ascii_armored_public_keys,
152 'register_vv[code]': captcha_str,
153 'regSubmit': 'Inscrivez-vous',
154 'step': '2'
155 }
156
157 response3 = session.post(url + "index.php?action=register2", headers=headers, data=data, proxies=proxies, allow_redirects=False)
158
159 if "register_error" in response3.text:
160 print("Fail.")
161 with open("out.html", "w") as f:
162 f.write(response3.text)
163 continue
164 else:
165 print("Success.")
166 with open('dfas_accounts.txt', 'a') as f:
167 f.write(username + ":" + password + "\n")
168
169 headers['Referer'] = url + 'index.php?action=register'
170
171 parsed = urlparse.urlparse(response3.headers['Location'])
172 last_member_id = int(urlparse.parse_qs(parsed.query)['member'][0])
173
174 print ("Last member id:", last_member_id)
175
176 response4 = session.get(url + "index.php?action=login2;sa=check;member=" + str(last_member_id), headers=headers, proxies=proxies)
177 response5 = session.get(url + "index.php?action=post;board=2.0", headers=headers, proxies=proxies)
178
179 subject = random.choice(subjects)
180 subject = subject.replace(":username", username)
181
182 message = random.choice(presentations)
183 message = message.replace(":username", username)
184 message = message.replace(":public_key", ascii_armored_public_keys)
185 message = message.replace(":signature", signed_data)
186
187 icons = [
188 'xx',
189 'thumbup',
190 'thumbdown',
191 'exclamation',
192 'cheesy',
193 'sad',
194 'wink',
195 'grin',
196 'question',
197 'lamp',
198 'smiley',
199 'angry',
200 'grin'
201 ]
202
203 data = {
204 'postmodify': '',
205 'topic': '0',
206 'message_mode': '0',
207 'goback': '1',
208 'ns': 'NS',
209 'additional_options': "0",
210 'subject': subject,
211 'icon': random.choice(icons),
212 'message': message
213 }
214
215 soup = BeautifulSoup(response5.text, features="lxml")
216
217 for input in soup.select('#postmodify input'):
218 name = input.get('name')
219 if name not in data and name != "preview":
220 data[name] = input.get('value')
221
222 response6 = session.post(url + "index.php?action=post2;start=0;board=2", headers=headers, data=data, proxies=proxies)
223
224 with open("final.html", "w") as f:
225 f.write(response6.text)