Commit 9a7bb5d1 authored by Devon Kearns's avatar Devon Kearns

Imported Upstream version 2.0

parents
# iPBD2 - iPhone Backup Decoder and Analyzer
(C)opyright 2013 Mario Piccinelli <mario.piccinelli@gmail.com>
Released under [MIT licence](http://en.wikipedia.org/wiki/MIT_License)
This software allows the user to browse through the content of an iPhone/iPad backup made by iTunes (or other software able to perform iOS devices' backup). The software is packed with all the routines needed to understand and show the content of files found.
IPBA2 parses the backup directory and shows the decoded filesystem tree. Each file can be clicked to see its properties, such as:
* Real name and name in the backup directory
* File UNIX permissions
* Data hash (as calculated by iOS)
* User and group ID
* Modify time, access time, creation time
* File type (from magic numbers)
Some builtin viewer allow to browse through known file formats (right click on the files in the tree to show a contextual menu):
* ASCII viewer
* PLIST structure browser (both plain and binary ones)
* SQLITE browser
* HEX viewer
The software provides a plugin system to create views showing specific data from the backup. Currently available views:
* Call history
# Development
Requires:
* Tested on Python 2.7 on Windows 7.
* Python Imaging Library (PIL).
* Pyside
* QT
# Plugins
The plugins system provides an easy way to program additional views to extract and present specific data to the end user. The plugins must adhere to the following standards, and they will be loaded automatically and presented to the user in a menu on the main UI.
The rules are:
* The plugin files are written in python (well, of course :-) )
* The plugin files are placed in the "ipba2-plugins" folder
* The plugin is a single .py file (altought can refer to other files placed in the same directory, if you want).
* The plugin's file name must start with "plg_", such as "plg_test.py"
* The plugin must contain a main method with two parameters, which will be respectively the cursor to the memory database which stores the backup structure and the full path to the backup directory. Something like: "def main(cursor, path):"
* The plugin UI is built in PySide.
* The aforementioned main method MUST return the interface of the plugin as a QtGui.QWidget instance (or a subclass of it).
* The plugin MUST NOT modify the database in any way. Just SELECT statements.
* The plugin MUST adhere to good forensics standards, i.e. no files alteration and so on.
* If you are in doubt, check preexisting plugins.
# Database structure
The core element in iPBA2 is a SQLITE3 database stored in RAM containing the description of the whole backup directory, as acquired during archive parsing during software startup. The database contains a table called "indice", described below.
CREATE TABLE indice (
id INTEGER PRIMARY KEY AUTOINCREMENT,
type VARCHAR(1),
permissions VARCHAR(9),
userid VARCHAR(8),
groupid VARCHAR(8),
filelen INT,
mtime INT,
atime INT,
ctime INT,
fileid VARCHAR(50),
domain_type VARCHAR(100),
domain VARCHAR(100),
file_path VARCHAR(100),
file_name VARCHAR(100),
link_target VARCHAR(100),
datahash VARCHAR(100),
flag VARCHAR(100)
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'about_window.ui'
#
# Created: Tue Feb 19 10:20:21 2013
# by: pyside-uic 0.2.14 running on PySide 1.1.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_AboutWindow(object):
def setupUi(self, AboutWindow):
AboutWindow.setObjectName("AboutWindow")
AboutWindow.resize(393, 359)
self.verticalLayout = QtGui.QVBoxLayout(AboutWindow)
self.verticalLayout.setObjectName("verticalLayout")
self.about_title = QtGui.QLabel(AboutWindow)
font = QtGui.QFont()
font.setPointSize(14)
font.setWeight(75)
font.setBold(True)
self.about_title.setFont(font)
self.about_title.setTextFormat(QtCore.Qt.RichText)
self.about_title.setObjectName("about_title")
self.verticalLayout.addWidget(self.about_title)
self.label = QtGui.QLabel(AboutWindow)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.about_version = QtGui.QLabel(AboutWindow)
self.about_version.setObjectName("about_version")
self.verticalLayout.addWidget(self.about_version)
self.label_2 = QtGui.QLabel(AboutWindow)
self.label_2.setObjectName("label_2")
self.verticalLayout.addWidget(self.label_2)
self.label_3 = QtGui.QLabel(AboutWindow)
self.label_3.setObjectName("label_3")
self.verticalLayout.addWidget(self.label_3)
self.plainTextEdit = QtGui.QPlainTextEdit(AboutWindow)
self.plainTextEdit.setObjectName("plainTextEdit")
self.verticalLayout.addWidget(self.plainTextEdit)
self.label_4 = QtGui.QLabel(AboutWindow)
self.label_4.setTextFormat(QtCore.Qt.RichText)
self.label_4.setObjectName("label_4")
self.verticalLayout.addWidget(self.label_4)
self.retranslateUi(AboutWindow)
QtCore.QMetaObject.connectSlotsByName(AboutWindow)
def retranslateUi(self, AboutWindow):
AboutWindow.setWindowTitle(QtGui.QApplication.translate("AboutWindow", "About iPBA2", None, QtGui.QApplication.UnicodeUTF8))
self.about_title.setText(QtGui.QApplication.translate("AboutWindow", "iP Backup Analyzer 2", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("AboutWindow", "Open Source tool for iOS backup data analysis", None, QtGui.QApplication.UnicodeUTF8))
self.about_version.setText(QtGui.QApplication.translate("AboutWindow", "Version:", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("AboutWindow", "<html><head/><body><p>Copyright (C) 2013 Mario Piccinelli &lt;<a href=\"mailto:mario.piccinelli@gmail.com\"><span style=\" text-decoration: underline; color:#0000ff;\">mario.piccinelli@gmail.com</span></a>&gt;</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate("AboutWindow", "Released under MIT License:", None, QtGui.QApplication.UnicodeUTF8))
self.plainTextEdit.setPlainText(QtGui.QApplication.translate("AboutWindow", "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n"
"\n"
"The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n"
"\n"
"THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", None, QtGui.QApplication.UnicodeUTF8))
self.label_4.setText(QtGui.QApplication.translate("AboutWindow", "<html><head/><body><p>see: <a href=\"http://www.ipbackupanalyzer.com\"><span style=\" text-decoration: underline; color:#0000ff;\">http://www.ipbackupanalyzer.com</span></a></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
This diff is collapsed.
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'hex_widget.ui'
#
# Created: Tue Feb 19 10:20:21 2013
# by: pyside-uic 0.2.14 running on PySide 1.1.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_HexWidget(object):
def setupUi(self, HexWidget):
HexWidget.setObjectName("HexWidget")
HexWidget.resize(380, 440)
self.verticalLayout = QtGui.QVBoxLayout(HexWidget)
self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout = QtGui.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.buttonLeft = QtGui.QPushButton(HexWidget)
self.buttonLeft.setObjectName("buttonLeft")
self.gridLayout.addWidget(self.buttonLeft, 0, 2, 1, 1)
self.buttonRight = QtGui.QPushButton(HexWidget)
self.buttonRight.setObjectName("buttonRight")
self.gridLayout.addWidget(self.buttonRight, 0, 3, 1, 1)
self.buttonTop = QtGui.QPushButton(HexWidget)
self.buttonTop.setObjectName("buttonTop")
self.gridLayout.addWidget(self.buttonTop, 0, 1, 1, 1)
spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem, 0, 0, 1, 1)
spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 0, 4, 1, 1)
self.verticalLayout.addLayout(self.gridLayout)
self.hexTable = QtGui.QTableWidget(HexWidget)
self.hexTable.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.hexTable.setRowCount(10)
self.hexTable.setColumnCount(17)
self.hexTable.setObjectName("hexTable")
self.hexTable.setColumnCount(17)
self.hexTable.setRowCount(10)
self.verticalLayout.addWidget(self.hexTable)
self.retranslateUi(HexWidget)
QtCore.QMetaObject.connectSlotsByName(HexWidget)
def retranslateUi(self, HexWidget):
HexWidget.setWindowTitle(QtGui.QApplication.translate("HexWidget", "Hex Viewer", None, QtGui.QApplication.UnicodeUTF8))
self.buttonLeft.setText(QtGui.QApplication.translate("HexWidget", "<", None, QtGui.QApplication.UnicodeUTF8))
self.buttonRight.setText(QtGui.QApplication.translate("HexWidget", ">", None, QtGui.QApplication.UnicodeUTF8))
self.buttonTop.setText(QtGui.QApplication.translate("HexWidget", "<<", None, QtGui.QApplication.UnicodeUTF8))
This diff is collapsed.
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'image_widget.ui'
#
# Created: Tue Feb 19 10:20:21 2013
# by: pyside-uic 0.2.14 running on PySide 1.1.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_ImageWidget(object):
def setupUi(self, ImageWidget):
ImageWidget.setObjectName("ImageWidget")
ImageWidget.resize(418, 368)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(ImageWidget.sizePolicy().hasHeightForWidth())
ImageWidget.setSizePolicy(sizePolicy)
self.horizontalLayout_3 = QtGui.QHBoxLayout(ImageWidget)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.toolBox = QtGui.QToolBox(ImageWidget)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.toolBox.sizePolicy().hasHeightForWidth())
self.toolBox.setSizePolicy(sizePolicy)
self.toolBox.setMinimumSize(QtCore.QSize(0, 0))
self.toolBox.setBaseSize(QtCore.QSize(0, 0))
self.toolBox.setObjectName("toolBox")
self.page1 = QtGui.QWidget()
self.page1.setGeometry(QtCore.QRect(0, 0, 400, 296))
self.page1.setObjectName("page1")
self.horizontalLayout = QtGui.QHBoxLayout(self.page1)
self.horizontalLayout.setObjectName("horizontalLayout")
self.imageLabel = QtGui.QLabel(self.page1)
self.imageLabel.setText("")
self.imageLabel.setObjectName("imageLabel")
self.horizontalLayout.addWidget(self.imageLabel)
self.toolBox.addItem(self.page1, "")
self.page_2 = QtGui.QWidget()
self.page_2.setGeometry(QtCore.QRect(0, 0, 400, 296))
self.page_2.setObjectName("page_2")
self.horizontalLayout_2 = QtGui.QHBoxLayout(self.page_2)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.exifTable = QtGui.QTableWidget(self.page_2)
self.exifTable.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.exifTable.setAlternatingRowColors(True)
self.exifTable.setHorizontalScrollMode(QtGui.QAbstractItemView.ScrollPerPixel)
self.exifTable.setRowCount(0)
self.exifTable.setColumnCount(3)
self.exifTable.setObjectName("exifTable")
self.exifTable.setColumnCount(3)
self.exifTable.setRowCount(0)
item = QtGui.QTableWidgetItem()
self.exifTable.setHorizontalHeaderItem(0, item)
item = QtGui.QTableWidgetItem()
self.exifTable.setHorizontalHeaderItem(1, item)
item = QtGui.QTableWidgetItem()
self.exifTable.setHorizontalHeaderItem(2, item)
self.horizontalLayout_2.addWidget(self.exifTable)
self.toolBox.addItem(self.page_2, "")
self.horizontalLayout_3.addWidget(self.toolBox)
self.retranslateUi(ImageWidget)
self.toolBox.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(ImageWidget)
def retranslateUi(self, ImageWidget):
ImageWidget.setWindowTitle(QtGui.QApplication.translate("ImageWidget", "Image Viewer", None, QtGui.QApplication.UnicodeUTF8))
self.toolBox.setItemText(self.toolBox.indexOf(self.page1), QtGui.QApplication.translate("ImageWidget", "Image Preview", None, QtGui.QApplication.UnicodeUTF8))
self.exifTable.horizontalHeaderItem(0).setText(QtGui.QApplication.translate("ImageWidget", "Tag", None, QtGui.QApplication.UnicodeUTF8))
self.exifTable.horizontalHeaderItem(1).setText(QtGui.QApplication.translate("ImageWidget", "Descr", None, QtGui.QApplication.UnicodeUTF8))
self.exifTable.horizontalHeaderItem(2).setText(QtGui.QApplication.translate("ImageWidget", "Value", None, QtGui.QApplication.UnicodeUTF8))
self.toolBox.setItemText(self.toolBox.indexOf(self.page_2), QtGui.QApplication.translate("ImageWidget", "EXIF data", None, QtGui.QApplication.UnicodeUTF8))
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'addressbook_ui.ui'
#
# Created: Thu Feb 21 12:01:58 2013
# by: pyside-uic 0.2.14 running on PySide 1.1.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_AddressBook(object):
def setupUi(self, AddressBook):
AddressBook.setObjectName("AddressBook")
AddressBook.resize(664, 460)
self.horizontalLayout_2 = QtGui.QHBoxLayout(AddressBook)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.verticalLayout_2 = QtGui.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtGui.QLabel(AddressBook)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.searchLabel = QtGui.QLineEdit(AddressBook)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.searchLabel.sizePolicy().hasHeightForWidth())
self.searchLabel.setSizePolicy(sizePolicy)
self.searchLabel.setObjectName("searchLabel")
self.horizontalLayout.addWidget(self.searchLabel)
self.pushButton = QtGui.QPushButton(AddressBook)
self.pushButton.setMaximumSize(QtCore.QSize(20, 16777215))
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.verticalLayout_2.addLayout(self.horizontalLayout)
self.contactsTree = QtGui.QTreeWidget(AddressBook)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(1)
sizePolicy.setHeightForWidth(self.contactsTree.sizePolicy().hasHeightForWidth())
self.contactsTree.setSizePolicy(sizePolicy)
self.contactsTree.setObjectName("contactsTree")
self.verticalLayout_2.addWidget(self.contactsTree)
self.horizontalLayout_2.addLayout(self.verticalLayout_2)
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.contactsTable = QtGui.QTableWidget(AddressBook)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.contactsTable.sizePolicy().hasHeightForWidth())
self.contactsTable.setSizePolicy(sizePolicy)
self.contactsTable.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.contactsTable.setHorizontalScrollMode(QtGui.QAbstractItemView.ScrollPerPixel)
self.contactsTable.setRowCount(0)
self.contactsTable.setColumnCount(2)
self.contactsTable.setObjectName("contactsTable")
self.contactsTable.setColumnCount(2)
self.contactsTable.setRowCount(0)
item = QtGui.QTableWidgetItem()
self.contactsTable.setHorizontalHeaderItem(0, item)
item = QtGui.QTableWidgetItem()
self.contactsTable.setHorizontalHeaderItem(1, item)
self.contactsTable.horizontalHeader().setStretchLastSection(True)
self.contactsTable.verticalHeader().setVisible(False)
self.verticalLayout.addWidget(self.contactsTable)
self.imageLabel = QtGui.QLabel(AddressBook)
self.imageLabel.setFrameShape(QtGui.QFrame.Box)
self.imageLabel.setFrameShadow(QtGui.QFrame.Raised)
self.imageLabel.setText("")
self.imageLabel.setAlignment(QtCore.Qt.AlignCenter)
self.imageLabel.setMargin(1)
self.imageLabel.setObjectName("imageLabel")
self.verticalLayout.addWidget(self.imageLabel)
self.horizontalLayout_2.addLayout(self.verticalLayout)
self.horizontalLayout_2.setStretch(1, 1)
self.retranslateUi(AddressBook)
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.searchLabel.clear)
QtCore.QMetaObject.connectSlotsByName(AddressBook)
def retranslateUi(self, AddressBook):
AddressBook.setWindowTitle(QtGui.QApplication.translate("AddressBook", "Address Book Browser", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("AddressBook", "Search", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("AddressBook", "X", None, QtGui.QApplication.UnicodeUTF8))
self.contactsTree.headerItem().setText(0, QtGui.QApplication.translate("AddressBook", "Name", None, QtGui.QApplication.UnicodeUTF8))
self.contactsTree.headerItem().setText(1, QtGui.QApplication.translate("AddressBook", "ID", None, QtGui.QApplication.UnicodeUTF8))
self.contactsTable.horizontalHeaderItem(0).setText(QtGui.QApplication.translate("AddressBook", "Key", None, QtGui.QApplication.UnicodeUTF8))
self.contactsTable.horizontalHeaderItem(1).setText(QtGui.QApplication.translate("AddressBook", "Value", None, QtGui.QApplication.UnicodeUTF8))
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'callhistory_ui.ui'
#
# Created: Thu Feb 21 12:01:58 2013
# by: pyside-uic 0.2.14 running on PySide 1.1.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_CallHistory(object):
def setupUi(self, CallHistory):
CallHistory.setObjectName("CallHistory")
CallHistory.resize(629, 470)
self.horizontalLayout_3 = QtGui.QHBoxLayout(CallHistory)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.toolBox = QtGui.QToolBox(CallHistory)
self.toolBox.setObjectName("toolBox")
self.page = QtGui.QWidget()
self.page.setGeometry(QtCore.QRect(0, 0, 611, 398))
self.page.setObjectName("page")
self.horizontalLayout = QtGui.QHBoxLayout(self.page)
self.horizontalLayout.setObjectName("horizontalLayout")
self.callsTable = QtGui.QTableWidget(self.page)
self.callsTable.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.callsTable.setObjectName("callsTable")
self.callsTable.setColumnCount(6)
self.callsTable.setRowCount(0)
item = QtGui.QTableWidgetItem()
self.callsTable.setHorizontalHeaderItem(0, item)
item = QtGui.QTableWidgetItem()
self.callsTable.setHorizontalHeaderItem(1, item)
item = QtGui.QTableWidgetItem()
self.callsTable.setHorizontalHeaderItem(2, item)
item = QtGui.QTableWidgetItem()
self.callsTable.setHorizontalHeaderItem(3, item)
item = QtGui.QTableWidgetItem()
self.callsTable.setHorizontalHeaderItem(4, item)
item = QtGui.QTableWidgetItem()
self.callsTable.setHorizontalHeaderItem(5, item)
self.horizontalLayout.addWidget(self.callsTable)
self.toolBox.addItem(self.page, "")
self.page_2 = QtGui.QWidget()
self.page_2.setGeometry(QtCore.QRect(0, 0, 98, 89))
self.page_2.setObjectName("page_2")
self.horizontalLayout_2 = QtGui.QHBoxLayout(self.page_2)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.keysTable = QtGui.QTableWidget(self.page_2)
self.keysTable.setObjectName("keysTable")
self.keysTable.setColumnCount(2)
self.keysTable.setRowCount(0)
item = QtGui.QTableWidgetItem()
self.keysTable.setHorizontalHeaderItem(0, item)
item = QtGui.QTableWidgetItem()
self.keysTable.setHorizontalHeaderItem(1, item)
self.horizontalLayout_2.addWidget(self.keysTable)
self.toolBox.addItem(self.page_2, "")
self.horizontalLayout_3.addWidget(self.toolBox)
self.retranslateUi(CallHistory)
self.toolBox.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(CallHistory)
def retranslateUi(self, CallHistory):
CallHistory.setWindowTitle(QtGui.QApplication.translate("CallHistory", "Call History", None, QtGui.QApplication.UnicodeUTF8))
self.callsTable.setSortingEnabled(True)
self.callsTable.horizontalHeaderItem(0).setText(QtGui.QApplication.translate("CallHistory", "ID", None, QtGui.QApplication.UnicodeUTF8))
self.callsTable.horizontalHeaderItem(1).setText(QtGui.QApplication.translate("CallHistory", "Address", None, QtGui.QApplication.UnicodeUTF8))
self.callsTable.horizontalHeaderItem(2).setText(QtGui.QApplication.translate("CallHistory", "Date", None, QtGui.QApplication.UnicodeUTF8))
self.callsTable.horizontalHeaderItem(3).setText(QtGui.QApplication.translate("CallHistory", "Duration", None, QtGui.QApplication.UnicodeUTF8))
self.callsTable.horizontalHeaderItem(4).setText(QtGui.QApplication.translate("CallHistory", "Flags", None, QtGui.QApplication.UnicodeUTF8))
self.callsTable.horizontalHeaderItem(5).setText(QtGui.QApplication.translate("CallHistory", "Name", None, QtGui.QApplication.UnicodeUTF8))
self.toolBox.setItemText(self.toolBox.indexOf(self.page), QtGui.QApplication.translate("CallHistory", "Calls list", None, QtGui.QApplication.UnicodeUTF8))
self.keysTable.horizontalHeaderItem(0).setText(QtGui.QApplication.translate("CallHistory", "Key", None, QtGui.QApplication.UnicodeUTF8))
self.keysTable.horizontalHeaderItem(1).setText(QtGui.QApplication.translate("CallHistory", "Value", None, QtGui.QApplication.UnicodeUTF8))
self.toolBox.setItemText(self.toolBox.indexOf(self.page_2), QtGui.QApplication.translate("CallHistory", "Calls data", None, QtGui.QApplication.UnicodeUTF8))
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'general_ui.ui'
#
# Created: Thu Feb 21 12:01:58 2013
# by: pyside-uic 0.2.14 running on PySide 1.1.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_General(object):
def setupUi(self, General):
General.setObjectName("General")
General.resize(400, 300)
self.horizontalLayout = QtGui.QHBoxLayout(General)
self.horizontalLayout.setObjectName("horizontalLayout")
self.infoTree = QtGui.QTreeWidget(General)
self.infoTree.setObjectName("infoTree")
self.horizontalLayout.addWidget(self.infoTree)
self.retranslateUi(General)
QtCore.QMetaObject.connectSlotsByName(General)
def retranslateUi(self, General):
General.setWindowTitle(QtGui.QApplication.translate("General", "General Phone Info", None, QtGui.QApplication.UnicodeUTF8))
self.infoTree.headerItem().setText(0, QtGui.QApplication.translate("General", "Key", None, QtGui.QApplication.UnicodeUTF8))
self.infoTree.headerItem().setText(1, QtGui.QApplication.translate("General", "Value", None, QtGui.QApplication.UnicodeUTF8))
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'knownnetworks_ui.ui'
#
# Created: Thu Feb 21 12:01:59 2013
# by: pyside-uic 0.2.14 running on PySide 1.1.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_KnownNetworks(object):
def setupUi(self, KnownNetworks):
KnownNetworks.setObjectName("KnownNetworks")
KnownNetworks.resize(594, 524)
self.horizontalLayout = QtGui.QHBoxLayout(KnownNetworks)
self.horizontalLayout.setObjectName("horizontalLayout")
self.networksTree = QtGui.QTreeWidget(KnownNetworks)
self.networksTree.setMaximumSize(QtCore.QSize(200, 16777215))
self.networksTree.setObjectName("networksTree")
self.horizontalLayout.addWidget(self.networksTree)
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.formLayout = QtGui.QFormLayout()
self.formLayout.setObjectName("formLayout")
self.label = QtGui.QLabel(KnownNetworks)
self.label.setObjectName("label")
self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.label)
self.label_2 = QtGui.QLabel(KnownNetworks)
self.label_2.setObjectName("label_2")
self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.label_2)
self.label_3 = QtGui.QLabel(KnownNetworks)
self.label_3.setObjectName("label_3")
self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.label_3)
self.label_4 = QtGui.QLabel(KnownNetworks)
self.label_4.setObjectName("label_4")
self.formLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.label_4)
self.labelSSID = QtGui.QLineEdit(KnownNetworks)
self.labelSSID.setReadOnly(True)
self.labelSSID.setObjectName("labelSSID")
self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.labelSSID)
self.labelBSSID = QtGui.QLineEdit(KnownNetworks)
self.labelBSSID.setReadOnly(True)
self.labelBSSID.setObjectName("labelBSSID")
self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.labelBSSID)
self.labelLastJoined = QtGui.QLineEdit(KnownNetworks)
self.labelLastJoined.setReadOnly(True)
self.labelLastJoined.setObjectName("labelLastJoined")
self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.labelLastJoined)
self.labelLastAutoJoined = QtGui.QLineEdit(KnownNetworks)
self.labelLastAutoJoined.setReadOnly(True)
self.labelLastAutoJoined.setObjectName("labelLastAutoJoined")
self.formLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.labelLastAutoJoined)
self.verticalLayout.addLayout(self.formLayout)
self.networkTree = QtGui.QTreeWidget(KnownNetworks)
self.networkTree.setObjectName("networkTree")
self.verticalLayout.addWidget(self.networkTree)
self.horizontalLayout.addLayout(self.verticalLayout)
self.horizontalLayout.setStretch(1, 1)
self.retranslateUi(KnownNetworks)
QtCore.QMetaObject.connectSlotsByName(KnownNetworks)
def retranslateUi(self, KnownNetworks):
KnownNetworks.setWindowTitle(QtGui.QApplication.translate("KnownNetworks", "Known Networks", None, QtGui.QApplication.UnicodeUTF8))
self.networksTree.headerItem().setText(0, QtGui.QApplication.translate("KnownNetworks", "id", None, QtGui.QApplication.UnicodeUTF8))
self.networksTree.headerItem().setText(1, QtGui.QApplication.translate("KnownNetworks", "SSID", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("KnownNetworks", "SSID", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("KnownNetworks", "BSSID", None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate("KnownNetworks", "Last joined", None, QtGui.QApplication.UnicodeUTF8))
self.label_4.setText(QtGui.QApplication.translate("KnownNetworks", "Last auto joined", None, QtGui.QApplication.UnicodeUTF8))
self.networkTree.headerItem().setText(0, QtGui.QApplication.translate("KnownNetworks", "Properties", None, QtGui.QApplication.UnicodeUTF8))
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'networkident_ui.ui'
#
# Created: Thu Feb 21 12:01:59 2013
# by: pyside-uic 0.2.14 running on PySide 1.1.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_NetworkIdent(object):
def setupUi(self, NetworkIdent):
NetworkIdent.setObjectName("NetworkIdent")
NetworkIdent.resize(655, 445)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(NetworkIdent.sizePolicy().hasHeightForWidth())
NetworkIdent.setSizePolicy(sizePolicy)
self.horizontalLayout = QtGui.QHBoxLayout(NetworkIdent)
self.horizontalLayout.setObjectName("horizontalLayout")
self.networksTree = QtGui.QTreeWidget(NetworkIdent)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.networksTree.sizePolicy().hasHeightForWidth())
self.networksTree.setSizePolicy(sizePolicy)
self.networksTree.setObjectName("networksTree")
self.horizontalLayout.addWidget(self.networksTree)
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.networkLabel = QtGui.QLabel(NetworkIdent)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.networkLabel.sizePolicy().hasHeightForWidth())
self.networkLabel.setSizePolicy(sizePolicy)
self.networkLabel.setFrameShape(QtGui.QFrame.Panel)
self.networkLabel.setFrameShadow(QtGui.QFrame.Raised)
self.networkLabel.setText("")
self.networkLabel.setObjectName("networkLabel")
self.verticalLayout.addWidget(self.networkLabel)
self.servicesTree = QtGui.QTreeWidget(NetworkIdent)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(1)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.servicesTree.sizePolicy().hasHeightForWidth())
self.servicesTree.setSizePolicy(sizePolicy)
self.servicesTree.setObjectName("servicesTree")
self.verticalLayout.addWidget(self.servicesTree)
self.horizontalLayout.addLayout(self.verticalLayout)
self.retranslateUi(NetworkIdent)
QtCore.QMetaObject.connectSlotsByName(NetworkIdent)
def retranslateUi(self, NetworkIdent):
NetworkIdent.setWindowTitle(QtGui.QApplication.translate("NetworkIdent", "Network Identification", None, QtGui.QApplication.UnicodeUTF8))
self.networksTree.headerItem().setText(0, QtGui.QApplication.translate("NetworkIdent", "ID", None, QtGui.QApplication.UnicodeUTF8))
self.networksTree.headerItem().setText(1, QtGui.QApplication.translate("NetworkIdent", "Name", None, QtGui.QApplication.UnicodeUTF8))
self.networksTree.headerItem().setText(2, QtGui.QApplication.translate("NetworkIdent", "Timestamp", None, QtGui.QApplication.UnicodeUTF8))
self.servicesTree.headerItem().setText(0, QtGui.QApplication.translate("NetworkIdent", "Service", None, QtGui.QApplication.UnicodeUTF8))
self.servicesTree.headerItem().setText(1, QtGui.QApplication.translate("NetworkIdent", "Value", None, QtGui.QApplication.UnicodeUTF8))
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'note_ui.ui'
#
# Created: Thu Feb 21 12:01:59 2013
# by: pyside-uic 0.2.14 running on PySide 1.1.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_Note(object):
def setupUi(self, Note):
Note.setObjectName("Note")
Note.resize(623, 501)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(Note.sizePolicy().hasHeightForWidth())
Note.setSizePolicy(sizePolicy)
self.horizontalLayout = QtGui.QHBoxLayout(Note)
self.horizontalLayout.setObjectName("horizontalLayout")
self.noteTree = QtGui.QTreeWidget(Note)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.noteTree.sizePolicy().hasHeightForWidth())
self.noteTree.setSizePolicy(sizePolicy)
self.noteTree.setMaximumSize(QtCore.QSize(200, 16777215))
self.noteTree.setObjectName("noteTree")
self.horizontalLayout.addWidget(self.noteTree)
self.verticalLayout = QtGui.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.formLayout = QtGui.QFormLayout()
self.formLayout.setObjectName("formLayout")
self.label = QtGui.QLabel(Note)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy)
self.label.setObjectName("label")