def handle(msg): try: info('handle', str(msg)) #if msg.get_base_name() != base_name: # return if(msg.get_topic() != self.get_topic()): return name = msg.get_name() if name == 'AUTH': print('allow', name, str(msg)) lora.send_allow(msg.get_value()) elif name == 'UNAUTH': print('deny', name, str(msg)) lora.send_deny(msg.get_value()) elif name == 'LOCK': print('lock', name, str(msg)) lora.send_lock() elif name == 'STATUS': print('status', name, str(msg)) lora.send_status() elif name == 'UNLOCK': print('unlock', name, str(msg)) lora.send_unlock() except Exception as ex: error('handle', str(ex))
def setup(): print('Program is starting ... ') print('Press Ctrl-C to exit.') lora.init() #boxNum = box #print('Mailbox Number: ' boxNum) info('send', 'STATUS') packet = bytearray(config.OP_STATUS_SIZE) packet[0] = config.OP_STATUS packet[1:9] = crypto.get_checksum(packet) packet[9] = 1 packet[10] = 1 packet[11] = 1 packet[12] = 1 i = 0 for x in os.environ['GATE_PUB_KEYS'].split(','): if i == 0: i += 1 else: lora.send(packet, i) info('send', 'ACK {}'.format(lora.packet_str(packet))) i += 1
def handle_mailbox(msg): print('in here............') try: info('handle', str(msg)) name = msg.get_name() print(name) if name == 'ADD': boxinfo = msg.get_str() print(boxinfo) if self.mailbox_exists(boxinfo): print('mailbox_exists') return #boxinfo[0] = Pub_Key s = open('.env').read() s = s.replace("GATE_PUB_KEYS="+os.environ['GATE_PUB_KEYS'], "GATE_PUB_KEYS="+os.environ['GATE_PUB_KEYS']+','+boxinfo) #s = s.replace("KIT_CHANNEL="+os.environ['KIT_CHANNEL'], "KIT_CHANNEL="+os.environ['KIT_CHANNEL']+','+self.get_box_channel(boxNum)) f = open('.env', 'w') f.write(s) f.close() #look up activate to get mailbox channel self.get_env() print('added', name, str(msg)) except Exception as ex: error('handle', str(ex))
def run(self): logger.info('IMEI = %s' % self.imei) logger.info('SOURCEIPA = %s' % self.sourceipa) logger.info('DEVELOPER = %s' % self.developer) logger.info('MOBILEPROV = %s' % self.mobileprov) logger.info('TARGET = %s' % self.target) '''创建解压后的文件夹''' if os.path.exists(self.extracted): shutil.rmtree(self.extracted) os.makedirs(self.extracted) '''unlock''' ''' self.unlock() ''' '''解压ipa文件''' self.unzip() '''复制mobileprov文件''' self.copy_mobileprov() '''生成plist文件''' self.generate_plist() '''签名''' self.sign() '''压缩''' self.zip() '''清理工程''' self.clean()
def copy_mobileprov(self): ''' 复制mobileprovision文件 ''' for filename in os.listdir(self.extracted + '/Payload/'): f = os.path.splitext(self.extracted + '/Payload/' + filename) if len(f) != 2 or f[1] != '.app': continue '''设置解压后的.app文件夹路径''' self.payload_app_dir = self.extracted + '/Payload/' + filename self.mobileprov_to_dir = self.payload_app_dir + '/embedded.mobileprovision' cmdstring = 'cp %s %s' % (self.mobileprov, self.mobileprov_to_dir) logger.info(cmdstring) shell.execute(cmdstring)
def generate_plist(self): self.full_plist_file = self.extracted + '/t_entitlements_full.plist' self.plist_file = self.extracted + '/t_entitlements.plist' ''' here need to config linux for user execute as root with no password ''' cmdstring = 'sudo security cms -D -i %s > %s' % ( self.mobileprov_to_dir, self.full_plist_file) logger.info(cmdstring) shell.execute(cmdstring, shell=True) cmdstring = '/usr/libexec/PlistBuddy -x -c "Print:Entitlements" %s > %s' % ( self.full_plist_file, self.plist_file) logger.info(cmdstring) shell.execute(cmdstring, shell=True)
def setup(box): print('Program is starting ... ') print('Press Ctrl-C to exit.') lora.init() print('Mailbox Number: ' + str(box)) info('send', 'STATUS') packet = bytearray(config.OP_STATUS_SIZE) packet[0] = config.OP_STATUS packet[1:9] = crypto.get_checksum(packet) packet[9] = 1 packet[10] = 1 packet[11] = 1 packet[12] = 1 lora.send(packet) info('send', 'ACK {}'.format(lora.packet_str(packet)))
def sign(self): for parent, dirnames, filenames in os.walk(self.payload_app_dir): for dirname in dirnames: # 循环所有文件夹 d = os.path.splitext(parent + '/' + dirname) if len(d) != 2: continue if d[1] != '.app' and d[1] != '.appex' and d[ 1] != '.framework' and d[1] != '.dylib': continue cmdstring = '/usr/bin/codesign --continue -f -s "%s" --entitlements %s %s' % ( self.developer, self.plist_file, parent + '/' + dirname) logger.info(cmdstring) shell.execute(cmdstring, shell=True) '''签名app''' cmdstring = '/usr/bin/codesign --continue -f -s "%s" --entitlements %s %s' % ( self.developer, self.plist_file, self.payload_app_dir) logger.info(cmdstring) shell.execute(cmdstring, shell=True) os.remove(self.extracted + '/t_entitlements_full.plist') os.remove(self.extracted + '/t_entitlements.plist')
def handle(msg): def check_topic(topic): i = 0 for x in os.environ['KIT_CHANNEL'].split(','): if i != 0 and x == topic.split('/')[1]: print ('xKey: ' + x + ' BoxNum: ' + str(i)) return i i+=1 return -1 try: info('handle', str(msg)) #if msg.get_base_name() != base_name: # return boxNum = check_topic(msg.get_topic()) if(boxNum == -1): return name = msg.get_name() if name == 'AUTH': print('allow', name, str(msg)) lora.send_allow(boxNum, msg.get_value()) elif name == 'UNAUTH': print('deny', name, str(msg)) lora.send_deny(boxNum, msg.get_value()) elif name == 'LOCK': print('lock', name, str(msg)) lora.send_lock(boxNum) elif name == 'STATUS': print('status', name, str(msg)) lora.send_status(boxNum) elif name == 'UNLOCK': print('unlock', name, str(msg)) lora.send_unlock(boxNum) except Exception as ex: error('handle', str(ex))
def loop(): try: packet = lora.recv() if not packet: return info('loop', 'recv packet {}'.format(lora.packet_str(packet))) base_name = '{}_'.format(get_channel()) data = [] op = packet[0] size = len(packet) if op == config.OP_ACK: data.append({'bn': base_name, 'n': 'Flag', 'u': 'Flag', 'v': packet[9]}) data.append({'n': 'Lock', 'u': 'Lock', 'v': packet[10]}) data.append({'n': 'Package', 'u': 'Package', 'v': packet[11]}) data.append({'n': 'Power', 'u': 'Power', 'v': packet[12]}) data.append({'n': 'Error', 'u': 'Error', 'v': packet[13]}) box_checksum = packet[1:9] info('loop', 'box checksum {}'.format(lora.packet_str(box_checksum))) elif op == config.OP_CONNECT: data.append({'bn': base_name, 'n': 'Flag', 'u': 'Flag', 'v': packet[0]}) data.append({'n': 'Lock', 'u': 'Lock', 'v': packet[1]}) data.append({'n': 'Package', 'u': 'Package', 'v': packet[2]}) data.append({'n': 'Power', 'u': 'Power', 'v': packet[3]}) data.append({'n': 'Error', 'u': 'Error', 'v': packet[4]}) box_key = packet[5:] info('loop', 'box key {}'.format(lora.packet_str(box_key))) elif op == config.OP_STATUS: data.append({'bn': base_name, 'n': 'Flag', 'u': 'Flag', 'v': packet[9]}) data.append({'n': 'Lock', 'u': 'Lock', 'v': packet[10]}) data.append({'n': 'Package', 'u': 'Package', 'v': packet[11]}) data.append({'n': 'Power', 'u': 'Power', 'v': packet[12]}) box_checksum = packet[1:9] info('loop', 'box checksum {}'.format(lora.packet_str(box_checksum))) else: raise Exception('invalid OP packet {}'.format(op)) if len(data) > 1: info('send', 'ACK') packet = bytearray(config.OP_ACK_SIZE) packet[0] = config.OP_ACK packet[1:9] = crypto.get_checksum(packet) packet[9] = 1 packet[10] = 1 packet[11] = 1 packet[12] = 100 packet[13] = config.E_OK lora.send(packet) info('send', 'ACK {}'.format(lora.packet_str(packet))) msg = Message(get_topic(), data) info('loop', 'message {}'.format(msg)) publish(msg) except Exception as ex: error('loop', str(ex)) finally: time.sleep(0)
def unzip(self): cmdstring = 'unzip -qo %s -d %s' % (self.sourceipa, self.extracted) logger.info(cmdstring) shell.execute(cmdstring)
def unlock(self): cmdstring = 'sudo security unlock-keychain -p "password"' logger.info(cmdstring) shell.execute(cmdstring, shell=True)
def clean(self): logger.info('clean temp') shutil.rmtree(self.extracted)
def zip(self): cmdstring = 'cd %s && ' % self.extracted cmdstring += 'zip -qry %s *' % (self.target) logger.info(cmdstring) shell.execute(cmdstring, shell=True)
def signal_handler(sig, frame): info('main', 'sigint') controller.stop() time.sleep(1) print 'Goodbye.' sys.exit(0)