コード例 #1
0
def main():
    if len(argv) != 3:
        print "Usage: unpack_bootimage_new.py bootimage.skprx output-dir/"
        return

    with open(argv[1], "rb") as fin:
        data = fin.read()

    data = data[data.find("SceKernelBootimage") - 4:]
    base_va = 0x81000000
    off = u32(data, 0xCC) - base_va
    num = u32(data, off)

    for x in xrange(num):
        entry_off = off + 8 + 12 * x

        name_off = u32(data, entry_off) - base_va
        name = c_str(data[name_off:name_off + 0x100])
        basename = name[name.rfind("/") + 1:]
        start = u32(data, entry_off + 4) - base_va
        size = u32(data, entry_off + 8)

        print "Writing {}...".format(name)
        mod = data[start:start + size]
        with open(os.path.join(argv[2], basename), "wb") as fout:
            fout.write(mod)
コード例 #2
0
ファイル: pup_fiction.py プロジェクト: mathieulh/sceutils
def slb2_extract(src, dst):
    with open(src, "rb") as fin:
        hdr = fin.read(0x200)
        magic, version, flags, file_count, total_blocks = struct.unpack("<IIIII", hdr[0:20])
        if magic != 0x32424C53:
            raise RuntimeError("Invalid SLB2 file")
        print "SLB2 version: {}, flags: 0x{:X}, file_count: {}, total_blocks: 0x{:X}".format(version, flags, file_count, total_blocks)

        for x in range(file_count):
            entry_start = 0x20 + x * 0x30
            entry = hdr[entry_start:entry_start + 0x30]
            filename = c_str(entry[0x10:])

            block_offset, filesize = struct.unpack("<II", entry[0:8])

            with open(os.path.join(dst, filename), "wb") as fout:
                fin.seek(block_offset * 0x200)
                fout.write(fin.read(filesize))
                print "- {}".format(filename)

    print "-" * 80
コード例 #3
0
    def list_dir(self, path, recursive=False, dump_files=False, host_path="", prefix=""):
        if dump_files:
            os.mkdir(host_path)
        ret = self.fh.OpenDirectory(data_base, path, 3)
        if ret != 0:
            print "failed to open '{0}', error={1}=0x{1:x}".format(path, ret)
            return
        handle = u64(self.mem, 0)
        while True:
            self.fh.ReadDirectory(data_base, data_base + 0x200, handle, 1)
            ret = u64(self.mem, 0)
            if ret != 1:
                break

            entry = self.mem[0x200:0x200 + 0x310]
            is_file = u32(entry, 0x304) & 1
            name = c_str(entry, 0)
            print "{}{}{}".format(prefix, name, "/" if not is_file else "")
            fullpath = "{}/{}".format(path, name)
            if dump_files and is_file:
                self.dump_file(fullpath, os.path.join(host_path, name))
            if recursive and not is_file and ('emoji' not in name):
                self.list_dir(fullpath, recursive, dump_files, os.path.join(host_path, name), prefix + "-")
        self.fh.CloseDirectory(handle)
コード例 #4
0
 def handleDiscovery(self, dev, is_new_device, is_new_data):
     if dev.rssi < -128:
         return
     if not dev.connectable:
         return
     for (sdid, desc, val) in dev.getScanData():
         if sdid in [8, 9]:
             self.index += 1
             print('{index}) {val} --> [{addr}]({addr_type}) rssi: {rssi}'.
                   format(index=self.index,
                          val=c_str(val, 'CYAN'),
                          addr=dev.addr,
                          addr_type=dev.addrType,
                          rssi=dev.rssi))
             dict_dev = {
                 'index': self.index,
                 'name': val,
                 'addr': dev.addr,
                 'type_addr': dev.addrType,
                 'entry': dev
             }
             self.listDev.append(dict_dev)
     if not dev.scanData:
         print('\t(no data)')
コード例 #5
0
def main():
    global brd
    global stream
    global ff
    timeout_sc = 2
    n_dev = -1

    # Instantiate the parser
    parser = argparse.ArgumentParser(description='BV_Link_rbpi3 application')
    # Required positional argument
    parser.add_argument(
        'output_config',
        type=str,
        help='[alsa_playback] to playback directly to the speaker.'
        ' [stl_capture] to create a virtual microphone')
    parser.add_argument(
        'freq_config',
        type=int,
        help='[16000] to set 16KHz frequency.[8000] to set 8KHz frequency')
    args = parser.parse_args()
    if args.output_config != "alsa_playback" and args.output_config != "stl_capture":
        parser.error("output_config required, type -h to get more information")

    if args.freq_config != 16000 and args.freq_config != 8000:
        parser.error("freq_config required, type -h to get more information")

    # scanning phase
    sc = scr.ScanPrint()
    print(c_str("Scanning for devices...", 'RED'))
    try:
        hci0 = 0
        Scanner(hci0).withDelegate(sc).scan(timeout_sc)
    except BTLEException as e:
        print("/dev/hci0 failed with {}, try /dev/hci1".format(e))
        hci0 = 1
        Scanner(hci0).withDelegate(sc).scan(timeout_sc)
    devices = sc.devices

    if len(devices) > 0:
        print("Type the index of device to connect (eg. " +
              str(devices[0].get('index')) + " for " + devices[0].get('name') +
              " device)...")
    else:
        print("no device found")
        exit()
    try:
        n_dev = int(input('Input:'))
    except ValueError:
        print(" Not a number")
        exit()

    if (n_dev in range(1, len(devices) + 1)) and n_dev > 0:
        print("Valid device")
    else:
        print(" Not valid device")
        exit()

    # connection
    device = devices[n_dev - 1]
    print('Connecting to {name}...', device.get('name'))
    brd = stl.Node(device.get('addr'), device.get('type_addr'))
    print("Connected")

    brd.syncAudio.enable()
    brd.syncAudio.enableNotification()

    brd.mAudio.enable()
    brd.mAudio.setSyncManager(brd.syncAudio)
    brd.mAudio.enableNotification()

    init_audio(args.output_config, args.freq_config)

    getter = Thread(target=audio_getter)
    getter.start()
    player = Thread(target=audio_player)
    player.start()
    print('double tap on SensorTile device (for BVLINK1 FW only) ')
    print('push SW2 button on BlueCoin device (for BVLINK1 FW only) ')
    print('Start_stream... ')
    print('Press Ctrl+C to exit')

    stream.start()
    signal.signal(signal.SIGINT, signal_handler)
    while True:
        if not do_process:
            break
        try:
            brd.waitForNotifications(1.0)
        except Exception as e:
            pass

    del brd
コード例 #6
0
ファイル: core.py プロジェクト: isage/vita-parse-core
 def __init__(self, data):
     self.uid = u32(data, 4)
     self.num_segs = u32(data, 0x4C)
     self.name = c_str(data, 0x24)
コード例 #7
0
ファイル: core.py プロジェクト: isage/vita-parse-core
 def __init__(self, data):
     self.uid = u32(data, 4)
     self.name = c_str(data, 8)
     self.stop_reason = u32(data, 0x74)
     self.status = u16(data, 0x30)
     self.pc = u32(data, 0x9C)
コード例 #8
0
from Scanner import ScanPrint as ScanPrintDelegate

from bluepy.btle import Scanner
from util import c_str

scanner = Scanner().withDelegate(ScanPrintDelegate())
devices = scanner.scan(3)
for dev in devices:
    print(c_str('asdf', 'CYAN'),
          "Device %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi))
    for (adtype, desc, value) in dev.getScanData():
        print("  (ad: %s)%s = %s" % (adtype, desc, value))