开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 5656|回复: 0
收起左侧

[源码分享] 某互金平台协yi登录+转币

[复制链接]
发表于 2018-2-4 00:57:26 | 显示全部楼层 |阅读模式   江苏省南京市
这是前段时间帮我同学做的一个自动化小程序,这里发出来和大家学习交流下,时间仓促,业务逻辑部分没有深思熟虑,写的比较挫,求轻拍。
操作系统:Ubuntu 14.05
运行环境:Python 2.7.xx


0x00. 结构目录
├── account.txt
├── hyhr178.py
├── logger.conf
├── module
│   ├── __init__.py│   ├── buytt.py
│   ├── login.py
│   ├── rk.py
└── README.md


0x01. 文件功能描述
account.txt -- 存放账号密码文件
hyhr178.py -- 程序入口文件,创建多进程任务,执行核心业务逻辑
logger.conf -- log配置文件
__init__.py -- 模块初始化文件,初始化一些模块中的全局常量
buytt.py -- 转币操作模块文件
login.py -- 自动登录模块文件
rk.py -- 自己封装的若快打码接口
README.md -- 项目说明文档

0x02. hyhr178.py
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # author: CrazyWolf
  4. # qq: 4850498

  5. import time
  6. import signal
  7. import logging
  8. import logging.config
  9. import multiprocessing

  10. from module.login import Login
  11. from module.buytt import BuyTT

  12. # logger = logging.config.fileConfig('logger.conf')
  13. # log_root = logging.getLogger('root')
  14. # log_hyhr178 = logging.getLogger('hyhr178')


  15. def init_work():
  16.     signal.signal(signal.SIGINT, signal.SIG_IGN)


  17. def work(username, password, second_password):
  18.     flag = 1
  19.     password_err_loop = 0
  20.     if username == '' or password == '' or second_password == '':
  21.         print '账号或密码或二级密码为空'
  22.         return

  23.     login = Login()
  24.     buytt = BuyTT(username=username, second_password=second_password)

  25.     while True:
  26.         if flag == 1:
  27.             status = login.do(username=username, password=password)
  28.             if status == 200:
  29.                 flag = 2
  30.             elif status == 400 or status == 401 or status == 402 or status == 100:
  31.                 break
  32.             elif status == 401:
  33.                 # try loop two times
  34.                 password_err_loop += 1
  35.                 if password_err_loop == 2:
  36.                     break
  37.             else:
  38.                 time.sleep(5)
  39.         elif flag == 2:
  40.             status = buytt.verify()
  41.             if status == 200:
  42.                 flag = 3
  43.             elif status == 400 or status == 401:
  44.                 break
  45.             else:
  46.                 time.sleep(5)
  47.         elif flag == 3:
  48.             status = buytt.buy()
  49.             if status == 200 or status == 100:
  50.                 break
  51.             elif status == 500 or status == 501:
  52.                 time.sleep(10)
  53.             elif status == 402 or status == 401:
  54.                 flag = 2
  55.                 time.sleep(5)


  56. def cil():
  57.     result = []
  58.     params = []

  59.     # log_root.info('系统开始运行')
  60.     # read account file
  61.     with open('account.txt', 'r') as f:
  62.         line = f.readline()
  63.         while line:
  64.             if line.find('|') > -1:
  65.                 params.append(line.strip())
  66.             else:
  67.                 print '[-] 账号密码格式不对 -- {0}'.format(line)
  68.                 # log_root.info('账号密码格式不对 -- {0}'.format(line))

  69.             line = f.readline()

  70.     pool = multiprocessing.Pool(processes=len(params), initializer=init_work)
  71.     try:
  72.         for param in params:
  73.             tmp = param.split('|')
  74.             result.append(pool.apply_async(work, (tmp[0], tmp[1], tmp[2])))

  75.         pool.close()
  76.         pool.join()
  77.     except KeyboardInterrupt:
  78.         pool.terminate()
  79.         pool.join()

  80.     print '全部处理完成'


  81. if __name__ == "__main__":
  82.     cil()
复制代码

0x03. __init__.py
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # author: CrazyWolf
  4. # qq: 4850498

  5. import requests

  6. WEBSITE_URL = 'http://hyhr178.com/'
  7. VERIFICATION_CODE_URL = 'http://hyhr178.com/getCaptchaImg?d={0}'

  8. cw_session = requests.session()

  9. RK_SOFT_ID = ''
  10. RK_SOFT_KEY = ''
复制代码

