CrystalMinesAndoridClient
可执行程序不需要自行配置环境,修改config.txt 中账号对应密码直接运行run.exe即可。
http://pan.baidu.com/s/1c0eZ2qW
手动配置
1.安装python 2.X,设置环境变量
2.安装Requests http://www.python-requests.org/en/latest/
3.修改run.py,user passwd 运行run.py
附上 run.py 的源码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import string
import logging
import sys
import requests
import json
import time
import requests.packages.urllib3 as urllib3
urllib3.disable_warnings()
logging.getLogger("requests").setLevel(logging.WARNING)
logging.basicConfig(level=logging.INFO)
user = 'user'
passwd = 'pass'
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"}'
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"}'
s = requests.Session()
g_headers = {'User-Agent': 'android-async-http/1.4.3 (http://loopj.com/android-async-http)'}
g_headers2 = {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json'}
g_cookies = {}
g_peerid = ''
g_userID = 0
g_totalnum = 0
g_totalbox = 0
n = '00D6F1CFBF4D9F70710527E1B1911635460B1FF9AB7C202294D04A6F135A906E90E2398123C234340A3CEA0E5EFDCB4BCF7C613A5A52B96F59871D8AB9D240ABD4481CCFD758EC3F2FDD54A1D4D56BFFD5C4A95810A8CA25E87FDC752EFA047DF4710C7D67CA025A2DC3EA59B09A9F2E3A41D4A7EFBB31C738B35FFAAA5C6F4E6F'
e = '010001'
import hashlib
def modpow(b, e, m):
result = 1
while (e > 0):
if e & 1:
result = (result * b) % m
e = e >> 1
b = (b * b) % m
return result
def str_to_int(string):
str_int = 0
for i in range(len(string)):
str_int = str_int << 8
str_int += ord(string[i])
return str_int
def rsa(data):
result = modpow(str_to_int(data), long(e, 16), long(n, 16))
return hex(result).upper()[2:-1]
def gen_passwd(passwd):
return rsa(hashlib.md5(passwd).hexdigest())
def gen_peerID():
return string.join(random.sample('ABCDEF0123456789', 16)).replace(' ', '')
g_peerid = gen_peerID()
def login():
global g_headers
global g_cookies
global g_peerid
data = PACKET_LOGIN % (gen_passwd(passwd), user, g_peerid)
r = requests.post('https://login.mobile.reg2t.sandai.net:443/', data, verify=False, headers=g_headers)
if r.status_code != 200:
raise Exception('迅雷服务器小霸王中...')
ret = json.loads(r.text)
if 'nickName' not in ret:
logging.info('[登录失败]'.decode('utf-8'))
raise Exception('login faild...')
logging.info(('[登录成功:%s]' % ret['nickName'].encode('utf-8')).decode('utf-8'))
g_userID = ret['userID']
g_cookies['sessionid'] = ret['sessionID']
g_cookies['userid'] = str(ret['userID']).encode('utf-8')
g_cookies['origin'] = '1'
data = PACKET_LOGIN2 % (g_cookies['userid'], g_cookies['sessionid'], g_peerid)
r = requests.post('https://login.mobile.reg2t.sandai.net:443/', data, verify=False, headers=g_headers)
def post_opengitf(id):
data = 'id=%s' % id
h = g_headers2.copy()
h['X-Requested-With'] = 'XMLHttpRequest'
r = requests.post('https://red.xunlei.com/index.php?r=usr/opengift', data, verify=False, headers=h, cookies=g_cookies)
if r.status_code != 200:
raise Exception('迅雷服务器小霸王中...')
js = json.loads(r.text)
if js['rd'] == 'ok':
global g_totalnum
global g_totalbox
g_totalnum += js['gf']['num']
g_totalbox += 1
logging.info(('[领取钻石成功] 获得数量:%s 累计领取:%s 累计开箱:%s' % (js['gf']['num'], g_totalnum, g_totalbox)).decode('utf-8'))
def post_giftbox():
data = 'p=0&ps=10&ni=&tp=0&t='
r = requests.post('https://red.xunlei.com/index.php?r=usr/giftbox', data, verify=False, headers=g_headers2, cookies=g_cookies)
if r.status_code != 200:
raise Exception('迅雷服务器小霸王中...')
js = json.loads(r.text)
if 'ci' not in js:
return
for item in js['ci']:
if item['st'] == 0:
post_opengitf(item['id'])
login_sleep_min = 60
login_sleep = login_sleep_min
while True:
try:
login()
login_sleep = login_sleep_min
post_giftbox()
logging.info(('[%s] 累计领取:%s 累计开箱:%s' % (time.strftime('%H:%M'), g_totalnum, g_totalbox)).decode('utf-8'))
time.sleep(50 * 60)
except:
if login_sleep < 10 * 60:
login_sleep += 60
logging.warn(('[登录失败]:睡觉%s秒后再试' % (login_sleep)).decode('utf-8'))
time.sleep(login_sleep)
转载自:https://github.com/mengskysama/XunLeiCrystalMinesMakeDie