예제 #1
0
class SauceNAO_N_Ui(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(SauceNAO_N_Ui, self).__init__(parent)
        self.setupUi(self)

        self.pic_listWidget.doubleClicked.connect(self.read_data)
        self.result_listWidget.clicked.connect(self.show_data)

        self.db = SDB()

        self.res_list = []
        self.index_list = self.db.read_index()

        for i in self.index_list:
            self.pic_listWidget.addItem(QListWidgetItem(i[0]))

    def read_data(self, index):
        # QModelIndex()
        # print(index.data())
        res = self.db.read({'source': index.data()})
        # 第一个结果第二列
        self.res_list = json2dict(res[0][1])
        for res in self.res_list:
            self.result_listWidget.addItem(QListWidgetItem(res['name']))

    def show_data(self, index):
        for res in self.res_list:
            if res['name'] == index.data():
                self.pic_textEdit.setText(res['content'])
                f = str2pic(res['data'])
                img = ImageQt.ImageQt(Image.open(f))
                pix = QPixmap().fromImage(img)
                self.pic_label.setPixmap(pix)
                break
예제 #2
0
def _main(sdb_path, patch_name):
    from sdb import SDB
    with open(sdb_path, "rb") as f:
        buf = f.read()

    g_logger.debug("loading database")
    s = SDB()
    s.vsParse(bytearray(buf))
    g_logger.debug("done loading database")

    index = SdbIndex()
    g_logger.debug("indexing strings")
    index.index_sdb(s)
    g_logger.debug("done indexing strings")

    library = item_get_child(s.database_root, SDB_TAGS.TAG_LIBRARY)

    for shim_ref in item_get_children(library, SDB_TAGS.TAG_SHIM_REF):
        patch = item_get_child(shim_ref, SDB_TAGS.TAG_PATCH)
        name_ref = item_get_child(patch, SDB_TAGS.TAG_NAME)
        name = index.get_string(name_ref.value.reference)
        bits = item_get_child(patch, SDB_TAGS.TAG_PATCH_BITS)

        if name == patch_name:
            ps = GreedyVArray(sdb.PATCHBITS)
            ps.vsParse(bits.value.value)

            for i, _ in ps:
                p = ps[int(i)]
                print(p.tree())
                print("  disassembly:")
                for l in disassemble(str(p.pattern), p.rva):
                    print("    " + l)
                print("")
예제 #3
0
def read():
    # 打开数据库
    db = SDB()
    data_str = db.read_all()
    # print(data_str[0][1])
    dict = json2dict(data_str[0][1])
    for i in dict:
        print(i['img'])
        f = str2pic(i['data'])
예제 #4
0
def main(sdb_path):
    from sdb import SDB
    with open(sdb_path, "rb") as f:
        buf = f.read()

    s = SDB()
    s.vsParse(buf)

    for l in dump(s):
        sys.stdout.write(l.encode("utf-8"))
        sys.stdout.write("\n")
예제 #5
0
def _main(sdb_path):
    from sdb import SDB
    with open(sdb_path, "rb") as f:
        buf = f.read()

    s = SDB()
    s.vsParse(bytearray(buf))

    for l in dump(s):
        sys.stdout.write(l.encode("utf-8"))
        sys.stdout.write("\n")
예제 #6
0
def main(sdb_path):
    from sdb import SDB

    with open(sdb_path, "rb") as f:
        buf = f.read()

    s = SDB()
    s.vsParse(bytearray(buf))

    for l in dump(s):
        sys.stdout.write(l)
        sys.stdout.write("\n")
예제 #7
0
def _main(sdb_path):
    from sdb import SDB

    with open(sdb_path, "rb") as f:
        buf = f.read()

    s = SDB()
    s.vsParse(bytearray(buf))

    d = SdbDatabaseDumper(s)
    for l in d.dump():
        sys.stdout.write(l.encode("utf-8"))
        sys.stdout.write("\n")
예제 #8
0
    def __init__(self, parent=None):
        super(SauceNAO_N_Ui, self).__init__(parent)
        self.setupUi(self)

        self.pic_listWidget.doubleClicked.connect(self.read_data)
        self.result_listWidget.clicked.connect(self.show_data)

        self.db = SDB()

        self.res_list = []
        self.index_list = self.db.read_index()

        for i in self.index_list:
            self.pic_listWidget.addItem(QListWidgetItem(i[0]))
예제 #9
0
def _main(sdb_path):
    from sdb import SDB
    with open(sdb_path, "rb") as f:
        buf = f.read()

    g_logger.debug("loading database")
    s = SDB()
    s.vsParse(bytearray(buf))
    g_logger.debug("done loading database")

    d = SdbInfoDumper(s)
    for l in d.dump_info():
        sys.stdout.write(l.encode("utf-8"))
        sys.stdout.write("\n")
예제 #10
0
def _main(sdb_path):
    from sdb import SDB
    with open(sdb_path, "rb") as f:
        buf = f.read()

    g_logger.debug("loading database")
    s = SDB()
    s.vsParse(bytearray(buf))
    g_logger.debug("done loading database")

    d = SdbInfoDumper(s)
    for l in d.dump_info():
        sys.stdout.write(l.encode("utf-8"))
        sys.stdout.write("\n")
예제 #11
0
def _main(sdb_path):
    from sdb import SDB
    with open(sdb_path, "rb") as f:
        buf = f.read()

    s = SDB()
    try:
        s.vsParse(bytearray(buf))
    except sdb.InvalidSDBFileError:
        g_logger.error("not an SDB file: %s" % (sdb_path))
        return -1

    d = SdbShimDumper(s)
    for l in d.dump_database():
        sys.stdout.write(l.encode("utf-8"))
        sys.stdout.write("\n")
예제 #12
0
def _main(sdb_path):
    from sdb import SDB
    with open(sdb_path, "rb") as f:
        buf = f.read()

    s = SDB()
    try:
        s.vsParse(bytearray(buf))
    except sdb.InvalidSDBFileError:
        g_logger.error("not an SDB file: %s" % (sdb_path))
        return -1

    d = SdbShimDumper(s)
    for l in d.dump_database():
        sys.stdout.write(l.encode("utf-8"))
        sys.stdout.write("\n")
예제 #13
0
def run():
    # 读取目录图片
    # pic_list = read_pics('.')
    pic_list = [os.path.basename(PIC)]
    # 打开数据库
    db = SDB()
    # 初始化浏览器
    chrome = init_chrome()
    # 搜索图片
    result_dic = search_pic(chrome, pic_list[0])
    # 下载搜图结果图片,并转成字符串保存
    download_img(result_dic)
    # 将部分数据转字符串
    result_dic['results'] = dict2json(result_dic['results'])
    # 写入数据库
    db.add(result_dic)
    # 查看数据
    print(db.read_all())
예제 #14
0
def _main(sdb_path, patch_name):
    from sdb import SDB
    with open(sdb_path, "rb") as f:
        buf = f.read()

    g_logger.debug("loading database")
    s = SDB()
    s.vsParse(bytearray(buf))
    g_logger.debug("done loading database")

    index = SdbIndex()
    g_logger.debug("indexing strings")
    index.index_sdb(s)
    g_logger.debug("done indexing strings")

    try:
        library = item_get_child(s.database_root, SDB_TAGS.TAG_LIBRARY)
    except KeyError:
        pass
    else:
        for shim_ref in item_get_children(library, SDB_TAGS.TAG_SHIM_REF):
            patch = item_get_child(shim_ref, SDB_TAGS.TAG_PATCH)
            name_ref = item_get_child(patch, SDB_TAGS.TAG_NAME)
            name = index.get_string(name_ref.value.reference)
            if name != patch_name:
                continue

            bits = item_get_child(patch, SDB_TAGS.TAG_PATCH_BITS)
            dump_patch(bits, arch=ARCH_32)

    try:
        patch = item_get_child(s.database_root, SDB_TAGS.TAG_PATCH)
    except KeyError:
        pass
    else:
        name_ref = item_get_child(patch, SDB_TAGS.TAG_NAME)
        name = index.get_string(name_ref.value.reference)

        if name == patch_name:
            bits = item_get_child(patch, SDB_TAGS.TAG_PATCH_BITS)
            dump_patch(bits, arch=ARCH_32)
예제 #15
0
    def _parse_rom_element(self, element_buffer, debug = False):
        sdb = SDB()
        sdb.parse_rom_element(element_buffer, debug)
        if sdb.is_interconnect():
            if debug: print "Interconnect: %s" % sdb.d["SDB_NAME"]
            if debug: print "\tNumber of Elements: %d" % sdb.get_number_of_records_as_int()

        elif sdb.is_device():
            if debug: print "Device: %s" % sdb.d["SDB_NAME"]

        elif sdb.is_bridge():
            if debug: print "Bridge: %s" % sdb.d["SDB_NAME"]

        if debug: print "\t0x%016X - 0x%016X: Size: 0x%016X" % (sdb.get_start_address_as_int(), \
                                                                sdb.get_end_address_as_int(), \
                                                                sdb.get_size_as_int())