0x04. buytt.py
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # author: CrazyWolf
  4. # qq: 4850498

  5. import time
  6. import json
  7. import logging
  8. import logging.config
  9. import module

  10. # logger = logging.config.fileConfig('logger.conf')
  11. # log_root = logging.getLogger('root')
  12. # log_hyhr178 = logging.getLogger('hyhr178')


  13. class BuyTT:
  14.     def __init__(self, username, second_password):
  15.         self.url_info = 'http://hyhr178.com/getSessionMember'
  16.         self.username = username
  17.         self.second_password = second_password

  18.         self.lever = 1
  19.         self.price = 0
  20.         self.coin_total = 0.0
  21.         self.address = ''

  22.     def verify(self):
  23.         headers = {
  24.             'Host': 'hyhr178.com',
  25.             'Connection': 'keep-alive',
  26.             'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',
  27.             'Accept': 'application/json, text/plain, */*',
  28.             'Referer': 'http://hyhr178.com/memberinfo/module/home',
  29.             'Accept-Encoding': 'gzip, deflate',
  30.             'Accept-Language': 'en-US,en;q=0.5',
  31.         }

  32.         resp = module.cw_session.get(url=self.url_info, headers=headers, verify=False)
  33.         if resp.status_code != 200:
  34.             print '[-] {0} 请求用户数据失败'.format(self.username)
  35.             # log_root.debug('{0} 请求用户数据失败'.format(self.username))
  36.             return 500

  37.         try:
  38.             info = json.loads(resp.text)
  39.             if info is None:
  40.                 # log_root.debug('{0} 解析用户数据失败'.format(self.username))
  41.                 print '[-] {0} 解析用户数据失败'.format(self.username)
  42.                 return 501
  43.         except Exception:
  44.             # log_root.debug('{0} 解析用户数据异常'.format(self.username))
  45.             print '[-] {0} 解析用户数据异常'.format(self.username)
  46.             return 501

  47.         # print info.keys()
  48.         self.lever = info[u'team_level_id']
  49.         self.coin_total = info[u'member_money11']
  50.         self.address = info[u'ssc_code']
  51.         print '[+] {0} 当前级别:{1} 当前TT币:{2} 当前Mail:{3}'.format(self.username, self.lever, self.coin_total, self.address)
  52.         # log_root.info('{0} 当前级别:{1} 当前TT币:{2} 当前Mail:{3}'.format(self.username, self.lever, self.coin_total, self.address))

  53.         if self.coin_total == 0.0:
  54.             print '[-] {0} 没有TT币'.format(self.username)
  55.             # log_root.debug('{0} 没有TT币'.format(self.username))
  56.             return 400

  57.         if self.address == '':
  58.             print '[-] {0} mail为空'.format(self.username)
  59.             # log_root.debug('{0} mail为空'.format(self.username))
  60.             return 401

  61.         # 2017-12-10 修改为每天兑换100
  62.         # if 0 < self.lever < 4:
  63.         #     self.price = 500
  64.         #     if self.coin_total < 500.0:
  65.         #         self.price = self.coin_total
  66.         # elif self.lever >= 4:
  67.         #     self.price = 1000
  68.         #     if self.coin_total < 1000.0:
  69.         #         self.price = self.coin_total
  70.         self.price = 100
  71.         if self.coin_total < 100:
  72.             self.price = self.coin_total
  73.         else:
  74.             print '[-] {0} 获取用户数据失败'.format(self.username)
  75.             # log_root.debug('{0} 获取用户数据失败'.format(self.username))
  76.             return 402

  77.         return 200

  78.     def buy(self):
  79.         headers = {
  80.             'Host': 'hyhr178.com',
  81.             'Connection': 'keep-alive',
  82.             'Accept': '*/*',
  83.             'Origin': 'http://hyhr178.com',
  84.             'X-Requested-With': 'XMLHttpRequest',
  85.             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
  86.             'Content-Type': 'application/x-www-form-urlencoded',
  87.             'Referer': 'http://hyhr178.com',
  88.             'Accept-Encoding': 'gzip, deflate',
  89.             'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6',
  90.         }

  91.         data = ''
  92.         url = 'http://hyhr178.com/niubi/trans?address={0}&money_pwd={1}&out_qty={2}'.format(self.address, self.second_password, self.price)

  93.         resp = module.cw_session.post(url=url, data=data, headers=headers, verify=False)
  94.         if resp.status_code != 200:
  95.             print '[-] {0} 请求购买失败'.format(self.username)
  96.             # log_root.debug('{0} 请求购买失败'.format(self.username))
  97.             return 500

  98.         try:
  99.             result = json.loads(resp.text)
  100.             if result[u'success'] is 1:
  101.                 print '[+] {0} 转入成功'.format(self.username)
  102.                 # log_hyhr178.info('{0} 转入成功'.format(self.username))
  103.                 return 200
  104.             else:
  105.                 # if resp.text.find(u'由于当前的兑换人数太多') > -1:
  106.                 if u'由于当前的兑换人数太多' in resp.text:
  107.                     print '[-] {0} 当前的兑换人数太多'.format(self.username)
  108.                     # log_root.debug('{0} 当前的兑换人数太多'.format(self.username))
  109.                     return 501
  110.                 else:
  111.                     print '[-] {0} {1}'.format(self.username, resp.text.encode('utf-8'))
  112.                     # log_root.debug('{0} {1}'.format(self.username, resp.text))
  113.                     return 100
  114.         except Exception as e:
  115.             # log_root.debug(e)
  116.             print '[-] {0} {1}'.format(self.username, e)
  117.             return 100
