# This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see # <http://www.gnu.org/licenses/>. # ######################################################################## # TODO: Make this finally multi-threaded. import http.client import idascope.core.helpers.QtShim as QtShim QtGui = QtShim.get_QtGui() QtCore = QtShim.get_QtCore() Signal = QtShim.get_Signal() from .ThreadedDownloader import ThreadedDownloader class TempQThread(QtCore.QThread): def __init__(self, parent=None): QtCore.QThread.__init__(self, parent) def run(self): self.exec_() def __str__(self): return "0x%08X" % id(self)
# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see # <http://www.gnu.org/licenses/>. # ######################################################################## import idascope.core.helpers.QtShim as QtShim QMainWindow = QtShim.get_QMainWindow() from .NumberQTableWidgetItem import NumberQTableWidgetItem from .YaraRuleDialog import YaraRuleDialog class YaraScannerWidget(QMainWindow): def __init__(self, parent): self.cc = parent.cc self.cc.QMainWindow.__init__(self) print("[|] loading YaraScannerWidget") # enable access to shared IDAscope modules self.parent = parent self.name = "YARA" self.icon = self.cc.QIcon(self.parent.config.icon_file_path + "yarascan.png")
# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see # <http://www.gnu.org/licenses/>. # ######################################################################## import idascope.core.helpers.QtShim as QtShim QWidget = QtShim.get_QWidget() import idascope.core.helpers.Misc as Misc class WinApiWidget(QWidget): """ A widget for allowing easy access to Windows API information. Front-end to the I{idascope.core.WinApiProvider}. """ def __init__(self, parent): self.cc = parent.cc self.cc.QWidget.__init__(self) print "[|] loading WinApiWidget" self.parent = parent self.name = "WinAPI" self.icon = self.cc.QIcon(self.parent.config.icon_file_path +
# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see # <http://www.gnu.org/licenses/>. # ######################################################################## import idascope.core.helpers.QtShim as QtShim QtGui = QtShim.get_QtGui() QtCore = QtShim.get_QtCore() QtWidgets = QtShim.get_QtWidgets() import idc import idaapi from idaapi import plugin_t from ida_kernwin import PluginForm import idascope.config as config from idascope.core.helpers.ClassCollection import ClassCollection from idascope.core.structures.IDAscopeConfiguration import IDAscopeConfiguration from idascope.core.SemanticIdentifier import SemanticIdentifier from idascope.core.DocumentationHelper import DocumentationHelper from idascope.core.WinApiProvider import WinApiProvider from idascope.core.CryptoIdentifier import CryptoIdentifier
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The software contained in the traits/protocols/ directory is the pyprotocols project (http://peak.telecommunity.com/PyProtocols.html), it is originaly licensed under the terms of the Python Software Foundation License, which is compatible with the above terms. """ import idascope.core.helpers.QtShim as QtShim QWidget = QtShim.get_QWidget() Signal = QtShim.get_Signal() from .RangeSlider import RangeSlider class BoundsEditor(QWidget): """ Custom widget consisting of a QLineEdit, a custom double slider and another QLineEdit. """ boundsChanged = Signal() def __init__(self, parent, name, min, max, low, high, is_float=True): self.cc = parent.cc self.cc.QWidget.__init__(self)
# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see # <http://www.gnu.org/licenses/>. # ######################################################################## import idascope.core.helpers.QtShim as QtShim QTableWidgetItem = QtShim.get_QTableWidgetItem() class NumberQTableWidgetItem(QTableWidgetItem): """ A simple helper class that allows sorting by numeric values. """ def __lt__(self, other): """ Redefine function from QTableWidgetItem to allow sorting by numeric value instead of string value. @param other: another item of the same type @type other: I{NumberQTableWidgetItem} @return: (boolean) the numeric comparison of the items. """ return float(self.text()) < float(other.text())
# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see # <http://www.gnu.org/licenses/>. # ######################################################################## import idascope.core.helpers.QtShim as QtShim QDialog = QtShim.get_QDialog() class YaraRuleDialog(QDialog): """ oriented on: https://stackoverflow.com/a/11764475 """ def __init__(self, parent, rule): self.cc = parent.cc self.cc.QDialog.__init__(self, parent) # references to Qt-specific modules # create GUI elements self.rule = rule self._createOkButton() # glue everything together # create scroll for rule text edit self.scroll = self.cc.QScrollArea()
import idascope.core.helpers.QtShim as QtShim QTextEdit = QtShim.get_QTextEdit() class GrowingTextEdit(QTextEdit): """ source: https://stackoverflow.com/a/11764475 """ def __init__(self, parent, *args, **kwargs): self.cc = parent.cc self.cc.QTextEdit.__init__(self) self.document().contentsChanged.connect(self.sizeChange) self.heightMin = 0 self.heightMax = 1400 def getHeight(self): return self.document().size().height() def sizeChange(self): docHeight = self.getHeight() if self.heightMin <= docHeight <= self.heightMax: self.setMinimumHeight(docHeight)
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The software contained in the traits/protocols/ directory is the pyprotocols project (http://peak.telecommunity.com/PyProtocols.html), it is originaly licensed under the terms of the Python Software Foundation License, which is compatible with the above terms. """ import idascope.core.helpers.QtShim as QtShim QSlider = QtShim.get_QSlider() Signal = QtShim.get_Signal() class RangeSlider(QSlider): """ A slider for ranges. This class provides a dual-slider for ranges, where there is a defined maximum and minimum, as is a normal slider, but instead of having a single slider value, there are 2 slider values. This class emits the same signals as the QSlider base class, with the exception of valueChanged """ sliderMoved = Signal(int, name='sliderMoved')