全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
楼主: xx2008
打印 上一主题 下一主题

哪位python界高手来翻译一下迅雷水晶开宝箱的程序

[复制链接]
11#
发表于 2015-1-25 16:43:03 | 只看该作者
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import random
  4. import string
  5. import logging
  6. import sys
  7. import requests
  8. import json
  9. import time

  10. import requests.packages.urllib3 as urllib3
  11. urllib3.disable_warnings()

  12. logging.getLogger("requests").setLevel(logging.WARNING)
  13. logging.basicConfig(level=logging.INFO)

  14. user = 'user'
  15. passwd = 'pass'

  16. PACKET_LOGIN = '{"cmdID":1,"verifyCode":"","isCompressed":0,"rsaKey":{"n":"D6F1CFBF4D9F70710527E1B1911635460B1FF9AB7C202294D04A6F135A906E90E2398123C234340A3CEA0E5EFDCB4BCF7C613A5A52B96F59871D8AB9D240ABD4481CCFD758EC3F2FDD54A1D4D56BFFD5C4A95810A8CA25E87FDC752EFA047DF4710C7D67CA025A2DC3EA59B09A9F2E3A41D4A7EFBB31C738B35FFAAA5C6F4E6F","e":"010001"},"businessType":61,"passWord":"%s","loginType":0,"platformVersion":1,"verifyKey":"","sessionID":"","protocolVersion":100,"userName":"%s","extensionList":"","sequenceNo":10000001,"peerID":"%s","clientVersion":"1.0.0"}'
  17. PACKET_LOGIN2 = '{"cmdID":3,"userID":%s,"platformVersion":1,"sessionID":"%s","protocolVersion":100,"isCompressed":0,"businessType":61,"extensionList":["imgURL"],"sequenceNo":10000006,"peerID":"%s","clientVersion":"1.0.0"}'
  18. s = requests.Session()
  19. g_headers = {'User-Agent': 'android-async-http/1.4.3 (http://loopj.com/android-async-http)'}
  20. g_headers2 = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json'}
  21. g_cookies = {}
  22. g_peerid = ''
  23. g_userID = 0
  24. g_totalnum = 0
  25. g_totalbox = 0

  26. n = '00D6F1CFBF4D9F70710527E1B1911635460B1FF9AB7C202294D04A6F135A906E90E2398123C234340A3CEA0E5EFDCB4BCF7C613A5A52B96F59871D8AB9D240ABD4481CCFD758EC3F2FDD54A1D4D56BFFD5C4A95810A8CA25E87FDC752EFA047DF4710C7D67CA025A2DC3EA59B09A9F2E3A41D4A7EFBB31C738B35FFAAA5C6F4E6F'
  27. e = '010001'

  28. import hashlib

  29. def modpow(b, e, m):
  30.     result = 1
  31.     while (e > 0):
  32.         if e & 1:
  33.             result = (result * b) % m
  34.         e = e >> 1
  35.         b = (b * b) % m
  36.     return result

  37. def str_to_int(string):
  38.     str_int = 0
  39.     for i in range(len(string)):
  40.         str_int = str_int << 8
  41.         str_int += ord(string[i])
  42.     return str_int

  43. def rsa(data):
  44.     result = modpow(str_to_int(data), long(e, 16), long(n, 16))
  45.     return hex(result).upper()[2:-1]

  46. def gen_passwd(passwd):
  47.     return rsa(hashlib.md5(passwd).hexdigest())

  48. def gen_peerID():
  49.     return string.join(random.sample('ABCDEF0123456789', 16)).replace(' ', '')

  50. g_peerid = gen_peerID()

  51. def login():
  52.     global g_headers
  53.     global g_cookies
  54.     global g_peerid
  55.     data = PACKET_LOGIN % (gen_passwd(passwd), user, g_peerid)
  56.     r = requests.post('https://login.mobile.reg2t.sandai.net:443/', data, verify=False, headers=g_headers)
  57.     if r.status_code != 200:
  58.         raise Exception('迅雷服务器小霸王中...')
  59.     ret = json.loads(r.text)
  60.     if 'nickName' not in ret:
  61.         logging.info('[登录失败]'.decode('utf-8'))
  62.         raise Exception('login faild...')
  63.     logging.info(('[登录成功:%s]' % ret['nickName'].encode('utf-8')).decode('utf-8'))
  64.     g_userID = ret['userID']
  65.     g_cookies['sessionid'] = ret['sessionID']
  66.     g_cookies['userid'] = str(ret['userID']).encode('utf-8')
  67.     g_cookies['origin'] = '1'

  68.     data = PACKET_LOGIN2 % (g_cookies['userid'], g_cookies['sessionid'], g_peerid)
  69.     r = requests.post('https://login.mobile.reg2t.sandai.net:443/', data, verify=False, headers=g_headers)

  70. def post_opengitf(id):
  71.     data = 'id=%s' % id
  72.     h = g_headers2.copy()
  73.     h['X-Requested-With'] = 'XMLHttpRequest'
  74.     r = requests.post('https://red.xunlei.com/index.php?r=usr/opengift', data, verify=False, headers=h, cookies=g_cookies)
  75.     if r.status_code != 200:
  76.         raise Exception('迅雷服务器小霸王中...')
  77.     js = json.loads(r.text)
  78.     if js['rd'] == 'ok':
  79.         global g_totalnum
  80.         global g_totalbox
  81.         g_totalnum += js['gf']['num']
  82.         g_totalbox += 1
  83.         logging.info(('[领取钻石成功] 获得数量:%s 累计领取:%s 累计开箱:%s' % (js['gf']['num'], g_totalnum, g_totalbox)).decode('utf-8'))

  84. def post_giftbox():
  85.     data = 'p=0&ps=10&ni=&tp=0&t='
  86.     r = requests.post('https://red.xunlei.com/index.php?r=usr/giftbox', data, verify=False, headers=g_headers2, cookies=g_cookies)
  87.     if r.status_code != 200:
  88.         raise Exception('迅雷服务器小霸王中...')
  89.     js = json.loads(r.text)
  90.     if 'ci' not in js:
  91.         return
  92.     for item in js['ci']:
  93.         if item['st'] == 0:
  94.             post_opengitf(item['id'])

  95. login_sleep_min = 60
  96. login_sleep = login_sleep_min
  97. while True:
  98.     try:
  99.         login()
  100.         login_sleep = login_sleep_min
  101.         post_giftbox()
  102.         logging.info(('[%s] 累计领取:%s 累计开箱:%s' % (time.strftime('%H:%M'), g_totalnum, g_totalbox)).decode('utf-8'))
  103.         time.sleep(50 * 60)
  104.     except:
  105.         if login_sleep < 10 * 60:
  106.             login_sleep += 60
  107.         logging.warn(('[登录失败]:睡觉%s秒后再试' % (login_sleep)).decode('utf-8'))
  108.         time.sleep(login_sleep)
