全球主机交流论坛

标题: 哪位python界高手来翻译一下迅雷水晶开宝箱的程序 [打印本页]

作者: xx2008    时间: 2015-1-25 02:14
标题: 哪位python界高手来翻译一下迅雷水晶开宝箱的程序
迅雷水晶自动开宝箱的程序:https://github.com/mengskysama/XunLeiCrystalMinesMakeDie

这里面的代码应该是向那个443的端口post数据吧

但是看不懂python,到底post的什么数据。

python高手最关键的post的数据给翻译成PHP吧

造福大家!
作者: h0stl0c    时间: 2015-1-25 04:40
直接用python不就好了,为啥一定要PHP呢?难道因为php是世界上最好的语言没有之一?
作者: xx2008    时间: 2015-1-25 08:41
h0stl0c 发表于 2015-1-25 04:40
直接用python不就好了,为啥一定要PHP呢?难道因为php是世界上最好的语言没有之一? ...

如果我懂python的话,肯定他最好,但是我不懂。
作者: psdshow    时间: 2015-1-25 08:51
手机抓包看看提交的什麽,php应该可以,大意是登录,获取宝箱列表,领取
作者: monface    时间: 2015-1-25 10:17
你直接下载win下运行那个exe程序包,直接放到水晶矿上,能自动收到红包,别去研究了。
作者: 欧阳逍遥    时间: 2015-1-25 10:29
呵呵 正想写一个了,省事了
作者: h0stl0c    时间: 2015-1-25 13:13
xx2008 发表于 2015-1-25 08:41
如果我懂python的话,肯定他最好,但是我不懂。

不用看懂啊,直接运行就好了。
作者: xx2008    时间: 2015-1-25 15:12
monface 发表于 2015-1-25 10:17
你直接下载win下运行那个exe程序包,直接放到水晶矿上,能自动收到红包,别去研究了。 ...

那个exe只能一个帐号,如果能自己弄得话可以多个帐号,还可以做其他的统计表,分析流量跟时间的关系之类的。
作者: ericls    时间: 2015-1-25 15:58
等我起床 现在太晚了
作者: xx2008    时间: 2015-1-25 16:27
ericls 发表于 2015-1-25 15:58
等我起床 现在太晚了

你这嘛意思,你在地球另一边吗?
作者: baidu    时间: 2015-1-25 16:43
  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
你仔细看下源码,我觉得这个东西不难读懂,
我没学过这个语言,但看清思路应该不难。
作者: xx2008    时间: 2015-1-25 20:40
baidu 发表于 2015-1-25 16:43
你抓包后,就知道post什么了。他这个data
你仔细看下源码,我觉得这个东西不难读懂,
我没学过这个语言, ...

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

作死专用吗?
作者: d5d    时间: 2015-1-26 19:00
下载跑起来。
作者: walkman660    时间: 2015-1-26 20:54
用CURL应该也可以
作者: xx2008    时间: 2015-1-26 22:40
walkman660 发表于 2015-1-26 20:54
用CURL应该也可以

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

这不是python2php这么简单了吧。
作者: xx2008    时间: 2015-1-27 20:30
h0stl0c 发表于 2015-1-27 00:52
这不是python2php这么简单了吧。

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

不只是post啊,里面有个算法的。
作者: xx2008    时间: 2015-1-27 21:35
h0stl0c 发表于 2015-1-27 21:28
不只是post啊,里面有个算法的。

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

这就像一个美国人,说的英语我听不懂,但我会汉语,只要有人把他说的话翻译给我,那么我就能用各种各样的表达方法表达美国人的话,但前提是我得知道那个美国人在说什么
作者: h0stl0c    时间: 2015-1-27 21:53
xx2008 发表于 2015-1-27 21:35
你真较真,有个算法,就在php里把算法实现了就行了

这就像一个美国人,说的英语我听不懂,但我会汉语, ...

你换成php没意思的。因为这是个脚本,就算用php也是cli下,那为啥不直接用python呢?

本来有心帮你改下,但你话都说成这样了,只能了。
作者: baidu    时间: 2015-1-28 09:28
xx2008 发表于 2015-1-25 20:40
里面那些运算符还有“函数”都不知道是干什么的,懂得人肯定看上去很简单,但是像我这样不懂的人,根本就 ...

我也不知道水晶是什么,详细的我是帮不上你,但我给你提供一下思路,
def login(): 上面那几个 是加密算法,一般是存在网页JS里的,你用F12之类的就能查到,要是看不懂,就把JS搞下来,给JS传参 执行JS得到返回值,我不知道PHP能不能这样做。如果不能,用上面写的几个弄下来搞下变量,也能搞定,得到的返回值用来登录Post,然后就是下面的登录了,cookie什么的就不说了,最后就是,def post_giftbox() 开宝箱的类了,最后好像还有个统计类。
我认为难点就是那个加密算法,但人家都给出来了,加密一下Post过去就行,
至于Post什么,你抓下包,和这个程序对比一下就更一目了然了,地址什么的都挺清楚。
用你自己的语言来实现,就是了解一下思路和难点,然后解决掉难点,就能做成。
能力有限,只能帮你这么多了,大蟒蛇我也不懂,但我以前参考过算法。
作者: xx2008    时间: 2015-1-28 09:35
baidu 发表于 2015-1-28 09:28
我也不知道水晶是什么,详细的我是帮不上你,但我给你提供一下思路,
def login(): 上面那几个 是加密算 ...

打这么多字我都要感谢你一下
作者: xx2008    时间: 2015-1-28 09:37
h0stl0c 发表于 2015-1-27 21:53
你换成php没意思的。因为这是个脚本,就算用php也是cli下,那为啥不直接用python呢?

本来有心帮你改下 ...

那就不要帮我改了




欢迎光临 全球主机交流论坛 (https://sunk.eu.org/) Powered by Discuz! X3.4