复制代码


0x05. login.py
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # author: CrazyWolf
  4. # qq: 4850498

  5. import time
  6. import json
  7. import module
  8. import logging
  9. import logging.config

  10. from module.rk import RClient

  11. # logger = logging.config.fileConfig('logger.conf')
  12. # log_root = logging.getLogger('root')
  13. # log_hyhr178 = logging.getLogger('hyhr178')


  14. class Login:
  15.     def __init__(self):
  16.         self.rk = RClient(username='', password='', soft_id=module.RK_SOFT_ID, soft_key=module.RK_SOFT_KEY)

  17.     def do(self, username, password):
  18.         """
  19.         登陆操作
  20.         :param username:
  21.         :param password:
  22.         :return:
  23.         """
  24.         headers = {
  25.             'Accept': '*/*',
  26.             'Accept-Encoding': 'gzip, deflate',
  27.             'Accept-Language': 'en-US,en;q=0.5',
  28.             'Connection': 'keep-alive',
  29.             'Host': 'hyhr178.com',
  30.             'Referer': 'http://hyhr178.com/memberinfo/module/home',
  31.             'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',
  32.         }

  33.         # get verification code
  34.         code_url = module.VERIFICATION_CODE_URL.format(time.time())
  35.         resp = module.cw_session.get(url=code_url, headers=headers, verify=False)
  36.         if resp.status_code != 200:
  37.             print '[-] {0} 请求验证码失败'.format(username)
  38.             # log_root.debug('{0} 请求验证码失败'.format(username))
  39.             return 500

  40.         # da ma
  41.         img = resp.content
  42.         result = self.rk.rk_create(im=img, im_type=3040)

  43.         if len(result) != 2:
  44.             print '[-] {0} {1}'.format(username, result['Error'])
  45.             # log_root.debug('{0} {1}'.format(username, result['Error']))
  46.             return 400

  47.         # print '[+] 打码结果:', username, result['Result']
  48.         # log_root.info('{0}的打码结果: {1}'.format(username, result['Result']))

  49.         # login
  50.         headers = {
  51.             'Accept': 'application/json, text/plain, */*',
  52.             'Accept-Encoding': 'gzip, deflate',
  53.             'Accept-Language': 'en-US,en;q=0.5',
  54.             'Connection': 'keep-alive',
  55.             'Content-Type': 'application/json;charset=utf-8',
  56.             'Host': 'hyhr178.com',
  57.             'Origin': 'http://hyhr178.com',
  58.             'Referer': 'http://hyhr178.com/memberinfo/module/home',
  59.             'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0',
  60.         }

  61.         url = 'http://hyhr178.com/doLogin?member_code={0}&member_pwd={1}&security_code={2}'.format(username, password, result['Result'])
  62.         # url = 'http://hyhr178.com/doLogin?member_code={0}&member_pwd={1}&security_code={2}'.format(username, password, '1234')

  63.         resp = module.cw_session.get(url=url, headers=headers, verify=False)
  64.         if resp.status_code != 200:
  65.             print '[-] {0} 登录请求失败'.format(username)
  66.             # log_root.debug('{0} 登录请求失败'.format(username))
  67.             return 500

  68.         # {"data":[],"success":1,"msg":"操作成功"}
  69.         try:
  70.             result = json.loads(resp.text)
  71.             if result[u'success'] is 1:
  72.                 print '[+] {0} 登录成功'.format(username)
  73.                 # log_root.debug('{0} 登录成功'.format(username))
  74.                 return 200
  75.             else:
  76.                 # if result[u'msg'].find(u'检验不通过') > -1:
  77.                 #     if u'errorMsg' in result[u'errordata']:
  78.                 #         log_root.debug('{0} {1}'.format(username, result[u'errordata'][u'errorMsg']))
  79.                 #     elif u'secuMsg' in result[u'errordata']:
  80.                 #         log_root.debug('{0} {1}'.format(username, result[u'errordata'][u'secuMsg']))
  81.                 #     else:
  82.                 #         log_root.debug('{0} {1}'.format(username, result[u'errordata']))
  83.                 if u'密码输入错误' in resp.text:
  84.                     print '[-] {0} 密码输入错误'.format(username)
  85.                     # log_root.debug('{0} 密码输入错误'.format(username))
  86.                     return 401

  87.                 elif u'验证码输入错误' in resp.text:
  88.                     self.rk.rk_report_error(result['Id'])
  89.                     print '[-] {0} 验证码输入错误'.format(username)
  90.                     # log_root.debug('{0} 验证码输入错误'.format(username))
  91.                     return 501

  92.                 elif u'系统暂闭维护中' in resp.text:
  93.                     print '[-] {0} 系统暂闭维护中'.format(username)
  94.                     # log_root.debug('{0} 系统暂闭维护中'.format(username))
  95.                     return 402

  96.                 else:
  97.                     print '[-] {0} {1}'.format(username, resp.text.encode('utf-8'))
  98.                     # log_hyhr178.debug('{0} {1}'.format(username, resp.text))
  99.                     return 100

  100.         except Exception as e:
  101.             print '[-] {0} {1}'.format(username, e)
  102.             # log_root.debug(e)
  103.             return 502