复制代码


你抓包后,就知道post什么了。他这个data
你仔细看下源码,我觉得这个东西不难读懂,
我没学过这个语言,但看清思路应该不难。
12#
 楼主| 发表于 2015-1-25 20:40:46 | 只看该作者
baidu 发表于 2015-1-25 16:43
你抓包后,就知道post什么了。他这个data
你仔细看下源码,我觉得这个东西不难读懂,
我没学过这个语言, ...

里面那些运算符还有“函数”都不知道是干什么的,懂得人肯定看上去很简单,但是像我这样不懂的人,根本就不懂
13#
发表于 2015-1-26 09:09:22 | 只看该作者
XunLei
CrystalMines
MakeDie

作死专用吗?
14#
发表于 2015-1-26 19:00:38 | 只看该作者
下载跑起来。
15#
发表于 2015-1-26 20:54:40 | 只看该作者
用CURL应该也可以
16#
 楼主| 发表于 2015-1-26 22:40:21 | 只看该作者

不是应该可以,而是肯定可以
17#
发表于 2015-1-27 00:52:10 | 只看该作者
xx2008 发表于 2015-1-25 15:12
那个exe只能一个帐号,如果能自己弄得话可以多个帐号,还可以做其他的统计表,分析流量跟时间的关系之类 ...

这不是python2php这么简单了吧。
18#
 楼主| 发表于 2015-1-27 20:30:04 | 只看该作者
h0stl0c 发表于 2015-1-27 00:52
这不是python2php这么简单了吧。

只要知道post的是什么,那还不就是这么简单?所有工作在php里完成不就好了
19#
发表于 2015-1-27 21:28:53 | 只看该作者
xx2008 发表于 2015-1-27 20:30
只要知道post的是什么,那还不就是这么简单?所有工作在php里完成不就好了 ...

不只是post啊,里面有个算法的。
20#
 楼主| 发表于 2015-1-27 21:35:23 | 只看该作者
h0stl0c 发表于 2015-1-27 21:28
不只是post啊,里面有个算法的。

你真较真,有个算法,就在php里把算法实现了就行了

这就像一个美国人,说的英语我听不懂,但我会汉语,只要有人把他说的话翻译给我,那么我就能用各种各样的表达方法表达美国人的话,但前提是我得知道那个美国人在说什么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-10-13 02:50 , Processed in 0.066113 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表