def proxy(self): os.system('adb -s ' + self.deviceid + ' shell am force-stop org.proxydroid') self.driver = Open().Phone('org.proxydroid', '.ProxyDroid', self.deviceid, self.port) self.driver.implicitly_wait(180) self.driver.find_element_by_id('android:id/switchWidget').click() time.sleep(2) logging.info(self.deviceid+u'-Proxy成功连接')
def dd_switch(self, ph, mm, device_token): if duoduo_api.Recover(self.deviceid,device_token) == True: self.visualization('环境还原成功') logging.info(self.deviceid+u'-环境还原成功') self.driver = Open().Phone('com.tencent.mm', '.ui.LauncherUI', self.deviceid, self.port) self.driver.implicitly_wait(60) self.visualization('启动') logging.info(self.deviceid + u'-启动') return ph, mm
def dd_new(self): time.sleep(2) self.device_token = duoduo_api.newPhone(self.deviceid) logging.info(self.deviceid+'-token:%s'%self.device_token) time.sleep(2) logging.info(self.deviceid + u'-一键新建成功') logging.info(self.deviceid + u'-启动WX') self.driver = Open().Phone('com.tencent.mm', '.ui.LauncherUI', self.deviceid, self.port) self.driver.implicitly_wait(180) size = self.driver.get_window_size()
def wb_new(self): #api调用一键新机 status = self.w.newDevice() if status == True: logging.info(self.deviceid+u'-一键新机成功') logging.info(self.deviceid + u'-准备打开WX') self.driver = Open().Phone('com.tencent.mm','.ui.LauncherUI', self.deviceid, self.port) self.driver.implicitly_wait(180) size = self.driver.get_window_size() self.wb = int(size.values()[0]) / 1080 self.hb = int(size.values()[1]) / 1920
def wb_login(self, ph, mm): if self.login_mode == '1.wxid登陆'.decode("utf-8"): if self.w.switch_wechat_data(self.wxid) == True: self.driver = Open().Phone('com.tencent.mm', '.ui.LauncherUI', self.deviceid, self.port) self.driver.implicitly_wait(60) return ph, mm else: raise quit() if self.login_mode == '2.云码登陆'.decode("utf-8"): if self.w.cloudCodeRecover(self.cloudCode) == True: self.driver = Open().Phone('com.tencent.mm', '.ui.LauncherUI', self.deviceid, self.port) self.driver.implicitly_wait(60) return ph, mm
def proxy(self): try: os.popen('adb -s %s shell kill -9 %s' % (self.deviceid, os.popen('adb -s %s shell "ps|grep org.proxydroid"' % self.deviceid).read().split()[1])) except: pass os.system('adb -s ' + self.deviceid + ' shell am force-stop org.proxydroid') self.driver = Open().Phone('org.proxydroid', '.ProxyDroid', self.deviceid, self.port) self.driver.implicitly_wait(180) self.driver.find_element_by_id('android:id/switch_widget').click() time.sleep(10) logging.info(self.deviceid + u'-Proxy成功连接')
def start(self, m, t, filtering_mode): self.appPackage = re.findall('(.*?)\|', file.read('平台账号.txt')[25].strip('\n'))[0] self.appActivity = re.findall('\|(.*)', file.read('平台账号.txt')[25].strip('\n'))[0] os.system('adb -s ' + self.deviceid + ' shell am force-stop com.tencent.mm') driver = Open().Phone(self.appPackage, self.appActivity, self.deviceid, self.port) driver.implicitly_wait(60) while True: driver.find_element_by_id('org.wuji:id/exit_vpn').click() # 切换VPN time.sleep(int(t)) try: ip = re.findall( '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}', driver.find_element_by_id('org.wuji:id/ips').get_attribute( ("text")))[0] logging.info(self.deviceid + u"-VPN已成功连接") logging.info(self.deviceid + u"-IP:%s" % ip) if m == '1': if ip_fiter(self.deviceid, ip, filtering_mode) == True: return ip else: pass if m == '2': if ip_fiter(self.deviceid, ip, filtering_mode) == True: return ip else: pass except: time.sleep(10)
def newvpn(self,m,t,filtering_mode): os.system('adb -s ' + self.deviceid + ' shell am force-stop com.tencent.mm') driver = Open().Phone(self.appPackage, self.appActivity, self.deviceid, self.port) driver.implicitly_wait(60) while True: driver.find_element_by_id('it.colucciweb.sstpvpnclient:id/start_stop').click() # 开启VPN time.sleep(int(t)) pd=driver.find_element_by_id('it.colucciweb.sstpvpnclient:id/details1').get_attribute(("text")) try: if u"(已连接)" == pd: logging.info(self.deviceid+u"-VPN已成功连接") try: self.ip = re.findall('"cip": "([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})"', os.popen( 'adb -s ' + self.deviceid + ' shell curl "http://pv.sohu.com/cityjson"').read())[0] except: logging.info(self.deviceid+u'网络异常 ,请查看手机是否可以正常联网') logging.info(self.deviceid + u'-' + self.ip) if m == '1': if ip_fiter(self.deviceid, self.ip, filtering_mode) == True: return self.ip else: pass if m == '2': return self.ip except:pass
def proxy(self): try: os.popen('adb -s %s shell kill -9 %s' % (self.deviceid,os.popen('adb -s %s shell "ps|grep org.proxydroid"'%self.deviceid).read().split()[1])) except: pass os.system('adb -s ' + self.deviceid + ' shell am force-stop org.proxydroid') self.driver = Open().Phone('org.proxydroid', '.ProxyDroid', self.deviceid, self.port) self.driver.implicitly_wait(180) self.driver.find_element_by_id('android:id/switch_widget').click() time.sleep(10) logging.info(self.deviceid+u'-Proxy成功连接')
def start(self,m,t,filtering_mode): self.appPackage = re.findall('(.*?)\|', file.read('平台账号.txt')[25].strip('\n'))[0] self.appActivity = re.findall('\|(.*)', file.read('平台账号.txt')[25].strip('\n'))[0] os.system('adb -s ' + self.deviceid + ' shell am force-stop com.tencent.mm') driver = Open().Phone(self.appPackage, self.appActivity, self.deviceid, self.port) driver.implicitly_wait(60) while True: driver.find_element_by_id('org.wuji:id/exit_vpn').click() # 切换VPN time.sleep(int(t)) try: ip = re.findall('[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}', driver.find_element_by_id('org.wuji:id/ips').get_attribute(("text")))[0] logging.info(self.deviceid + u"-VPN已成功连接") logging.info(self.deviceid + u"-IP:%s" % ip) if m == '1': if ip_fiter(self.deviceid, ip, filtering_mode) == True: return ip else: pass if m == '2': if ip_fiter(self.deviceid, ip, filtering_mode) == True: return ip else: pass except: time.sleep(10)
class newenvironment(): def __init__(self, uid, password, pid, deviceid, port, o_username, o_password, wxmm, phmode, wxmc, phonenumber, gj_mode, tm=None, cooperator=None, country=None,gj=None,qh=None,switchingmode=None,filtering_mode=None,t=None,ip=None): self.uid = uid self.cooperator = cooperator self.password = password self.pid = pid self.deviceid = deviceid self.port = port self.o_username = o_username self.o_password = o_password self.wxmm = wxmm self.phmode = phmode self.ph = PhoneNumber(self.uid, self.password, self.pid, self.deviceid, phmode) self.wxmc = wxmc self.gj_mode = gj_mode self.phonenumber = phonenumber self.tm = tm self.country = country self.gj = gj self.qh = qh self.w = WB(deviceid) self.wj = wj(deviceid, port) self.element_json = json.loads(file.read_all('6.7.3.json')) self.switchingmode =switchingmode self.filtering_mode = filtering_mode self.t = t self.ip = ip #微霸新机 def wb_new(self): #api调用一键新机 status = self.w.newDevice() if status == True: logging.info(self.deviceid+u'-一键新机成功') logging.info(self.deviceid + u'-准备打开WX') self.driver = Open().Phone('com.tencent.mm','.ui.LauncherUI', self.deviceid, self.port) self.driver.implicitly_wait(180) size = self.driver.get_window_size() self.wb = int(size.values()[0]) / 1080 self.hb = int(size.values()[1]) / 1920 #多多新机 def dd_new(self): time.sleep(2) self.device_token = duoduo_api.newPhone(self.deviceid) logging.info(self.deviceid+'-token:%s'%self.device_token) time.sleep(2) logging.info(self.deviceid + u'-一键新建成功') logging.info(self.deviceid + u'-启动WX') self.driver = Open().Phone('com.tencent.mm', '.ui.LauncherUI', self.deviceid, self.port) self.driver.implicitly_wait(180) size = self.driver.get_window_size() #沙盒新机 def sand_box(self): os.popen('adb -s %s shell rm -rf /sdcard/boxbackup' % self.deviceid) with open('沙盒账密配置.json'.decode('utf-8'), 'r') as f: a = json.loads(f.read()) for i in a: if self.deviceid == i['deviceid']: username = i['username'] password = i['password'] os.popen('adb -s %s shell am force-stop com.dobe.sandbox' % self.deviceid) self.driver = Open().Phone('com.dobe.sandbox', '.home.Main2Activity', self.deviceid, self.port) self.driver.implicitly_wait(50) size = self.driver.get_window_size() self.wb = int(size.values()[0]) / 1080 self.hb = int(size.values()[1]) / 1920 self.driver.find_element_by_id('com.dobe.sandbox:id/download_icon').click() wz = self.driver.find_element_by_id('com.dobe.sandbox:id/textView').get_attribute(('text')) while True: if wz.encode('utf-8') == '尚未登陆,点击登陆': self.driver.find_element_by_name('尚未登陆,点击登陆').click() self.driver.find_element_by_id('com.dobe.sandbox:id/editText').send_keys(username) self.driver.find_element_by_id('com.dobe.sandbox:id/editText2').send_keys(password) self.driver.keyevent('66') time.sleep(1) self.driver.find_element_by_name('点击登陆').click() if self.driver.find_elements_by_id('com.dobe.sandbox:id/download_icon') != []: break else: self.driver.keyevent('4') break self.driver.find_element_by_id('com.dobe.sandbox:id/context_menu').click() self.driver.find_element_by_name('清除APP数据').click() self.driver.find_element_by_name('确认删除').click() time.sleep(5) self.driver.find_element_by_id('com.dobe.sandbox:id/download_device').click() self.driver.find_element_by_name('修改设备').click() self.driver.find_element_by_name('修改机型').click() b = 0 self.driver.implicitly_wait(2) while True: if self.driver.find_elements_by_class_name('android.widget.TextView') != []: list = self.driver.find_elements_by_class_name('android.widget.TextView') if list.__len__() > 5: self.IMEI = re.findall('IMEI: (.*)', list[2].get_attribute(("text")))[0] logging.info('%s-IMEI:%s' % (self.deviceid,self.IMEI)) self.MAC = re.findall('MAC: (.*)', list[5].get_attribute(("text")))[0] logging.info('%s-MAC:%s' % (self.deviceid, self.MAC)) self.Brand = re.findall('BRAND: (.*)', list[6].get_attribute(("text")))[0] logging.info('%s-BRAND:%s' % (self.deviceid, self.Brand)) self.driver.keyevent(4) time.sleep(1) self.driver.keyevent(4) time.sleep(2) self.driver.find_element_by_id('com.dobe.sandbox:id/appIcon').click() break else: if 30 == b: self.driver.quit() break else: b = b + 1 time.sleep(2) #国内注册 def register(self): self.driver.implicitly_wait(60) self.driver.find_element_by_id(self.element_json[u'首页注册ID']).click() time.sleep(1) self.driver.implicitly_wait(5) logging.info(self.deviceid + u'-点击注册') #国外输入账号信息 def Judgment_Devices(self): while True: if os.system('adb -s %s shell cd /sdcard' % self.deviceid) != 0: logging.info(u'%s未检测到手机连接'%self.deviceid) time.sleep(5) else: break #国内输入账号信息 def input_text(self): self.Judgment_Devices() # for i in list(self.wxmc): # time.sleep(0.3) # os.system('adb -s %s shell input text %s'%(self.deviceid,i)) self.driver.find_elements_by_id(self.element_json[u'输入框ID'])[0].send_keys(self.wxmc) logging.info(self.deviceid + u'-输入昵称') self.driver.find_elements_by_id(self.element_json[u'输入框ID'])[1].clear() self.Judgment_Devices() logging.info(self.deviceid + u'-清空手机号码') #os.system('adb -s %s shell input text %s' % (self.deviceid, self.phonenumber[0])) for i in list(self.phonenumber[0]): time.sleep(0.3) os.system('adb -s %s shell input text %s'%(self.deviceid,i)) logging.info(self.deviceid + u'-输入手机号码:' + self.phonenumber[0]) time.sleep(random.randint(1, 3)) self.Judgment_Devices() self.driver.find_elements_by_id(self.element_json[u'输入框ID'])[2].click() for i in list(self.wxmm): time.sleep(0.3) os.system('adb -s %s shell input text %s'%(self.deviceid,i)) logging.info(self.deviceid + u'-输入密码:' + self.wxmm) self.driver.implicitly_wait(180) time.sleep(random.randint(1, 3)) self.Judgment_Devices() self.driver.find_element_by_id(self.element_json[u'手机号注册页面注册按钮ID']).click() logging.info(self.deviceid + u'-点击注册') self.driver.implicitly_wait(1) while True: self.Judgment_Devices() if self.driver.find_elements_by_class_name(self.element_json['CheckBox']) != []: self.driver.find_elements_by_class_name(self.element_json['CheckBox'])[0].click() logging.info(self.deviceid + u'-同意协议') os.popen('adb -s %s shell input tap 567 1789'%self.deviceid) time.sleep(5) break self.Judgment_Devices() if self.driver.find_elements_by_id(self.element_json[u'手机号注册页面注册按钮ID']) != []: self.driver.find_element_by_id(self.element_json[u'手机号注册页面注册按钮ID']).click() self.Judgment_Devices() if self.driver.find_elements_by_name('网页无法打开') != []: logging.info(self.deviceid + u'-找不到网页,网络不稳定,重新注册') self.driver.quit() break self.Judgment_Devices() if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("网页无法打开")') != []: logging.info(self.deviceid + u'-找不到网页,网络不稳定,重新注册') self.driver.quit() break self.Judgment_Devices() if self.driver.find_elements_by_name('找不到网页') != []: logging.info(self.deviceid + u'-找不到网页,网络不稳定,重新注册') self.driver.quit() break time.sleep(4) while True: self.Judgment_Devices() if self.driver.find_elements_by_class_name(self.element_json['CheckBox']) != []: self.driver.find_elements_by_class_name(self.element_json['CheckBox'])[0].click() logging.info(self.deviceid + u'-同意协议') os.popen('adb -s %s shell input tap 567 1789' % self.deviceid) if self.driver.find_elements_by_id(self.element_json[u'错误弹窗确定ID']) != []: self.driver.find_element_by_id(self.element_json[u'错误弹窗确定ID']).click() if self.driver.find_elements_by_name('微信安全')!=[]: logging.info(self.deviceid + u'-进入滑图页面') break if self.driver.find_elements_by_name('网页无法打开') != []: logging.info(self.deviceid + u'-找不到网页,网络不稳定,重新注册') self.driver.quit() break if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("网页无法打开")') != []: logging.info(self.deviceid + u'-找不到网页,网络不稳定,重新注册') self.driver.quit() break if self.driver.find_elements_by_name('找不到网页') != []: logging.info(self.deviceid + u'-找不到网页,网络不稳定,重新注册') self.driver.quit() break os.popen('adb -s %s shell input tap 500 900' % self.deviceid) os.popen('adb -s %s shell input tap 460 1096' % self.deviceid) time.sleep(5) # 小蚂蚁 def xmy(self): os.system('adb -s %s shell input tap 1056 573' % self.deviceid) time.sleep(1) os.system('adb -s %s shell input tap 580 630' % self.deviceid) #滑图错误 def error_Three_Months(self): if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("返回 ")') != []: logging.info(self.deviceid + u'-出现三个月,重新返回') if self.phmode == '14.玉米平台'.decode("utf-8"): self.ph.yumi_cancelSMSRecv(self.phonenumber[0], self.phonenumber[1]) return '1' if self.driver.find_elements_by_android_uiautomator('操作超时,请重新发起(错误码: -22)') != []: logging.info(self.deviceid + u'-操作超时') if self.phmode == '14.玉米平台'.decode("utf-8"): self.ph.yumi_cancelSMSRecv(self.phonenumber[0], self.phonenumber[1]) return '1' #成功跳码 def successful_Skip_Code(self): if self.driver.find_elements_by_id(self.element_json['czl'])!=[]: logging.info(self.deviceid + u'-跳码成功') return True #跳码失败直接退出 def skip_Code_fail(self, error_type=None): if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("让用户用微信扫描下面的二维码")') != []: if error_type == 'Continue': logging.info(self.deviceid + u'-跳转到二维码页面') return False if self.driver.find_elements_by_name('让用户用微信扫描下面的二维码')!=[]: if error_type == 'Continue': logging.info(self.deviceid + u'-跳转到二维码页面') return False # 国内图片验证 def yztp(self): """ 验证图片 """ if self.tm == '9': while True: if self.driver.find_elements_by_name('安全校验') != []: if self.skip_Code_fail() == False: return False if self.error_Three_Months() == '1': return '1' if self.driver.find_elements_by_id(self.element_json[u'短信内容ID']) != []: return True if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("开始 ")') != []: os.popen('adb -s %s shell input swipe 50 1000 1000 1000 3000' % self.deviceid) if self.tm == '6': while True: try: for j in range(101, 200, 30): a = TouchAction(self.driver) a.press(x=250, y=1000) for i in range(0, 5): a.move_to(x=50, y=(random.randint(-500, 0))).wait(0) a.move_to(x=50, y=(random.randint(0, 500))).wait(0) for i in range(0, j / 10): a.move_to(x=10, y=0).wait(100) a.release().perform() self.Judgment_Devices() if self.driver.find_elements_by_name('安全校验') != []: if self.skip_Code_fail('Continue') == False: return False if self.error_Three_Months() == False: return False self.Judgment_Devices() if self.driver.find_elements_by_id(self.element_json[u'短信内容ID']) != []: return True if self.driver.find_elements_by_name('开始 ') != []: os.popen('adb -s %s shell input swipe 50 1000 1000 1000 3000' % self.deviceid) if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("开始 ")') != []: os.popen('adb -s %s shell input swipe 50 1000 1000 1000 3000' % self.deviceid) if self.driver.find_elements_by_name('开始') != []: os.popen('adb -s %s shell input swipe 50 1000 1000 1000 3000' % self.deviceid) if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("开始")') != []: os.popen('adb -s %s shell input swipe 50 1000 1000 1000 3000' % self.deviceid) except:pass #任务确认 def task_validation(self): """ 任务确认 """ time.sleep(5) token = TokenYZ.pdtoken() status = submissionorder().confirm(self.deviceid, self.taskid, token) if status == '成功': logging.info(self.deviceid+u'-任务已确认完成') else: token = TokenYZ.pdtoken() status = submissionorder().confirm(self.deviceid, self.taskid, token) if status == '成功': logging.info(self.deviceid+u'-任务已确认完成') logging.info(self.deviceid + u'-正在发送短信') #等待扫码 def waiting_code(self, end_time): self.driver.implicitly_wait(5) for self.i in range(1, int(end_time)): try: TouchAction(self.driver).tap(element=None, x=500, y=900).perform() self.dx = re.findall('[a-z0-9]{1,10}', self.driver.find_element_by_id(self.element_json[u'短信内容ID']).get_attribute(("text")))[0] logging.info(self.deviceid + u'-提取的发送内容为' + self.dx) self.task_validation() return True except: logging.info(self.deviceid + u'-扫码剩余时长' + str(end_time * 5 - self.i * 5)) if self.i == end_time - 1: token = TokenYZ.pdtoken() submissionorder().fail(self.deviceid, self.taskid, token) logging.info(self.deviceid + u'-辅助并未扫描成功,等待时间已过,重新注册!') if self.tm == 'tm7': if self.phmode == '14.玉米平台'.decode("utf-8"): self.ph.yumi_cancelSMSRecv(self.phonenumber[0], self.phonenumber[1]) if self.phmode == '3.火箭API'.decode("utf-8"): return self.ph.hj_fail(TokenYZ.pdtoken(), self.phonenumber[1]) self.driver.quit() return False #切换VPN def switching_VPN(self): os.system('adb -s ' + self.deviceid + ' shell am force-stop org.proxydroid') os.system('adb -s ' + self.deviceid + ' shell am force-stop it.colucciweb.sstpvpnclient') def pd_ip(self, m): if self.switchingmode == '3.不换IP'.decode("utf-8"): self.ip = os.popen('adb -s %s shell curl "http://ip.cip.cc'%self.deviceid).read()[0] return self.ip if self.switchingmode == '4.私人VPN'.decode('utf-8'): return self.wj.start(m,self.t,self.filtering_mode) #打开影子科技 def start_yz(self): os.popen('adb -s ' + self.deviceid + ' shell am force-stop wechatscancoder.jionego.com.wechatscancoder') os.popen('adb -s %s shell am start -n wechatscancoder.jionego.com.wechatscancoder/.MainActivity' % self.deviceid).read() time.sleep(3) os.popen('adb -s %s shell am start -n com.tencent.mm/.ui.LauncherUI' % self.deviceid).read() #获取二维码图片 def get_qr_image(self): folder = os.path.exists('./%s' % self.deviceid) if not folder: os.makedirs('./%s' % self.deviceid) else: pass res = requests.get('http://193.112.218.104:89/api?str=Initialize').text image = json.loads(res)['qrcode'] data_62 = json.loads(res)['data'] h = open("./%s/%s.jpg" % (self.deviceid, self.deviceid), "wb") h.write(base64.b64decode(image)) h.close() os.popen('adb -s %s push ./%s/%s.jpg /sdcard/myData/%s.jpg' % (self.deviceid, self.deviceid, self.deviceid,self.deviceid)).read() time.sleep(2) os.popen('adb -s %s shell mv /sdcard/myData/%s.jpg /sdcard/myData/scan.jpg' % (self.deviceid, self.deviceid)).read() time.sleep(2) os.system('adb -s %s shell curl http://127.0.0.1:8089?api=scandCode' % self.deviceid) return data_62 #国内判断跳码 def qr_validation(self, status): """ 判断是否跳码成功 """ if status == '1': self.driver.quit() if status == False: if self.tm == '9' or self.tm == '6': logging.info(self.deviceid + u'-未跳码成功,重新注册!') if self.phmode == '3.火箭API'.decode("utf-8"): self.ph.hj_fail(TokenYZ.pdtoken(), self.phonenumber[1]) if self.phmode == '9.老九专属API'.decode("utf-8"): file().wite_lj_NotHopCode(self.phonenumber[0]) if self.phmode == '2.菜鸟平台'.decode('utf-8'): self.ph.cn_lh(self.phonenumber[0], self.phonenumber[1]) if self.phmode == '12.国内私人3'.decode('utf-8'): self.ph.grsr3_lh(self.phonenumber[1]) if self.phmode == '13.国内私人4'.decode('utf-8'): self.ph.grsr4_lh(self.phonenumber[1]) self.driver.quit() else: self.Submission_Task() if self.cooperator == '1.火箭辅助'.decode("utf-8"): if self.waiting_code(72) == True: if self.phmode == '14.玉米平台'.decode("utf-8"): return self.yumi_sendmsg(self.dx) if self.phmode == '3.火箭API'.decode("utf-8"): if self.ph.send_text(TokenYZ.pdtoken(), self.phonenumber[1], self.dx) == True: return 'succ' if self.phmode == '1.小鱼平台'.decode('utf-8'): return self.ph.xiaoyu_send_message(self.phonenumber[0], self.dx) if self.phmode == '13.国内私人4'.decode('utf-8'): return self.ph.grsr4_send(self.phonenumber[1], self.dx) else: return False if status == True: dx = re.findall('[a-z0-9]{1,10}', self.driver.find_element_by_id(self.element_json[u'短信内容ID']).get_attribute(("text")))[0] logging.info(self.deviceid + u'-读取的短信内容为:' + dx) if self.phmode == '14.玉米平台'.decode("utf-8"): return self.yumi_sendmsg(dx) if self.phmode == '2.菜鸟平台'.decode('utf-8'): return self.ph.cn_send(self.phonenumber[1], dx) if self.phmode == '3.火箭API'.decode("utf-8"): #如果火箭平台返回True代表发送成功 hj_status = self.ph.send_text(TokenYZ.pdtoken(), self.phonenumber[1], dx) if hj_status == True: # 如果火箭平台返回True则返回一个succ return 'succ' if self.phmode == '7.辽宁API'.decode("utf-8"): ln_status=self.ph.ln_send(self.phonenumber[0], dx) if ln_status == True: return 'succ' if self.phmode == '8.国内私人1'.decode("utf-8"): return self.ph.gnsr_send_text(self.phonenumber[0], dx) if self.phmode == '9.老九专属API'.decode("utf-8"): return self.ph.lj_send_text(self.phonenumber[0], dx) if self.phmode == '10.国内私人2'.decode('utf-8'): return self.ph.gnsr2_send(self.phonenumber[0], dx) if self.phmode == '12.国内私人3'.decode('utf-8'): return self.ph.grsr3_send(self.phonenumber[1], dx) if self.phmode == '13.国内私人4'.decode('utf-8'): return self.ph.grsr4_send(self.phonenumber[1], dx) if self.phmode == '1.小鱼平台'.decode('utf-8'): return self.ph.xiaoyu_send_message(self.phonenumber[0], dx) #提交任务 def Submission_Task(self): """ 提交任务订单 """ self.driver.implicitly_wait(180) self.driver.execute() logging.info(self.deviceid + u'-获取二维码') logging.info(self.deviceid + u'-正在解析二维码') url = analysis().get(self.deviceid) token = TokenYZ.pdtoken() logging.info(self.deviceid + u'-二维码解析地址:%s' % url) if self.phmode == '3.火箭API'.decode("utf-8"): self.taskid = submissionorder().submission_hj(url, self.phonenumber[0], token, '360', self.phonenumber[1]) else: self.taskid = submissionorder().submission(url, self.phonenumber[0], token, '360') logging.info(self.deviceid + u'-订单提交成功') logging.info(self.deviceid + u'-订单号:' + self.taskid) self.driver.implicitly_wait(5) #玉米发短信 def yumi_sendmsg(self, dx): try: yz = self.ph.yumi_sendmessages(dx, self.phonenumber[0], self.phonenumber[1]) return yz except: logging.info(self.deviceid + u'-短信发送失败,卡商已下卡') #国外登录 def gw_login_validation(self): self.driver.implicitly_wait(2) while True: if self.driver.find_elements_by_name(self.element_json['Two_registration'])!=[]: logging.info(self.deviceid + u'-判断是否二次注册') self.driver.find_element_by_name(self.element_json['Two_registration']).click() self.driver.implicitly_wait(10) if self.driver.find_elements_by_name(self.element_json['OK'])!=[]: raise Exception(logging.info(self.deviceid + u'-出现错误,重新注册')) logging.info(self.deviceid + u'-该账号为二次注册') if self.driver.find_elements_by_name(self.element_json['WeChat'])!=[]: logging.info(self.deviceid + u'-已进入到微信页面') if self.gj_mode == '1.微霸改机'.decode("utf-8"): self.wxid = self.w.get_wxid() self.cloudCode = self.w.getCloudCode(self.phonenumber[0]) self.xr_wechat(self.wxid, self.cloudCode, 'True') logging.info(self.deviceid + u'-注册数据已写入文件') logging.info(self.deviceid + u'-正在保存微霸数据请稍等') if self.w.save_wechat_data(self.phonenumber[0], self.wxid, self.wxmc) == True: break else: self.xr_wechat(mf='True') logging.info(self.deviceid + u'-注册数据已写入文件') break if self.driver.find_elements_by_name(self.element_json['OK']) != []: self.driver.find_element_by_name(self.element_json['OK']).click() self.driver.implicitly_wait(10) if self.driver.find_elements_by_name(self.element_json['allow'])!=[]: self.driver.find_element_by_name(self.element_json['allow']).click() if self.driver.find_elements_by_id(self.element_json[u'输入框ID'])!=[]: raise Exception(logging.info(self.deviceid + u'-账号秒封')) def T_A16(self,A16): file().write('%s|%s|%s|%s|%s|%s|%s|%s|\n' % (self.phonenumber[0], self.wxmm,A16, self.IMEI,self.ANDROID_ID ,self.MAC, self.CPU_ABI,self.Brand), 'A16数据.txt') logging.info(u'%s-提62成功' % self.deviceid) def scanCode(self,A16): if token().huojian_t62(self.deviceid, TokenYZ.pdtoken()) == True: self.T_A16(A16) #写入文件 def xr_wechat(self,wxid=None,cloudCode=None,mf=None): wechat_list = '%s_%s %s %s %s %s %s|\n' % (self.phonenumber[0], self.wxmm, self.ip, self.deviceid, datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), wxid,cloudCode ) file().write(wechat_list, '微信账号数据.txt') def send_login(self): if self.phmode == '8.国内私人1'.decode("utf-8"): self.ph.qg_card_add(TokenYZ.pdtoken(), self.phonenumber[0]) time.sleep(8) self.driver.implicitly_wait(60) logging.info(self.deviceid + u'-短信发送成功') if self.driver.find_elements_by_name('已发送短信,下一步')!=[]: self.driver.find_element_by_name('已发送短信,下一步').click() # 判断是否发送短信失败,点击下一步 while True: self.driver.implicitly_wait(2) self.Judgment_Devices() if self.driver.find_elements_by_name('不是我的,继续注册')!=[]: self.driver.find_element_by_name('不是我的,继续注册').click() self.Judgment_Devices() if self.driver.find_elements_by_id(self.element_json[u'输入框ID'])!=[]: self.driver.quit() break self.Judgment_Devices() if self.driver.find_elements_by_id(self.element_json[u'错误弹窗确定ID']) != []: self.cw = self.driver.find_element_by_id(self.element_json[u'错误弹窗内容ID']).get_attribute(('text')) if '短信' in self.cw.encode('utf-8'): self.driver.find_element_by_id(self.element_json[u'错误弹窗确定ID']).click() time.sleep(25) self.driver.find_element_by_name('已发送短信,下一步').click() time.sleep(20) if self.driver.find_elements_by_id(self.element_json[u'错误弹窗确定ID'])!=[]: self.cw = self.driver.find_element_by_id(self.element_json[u'错误弹窗内容ID']).get_attribute(('text')) if '短信' in self.cw.encode('utf-8'): logging.info(self.deviceid + u'-已点击过"已发送短信,下一步"两次,还是未注册成功,进入重新注册流程') self.driver.quit() if '逻辑' in self.cw.encode('utf-8'): self.driver.find_element_by_id(self.element_json[u'错误弹窗确定ID']).click() logging.info(self.deviceid + u'-已进入到微信页面,等待5秒判断是否出现秒封状况') self.driver.implicitly_wait(5) if self.driver.find_elements_by_id(self.element_json[u'错误弹窗确定ID']) != []: logging.info(self.deviceid + u'-账号秒封,重新注册') else: if self.gj_mode == '1.微霸改机'.decode("utf-8"): self.save_wechat_data() if self.w.save_wechat_data(self.phonenumber[0], self.wxid, self.wxmc) == True: break if self.gj_mode == '测试'.decode("utf-8"): self.driver.implicitly_wait(50) self.driver.find_element_by_name('我').click() wxid = re.findall('(wxid_[0-9a-z]{1,100})', self.driver.find_element_by_id('com.tencent.mm:id/cl8').get_attribute(("text")))[0] logging.info('%s-微信ID:%s'%(self.deviceid,wxid)) self.driver.find_element_by_name('微信').click() self.sandbox_save(wxid) else: self.xr_wechat(mf='True') logging.info(self.deviceid + u'-注册数据已写入文件') break if '异常' in self.cw.encode('utf-8'): logging.info(self.deviceid + u'-该账号被秒封') if self.gj_mode == '1.微霸改机'.decode("utf-8"): self.save_wechat_data() if self.w.save_wechat_data(self.phonenumber[0], self.wxid, self.wxmc) == True: break if '逻辑' in self.cw.encode('utf-8'): self.driver.find_element_by_id(self.element_json[u'错误弹窗确定ID']).click() logging.info(self.deviceid + u'-已进入到微信页面,等待5秒判断是否出现秒封状况') self.driver.implicitly_wait(5) if self.driver.find_elements_by_id(self.element_json[u'错误弹窗确定ID']) != []: logging.info(self.deviceid + u'-账号秒封,重新注册') else: if self.gj_mode == '1.微霸改机'.decode("utf-8"): self.save_wechat_data() if self.w.save_wechat_data(self.phonenumber[0], self.wxid, self.wxmc) == True: break else: self.xr_wechat(mf='True') logging.info(self.deviceid + u'-注册数据已写入文件') break if '一个月' in self.cw.encode('utf-8'): logging.info(self.deviceid + u'-该手机号码一个月之内不能重复注册') self.driver.quit() if '当天' in self.cw.encode('utf-8'): logging.info(self.deviceid + u'-该手机号码当天不能重复注册') os.popen('adb -s %s shell input keyevent 4' % self.deviceid).read() time.sleep(3) os.popen('adb -s %s shell input keyevent 4' % self.deviceid).read() self.driver.implicitly_wait(60) if self.driver.find_elements_by_id(self.element_json[u'输入框ID'])!=[]: os.popen('adb -s %s shell input keyevent 4' % self.deviceid).read() if self.driver.find_elements_by_id(self.element_json[u'微信四个主按钮ID'])!=[]: pass if '不正确' in self.cw.encode('utf-8'): logging.info(self.deviceid + u'-发送的验证码不正确') self.driver.quit() if '近期' in self.cw.encode('utf-8'): logging.info(self.deviceid + u'-近期相同号码不可重复注册') self.driver.quit() self.Judgment_Devices() if self.driver.find_elements_by_name('微信') != []: logging.info(u'%s-已进入到微信页面,等待5秒判断是否出现秒封状况'%self.deviceid) self.driver.implicitly_wait(5) if self.driver.find_elements_by_id(self.element_json[u'错误弹窗确定ID']) != []: logging.info(self.deviceid + u'-账号秒封,重新注册') else: if self.gj_mode == '测试'.decode('utf-8'): self.driver.implicitly_wait(180) self.driver.find_element_by_name('我').click() wxid = re.findall('(wxid_[0-9a-z]{1,100})',self.driver.find_element_by_id('com.tencent.mm:id/czz').get_attribute(("text")))[0] self.driver.find_element_by_name('微信').click() self.driver.keyevent(4) while True: if self.driver.find_elements_by_id('com.dobe.sandbox:id/appIcon')!=[]: self.driver.find_element_by_id('com.dobe.sandbox:id/appIcon').click() if self.driver.find_elements_by_name('微信')!=[]: break #self.q(wxid) self.sandbox_save(wxid) break else: self.xr_wechat(mf='True') logging.info(self.deviceid + u'-注册数据已写入文件') break #os.popen('adb -s %s shell am start -n com.dobe.sandbox/.home.Main2Activity' % self.deviceid) #self.Judgment_Devices() #time.sleep(2) #self.driver.implicitly_wait(30) #if self.driver.find_elements_by_id('com.dobe.sandbox:id/context_menu')!=[]: # self.driver.find_element_by_id('com.dobe.sandbox:id/context_menu').click() # self.Judgment_Devices() # self.driver.find_element_by_name('关闭进程').click() # self.Judgment_Devices() # self.driver.find_element_by_name('确认关闭').click() # time.sleep(3) # if self.driver.find_elements_by_id('com.dobe.sandbox:id/appIcon')!=[]: # self.driver.find_element_by_id('com.dobe.sandbox:id/appIcon').click() # time.sleep(5) def q(self,wxid): self.driver.implicitly_wait(2) while True: if self.driver.find_elements_by_id(self.element_json[u'错误弹窗确定ID']) != []: self.driver.quit() break if self.driver.find_elements_by_id(self.element_json[u'首页注册ID']) != []: logging.info(self.deviceid + u'-账号被秒封') self.driver.quit() break if self.driver.find_elements_by_id(self.element_json[u'微信四个主按钮ID']) != []: self.driver.find_elements_by_id(self.element_json[u'微信四个主按钮ID'])[2].click() logging.info(self.deviceid + u'-点击发现') break if self.driver.find_elements_by_id(self.element_json[u'输入框ID']) != []: logging.info(self.deviceid + u'-账号被秒封') self.driver.quit() time.sleep(random.randint(1, 3)) self.driver.implicitly_wait(10) if self.gj_mode == '测试'.decode("utf-8"): wechat_list = '%s_%s %s %s %s %s \n' % (self.phonenumber[0], self.wxmm, self.ip, self.deviceid, datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), wxid ) file().write(wechat_list, '微信账号数据(不带环境包).txt') if self.driver.find_elements_by_name('朋友圈') != []: self.driver.find_element_by_name('朋友圈').click() time.sleep(random.randint(1, 3)) else: logging.info(self.deviceid + u'-点击发现失败,重新点击') self.driver.find_elements_by_id(self.element_json[u'微信四个主按钮ID'])[2].click() self.driver.find_element_by_name('朋友圈').click() time.sleep(random.randint(1, 3)) if self.driver.find_elements_by_id(self.element_json[u'朋友圈相机ID']) != []: TouchAction(self.driver).long_press(self.driver.find_element_by_id(self.element_json[u'朋友圈相机ID']),3000).release().perform() time.sleep(random.randint(1, 3)) self.driver.implicitly_wait(5) # 检测有没有朋友圈 if self.driver.find_elements_by_id(self.element_json[u'发表按钮ID']) != []: self.input_pyq_message() else: time.sleep(random.randint(1, 2)) self.driver.find_element_by_id(self.element_json[u'我知道了ID']).click() self.input_pyq_message() logging.info(self.deviceid + u'-点击发表') self.driver.implicitly_wait(60) time.sleep(random.randint(1, 2)) self.driver.find_element_by_android_uiautomator( 'new UiSelector().description("返回")').click() time.sleep(random.randint(1, 2)) self.driver.find_elements_by_id(self.element_json[u'微信四个主按钮ID'])[0].click() time.sleep(3) def sandbox_save(self,wxid): os.system('adb -s ' + self.deviceid + ' shell am force-stop org.wuji') self.driver.keyevent(4) #os.popen('adb -s %s shell am start -n com.dobe.sandbox/.home.Main2Activity'%self.deviceid) self.driver.implicitly_wait(50) self.Judgment_Devices() self.driver.find_element_by_id('com.dobe.sandbox:id/context_menu').click() self.Judgment_Devices() self.driver.find_element_by_name('关闭进程').click() self.Judgment_Devices() self.driver.find_element_by_name('确认关闭').click() self.Judgment_Devices() time.sleep(2) self.driver.find_element_by_id('com.dobe.sandbox:id/download_device').click() self.Judgment_Devices() self.driver.find_element_by_name('备份恢复').click() self.Judgment_Devices() self.driver.find_element_by_name('+ 创建备份').click() self.Judgment_Devices() os.popen('adb -s %s shell input text %s' % (self.deviceid, self.phonenumber[0])) self.Judgment_Devices() self.driver.find_element_by_name('确定').click() time.sleep(5) while True: time.sleep(2) if len(self.driver.find_elements_by_class_name('android.widget.ImageView')) < 2: logging.info(u'%s-数据备份完成' % self.deviceid) break time.sleep(5) self.new_package = re.findall('(.*?).zip', os.popen('adb -s %s shell ls /sdcard/boxbackup' % self.deviceid).read().strip('\n'))[0] self.xr_wechat(wxid=wxid, cloudCode = self.new_package + '.zip') logging.info(self.deviceid + u'-注册数据已写入文件') os.popen( 'start adb -s %s pull /sdcard/boxbackup/%s.zip package/%s/%s.zip' % (self.deviceid, self.new_package,self.deviceid,self.new_package)) while True: try: f = zipfile.ZipFile("package/%s/%s.zip" % (self.deviceid, self.new_package), 'r') for file in f.namelist(): f.extract(file, "package/%s/0" % self.deviceid) break except:pass time.sleep(2) file_data = open('package/%s/0/0/hook/data.json' % self.deviceid, 'r').read() self.CPU_ABI = json.loads(file_data)['CPU_ABI'] logging.info('%s-CPU_ABI:%s' % (self.deviceid, self.CPU_ABI)) self.ANDROID_ID = json.loads(file_data)['android_id'] logging.info('%s-ANDROID_ID:%s' % (self.deviceid, self.ANDROID_ID)) A16_list = [] for filename in os.listdir('package/%s/0/0/com.tencent.mm/files/kvcomm/' % self.deviceid): try: with open('package/%s/0/0/com.tencent.mm/files/kvcomm/%s' % (self.deviceid, filename), 'r') as f: A16 = re.findall( '(A[0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z])', f.read()) if A16 != []: A16_list.append(A16[0]) except: pass Notes = zipfile.ZipFile(r'package/%s/%s.zip'%(self.deviceid,self.new_package), 'r').comment list = ['app_tbs', 'lib','tinker'] logging.info(u'%s-A16:%s' % (self.deviceid, A16_list[0])) self.scanCode(A16_list[0]) for i in list: try: Pack.remove_dir('package/%s/0/0/com.tencent.mm/%s' % (self.deviceid,i)) except:pass for i in range(100,1000): try: Pack.remove_dir('package/%s/0/0/com.tencent.mm/app_xwalk_%s' % (self.deviceid, i)) except:pass shutil.make_archive('package/%s/%s' % (self.deviceid,self.new_package), 'zip', r'package/%s/0'%(self.deviceid)) zf = zipfile.ZipFile('package/%s/%s.zip' % (self.deviceid,self.new_package), 'a') zf.comment = Notes zf.close() time.sleep(2) try: Pack.remove_dir('package/%s/0'%self.deviceid) except:pass os.popen('adb -s %s rm -rf /sdcard/boxbackup' % self.deviceid) def save_wechat_data(self): self.wxid = self.w.get_wxid() self.cloudCode = self.w.getCloudCode(self.phonenumber[0]) self.xr_wechat(self.wxid, self.cloudCode, 'True') logging.info(self.deviceid + u'-注册数据已写入文件') logging.info(self.deviceid + u'-正在保存微霸数据请稍等') # 国内登录 def login_validation(self, yz): if yz == None: self.driver.quit() if yz == 'succ': self.send_login() #国内发圈 def fpyq(self, yz): if yz == None: self.driver.quit() if yz == 'succ': self.send_login() else: logging.info(self.deviceid + u'-未接收到卡商反馈,注册失败') def input_pyq_message(self): time.sleep(random.randint(1, 2)) self.driver.find_element_by_id(self.element_json[u'朋友圈内容输入框ID']).click() try: self.driver.find_element_by_id(self.element_json[u'朋友圈内容输入框ID']).send_keys(file().sh()) except: self.driver.find_element_by_id(self.element_json[u'朋友圈内容输入框ID']).send_keys('My name is daduizhang') logging.info(self.deviceid + u'-输入文字') time.sleep(random.randint(1, 2)) self.driver.find_element_by_id(self.element_json[u'发表按钮ID']).click() def pd_gj(self): if self.gj_mode == '1.微霸改机'.decode("utf-8"): self.wb_new() if self.gj_mode == '2.神奇改机'.decode("utf-8"): self.dd_new() if self.gj_mode == '测试'.decode("utf-8"): self.sand_box() def new_zh(self): try: self.pd_gj() self.register() self.input_text() self.login_validation(self.qr_validation(self.yztp())) except: traceback.print_exc() logging.info(self.deviceid + u'-账号注册失败') def new_zhpyq(self): try: self.pd_gj() self.register() self.input_text() self.fpyq(self.qr_validation(self.yztp())) except: traceback.print_exc() logging.info(self.deviceid + u'-账号注册失败') def gw_zc_t62_1280(self): pass def zc_pyq_t62(self): try: self.pd_gj() if self.country == '1.国内'.decode("utf-8"): self.register() self.input_text() self.fpyq(self.qr_validation(self.yztp())) except: traceback.print_exc() logging.info(self.deviceid + u'-账号注册失败') try: if self.phmode == '3.火箭API'.decode("utf-8"): self.ph.hj_fail(TokenYZ.pdtoken(), self.phonenumber[1]) except:pass
def sandbox_login(self, ph, mm): with open('跳辅设置.txt'.decode('utf-8'), 'r') as f: mode = json.loads(f.read())['transmission_mode'] os.popen('adb -s %s shell rm -rf /sdcard/boxbackup' % self.deviceid) os.popen('adb -s %s shell mkdir /sdcard/boxbackup' % self.deviceid) fsize = int( round( os.path.getsize('package/%s/%s' % (self.deviceid, self.cloudCode)) / float(1024 * 1024), 2)) - 2 with open('沙盒账密配置.json'.decode('utf-8'), 'r') as f: a = json.loads(f.read()) for i in a: if self.deviceid == i['deviceid']: username = i['username'] password = i['password'] if mode == 'ftp': with open('server_config.txt', 'r') as f: data = json.loads(f.read()) time.sleep(2) os.popen( 'start adb -s %s shell curl ftp://%s/package/%s/%s -o /sdcard/boxbackup/%s' % (self.deviceid, data['host'], self.deviceid, self.cloudCode, self.cloudCode)) if mode == 'adb': os.popen( 'start adb -s %s push package/%s/%s /sdcard/boxbackup/%s' % (self.deviceid, self.deviceid, self.cloudCode, self.cloudCode)) time.sleep(2) while True: time.sleep(3) try: sj_fsize = re.findall( '([0-9]{1,3})M', os.popen('adb -s %s shell ls -lh sdcard/boxbackup/%s' % (self.deviceid, self.cloudCode)).read())[0] logging.info(u'%s-正在检查文件传输状态,请稍等' % self.deviceid) if int(sj_fsize) > int(fsize): logging.info(u'%s-文件传输完毕' % self.deviceid) break except: pass self.driver = Open().Phone('com.dobe.sandbox', '.home.Main2Activity', self.deviceid, self.port) self.driver.implicitly_wait(60) self.driver.find_element_by_id( 'com.dobe.sandbox:id/download_icon').click() wz = self.driver.find_element_by_id( 'com.dobe.sandbox:id/textView').get_attribute(('text')) while True: if wz.encode('utf-8') == '尚未登陆,点击登陆': self.driver.find_element_by_name('尚未登陆,点击登陆').click() self.driver.find_element_by_id( 'com.dobe.sandbox:id/editText').send_keys(username) self.driver.find_element_by_id( 'com.dobe.sandbox:id/editText2').send_keys(password) self.driver.keyevent('66') time.sleep(1) self.driver.find_element_by_name('点击登陆').click() if self.driver.find_elements_by_id( 'com.dobe.sandbox:id/download_icon') != []: break else: self.driver.keyevent('4') break self.driver.find_element_by_id( 'com.dobe.sandbox:id/context_menu').click() self.driver.find_element_by_name('清除APP数据').click() self.driver.find_element_by_name('确认删除').click() time.sleep(5) self.driver.find_element_by_id( 'com.dobe.sandbox:id/download_device').click() self.driver.find_element_by_name('备份恢复').click() while True: if self.driver.find_elements_by_id( 'com.dobe.sandbox:id/backup_info') != []: self.driver.find_element_by_id( 'com.dobe.sandbox:id/backup_info').click() self.driver.find_element_by_name('确定').click() break time.sleep(10) os.popen('adb -s %s shell am force-stop com.dobe.sandbox' % self.deviceid) time.sleep(3) os.popen( 'adb -s %s shell am start -n com.dobe.sandbox/.home.Main2Activity' % self.deviceid) if self.driver.find_elements_by_id( 'com.dobe.sandbox:id/context_menu') != []: self.driver.find_element_by_id( 'com.dobe.sandbox:id/appIcon').click() return ph, mm
class login_wechat(): def __init__(self, deviceid, port, gj_mode, country=None, gj=None, wxid=None, login_mode=None, cloudCode=None, ip=None, date=None, switchingmode=None): self.deviceid = deviceid self.port = port self.om = file().readOperationMode() self.gj_mode = gj_mode self.country = country self.gj = gj self.w = WB(self.deviceid) self.wxid = wxid self.login_mode = login_mode self.cloudCode = cloudCode self.ip = ip self.date = date self.switchingmode = switchingmode self.element_json = json.loads(file.read_all('6.7.3.json')) def sandbox_login(self, ph, mm): with open('跳辅设置.txt'.decode('utf-8'), 'r') as f: mode = json.loads(f.read())['transmission_mode'] os.popen('adb -s %s shell rm -rf /sdcard/boxbackup' % self.deviceid) os.popen('adb -s %s shell mkdir /sdcard/boxbackup' % self.deviceid) fsize = int( round( os.path.getsize('package/%s/%s' % (self.deviceid, self.cloudCode)) / float(1024 * 1024), 2)) - 2 with open('沙盒账密配置.json'.decode('utf-8'), 'r') as f: a = json.loads(f.read()) for i in a: if self.deviceid == i['deviceid']: username = i['username'] password = i['password'] if mode == 'ftp': with open('server_config.txt', 'r') as f: data = json.loads(f.read()) time.sleep(2) os.popen( 'start adb -s %s shell curl ftp://%s/package/%s/%s -o /sdcard/boxbackup/%s' % (self.deviceid, data['host'], self.deviceid, self.cloudCode, self.cloudCode)) if mode == 'adb': os.popen( 'start adb -s %s push package/%s/%s /sdcard/boxbackup/%s' % (self.deviceid, self.deviceid, self.cloudCode, self.cloudCode)) time.sleep(2) while True: time.sleep(3) try: sj_fsize = re.findall( '([0-9]{1,3})M', os.popen('adb -s %s shell ls -lh sdcard/boxbackup/%s' % (self.deviceid, self.cloudCode)).read())[0] logging.info(u'%s-正在检查文件传输状态,请稍等' % self.deviceid) if int(sj_fsize) > int(fsize): logging.info(u'%s-文件传输完毕' % self.deviceid) break except: pass self.driver = Open().Phone('com.dobe.sandbox', '.home.Main2Activity', self.deviceid, self.port) self.driver.implicitly_wait(60) self.driver.find_element_by_id( 'com.dobe.sandbox:id/download_icon').click() wz = self.driver.find_element_by_id( 'com.dobe.sandbox:id/textView').get_attribute(('text')) while True: if wz.encode('utf-8') == '尚未登陆,点击登陆': self.driver.find_element_by_name('尚未登陆,点击登陆').click() self.driver.find_element_by_id( 'com.dobe.sandbox:id/editText').send_keys(username) self.driver.find_element_by_id( 'com.dobe.sandbox:id/editText2').send_keys(password) self.driver.keyevent('66') time.sleep(1) self.driver.find_element_by_name('点击登陆').click() if self.driver.find_elements_by_id( 'com.dobe.sandbox:id/download_icon') != []: break else: self.driver.keyevent('4') break self.driver.find_element_by_id( 'com.dobe.sandbox:id/context_menu').click() self.driver.find_element_by_name('清除APP数据').click() self.driver.find_element_by_name('确认删除').click() time.sleep(5) self.driver.find_element_by_id( 'com.dobe.sandbox:id/download_device').click() self.driver.find_element_by_name('备份恢复').click() while True: if self.driver.find_elements_by_id( 'com.dobe.sandbox:id/backup_info') != []: self.driver.find_element_by_id( 'com.dobe.sandbox:id/backup_info').click() self.driver.find_element_by_name('确定').click() break time.sleep(10) os.popen('adb -s %s shell am force-stop com.dobe.sandbox' % self.deviceid) time.sleep(3) os.popen( 'adb -s %s shell am start -n com.dobe.sandbox/.home.Main2Activity' % self.deviceid) if self.driver.find_elements_by_id( 'com.dobe.sandbox:id/context_menu') != []: self.driver.find_element_by_id( 'com.dobe.sandbox:id/appIcon').click() return ph, mm def visualization(self, message): try: requests.get( 'http://127.0.0.1:666/query?time=%s&number=%s&state=%s' % (int(time.time()), self.deviceid, message)) except: pass def error_message(self): while True: if '外挂' in self.cw.encode('utf-8'): return 'waigua' if '批量' in self.cw.encode('utf-8'): return 'piliang' if '密码错误' in self.cw.encode('utf-8'): return 'piliang' if '多人投诉' in self.cw.encode('utf-8'): return 'tousu' if '系统检测' in self.cw.encode('utf-8'): return 'xitong' if '微信登陆环境存在异常' in self.cw.encode('utf-8'): return 'huanjingyichang' if '添加好友' in self.cw.encode('utf-8'): return 'tianjia' if '使用存在异常' in self.cw.encode('utf-8'): return 'shiyongyichang' if '传播色情' in self.cw.encode('utf-8'): return 'seqing' if '长期未登陆' in self.cw.encode('utf-8'): return 'changqi' if '你的微信号由于长期' in self.cw.encode('utf-8'): return 'weishiyong' if '解封环境异常' in self.cw.encode('utf-8'): return 'jiefengyichang' if '手机通讯录' in self.cw.encode('utf-8'): self.driver.find_element_by_name('否').click() return None if '表情' in self.cw.encode('utf-8'): self.driver.find_element_by_name(' 取消 ').click() return None if '通过短信验证码' in self.cw.encode('utf-8'): self.driver.find_element_by_name('确定').click() return None if '注册了新的微信号' in self.cw.encode('utf-8'): return 'newwechat' def mm_login(self, ph, mm): time.sleep(20) self.driver.implicitly_wait(1) while True: #如果出现输入框 if self.driver.find_elements_by_id( self.element_json[u'输入框ID']) != []: self.driver.implicitly_wait(60) time.sleep(2) if self.driver.find_elements_by_id( 'com.tencent.mm:id/ji') != []: self.driver.find_element_by_id( 'com.tencent.mm:id/ji').click() time.sleep(1) os.popen('adb -s %s shell input text %s' % (self.deviceid, mm)) logging.info(self.deviceid + u'-输入密码') time.sleep(2) self.driver.find_element_by_id('com.tencent.mm:id/ch6').click() logging.info(self.deviceid + u'-点击登录') self.driver.implicitly_wait(60) if self.driver.find_elements_by_id( 'com.tencent.mm:id/cvo') != []: # 判断是否登录不上 self.cw = self.driver.find_element_by_id( 'com.tencent.mm:id/cvo').get_attribute(('text')) if '表情' in self.cw.encode('utf-8'): self.driver.find_element_by_name('取消').click() break if '通过微信密码' in self.cw.encode('utf-8'): self.driver.find_element_by_name('忽略').click() break else: return self.error_message() if self.driver.find_elements_by_id('com.tencent.mm:id/cvo') != []: logging.info(u'%s-发现错误弹窗' % self.deviceid) self.cw = self.driver.find_element_by_id( 'com.tencent.mm:id/cvo').get_attribute(('text')) if '表情' in self.cw.encode('utf-8'): self.driver.find_element_by_name(' 取消 ').click() if '通过微信密码' in self.cw.encode('utf-8'): self.driver.find_element_by_name('忽略').click() break else: self.driver.implicitly_wait(60) self.driver.find_element_by_id( 'com.tencent.mm:id/au_').click() logging.info(u'%s-点击确定' % self.deviceid) logging.info(self.deviceid + u'-登陆出现错误') os.popen( 'adb -s %s shell am start -n com.dobe.sandbox/.home.Main2Activity' % self.deviceid) self.driver.find_element_by_id( 'com.dobe.sandbox:id/appIcon').click() logging.info(u'%s-打开微信' % self.deviceid) self.driver.implicitly_wait(1) #如果进入微信页面 if self.driver.find_elements_by_id('com.tencent.mm:id/cw2') != []: break #如果进入微信首页 if self.driver.find_elements_by_id('com.tencent.mm:id/dbe') != []: self.Home_Login(ph, mm) while True: if self.driver.find_elements_by_id( 'com.tencent.mm:id/cvo') != []: self.cw = self.driver.find_element_by_id( 'com.tencent.mm:id/cvo').get_attribute(('text')) return self.error_message() if self.driver.find_elements_by_android_uiautomator( 'new UiSelector().description("拖动下方滑块完成拼图")' ) != []: return 'huatu' if self.driver.find_elements_by_name('拖动下方滑块完成拼图') != []: return 'huatu' if self.driver.find_elements_by_id('com.dobe.sandbox:id/appIcon'): self.driver.find_element_by_id( 'com.dobe.sandbox:id/appIcon').click() def Home_Login(self, ph, mm): self.driver.implicitly_wait(10) self.driver.find_element_by_name('登录').click() self.driver.find_element_by_id(self.element_json[u'输入框ID']).click() os.system('adb -s %s shell input text %s' % (self.deviceid, ph)) logging.info(self.deviceid + u'-输入账号') self.visualization('输入账号') self.driver.find_element_by_id( self.element_json[u'输入手机号码登陆下一步']).click() self.visualization('下一步') logging.info(self.deviceid + u'-下一步') self.driver.find_elements_by_id(self.element_json[u'输入框ID'])[1].click() os.system('adb -s %s shell input text %s' % (self.deviceid, mm)) self.visualization('输入密码') logging.info(self.deviceid + u'-输入密码') self.driver.find_element_by_id( self.element_json[u'输入手机号码登陆下一步']).click() self.visualization('登录') logging.info(self.deviceid + u'-登录') def zh_login(self, wechat_list): self.driver.implicitly_wait(5) if self.driver.find_elements_by_name(self.element_json['allow']) != []: self.driver.find_element_by_name( self.element_json['allow']).click() self.driver.find_element_by_name( self.element_json['allow']).click() self.driver.implicitly_wait(30) self.driver.find_element_by_name(self.element_json['login']).click() self.driver.find_element_by_id(self.element_json[u'输入框ID']).click() os.system('adb -s %s shell input text %s' % (self.deviceid, wechat_list[0])) self.visualization('输入账号') logging.info(self.deviceid + u'-输入账号') self.driver.find_element_by_id( self.element_json[u'输入手机号码登陆下一步']).click() self.visualization('下一步') logging.info(self.deviceid + u'-下一步') self.driver.find_elements_by_id(self.element_json[u'输入框ID'])[1].click() os.system('adb -s %s shell input text %s' % (self.deviceid, wechat_list[1])) self.visualization('输入密码') logging.info(self.deviceid + u'-输入密码') self.driver.find_element_by_id( self.element_json[u'输入手机号码登陆下一步']).click() self.visualization('登录') logging.info(self.deviceid + u'-登录') self.driver.implicitly_wait(2) while True: if self.driver.find_elements_by_id( self.element_json[u'错误弹窗内容ID']) != []: self.cw = self.driver.find_element_by_id( self.element_json[u'错误弹窗内容ID']).get_attribute(('text')) return self.error_message() if self.driver.find_elements_by_id( self.element_json[u'微信四个主按钮ID']) != []: break if self.driver.find_elements_by_android_uiautomator( 'new UiSelector().description("拖动下方滑块完成拼图")') != []: logging.info(u'%s-进入滑图页面' % self.deviceid) while True: for j in range(100, 200, 30): try: a = TouchAction(self.driver) a.press(x=250, y=1000) for i in range(0, 5): a.move_to(x=50, y=(random.randint(-500, 0))).wait(0) a.move_to(x=50, y=(random.randint(0, 500))).wait(0) for i in range(0, j / 10): a.move_to(x=10, y=0).wait(100) a.release().perform() except: pass if self.driver.find_elements_by_android_uiautomator( 'new UiSelector().description("开始验证 ")') != []: file().write('%s\n' % wechat_list[0], '新设备记录文本.txt') logging.info(u'%s-%s该账号出现新设备' % (self.deviceid, wechat_list[0])) self.driver.quit() break if self.driver.find_elements_by_id( self.element_json[u'输入手机号码登陆下一步']) != []: self.driver.find_element_by_id( self.element_json[u'输入手机号码登陆下一步']).click() break if self.driver.find_elements_by_android_uiautomator( 'new UiSelector().description("声音锁验证 ")') != []: file().write('%s\n' % wechat_list[0], '新设备记录文本.txt') logging.info(u'%s-%s该账号出现新设备' % (self.deviceid, wechat_list[0])) self.driver.quit() break if self.driver.find_elements_by_android_uiautomator( 'new UiSelector().description("开始验证 ")') != []: file().write('%s\n' % wechat_list[0], '新设备记录文本.txt') logging.info(u'%s-%s该账号出现新设备' % (self.deviceid, wechat_list[0])) self.driver.quit() break def upgrade(self): if self.driver.find_elements_by_name('微信团队邀请你参与内部体验') != []: self.driver.find_element_by_name('微信团队邀请你参与内部体验').click() def login_fail(self, error, wechat_list): if error == 'waigua': file().write( '%s %s %s %s 外挂 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'piliang': file().write( '%s %s %s %s 批量 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'mimacuowu': file().write( '%s %s %s %s 密码错误 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'tousu': file().write( '%s %s %s %s 多人投诉被限制登陆 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'jidiao': file().write( '%s %s %s %s 在别的设备登陆过 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'xitong': file().write( '%s %s %s %s 系统检测到你的账号有异常 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'huanjingyichang': file().write( '%s %s %s %s 当前设备的微信登陆环境存在异常 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'tianjia': file().write( '%s %s %s %s 当前账号添加好友过于频繁 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'shiyongyichang': file().write( '%s %s %s %s 当前账号的使用存在异常 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'seqing': file().write( '%s %s %s %s该微信账号因涉嫌传播色情 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'changqi': file().write( '%s %s %s %s 该账号长期未登陆 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'huatu': file().write( '%s %s %s %s 进入滑图页面 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'weishiyong': file().write( '%s %s %s %s 该账号长期未使用,已被收回 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'jiefengyichang': file().write( '%s %s %s %s 解封环境异常 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'newwechat': file().write( '%s %s %s %s 注册了新的微信号 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'huatu': file().write( '%s %s %s %s 出现滑图 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') def add_friend(self, zh, mm, hy): self.driver.implicitly_wait(60) self.driver.find_element_by_id(self.element_json[u'微信页面加号']).click() self.driver.find_elements_by_id(self.element_json[u'加号列表'])[1].click() self.visualization('添加朋友') logging.info(self.deviceid + u'-添加朋友') self.driver.find_element_by_id(self.element_json[u'输入框ID']).click() self.driver.find_element_by_id( self.element_json[u'输入框ID']).send_keys(hy) time.sleep(3) if self.driver.find_elements_by_id(self.element_json[u'点击添加按钮']) != []: self.driver.find_element_by_id( self.element_json[u'点击添加按钮']).click() self.driver.implicitly_wait(2) while True: if self.driver.find_elements_by_id( self.element_json[u'设置备注']) != []: break if self.driver.find_elements_by_id( self.element_json[u'错误弹窗确定ID']) != []: self.driver.find_element_by_id( self.element_json[u'错误弹窗确定ID']).click() time.sleep(3) self.driver.find_element_by_id( self.element_json[u'点击添加按钮']).click() while True: if self.driver.find_elements_by_id( self.element_json[u'添加通讯录']) != []: self.driver.find_element_by_id( self.element_json[u'添加通讯录']).click() if self.driver.find_elements_by_id( self.element_json[u'发消息']) != []: self.driver.find_element_by_id( self.element_json[u'发消息']).click() if self.driver.find_elements_by_id( self.element_json[u'消息内容框ID']) != []: break self.driver.implicitly_wait(180) self.driver.find_element_by_id( self.element_json[u'消息内容框ID']).send_keys(zh) logging.info(self.deviceid + u'-正在发送信息:' + zh) self.visualization('正在发送信息:%s' % zh) time.sleep(5) self.driver.find_element_by_id(self.element_json[u'消息发送按钮ID']).click() self.visualization('点击发送') logging.info(self.deviceid + u'-点击发送') time.sleep(2) if self.gj_mode == '1.微霸改机'.decode("utf-8"): file().writehy('%s_%s %s %s %s %s| %s' % (self.wechat_list[0], self.wechat_list[1], datetime.datetime.now().strftime('%Y-%m-%d'), self.deviceid, self.wxid, self.cloudCode, hy)) else: file().writehy('%s %s %s %s' % (zh, mm, self.deviceid, hy)) def circle_of_friends(self): self.driver.implicitly_wait(60) self.driver.find_elements_by_id( self.element_json[u'微信四个主按钮ID'])[2].click() self.visualization('点击发送') logging.info(self.deviceid + u'-点击发现') time.sleep(random.randint(1, 3)) self.driver.find_elements_by_id( self.element_json[u'发现页面朋友圈ID'])[0].click() self.visualization('点击朋友圈') logging.info(self.deviceid + u'-点击朋友圈') time.sleep(5) if self.driver.find_elements_by_id( self.element_json[u'朋友圈相机ID']) != []: TouchAction(self.driver).long_press( self.driver.find_element_by_id(self.element_json[u'朋友圈相机ID']), 3000).release().perform() logging.info(self.deviceid + u'-长按相机') self.visualization('长按相机') self.driver.implicitly_wait(5) if self.driver.find_elements_by_id(self.element_json[u'发表按钮ID']) != []: self.input_message() else: time.sleep(random.randint(1, 2)) self.driver.find_element_by_id( self.element_json[u'我知道了ID']).click() self.input_message() self.visualization('点击发表') logging.info(self.deviceid + u'-点击发表') self.driver.find_element_by_android_uiautomator( 'new UiSelector().description("返回")').click() time.sleep(random.randint(1, 3)) self.driver.find_element_by_id(self.element_json[u'微信四个主按钮ID']).click() time.sleep(random.randint(1, 3)) if self.gj_mode == '1.微霸改机'.decode("utf-8"): file().write_pyq_succ( '%s_%s %s %s %s %s|' % (self.wechat_list[0], self.wechat_list[1], datetime.datetime.now().strftime('%Y-%m-%d'), self.deviceid, self.wxid, self.cloudCode)) else: file().write_pyq_succ( '%s %s %s %s' % (self.wechat_list[0], self.wechat_list[1], datetime.datetime.now().strftime('%Y-%m-%d'), self.deviceid)) def input_message(self): time.sleep(random.randint(1, 2)) self.visualization('进入到发文字朋友圈页面') logging.info(self.deviceid + u'-进入到发文字朋友圈页面') self.driver.find_element_by_id( self.element_json[u'朋友圈内容输入框ID']).click() self.driver.find_element_by_id( self.element_json[u'朋友圈内容输入框ID']).send_keys(file().sh()) self.visualization('输入文字') logging.info(self.deviceid + u'-输入文字') time.sleep(random.randint(1, 2)) self.driver.find_element_by_id(self.element_json[u'发表按钮ID']).click() #打开影子科技 def start_yz(self): os.system( 'adb -s ' + self.deviceid + ' shell am force-stop wechatscancoder.jionego.com.wechatscancoder') os.popen( 'adb -s %s shell am start -n wechatscancoder.jionego.com.wechatscancoder/.MainActivity' % self.deviceid).read() time.sleep(3) os.popen('adb -s %s shell am start -n com.tencent.mm/.ui.LauncherUI' % self.deviceid).read() #获取62二维码 def get_qr_image(self): folder = os.path.exists('./%s' % self.deviceid) if not folder: os.makedirs('./%s' % self.deviceid) else: pass res = requests.get('http://193.112.218.104:89/api?str=Initialize').text image = json.loads(res)['qrcode'] data_62 = json.loads(res)['data'] h = open("./%s/%s.jpg" % (self.deviceid, self.deviceid), "wb") h.write(base64.b64decode(image)) h.close() os.popen('adb -s %s push ./%s/%s.jpg /sdcard/myData/%s.jpg' % (self.deviceid, self.deviceid, self.deviceid, self.deviceid)).read() time.sleep(2) os.popen( 'adb -s %s shell mv /sdcard/myData/%s.jpg /sdcard/myData/scan.jpg' % (self.deviceid, self.deviceid)).read() time.sleep(2) os.popen('adb -s %s shell curl http://127.0.0.1:8089?api=scandCode' % self.deviceid) time.sleep(3) for i in range(0, 10): os.popen('adb -s %s shell input tap 524 1587' % self.deviceid) return data_62 def check_62(self): try: data = open('config.ini', 'r').read() return json.loads(data)['62'], json.loads(data)['A16'] except: with open('config.ini', 'w') as f: f.write('{"62":"False","A16":"False"}') return "False", "False" def sys(self, ph, mm): self.driver.implicitly_wait(180) self.driver.find_elements_by_id( self.element_json[u'微信四个主按钮ID'])[0].click() config_data = self.check_62() if config_data[0] == "True": self.start_yz() if token().get_jurisdiction(TokenYZ.pdtoken(), self.deviceid) != None: for i in range(0, 5): self.visualization('开始提62') logging.info(self.deviceid + u'-开始提62') data_62 = self.get_qr_image() for j in range(0, 3): os.system( 'adb -s %s shell input swipe 500 1200 500 1600' % self.deviceid) self.driver.implicitly_wait(5) if self.driver.find_elements_by_id( 'com.tencent.mm:id/co5') != []: if self.driver.find_elements_by_name( 'Mac 微信已登录') != []: self.driver.find_element_by_name( 'Mac 微信已登录').click() time.sleep(2) if self.driver.find_elements_by_name( 'iPad 微信已登录') != []: self.visualization('提62成功') logging.info(self.deviceid + u'-提62成功') file().write( '%s----%s----%s----%s----%s\n' % (ph, mm, data_62, self.wxid, datetime.datetime.now().strftime( '%Y-%m-%d')), '提62成功列表.txt') token().huojian_t62(self.deviceid, TokenYZ.pdtoken()) return data_62 if i == 4: self.visualization('提取62失败') logging.info(u'%s-提取62失败' % self.deviceid) file().write('%s|\n' % ph, '提62失败列表.txt') break if config_data[1] == "True": os.system('adb -s %s shell input keyevent 3' % self.deviceid) if token().get_jurisdiction(TokenYZ.pdtoken(), self.deviceid) != None: self.T_A16(ph, mm) def smjhy(self, ph=None, mm=None, device_token=None, hy=None): try: self.wechat_list = self.sandbox_login(ph, mm) self.error = self.mm_login(self.wechat_list[0], self.wechat_list[1]) if self.error != None: self.login_fail(self.error, self.wechat_list) else: self.add_friend(self.wechat_list[0], self.wechat_list[1], hy) self.visualization('成功') logging.info(self.deviceid + u'-成功') except: traceback.print_exc() try: self.driver.quit() self.visualization('失败') logging.info(self.deviceid + u'-失败') except: pass #发朋友圈 def fpyq(self, ph=None, mm=None, device_token=None): try: self.wechat_list = self.sandbox_login(ph, mm) self.error = self.mm_login(self.wechat_list[0], self.wechat_list[1]) if self.error != None: self.login_fail(self.error, self.wechat_list) else: self.circle_of_friends() self.visualization('成功') logging.info(self.deviceid + u'-成功') except: try: self.driver.quit() self.visualization('成功') logging.info(self.deviceid + u'-失败') except: pass #登录 def wechat_signout(self, ph=None, mm=None, device_token=None): try: self.wechat_list = self.sandbox_login(ph, mm) self.error = self.mm_login(self.wechat_list[0], self.wechat_list[1]) if self.error != None: self.login_fail(self.error, self.wechat_list) else: self.sys(ph, mm) self.visualization('成功') logging.info(self.deviceid + u'-成功') except: try: self.driver.quit() self.visualization('失败') logging.info(self.deviceid + u'-失败') except: pass def T_A16(self, ph, mm): A16_list = [] file_list = os.popen( 'adb -s %s shell ls /data/data/com.tencent.mm/files/kvcomm/' % self.deviceid).readlines() try: for _file in file_list: os.system( 'adb -s %s shell su root chmod a+rw /data/data/com.tencent.mm/files/kvcomm/%s' % (self.deviceid, _file)) file_data = os.popen( 'adb -s %s shell su root cat -v /data/data/com.tencent.mm/files/kvcomm/%s' % (self.deviceid, _file)).read() A16 = re.findall(',(A[0-9a-z]{15})', file_data) if A16 != []: A16_list.append(A16[0]) device_data = os.popen( 'adb -s %s shell curl "http://127.0.0.1:8888/cmd?group=AppTool\&action=getHookDevice' % self.deviceid).read() data = json.loads(device_data)['data'] file().write( '%s|%s|%s|%s|%s|%s|%s|%s\n' % (ph, mm, A16_list[0], data['phone']['Imei'], data['build']['ANDROIDID'], data['phone']['BSSID'], data['build']['CPU_ABI'], data['build']['BRAND']), 'A16数据.txt') self.visualization('提A16数据成功') logging.info(u'%s-提A16数据成功' % self.deviceid) token().huojian_t62(self.deviceid, TokenYZ.pdtoken()) except: self.visualization('提A16数据失败') logging.info(u'%s-提A16数据失败' % self.deviceid) def login_sys(self, ph=None, mm=None, device_token=None): try: if self.gj_mode == '1.微霸改机'.decode("utf-8"): self.wechat_list = self.wb_login(ph, mm) if self.login_mode == '1.wxid登陆'.decode("utf-8"): self.error = self.mm_login(self.wechat_list[0], self.wechat_list[1]) if self.login_mode == '2.云码登陆'.decode("utf-8"): self.error = self.zh_login(self.wechat_list) if self.gj_mode == '2.神奇改机'.decode("utf-8"): self.wechat_list = self.dd_switch(ph, mm, device_token) self.error = self.zh_login(self.wechat_list) if self.error != None: self.login_fail(self.error, self.wechat_list) else: self.sys(ph, mm) except: try: self.driver.quit() self.visualization('失败') logging.info(self.deviceid + u'-失败') except: pass
def connectbot(self): os.system('adb -s ' + self.deviceid + ' shell am force-stop org.connectbot') driver = Open().Phone('org.connectbot', '.HostListActivity', self.deviceid, self.port) driver.implicitly_wait(180) driver.find_elements_by_id('android:id/icon')[0].click() driver.implicitly_wait(2) while True: if driver.find_elements_by_id('org.connectbot:id/console_prompt_yes') != []: driver.find_element_by_id('org.connectbot:id/console_prompt_yes').click() driver.find_element_by_id('android:id/content').click() if driver.find_elements_by_id('org.connectbot:id/console_password') != []: driver.find_element_by_id('org.connectbot:id/console_password').send_keys('kk123') driver.keyevent(66) time.sleep(1) driver.keyevent(66) break time.sleep(3)
class login_wechat(): def __init__(self, deviceid, port, gj_mode, country=None, gj=None, wxid=None, login_mode=None, cloudCode=None, ip=None, date=None,switchingmode=None): self.deviceid = deviceid self.port = port self.om = file().readOperationMode() self.gj_mode = gj_mode self.country = country self.gj = gj self.w = WB(self.deviceid) self.wxid = wxid self.login_mode = login_mode self.cloudCode = cloudCode self.ip = ip self.date = date self.switchingmode=switchingmode self.element_json = json.loads(file.read_all('6.7.3.json')) def sandbox_login(self, ph, mm): with open('跳辅设置.txt'.decode('utf-8'), 'r')as f: mode = json.loads(f.read())['transmission_mode'] os.popen('adb -s %s shell rm -rf /sdcard/boxbackup' % self.deviceid) os.popen('adb -s %s shell mkdir /sdcard/boxbackup' % self.deviceid) fsize = int( round(os.path.getsize('package/%s/%s' % (self.deviceid, self.cloudCode)) / float(1024 * 1024), 2)) - 2 with open('沙盒账密配置.json'.decode('utf-8'), 'r') as f: a = json.loads(f.read()) for i in a: if self.deviceid == i['deviceid']: username = i['username'] password = i['password'] if mode == 'ftp': with open('server_config.txt', 'r') as f: data = json.loads(f.read()) time.sleep(2) os.popen('start adb -s %s shell curl ftp://%s/package/%s/%s -o /sdcard/boxbackup/%s'%(self.deviceid,data['host'],self.deviceid,self.cloudCode,self.cloudCode)) if mode == 'adb': os.popen('start adb -s %s push package/%s/%s /sdcard/boxbackup/%s' %(self.deviceid,self.deviceid,self.cloudCode,self.cloudCode)) time.sleep(2) while True: time.sleep(3) try: sj_fsize = re.findall('([0-9]{1,3})M', os.popen('adb -s %s shell ls -lh sdcard/boxbackup/%s'%(self.deviceid,self.cloudCode)).read())[0] logging.info(u'%s-正在检查文件传输状态,请稍等' % self.deviceid) if int(sj_fsize) > int(fsize): logging.info(u'%s-文件传输完毕'% self.deviceid) break except: pass self.driver = Open().Phone('com.dobe.sandbox', '.home.Main2Activity', self.deviceid, self.port) self.driver.implicitly_wait(60) self.driver.find_element_by_id('com.dobe.sandbox:id/download_icon').click() wz = self.driver.find_element_by_id('com.dobe.sandbox:id/textView').get_attribute(('text')) while True: if wz.encode('utf-8') == '尚未登陆,点击登陆': self.driver.find_element_by_name('尚未登陆,点击登陆').click() self.driver.find_element_by_id('com.dobe.sandbox:id/editText').send_keys(username) self.driver.find_element_by_id('com.dobe.sandbox:id/editText2').send_keys(password) self.driver.keyevent('66') time.sleep(1) self.driver.find_element_by_name('点击登陆').click() if self.driver.find_elements_by_id('com.dobe.sandbox:id/download_icon') != []: break else: self.driver.keyevent('4') break self.driver.find_element_by_id('com.dobe.sandbox:id/context_menu').click() self.driver.find_element_by_name('清除APP数据').click() self.driver.find_element_by_name('确认删除').click() time.sleep(5) self.driver.find_element_by_id('com.dobe.sandbox:id/download_device').click() self.driver.find_element_by_name('备份恢复').click() while True: if self.driver.find_elements_by_id('com.dobe.sandbox:id/backup_info') != []: self.driver.find_element_by_id('com.dobe.sandbox:id/backup_info').click() self.driver.find_element_by_name('确定').click() break time.sleep(10) os.popen('adb -s %s shell am force-stop com.dobe.sandbox' % self.deviceid) time.sleep(3) os.popen('adb -s %s shell am start -n com.dobe.sandbox/.home.Main2Activity' % self.deviceid) if self.driver.find_elements_by_id('com.dobe.sandbox:id/context_menu') != []: self.driver.find_element_by_id('com.dobe.sandbox:id/appIcon').click() return ph,mm def visualization(self, message): try: requests.get('http://127.0.0.1:666/query?time=%s&number=%s&state=%s' % (int(time.time()), self.deviceid, message)) except:pass def error_message(self): while True: if '外挂' in self.cw.encode('utf-8'): return 'waigua' if '批量' in self.cw.encode('utf-8'): return 'piliang' if '密码错误' in self.cw.encode('utf-8'): return 'piliang' if '多人投诉' in self.cw.encode('utf-8'): return 'tousu' if '系统检测' in self.cw.encode('utf-8'): return 'xitong' if '微信登陆环境存在异常' in self.cw.encode('utf-8'): return 'huanjingyichang' if '添加好友' in self.cw.encode('utf-8'): return 'tianjia' if '使用存在异常' in self.cw.encode('utf-8'): return 'shiyongyichang' if '传播色情' in self.cw.encode('utf-8'): return 'seqing' if '长期未登陆' in self.cw.encode('utf-8'): return 'changqi' if '你的微信号由于长期' in self.cw.encode('utf-8'): return 'weishiyong' if '解封环境异常' in self.cw.encode('utf-8'): return 'jiefengyichang' if '手机通讯录' in self.cw.encode('utf-8'): self.driver.find_element_by_name('否').click() return None if '表情' in self.cw.encode('utf-8'): self.driver.find_element_by_name(' 取消 ').click() return None if '通过短信验证码' in self.cw.encode('utf-8'): self.driver.find_element_by_name('确定').click() return None if '注册了新的微信号' in self.cw.encode('utf-8'): return 'newwechat' def mm_login(self, ph, mm): time.sleep(20) self.driver.implicitly_wait(1) while True: #如果出现输入框 if self.driver.find_elements_by_id(self.element_json[u'输入框ID'])!=[]: self.driver.implicitly_wait(60) time.sleep(2) if self.driver.find_elements_by_id('com.tencent.mm:id/ji') != []: self.driver.find_element_by_id('com.tencent.mm:id/ji').click() time.sleep(1) os.popen('adb -s %s shell input text %s' % (self.deviceid, mm)) logging.info(self.deviceid + u'-输入密码') time.sleep(2) self.driver.find_element_by_id('com.tencent.mm:id/ch6').click() logging.info(self.deviceid + u'-点击登录') self.driver.implicitly_wait(60) if self.driver.find_elements_by_id('com.tencent.mm:id/cvo') != []: # 判断是否登录不上 self.cw = self.driver.find_element_by_id('com.tencent.mm:id/cvo').get_attribute(('text')) if '表情' in self.cw.encode('utf-8'): self.driver.find_element_by_name('取消').click() break if '通过微信密码' in self.cw.encode('utf-8'): self.driver.find_element_by_name('忽略').click() break else: return self.error_message() if self.driver.find_elements_by_id('com.tencent.mm:id/cvo')!=[]: logging.info(u'%s-发现错误弹窗'%self.deviceid) self.cw = self.driver.find_element_by_id('com.tencent.mm:id/cvo').get_attribute(('text')) if '表情' in self.cw.encode('utf-8'): self.driver.find_element_by_name(' 取消 ').click() if '通过微信密码' in self.cw.encode('utf-8'): self.driver.find_element_by_name('忽略').click() break else: self.driver.implicitly_wait(60) self.driver.find_element_by_id('com.tencent.mm:id/au_').click() logging.info(u'%s-点击确定' % self.deviceid) logging.info(self.deviceid + u'-登陆出现错误') os.popen('adb -s %s shell am start -n com.dobe.sandbox/.home.Main2Activity' % self.deviceid) self.driver.find_element_by_id('com.dobe.sandbox:id/appIcon').click() logging.info(u'%s-打开微信' % self.deviceid) self.driver.implicitly_wait(1) #如果进入微信页面 if self.driver.find_elements_by_id('com.tencent.mm:id/cw2')!=[]: break #如果进入微信首页 if self.driver.find_elements_by_id('com.tencent.mm:id/dbe')!=[]: self.Home_Login(ph, mm) while True: if self.driver.find_elements_by_id('com.tencent.mm:id/cvo') != []: self.cw = self.driver.find_element_by_id('com.tencent.mm:id/cvo').get_attribute(('text')) return self.error_message() if self.driver.find_elements_by_android_uiautomator( 'new UiSelector().description("拖动下方滑块完成拼图")') != []: return 'huatu' if self.driver.find_elements_by_name('拖动下方滑块完成拼图') != []: return 'huatu' if self.driver.find_elements_by_id('com.dobe.sandbox:id/appIcon'): self.driver.find_element_by_id('com.dobe.sandbox:id/appIcon').click() def Home_Login(self,ph,mm): self.driver.implicitly_wait(10) self.driver.find_element_by_name('登录').click() self.driver.find_element_by_id(self.element_json[u'输入框ID']).click() os.system('adb -s %s shell input text %s' % (self.deviceid, ph)) logging.info(self.deviceid + u'-输入账号') self.visualization('输入账号') self.driver.find_element_by_id(self.element_json[u'输入手机号码登陆下一步']).click() self.visualization('下一步') logging.info(self.deviceid + u'-下一步') self.driver.find_elements_by_id(self.element_json[u'输入框ID'])[1].click() os.system('adb -s %s shell input text %s' % (self.deviceid, mm)) self.visualization('输入密码') logging.info(self.deviceid + u'-输入密码') self.driver.find_element_by_id(self.element_json[u'输入手机号码登陆下一步']).click() self.visualization('登录') logging.info(self.deviceid + u'-登录') def zh_login(self, wechat_list): self.driver.implicitly_wait(5) if self.driver.find_elements_by_name(self.element_json['allow']) != []: self.driver.find_element_by_name(self.element_json['allow']).click() self.driver.find_element_by_name(self.element_json['allow']).click() self.driver.implicitly_wait(30) self.driver.find_element_by_name(self.element_json['login']).click() self.driver.find_element_by_id(self.element_json[u'输入框ID']).click() os.system('adb -s %s shell input text %s' % (self.deviceid, wechat_list[0])) self.visualization('输入账号') logging.info(self.deviceid + u'-输入账号') self.driver.find_element_by_id(self.element_json[u'输入手机号码登陆下一步']).click() self.visualization('下一步') logging.info(self.deviceid + u'-下一步') self.driver.find_elements_by_id(self.element_json[u'输入框ID'])[1].click() os.system('adb -s %s shell input text %s' % (self.deviceid, wechat_list[1])) self.visualization('输入密码') logging.info(self.deviceid + u'-输入密码') self.driver.find_element_by_id(self.element_json[u'输入手机号码登陆下一步']).click() self.visualization('登录') logging.info(self.deviceid + u'-登录') self.driver.implicitly_wait(2) while True: if self.driver.find_elements_by_id(self.element_json[u'错误弹窗内容ID']) != []: self.cw = self.driver.find_element_by_id(self.element_json[u'错误弹窗内容ID']).get_attribute(('text')) return self.error_message() if self.driver.find_elements_by_id(self.element_json[u'微信四个主按钮ID']) != []: break if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("拖动下方滑块完成拼图")') != []: logging.info(u'%s-进入滑图页面' % self.deviceid) while True: for j in range(100, 200, 30): try: a = TouchAction(self.driver) a.press(x=250, y=1000) for i in range(0, 5): a.move_to(x=50, y=(random.randint(-500, 0))).wait(0) a.move_to(x=50, y=(random.randint(0, 500))).wait(0) for i in range(0, j / 10): a.move_to(x=10, y=0).wait(100) a.release().perform() except: pass if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("开始验证 ")') != []: file().write('%s\n' % wechat_list[0], '新设备记录文本.txt') logging.info(u'%s-%s该账号出现新设备' % (self.deviceid, wechat_list[0])) self.driver.quit() break if self.driver.find_elements_by_id(self.element_json[u'输入手机号码登陆下一步']) != []: self.driver.find_element_by_id(self.element_json[u'输入手机号码登陆下一步']).click() break if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("声音锁验证 ")') != []: file().write('%s\n' % wechat_list[0], '新设备记录文本.txt') logging.info(u'%s-%s该账号出现新设备' % (self.deviceid, wechat_list[0])) self.driver.quit() break if self.driver.find_elements_by_android_uiautomator('new UiSelector().description("开始验证 ")') != []: file().write('%s\n' % wechat_list[0], '新设备记录文本.txt') logging.info(u'%s-%s该账号出现新设备' % (self.deviceid, wechat_list[0])) self.driver.quit() break def upgrade(self): if self.driver.find_elements_by_name('微信团队邀请你参与内部体验')!=[]: self.driver.find_element_by_name('微信团队邀请你参与内部体验').click() def login_fail(self, error, wechat_list): if error == 'waigua': file().write('%s %s %s %s 外挂 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid),'登录异常账号.txt') if error == 'piliang': file().write('%s %s %s %s 批量 %s\n' %(wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid),'登录异常账号.txt') if error == 'mimacuowu': file().write('%s %s %s %s 密码错误 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid),'登录异常账号.txt') if error == 'tousu': file().write('%s %s %s %s 多人投诉被限制登陆 %s\n' % (wechat_list[0], wechat_list[1],self.ip,self.date, self.deviceid), '登录异常账号.txt') if error == 'jidiao': file().write('%s %s %s %s 在别的设备登陆过 %s\n' % (wechat_list[0], wechat_list[1],self.ip,self.date, self.deviceid),'登录异常账号.txt') if error == 'xitong': file().write('%s %s %s %s 系统检测到你的账号有异常 %s\n' % (wechat_list[0], wechat_list[1], self.ip,self.date,self.deviceid),'登录异常账号.txt') if error == 'huanjingyichang': file().write('%s %s %s %s 当前设备的微信登陆环境存在异常 %s\n' % (wechat_list[0], wechat_list[1],self.ip,self.date, self.deviceid),'登录异常账号.txt') if error == 'tianjia': file().write('%s %s %s %s 当前账号添加好友过于频繁 %s\n' % (wechat_list[0], wechat_list[1],self.ip,self.date ,self.deviceid),'登录异常账号.txt') if error == 'shiyongyichang': file().write('%s %s %s %s 当前账号的使用存在异常 %s\n' % (wechat_list[0], wechat_list[1], self.ip,self.date,self.deviceid),'登录异常账号.txt') if error == 'seqing': file().write('%s %s %s %s该微信账号因涉嫌传播色情 %s\n' % (wechat_list[0], wechat_list[1],self.ip,self.date, self.deviceid), '登录异常账号.txt') if error == 'changqi': file().write('%s %s %s %s 该账号长期未登陆 %s\n' % (wechat_list[0], wechat_list[1], self.ip,self.date,self.deviceid),'登录异常账号.txt') if error == 'huatu': file().write('%s %s %s %s 进入滑图页面 %s\n' % (wechat_list[0], wechat_list[1],self.ip,self.date, self.deviceid),'登录异常账号.txt') if error == 'weishiyong': file().write('%s %s %s %s 该账号长期未使用,已被收回 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid),'登录异常账号.txt') if error == 'jiefengyichang': file().write( '%s %s %s %s 解封环境异常 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid), '登录异常账号.txt') if error == 'newwechat': file().write('%s %s %s %s 注册了新的微信号 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid),'登录异常账号.txt') if error == 'huatu': file().write('%s %s %s %s 出现滑图 %s\n' % (wechat_list[0], wechat_list[1], self.ip, self.date, self.deviceid),'登录异常账号.txt') def add_friend(self, zh, mm, hy): self.driver.implicitly_wait(60) self.driver.find_element_by_id(self.element_json[u'微信页面加号']).click() self.driver.find_elements_by_id(self.element_json[u'加号列表'])[1].click() self.visualization('添加朋友') logging.info(self.deviceid + u'-添加朋友') self.driver.find_element_by_id(self.element_json[u'输入框ID']).click() self.driver.find_element_by_id(self.element_json[u'输入框ID']).send_keys(hy) time.sleep(3) if self.driver.find_elements_by_id(self.element_json[u'点击添加按钮']) != []: self.driver.find_element_by_id(self.element_json[u'点击添加按钮']).click() self.driver.implicitly_wait(2) while True: if self.driver.find_elements_by_id(self.element_json[u'设置备注'])!=[]: break if self.driver.find_elements_by_id(self.element_json[u'错误弹窗确定ID'])!=[]: self.driver.find_element_by_id(self.element_json[u'错误弹窗确定ID']).click() time.sleep(3) self.driver.find_element_by_id(self.element_json[u'点击添加按钮']).click() while True: if self.driver.find_elements_by_id(self.element_json[u'添加通讯录']) != []: self.driver.find_element_by_id(self.element_json[u'添加通讯录']).click() if self.driver.find_elements_by_id(self.element_json[u'发消息'])!=[]: self.driver.find_element_by_id(self.element_json[u'发消息']).click() if self.driver.find_elements_by_id(self.element_json[u'消息内容框ID'])!=[]: break self.driver.implicitly_wait(180) self.driver.find_element_by_id(self.element_json[u'消息内容框ID']).send_keys(zh) logging.info(self.deviceid + u'-正在发送信息:' + zh) self.visualization('正在发送信息:%s' % zh) time.sleep(5) self.driver.find_element_by_id(self.element_json[u'消息发送按钮ID']).click() self.visualization('点击发送') logging.info(self.deviceid + u'-点击发送') time.sleep(2) if self.gj_mode == '1.微霸改机'.decode("utf-8"): file().writehy('%s_%s %s %s %s %s| %s' % ( self.wechat_list[0], self.wechat_list[1], datetime.datetime.now().strftime('%Y-%m-%d'), self.deviceid, self. wxid, self.cloudCode, hy)) else: file().writehy('%s %s %s %s' % (zh, mm, self.deviceid,hy)) def circle_of_friends(self): self.driver.implicitly_wait(60) self.driver.find_elements_by_id(self.element_json[u'微信四个主按钮ID'])[2].click() self.visualization('点击发送') logging.info(self.deviceid + u'-点击发现') time.sleep(random.randint(1, 3)) self.driver.find_elements_by_id(self.element_json[u'发现页面朋友圈ID'])[0].click() self.visualization('点击朋友圈') logging.info(self.deviceid + u'-点击朋友圈') time.sleep(5) if self.driver.find_elements_by_id(self.element_json[u'朋友圈相机ID'])!=[]: TouchAction(self.driver).long_press(self.driver.find_element_by_id(self.element_json[u'朋友圈相机ID']), 3000).release().perform() logging.info(self.deviceid + u'-长按相机') self.visualization('长按相机') self.driver.implicitly_wait(5) if self.driver.find_elements_by_id(self.element_json[u'发表按钮ID']) != []: self.input_message() else: time.sleep(random.randint(1, 2)) self.driver.find_element_by_id(self.element_json[u'我知道了ID']).click() self.input_message() self.visualization('点击发表') logging.info(self.deviceid + u'-点击发表') self.driver.find_element_by_android_uiautomator( 'new UiSelector().description("返回")').click() time.sleep(random.randint(1, 3)) self.driver.find_element_by_id(self.element_json[u'微信四个主按钮ID']).click() time.sleep(random.randint(1, 3)) if self.gj_mode == '1.微霸改机'.decode("utf-8"): file().write_pyq_succ('%s_%s %s %s %s %s|' % ( self.wechat_list[0], self.wechat_list[1], datetime.datetime.now().strftime('%Y-%m-%d'), self.deviceid, self. wxid, self.cloudCode)) else: file().write_pyq_succ('%s %s %s %s' % (self.wechat_list[0], self.wechat_list[1], datetime.datetime.now(). strftime('%Y-%m-%d'), self.deviceid)) def input_message(self): time.sleep(random.randint(1, 2)) self.visualization('进入到发文字朋友圈页面') logging.info(self.deviceid + u'-进入到发文字朋友圈页面') self.driver.find_element_by_id(self.element_json[u'朋友圈内容输入框ID']).click() self.driver.find_element_by_id(self.element_json[u'朋友圈内容输入框ID']).send_keys(file().sh()) self.visualization('输入文字') logging.info(self.deviceid + u'-输入文字') time.sleep(random.randint(1, 2)) self.driver.find_element_by_id(self.element_json[u'发表按钮ID']).click() #打开影子科技 def start_yz(self): os.system('adb -s ' + self.deviceid + ' shell am force-stop wechatscancoder.jionego.com.wechatscancoder') os.popen('adb -s %s shell am start -n wechatscancoder.jionego.com.wechatscancoder/.MainActivity' % self.deviceid).read() time.sleep(3) os.popen('adb -s %s shell am start -n com.tencent.mm/.ui.LauncherUI' % self.deviceid).read() #获取62二维码 def get_qr_image(self): folder = os.path.exists('./%s' % self.deviceid) if not folder: os.makedirs('./%s' % self.deviceid) else: pass res = requests.get('http://193.112.218.104:89/api?str=Initialize').text image = json.loads(res)['qrcode'] data_62 = json.loads(res)['data'] h = open("./%s/%s.jpg" % (self.deviceid, self.deviceid), "wb") h.write(base64.b64decode(image)) h.close() os.popen('adb -s %s push ./%s/%s.jpg /sdcard/myData/%s.jpg' % (self.deviceid, self.deviceid, self.deviceid,self.deviceid)).read() time.sleep(2) os.popen('adb -s %s shell mv /sdcard/myData/%s.jpg /sdcard/myData/scan.jpg' % (self.deviceid, self.deviceid)).read() time.sleep(2) os.popen('adb -s %s shell curl http://127.0.0.1:8089?api=scandCode' % self.deviceid) time.sleep(3) for i in range(0, 10): os.popen('adb -s %s shell input tap 524 1587' % self.deviceid) return data_62 def check_62(self): try: data = open('config.ini', 'r').read() return json.loads(data)['62'], json.loads(data)['A16'] except: with open('config.ini', 'w') as f: f.write('{"62":"False","A16":"False"}') return "False", "False" def sys(self, ph, mm): self.driver.implicitly_wait(180) self.driver.find_elements_by_id(self.element_json[u'微信四个主按钮ID'])[0].click() config_data = self.check_62() if config_data[0] == "True": self.start_yz() if token().get_jurisdiction(TokenYZ.pdtoken(), self.deviceid) != None: for i in range(0, 5): self.visualization('开始提62') logging.info(self.deviceid + u'-开始提62') data_62 = self.get_qr_image() for j in range(0, 3): os.system('adb -s %s shell input swipe 500 1200 500 1600' % self.deviceid) self.driver.implicitly_wait(5) if self.driver.find_elements_by_id('com.tencent.mm:id/co5')!= []: if self.driver.find_elements_by_name('Mac 微信已登录') != []: self.driver.find_element_by_name('Mac 微信已登录').click() time.sleep(2) if self.driver.find_elements_by_name('iPad 微信已登录') != []: self.visualization('提62成功') logging.info(self.deviceid + u'-提62成功') file().write('%s----%s----%s----%s----%s\n' % (ph, mm, data_62, self.wxid, datetime.datetime.now().strftime('%Y-%m-%d')), '提62成功列表.txt') token().huojian_t62(self.deviceid, TokenYZ.pdtoken()) return data_62 if i == 4: self.visualization('提取62失败') logging.info(u'%s-提取62失败' % self.deviceid) file().write('%s|\n' % ph, '提62失败列表.txt') break if config_data[1] == "True": os.system('adb -s %s shell input keyevent 3' % self.deviceid) if token().get_jurisdiction(TokenYZ.pdtoken(), self.deviceid) != None: self.T_A16(ph, mm) def smjhy(self, ph=None, mm=None, device_token=None, hy=None): try: self.wechat_list = self.sandbox_login(ph, mm) self.error = self.mm_login(self.wechat_list[0], self.wechat_list[1]) if self.error != None: self.login_fail(self.error, self.wechat_list) else: self.add_friend(self.wechat_list[0], self.wechat_list[1], hy) self.visualization('成功') logging.info(self.deviceid + u'-成功') except: traceback.print_exc() try: self.driver.quit() self.visualization('失败') logging.info(self.deviceid + u'-失败') except:pass #发朋友圈 def fpyq(self, ph=None, mm=None, device_token=None): try: self.wechat_list = self.sandbox_login(ph, mm) self.error = self.mm_login(self.wechat_list[0], self.wechat_list[1]) if self.error != None: self.login_fail(self.error, self.wechat_list) else: self.circle_of_friends() self.visualization('成功') logging.info(self.deviceid + u'-成功') os.system('adb -s ' + self.deviceid + ' shell am force-stop com.dobe.sandbox') except: try: self.driver.quit() self.visualization('成功') logging.info(self.deviceid + u'-失败') except:pass #登录 def wechat_signout(self, ph=None, mm=None, device_token=None): try: self.wechat_list = self.sandbox_login(ph, mm) self.error = self.mm_login(self.wechat_list[0], self.wechat_list[1]) if self.error != None: self.login_fail(self.error, self.wechat_list) else: self.sys(ph, mm) self.visualization('成功') logging.info(self.deviceid + u'-成功') os.system('adb -s ' + self.deviceid + ' shell am force-stop com.dobe.sandbox') except: try: self.driver.quit() self.visualization('失败') logging.info(self.deviceid + u'-失败') except:pass def T_A16(self, ph, mm): A16_list = [] file_list = os.popen('adb -s %s shell ls /data/data/com.tencent.mm/files/kvcomm/'% self.deviceid).readlines() try: for _file in file_list: os.system('adb -s %s shell su root chmod a+rw /data/data/com.tencent.mm/files/kvcomm/%s' % (self.deviceid,_file)) file_data = os.popen('adb -s %s shell su root cat -v /data/data/com.tencent.mm/files/kvcomm/%s' % (self.deviceid,_file)).read() A16 = re.findall(',(A[0-9a-z]{15})', file_data) if A16 != []: A16_list.append(A16[0]) device_data = os.popen('adb -s %s shell curl "http://127.0.0.1:8888/cmd?group=AppTool\&action=getHookDevice' % self.deviceid).read() data = json.loads(device_data)['data'] file().write('%s|%s|%s|%s|%s|%s|%s|%s\n' % (ph, mm, A16_list[0], data['phone']['Imei'], data['build']['ANDROIDID'], data['phone']['BSSID'], data['build']['CPU_ABI'], data['build']['BRAND']), 'A16数据.txt') self.visualization('提A16数据成功') logging.info(u'%s-提A16数据成功' % self.deviceid) token().huojian_t62(self.deviceid, TokenYZ.pdtoken()) except: self.visualization('提A16数据失败') logging.info(u'%s-提A16数据失败' % self.deviceid)
def connectbot(self): os.system('adb -s ' + self.deviceid + ' shell am force-stop org.connectbot') driver = Open().Phone('org.connectbot', '.HostListActivity', self.deviceid, self.port) driver.implicitly_wait(180) driver.find_elements_by_id('android:id/icon')[0].click() driver.implicitly_wait(2) while True: if driver.find_elements_by_id( 'org.connectbot:id/console_prompt_yes') != []: driver.find_element_by_id( 'org.connectbot:id/console_prompt_yes').click() driver.find_element_by_id('android:id/content').click() if driver.find_elements_by_id( 'org.connectbot:id/console_password') != []: driver.find_element_by_id( 'org.connectbot:id/console_password').send_keys('kk123') driver.keyevent(66) time.sleep(1) driver.keyevent(66) break time.sleep(3)
class mode(): # 账号注册 def __init__(self, deviceid, port, wxmm, switchingmode, phmode, t, gj_mode, cooperator, country, gj, qh, login_mode, privince, filtering_mode): self.user = file().readuser() self.deviceid = deviceid self.wxmm = wxmm self.port = port self.switchingmode = switchingmode self.fm = flightmode(deviceid, port) self.v = vpn(self.deviceid, port) self.phmode = PhoneNumber(self.user[3], self.user[6], self.user[9], self.deviceid, phmode, qh) self.f = phmode self.t = t self.gj_mode = gj_mode self.cooperator = cooperator self.country = country self.gj = gj self.qh = qh self.login_mode = login_mode self.privince = privince self.wj = wj(deviceid, port) self.filtering_mode = filtering_mode def connectbot(self): os.system('adb -s ' + self.deviceid + ' shell am force-stop org.connectbot') driver = Open().Phone('org.connectbot', '.HostListActivity', self.deviceid, self.port) driver.implicitly_wait(180) driver.find_elements_by_id('android:id/icon')[0].click() driver.implicitly_wait(2) while True: if driver.find_elements_by_id( 'org.connectbot:id/console_prompt_yes') != []: driver.find_element_by_id( 'org.connectbot:id/console_prompt_yes').click() driver.find_element_by_id('android:id/content').click() if driver.find_elements_by_id( 'org.connectbot:id/console_password') != []: driver.find_element_by_id( 'org.connectbot:id/console_password').send_keys('kk123') driver.keyevent(66) time.sleep(1) driver.keyevent(66) break time.sleep(3) def proxy(self): try: os.popen('adb -s %s shell kill -9 %s' % (self.deviceid, os.popen('adb -s %s shell "ps|grep org.proxydroid"' % self.deviceid).read().split()[1])) except: pass os.system('adb -s ' + self.deviceid + ' shell am force-stop org.proxydroid') self.driver = Open().Phone('org.proxydroid', '.ProxyDroid', self.deviceid, self.port) self.driver.implicitly_wait(180) self.driver.find_element_by_id('android:id/switch_widget').click() time.sleep(10) logging.info(self.deviceid + u'-Proxy成功连接') def pd_ip(self, m): if self.switchingmode == '1.飞行模式'.decode("utf-8"): return self.fm.flightmode(m, self.t, self.filtering_mode) if self.switchingmode == '2.VPN'.decode("utf-8"): return self.v.newvpn(m, self.t, self.filtering_mode) if self.switchingmode == '3.不换IP'.decode("utf-8"): self.ip = os.popen('adb -s %s shell curl "http://ip.cip.cc' % self.deviceid).read()[0] return self.ip if self.switchingmode == '4.私人VPN'.decode('utf-8'): return self.wj.start(m, self.t, self.filtering_mode) if self.switchingmode == '5.私人VPN2'.decode('utf-8'): os.system('adb -s ' + self.deviceid + ' shell am force-stop com.tencent.mm') ip = vps(self.deviceid).switching_VPS(m, self.filtering_mode) logging.info(self.deviceid + u'-服务器IP地址:%s' % ip) while True: try: sj_ip = os.popen( 'adb -s ' + self.deviceid + ' shell curl --connect-timeout 100 ip.cip.cc').read( ).strip('\n') logging.info(self.deviceid + u'-手机IP地址:%s' % sj_ip) if ip in sj_ip: return ip else: logging.info(self.deviceid + u'-手机IP跟服务器IP不一致') self.connectbot() self.proxy() except: self.connectbot() self.proxy() def wechat_list_Verification(self, culture_list): if culture_list == []: while True: logging.info(self.deviceid + u'-养号列表不存在该设备号数据') time.sleep(12) def run_mode(self): ye = str(token().get_balance(TokenYZ.gettoken())) return 'tm' + ye[-1] def get_wechatdata(self, culture_list): ph = re.findall('([0-9]{1,100})_', culture_list)[0] logging.info(self.deviceid + u'-获取到手机号码:' + ph) mm = re.findall('_(.*?) ', culture_list)[0] logging.info(self.deviceid + u'-获取到登录密码:' + mm) try: self.device_token = re.findall('dd_cloud:(.*)', culture_list)[0] logging.info(self.deviceid + u'-获取到多多云码:' + self.device_token) except: self.device_token = 'test' try: for i in culture_list.split(): if 'ID' in i: self.hy = i[3:] logging.info(self.deviceid + u'-获取到好友ID:' + self.hy) except: self.hy = 'test' try: self.wxid = 'wxid_' + re.findall('wxid_(.*)22 ', culture_list)[0] + '22' logging.info(self.deviceid + u'-获取WXID:' + self.wxid) except: logging.info(self.deviceid + u'-未获取到WXID') self.wxid = 'test' try: for i in culture_list.split(): if 'zip' in i: self.cloudCode = i[:-1] logging.info(self.deviceid + u'-获取环境包:%s' % self.cloudCode) except: logging.info(self.deviceid + u'-未获取环境包') self.cloudCode = 'test' try: self.ip = re.findall( ' ([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) ', culture_list)[0] logging.info(self.deviceid + u'-获取到注册IP:' + self.ip) except: logging.info(self.deviceid + u'-未获取到注册IP') self.ip = 'test' try: self.date = re.findall('([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2})', culture_list)[0] logging.info(self.deviceid + u'-获取到注册日期:' + self.date) except: logging.info(self.deviceid + u'-未获取到注册日期') self.date = 'test' return ph, mm, self.device_token, self.hy, self.wxid, self.cloudCode, self.ip, self.date def Judgment_Devices(self): while True: if os.system('adb -s %s shell cd /sdcard' % self.deviceid) != 0: logging.info(u'%s未检测到手机连接' % self.deviceid) time.sleep(5) else: break #raise Exception, "%s-未连接到手机" % self.deviceid def random_password_Verification(self): if self.wxmm == '请输入注册密码'.decode("utf-8"): while True: keylist = ''.join([ random.choice(string.digits + string.ascii_lowercase) for i in range(6) ]) + str(random.randint(0, 9)) + 'a' if 'l' not in keylist: if '9' in keylist: break self.sjmm = keylist return self.sjmm else: self.sjmm = self.wxmm return self.sjmm #从养号列表获取第一条数据到微信账号数据列表去找这条数据 def wb_mode_Verification(self): support_file_name = '养号列表.txt' support_Data = file.read(support_file_name) error_file_name = '登录异常账号.txt' error_Data_List = file.read_all(error_file_name) wechat_file_name = '微信账号数据.txt' wechat_Data_List = file.read(wechat_file_name) num = [] new_data_list = [] for data in wechat_Data_List: if self.deviceid in data: new_data_list.append(data) for support in support_Data: if 'True' not in support.strip('\n'): if re.findall('(.*)\|', support)[0] not in error_Data_List: try: for self.wechat_Data in new_data_list: if re.findall('(.*)\|', support)[0] in self.wechat_Data: num.append('%s ID:%s' % (self.wechat_Data.strip('\n'), re.findall('\|(.*)', support)[0])) except: logging.info(self.deviceid + u'-正则没有匹配到该条数据:' + self.wechat_Data) if num.__len__() <> 0: logging.info(self.deviceid + u'设备找到%s个数据' % num.__len__()) return num else: logging.info(self.deviceid + u'该设备在养号列表中没有数据') time.sleep(10000) def breeding_Mode(self, mode): culture_list = self.wb_mode_Verification() for culture in culture_list: self.pd_ip('2') wechat_list = self.get_wechatdata(culture) if mode == 'moments': login_wechat(deviceid=self.deviceid, port=self.port, country=None, gj_mode=self.gj_mode, wxid=wechat_list[4], login_mode=self.login_mode, cloudCode=wechat_list[5], ip=wechat_list[6], date=wechat_list[7]).fpyq( ph=wechat_list[0], mm=wechat_list[1], device_token=wechat_list[2]) if mode == 'login': login_wechat(deviceid=self.deviceid, port=self.port, country=None, gj_mode=self.gj_mode, wxid=wechat_list[4], login_mode=self.login_mode, cloudCode=wechat_list[5], ip=wechat_list[6], date=wechat_list[7]).wechat_signout( ph=wechat_list[0], mm=wechat_list[1], device_token=wechat_list[2]) if mode == 'addfriends': login_wechat(deviceid=self.deviceid, port=self.port, country=None, gj_mode=self.gj_mode, wxid=wechat_list[4], login_mode=self.login_mode, cloudCode=wechat_list[5], ip=wechat_list[6], date=wechat_list[7]).smjhy( ph=wechat_list[0], mm=wechat_list[1], device_token=wechat_list[2], hy=wechat_list[3]) if mode == 'dlsys': login_wechat(deviceid=self.deviceid, port=self.port, country=None, gj_mode=self.gj_mode, wxid=wechat_list[4], login_mode=self.login_mode, cloudCode=wechat_list[5], ip=wechat_list[6], date=wechat_list[7]).login_sys( ph=wechat_list[0], mm=wechat_list[1], device_token=wechat_list[2]) #注册模式 def Registration_Mode(self, mode): with open('跳辅设置.txt'.decode('utf-8'), 'r') as f: self.tm = json.loads(f.read())['runmode'] while True: try: self.Judgment_Devices() phonenumber = self.phmode.all_getph() self.ip = self.pd_ip('1') if self.country == '2.国外'.decode("utf-8"): self.wxmc = file().readwxmc().decode("gb2312").strip('\n') if self.country == '1.国内'.decode("utf-8"): self.wxmc = file().readwxmc().strip('\n') #self.wxmc = file().readwxmc().decode("gb2312").strip('\n') self.sjmm = self.random_password_Verification() if mode == 'zc': newenvironment(self.user[3], self.user[6], self.user[9], self.deviceid, self.port, self.user[17], self.user[20], self.sjmm, self.f, self.wxmc.strip('\n'), phonenumber, self.gj_mode, self.tm, self.cooperator, country=self.country, gj=self.gj, qh=self.qh, switchingmode=self.switchingmode, filtering_mode=self.filtering_mode, t=self.t, ip=self.ip).new_zh() if mode == 'zcfpyq': newenvironment(self.user[3], self.user[6], self.user[9], self.deviceid, self.port, self.user[17], self.user[20], self.sjmm, self.f, self.wxmc.strip('\n'), phonenumber, self.gj_mode, self.tm, self.cooperator, country=self.country, gj=self.gj, qh=self.qh, switchingmode=self.switchingmode, filtering_mode=self.filtering_mode, t=self.t, ip=self.ip).new_zhpyq() if mode == 'zc_pyq_t62': newenvironment(self.user[3], self.user[6], self.user[9], self.deviceid, self.port, self.user[17], self.user[20], self.sjmm, self.f, self.wxmc.strip('\n'), phonenumber, self.gj_mode, self.tm, self.cooperator, country=self.country, gj=self.gj, qh=self.qh, switchingmode=self.switchingmode, filtering_mode=self.filtering_mode, t=self.t, ip=self.ip).zc_pyq_t62() if mode == 'gw_zc_t62_1280': newenvironment(uid=self.user[3], password=self.user[6], pid=self.user[9], deviceid=self.deviceid, port=self.port, o_username=self.user[17], o_password=self.user[20], wxmm=self.sjmm, phmode=self.f, wxmc=self.wxmc, phonenumber=phonenumber, gj_mode=self.gj_mode, tm=self.tm, cooperator=self.cooperator, country=self.country, gj=self.gj, qh=self.qh, switchingmode=self.switchingmode, filtering_mode=self.filtering_mode, t=self.t, ip=self.ip).gw_zc_t62_1280() except: logging.info(self.deviceid + u'-发现异常,重新注册') time.sleep(5) def zc(self): self.Registration_Mode('zc') def zcfpyq(self): self.Registration_Mode('zcfpyq') def zc_pyq_t62(self): self.Registration_Mode('zc_pyq_t62') def moments(self): try: self.breeding_Mode('moments') except: traceback.print_exc() logging.info(self.deviceid + u'-发现异常') def login(self): try: self.breeding_Mode('login') except: logging.info(self.deviceid + u'-登录异常') def addfriends(self): try: self.breeding_Mode('addfriends') except: traceback.print_exc() logging.info(self.deviceid + u'-发现异常,重新切换队列') def dlsys(self): try: self.breeding_Mode('dlsys') except: traceback.print_exc() logging.info(self.deviceid + u'-发现异常,重新切换队列') def delete(self): os.system('adb -s %s shell rm -rf/sdcard/Download/weiba/wx' % (self.deviceid)) logging.info(self.deviceid + u'-已删除') def gw_zc_t62_1280(self): self.Registration_Mode('gw_zc_t62_1280') def pull_sandbox_data(self): os.popen('adb -s %s pull sdcard/boxbackup/ package/%s/%s/' % (self.deviceid, self.deviceid, datetime.datetime.now().strftime('%Y%m%d'))) def cloudCode_Recover(self): try: culture_list = self.wb_mode_Verification() accounts = json.loads(WB(self.deviceid).get_accounts())['data'] with open('云码恢复列表.txt'.decode('utf-8'), 'a') as f: for i in range(0, culture_list.__len__()): #取到手机号码 self.ph = re.findall('([0-9]{11})', culture_list[i])[0] self.mm = re.findall('_(.*?) ', culture_list[i])[0] self.t = re.findall('([0-9]{4}-[0-9]{2}-[0-9]{2})', culture_list[i])[0] self.wxid = re.findall('wxid_(.*)22 ', culture_list[i])[0] for account in accounts: if self.wxid in account['strWxUUID']: logging.info(self.deviceid + u'-对比结果:' + self.ph + u'存在,提取云码') f.write('%s_%s %s %s %s %s|\n' % (self.ph, self.mm, self.deviceid, self.t, account['strWxUUID'], account['strCode'])) time.sleep(10000) except: pass
def sandbox_login(self, ph, mm): with open('跳辅设置.txt'.decode('utf-8'), 'r')as f: mode = json.loads(f.read())['transmission_mode'] os.popen('adb -s %s shell rm -rf /sdcard/boxbackup' % self.deviceid) os.popen('adb -s %s shell mkdir /sdcard/boxbackup' % self.deviceid) fsize = int( round(os.path.getsize('package/%s/%s' % (self.deviceid, self.cloudCode)) / float(1024 * 1024), 2)) - 2 with open('沙盒账密配置.json'.decode('utf-8'), 'r') as f: a = json.loads(f.read()) for i in a: if self.deviceid == i['deviceid']: username = i['username'] password = i['password'] if mode == 'ftp': with open('server_config.txt', 'r') as f: data = json.loads(f.read()) time.sleep(2) os.popen('start adb -s %s shell curl ftp://%s/package/%s/%s -o /sdcard/boxbackup/%s'%(self.deviceid,data['host'],self.deviceid,self.cloudCode,self.cloudCode)) if mode == 'adb': os.popen('start adb -s %s push package/%s/%s /sdcard/boxbackup/%s' %(self.deviceid,self.deviceid,self.cloudCode,self.cloudCode)) time.sleep(2) while True: time.sleep(3) try: sj_fsize = re.findall('([0-9]{1,3})M', os.popen('adb -s %s shell ls -lh sdcard/boxbackup/%s'%(self.deviceid,self.cloudCode)).read())[0] logging.info(u'%s-正在检查文件传输状态,请稍等' % self.deviceid) if int(sj_fsize) > int(fsize): logging.info(u'%s-文件传输完毕'% self.deviceid) break except: pass self.driver = Open().Phone('com.dobe.sandbox', '.home.Main2Activity', self.deviceid, self.port) self.driver.implicitly_wait(60) self.driver.find_element_by_id('com.dobe.sandbox:id/download_icon').click() wz = self.driver.find_element_by_id('com.dobe.sandbox:id/textView').get_attribute(('text')) while True: if wz.encode('utf-8') == '尚未登陆,点击登陆': self.driver.find_element_by_name('尚未登陆,点击登陆').click() self.driver.find_element_by_id('com.dobe.sandbox:id/editText').send_keys(username) self.driver.find_element_by_id('com.dobe.sandbox:id/editText2').send_keys(password) self.driver.keyevent('66') time.sleep(1) self.driver.find_element_by_name('点击登陆').click() if self.driver.find_elements_by_id('com.dobe.sandbox:id/download_icon') != []: break else: self.driver.keyevent('4') break self.driver.find_element_by_id('com.dobe.sandbox:id/context_menu').click() self.driver.find_element_by_name('清除APP数据').click() self.driver.find_element_by_name('确认删除').click() time.sleep(5) self.driver.find_element_by_id('com.dobe.sandbox:id/download_device').click() self.driver.find_element_by_name('备份恢复').click() while True: if self.driver.find_elements_by_id('com.dobe.sandbox:id/backup_info') != []: self.driver.find_element_by_id('com.dobe.sandbox:id/backup_info').click() self.driver.find_element_by_name('确定').click() break time.sleep(10) os.popen('adb -s %s shell am force-stop com.dobe.sandbox' % self.deviceid) time.sleep(3) os.popen('adb -s %s shell am start -n com.dobe.sandbox/.home.Main2Activity' % self.deviceid) if self.driver.find_elements_by_id('com.dobe.sandbox:id/context_menu') != []: self.driver.find_element_by_id('com.dobe.sandbox:id/appIcon').click() return ph,mm
def sand_box(self): os.popen('adb -s %s shell rm -rf /sdcard/boxbackup' % self.deviceid) with open('沙盒账密配置.json'.decode('utf-8'), 'r') as f: a = json.loads(f.read()) for i in a: if self.deviceid == i['deviceid']: username = i['username'] password = i['password'] os.popen('adb -s %s shell am force-stop com.dobe.sandbox' % self.deviceid) self.driver = Open().Phone('com.dobe.sandbox', '.home.Main2Activity', self.deviceid, self.port) self.driver.implicitly_wait(50) size = self.driver.get_window_size() self.wb = int(size.values()[0]) / 1080 self.hb = int(size.values()[1]) / 1920 self.driver.find_element_by_id('com.dobe.sandbox:id/download_icon').click() wz = self.driver.find_element_by_id('com.dobe.sandbox:id/textView').get_attribute(('text')) while True: if wz.encode('utf-8') == '尚未登陆,点击登陆': self.driver.find_element_by_name('尚未登陆,点击登陆').click() self.driver.find_element_by_id('com.dobe.sandbox:id/editText').send_keys(username) self.driver.find_element_by_id('com.dobe.sandbox:id/editText2').send_keys(password) self.driver.keyevent('66') time.sleep(1) self.driver.find_element_by_name('点击登陆').click() if self.driver.find_elements_by_id('com.dobe.sandbox:id/download_icon') != []: break else: self.driver.keyevent('4') break self.driver.find_element_by_id('com.dobe.sandbox:id/context_menu').click() self.driver.find_element_by_name('清除APP数据').click() self.driver.find_element_by_name('确认删除').click() time.sleep(5) self.driver.find_element_by_id('com.dobe.sandbox:id/download_device').click() self.driver.find_element_by_name('修改设备').click() self.driver.find_element_by_name('修改机型').click() b = 0 self.driver.implicitly_wait(2) while True: if self.driver.find_elements_by_class_name('android.widget.TextView') != []: list = self.driver.find_elements_by_class_name('android.widget.TextView') if list.__len__() > 5: self.IMEI = re.findall('IMEI: (.*)', list[2].get_attribute(("text")))[0] logging.info('%s-IMEI:%s' % (self.deviceid,self.IMEI)) self.MAC = re.findall('MAC: (.*)', list[5].get_attribute(("text")))[0] logging.info('%s-MAC:%s' % (self.deviceid, self.MAC)) self.Brand = re.findall('BRAND: (.*)', list[6].get_attribute(("text")))[0] logging.info('%s-BRAND:%s' % (self.deviceid, self.Brand)) self.driver.keyevent(4) time.sleep(1) self.driver.keyevent(4) time.sleep(2) self.driver.find_element_by_id('com.dobe.sandbox:id/appIcon').click() break else: if 30 == b: self.driver.quit() break else: b = b + 1 time.sleep(2)
class mode(): # 账号注册 def __init__(self, deviceid, port, wxmm, switchingmode ,phmode,t ,gj_mode,cooperator,country,gj,qh,login_mode,privince,filtering_mode): self.user = file().readuser() self.deviceid = deviceid self.wxmm = wxmm self.port = port self.switchingmode = switchingmode self.fm=flightmode(deviceid, port) self.v = vpn(self.deviceid,port) self.phmode = PhoneNumber(self.user[3], self.user[6], self.user[9] , self.deviceid , phmode,qh) self.f = phmode self.t = t self.gj_mode = gj_mode self.cooperator = cooperator self.country = country self.gj = gj self.qh = qh self.login_mode = login_mode self.privince=privince self.wj = wj(deviceid, port) self.filtering_mode = filtering_mode def connectbot(self): os.system('adb -s ' + self.deviceid + ' shell am force-stop org.connectbot') driver = Open().Phone('org.connectbot', '.HostListActivity', self.deviceid, self.port) driver.implicitly_wait(180) driver.find_elements_by_id('android:id/icon')[0].click() driver.implicitly_wait(2) while True: if driver.find_elements_by_id('org.connectbot:id/console_prompt_yes') != []: driver.find_element_by_id('org.connectbot:id/console_prompt_yes').click() driver.find_element_by_id('android:id/content').click() if driver.find_elements_by_id('org.connectbot:id/console_password') != []: driver.find_element_by_id('org.connectbot:id/console_password').send_keys('kk123') driver.keyevent(66) time.sleep(1) driver.keyevent(66) break time.sleep(3) def proxy(self): try: os.popen('adb -s %s shell kill -9 %s' % (self.deviceid,os.popen('adb -s %s shell "ps|grep org.proxydroid"'%self.deviceid).read().split()[1])) except: pass os.system('adb -s ' + self.deviceid + ' shell am force-stop org.proxydroid') self.driver = Open().Phone('org.proxydroid', '.ProxyDroid', self.deviceid, self.port) self.driver.implicitly_wait(180) self.driver.find_element_by_id('android:id/switch_widget').click() time.sleep(10) logging.info(self.deviceid+u'-Proxy成功连接') def pd_ip(self, m): if self.switchingmode == '1.飞行模式'.decode("utf-8"): return self.fm.flightmode(m,self.t,self.filtering_mode) if self.switchingmode == '2.VPN'.decode("utf-8"): return self.v.newvpn(m,self.t,self.filtering_mode) if self.switchingmode == '3.不换IP'.decode("utf-8"): self.ip = os.popen('adb -s %s shell curl "http://ip.cip.cc'%self.deviceid).read()[0] return self.ip if self.switchingmode == '4.私人VPN'.decode('utf-8'): return self.wj.start(m,self.t,self.filtering_mode) if self.switchingmode == '5.私人VPN2'.decode('utf-8'): os.system('adb -s ' + self.deviceid + ' shell am force-stop com.tencent.mm') ip = vps(self.deviceid).switching_VPS(m, self.filtering_mode) logging.info(self.deviceid+u'-服务器IP地址:%s'%ip) while True: try: sj_ip = os.popen('adb -s ' + self.deviceid + ' shell curl --connect-timeout 100 ip.cip.cc').read().strip('\n') logging.info(self.deviceid + u'-手机IP地址:%s' % sj_ip) if ip in sj_ip: return ip else: logging.info(self.deviceid + u'-手机IP跟服务器IP不一致') self.connectbot() self.proxy() except: self.connectbot() self.proxy() def wechat_list_Verification(self,culture_list): if culture_list == []: while True: logging.info(self.deviceid + u'-养号列表不存在该设备号数据') time.sleep(12) def run_mode(self): ye = str(token().get_balance(TokenYZ.gettoken())) return 'tm'+ye[-1] def get_wechatdata(self,culture_list): ph = re.findall('([0-9]{1,100})_', culture_list)[0] logging.info(self.deviceid + u'-获取到手机号码:' + ph) mm = re.findall('_(.*?) ', culture_list)[0] logging.info(self.deviceid + u'-获取到登录密码:' + mm) try: self.device_token = re.findall('dd_cloud:(.*)',culture_list)[0] logging.info(self.deviceid + u'-获取到多多云码:' + self.device_token) except:self.device_token = 'test' try: for i in culture_list.split(): if 'ID' in i: self.hy = i[3:] logging.info(self.deviceid + u'-获取到好友ID:' + self.hy) except:self.hy = 'test' try: self.wxid ='wxid_'+re.findall('wxid_(.*)22 ', culture_list)[0]+'22' logging.info(self.deviceid + u'-获取WXID:' + self.wxid) except: logging.info(self.deviceid + u'-未获取到WXID') self.wxid = 'test' try: for i in culture_list.split(): if 'zip' in i: self.cloudCode = i[:-1] logging.info(self.deviceid + u'-获取环境包:%s'%self.cloudCode) except: logging.info(self.deviceid + u'-未获取环境包') self.cloudCode = 'test' try: self.ip = re.findall(' ([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) ', culture_list)[0] logging.info(self.deviceid + u'-获取到注册IP:' + self.ip) except: logging.info(self.deviceid + u'-未获取到注册IP') self.ip = 'test' try: self.date = re.findall('([0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2})', culture_list)[0] logging.info(self.deviceid + u'-获取到注册日期:' + self.date) except: logging.info(self.deviceid + u'-未获取到注册日期') self.date = 'test' return ph,mm,self.device_token,self.hy,self.wxid,self.cloudCode,self.ip,self.date def Judgment_Devices(self): while True: if os.system('adb -s %s shell cd /sdcard' % self.deviceid) != 0: logging.info(u'%s未检测到手机连接'%self.deviceid) time.sleep(5) else: break #raise Exception, "%s-未连接到手机" % self.deviceid def random_password_Verification(self): if self.wxmm == '请输入注册密码'.decode("utf-8"): #while True: # keylist = ''.join([random.choice(string.digits + string.ascii_lowercase) for i in range(6)])+str(random.randint(0, 9))+'a' # if 'l' not in keylist: # if '9' in keylist: # break #self.sjmm = keylist self.sjmm = 'a'+''.join([random.choice(string.digits) for i in range(7)]) return self.sjmm else: self.sjmm = self.wxmm return self.sjmm #从养号列表获取第一条数据到微信账号数据列表去找这条数据 def wb_mode_Verification(self): support_file_name = '养号列表.txt' support_Data = file.read(support_file_name) error_file_name = '登录异常账号.txt' error_Data_List = file.read_all(error_file_name) wechat_file_name = '微信账号数据.txt' wechat_Data_List = file.read(wechat_file_name) num = [] new_data_list = [] for data in wechat_Data_List: if self.deviceid in data: new_data_list.append(data) for support in support_Data: if 'True' not in support.strip('\n'): if re.findall('(.*)\|', support)[0] not in error_Data_List: try: for self.wechat_Data in new_data_list: if re.findall('(.*)\|', support)[0] in self.wechat_Data: num.append('%s ID:%s' % (self.wechat_Data.strip('\n'), re.findall('\|(.*)', support)[0])) except: logging.info(self.deviceid+u'-正则没有匹配到该条数据:'+self.wechat_Data) if num.__len__() <> 0: logging.info(self.deviceid + u'设备找到%s个数据' % num.__len__()) return num else: logging.info(self.deviceid + u'该设备在养号列表中没有数据') time.sleep(10000) def breeding_Mode(self, mode): culture_list = self.wb_mode_Verification() for culture in culture_list: self.pd_ip('2') wechat_list = self.get_wechatdata(culture) if mode == 'moments': login_wechat(deviceid=self.deviceid, port=self.port,country=None, gj_mode=self.gj_mode, wxid=wechat_list[4], login_mode=self.login_mode, cloudCode=wechat_list[5],ip=wechat_list[6],date=wechat_list[7]).fpyq(ph=wechat_list[0],mm=wechat_list[1],device_token=wechat_list[2]) if mode == 'login': login_wechat(deviceid=self.deviceid, port=self.port, country=None,gj_mode=self.gj_mode, wxid=wechat_list[4], login_mode=self.login_mode, cloudCode=wechat_list[5],ip=wechat_list[6],date=wechat_list[7]).wechat_signout(ph=wechat_list[0],mm=wechat_list[1],device_token=wechat_list[2]) if mode == 'addfriends': login_wechat(deviceid=self.deviceid, port=self.port, country=None,gj_mode=self.gj_mode, wxid=wechat_list[4],login_mode=self.login_mode, cloudCode=wechat_list[5],ip=wechat_list[6],date=wechat_list[7]).smjhy(ph=wechat_list[0],mm=wechat_list[1],device_token=wechat_list[2], hy=wechat_list[3]) #注册模式 def Registration_Mode(self,mode): with open('跳辅设置.txt'.decode('utf-8'), 'r') as f: self.tm = json.loads(f.read())['runmode'] while True: try: self.Judgment_Devices() phonenumber = self.phmode.all_getph() self.ip = self.pd_ip('1') if self.country == '2.国外'.decode("utf-8"): self.wxmc = file().readwxmc().decode("gb2312").strip('\n') if self.country == '1.国内'.decode("utf-8"): #self.wxmc = file().readwxmc().strip('\n') self.wxmc = ''.join([random.choice(string.digits) for i in range(8)]) #self.wxmc = file().readwxmc().decode("gb2312").strip('\n') self.sjmm = self.random_password_Verification() if mode == 'zc': newenvironment(self.user[3], self.user[6], self.user[9], self.deviceid, self.port, self.user[17],self.user[20], self.sjmm, self.f, self.wxmc.strip('\n'), phonenumber, self.gj_mode,self.tm, self.cooperator, country=self.country, gj=self.gj, qh=self.qh,switchingmode=self.switchingmode,filtering_mode=self.filtering_mode,t=self.t,ip=self.ip).new_zh() if mode == 'zcfpyq': newenvironment(self.user[3], self.user[6], self.user[9], self.deviceid, self.port, self.user[17], self.user[20], self.sjmm, self.f, self.wxmc.strip('\n'), phonenumber, self.gj_mode,self.tm, self.cooperator, country=self.country, gj=self.gj, qh=self.qh,switchingmode=self.switchingmode,filtering_mode=self.filtering_mode,t=self.t,ip=self.ip).new_zhpyq() if mode == 'zc_pyq_t62': newenvironment(self.user[3], self.user[6], self.user[9], self.deviceid, self.port, self.user[17],self.user[20], self.sjmm, self.f, self.wxmc.strip('\n'), phonenumber, self.gj_mode,self.tm, self.cooperator, country=self.country, gj=self.gj, qh=self.qh,switchingmode=self.switchingmode,filtering_mode=self.filtering_mode,t=self.t,ip=self.ip).zc_pyq_t62() if mode == 'gw_zc_t62_1280': newenvironment(uid=self.user[3], password=self.user[6], pid=self.user[9], deviceid=self.deviceid,port=self.port, o_username=self.user[17], o_password=self.user[20], wxmm=self.sjmm,phmode=self.f, wxmc=self.wxmc, phonenumber=phonenumber, gj_mode=self.gj_mode,tm=self.tm, cooperator=self.cooperator, country=self.country, gj=self.gj, qh=self.qh,switchingmode=self.switchingmode,filtering_mode=self.filtering_mode,t=self.t,ip=self.ip).gw_zc_t62_1280() except: logging.info(self.deviceid + u'-发现异常,重新注册') time.sleep(5) def zc(self): self.Registration_Mode('zc') def zcfpyq(self): self.Registration_Mode('zcfpyq') def zc_pyq_t62(self): self.Registration_Mode('zc_pyq_t62') def moments(self): try: self.breeding_Mode('moments') except : traceback.print_exc() logging.info(self.deviceid+u'-发现异常') def login(self): try: self.breeding_Mode('login') except: logging.info(self.deviceid + u'-登录异常') def addfriends(self): try: self.breeding_Mode('addfriends') except: traceback.print_exc() logging.info(self.deviceid+u'-发现异常,重新切换队列') def dlsys(self): try: self.breeding_Mode('dlsys') except: traceback.print_exc() logging.info(self.deviceid+u'-发现异常,重新切换队列') def delete(self): os.system('adb -s %s shell rm -rf/sdcard/Download/weiba/wx' % (self.deviceid)) logging.info(self.deviceid + u'-已删除') def gw_zc_t62_1280(self): self.Registration_Mode('gw_zc_t62_1280') def pull_sandbox_data(self): os.popen('adb -s %s pull sdcard/boxbackup/ package/%s/%s/' % (self.deviceid, self.deviceid,datetime.datetime.now().strftime('%Y%m%d'))) def cloudCode_Recover(self): try: culture_list = self.wb_mode_Verification() accounts =json.loads(WB(self.deviceid).get_accounts())['data'] with open('云码恢复列表.txt'.decode('utf-8'),'a') as f: for i in range(0, culture_list.__len__()): #取到手机号码 self.ph=re.findall('([0-9]{11})', culture_list[i])[0] self.mm = re.findall('_(.*?) ', culture_list[i])[0] self.t = re.findall('([0-9]{4}-[0-9]{2}-[0-9]{2})', culture_list[i])[0] self.wxid = re.findall('wxid_(.*)22 ', culture_list[i])[0] for account in accounts: if self.wxid in account['strWxUUID']: logging.info(self.deviceid + u'-对比结果:' + self.ph + u'存在,提取云码') f.write('%s_%s %s %s %s %s|\n' % (self.ph, self.mm, self.deviceid, self.t, account['strWxUUID'], account['strCode'])) time.sleep(10000) except:pass