复制代码


0x06. rk.py
  1. #!/usr/bin/env python
  2. # coding:utf-8

  3. import requests
  4. from hashlib import md5


  5. class RClient(object):

  6.     def __init__(self, username, password, soft_id, soft_key):
  7.         self.username = username
  8.         self.password = md5(password).hexdigest()
  9.         self.soft_id = soft_id
  10.         self.soft_key = soft_key
  11.         self.base_params = {
  12.             'username': self.username,
  13.             'password': self.password,
  14.             'softid': self.soft_id,
  15.             'softkey': self.soft_key,
  16.         }
  17.         self.headers = {
  18.             'Connection': 'Keep-Alive',
  19.             'Expect': '100-continue',
  20.             'User-Agent': 'ben',
  21.         }

  22.     def rk_create(self, im, im_type, timeout=60):
  23.         """
  24.         im: 图片字节
  25.         im_type: 题目类型
  26.         """
  27.         params = {
  28.             'typeid': im_type,
  29.             'timeout': timeout,
  30.         }
  31.         params.update(self.base_params)
  32.         files = {'image': ('a.jpg', im)}
  33.         r = requests.post('http://api.ruokuai.com/create.json', data=params, files=files, headers=self.headers)
  34.         return r.json()

  35.     def rk_report_error(self, im_id):
  36.         """
  37.         im_id:报错题目的ID
  38.         """
  39.         params = {
  40.             'id': im_id,
  41.         }
  42.         params.update(self.base_params)
  43.         r = requests.post('http://api.ruokuai.com/reporterror.json', data=params, headers=self.headers)
  44.         return r.json()


  45. if __name__ == '__main__':
  46.     rc = RClient('username', 'password', 'soft_id', 'soft_key')
  47.     im = open('a.jpg', 'rb').read()
  48.     print rc.rk_create(im, 3040)

复制代码


0x07. logger.conf
  1. [loggers]
  2. keys=root,hyhr178

  3. [handlers]
  4. keys=consoleHandler,hyhr178Handler

  5. [formatters]
  6. keys=fmt

  7. [logger_root]
  8. level=DEBUG
  9. handlers=consoleHandler

  10. [logger_hyhr178]
  11. level=DEBUG
  12. handlers=hyhr178Handler
  13. qualname=hyhr178

  14. [handler_consoleHandler]
  15. class=StreamHandler
  16. lever=DEBUG
  17. formatter=fmt
  18. args=(sys.stdout,)

  19. [handler_hyhr178Handler]
  20. class=logging.handlers.RotatingFileHandler
  21. lever=DEBUG
  22. formatter=fmt
  23. args=('logs.log', 'a', 20000, 5,)

  24. [formatter_fmt]
  25. format=%(asctime)s - %(levelname)s - %(process)d - %(message)s
  26. datafmt=
复制代码


0x08. README.md
  1. apt-get install python-dev
  2. apt-get install libxml2-dev
  3. apt-get install libxslt1-dev
  4. apt-get install zlib1g-dev

  5. pip install requests
  6. pip install pyquery
复制代码



您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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