aboutsummaryrefslogtreecommitdiff
path: root/VMProtect/property_editor.h
diff options
context:
space:
mode:
Diffstat (limited to 'VMProtect/property_editor.h')
-rw-r--r--VMProtect/property_editor.h642
1 files changed, 642 insertions, 0 deletions
diff --git a/VMProtect/property_editor.h b/VMProtect/property_editor.h
new file mode 100644
index 0000000..3f589b6
--- /dev/null
+++ b/VMProtect/property_editor.h
@@ -0,0 +1,642 @@
+#ifndef PROPERTY_EDITOR_H
+#define PROPERTY_EDITOR_H
+
+class Property : public QObject
+{
+ Q_OBJECT
+public:
+ Property(Property *parent, const QString &name);
+ ~Property();
+ QString name() const { return name_; }
+ void setName(const QString &name);
+ virtual QString valueText() const;
+ virtual QWidget *createEditor(QWidget *parent);
+ Property *parent() const { return parent_; }
+ virtual bool hasValue() const { return true; }
+ bool readOnly() const { return readOnly_; }
+ void setReadOnly(bool value);
+ QList<Property *> children() const { return children_; }
+ void addChild(Property *child);
+ void insertChild(int index, Property *child);
+ void removeChild(Property *child);
+ void clear();
+ int childCount() const { return children_.size(); }
+ virtual bool hasStaticText(int column) const { return false; }
+ virtual QString staticText(int column) const { return QString(); }
+ virtual QColor staticColor(int column) const { return QColor(); }
+ QString toolTip() const { return toolTip_; }
+ void setToolTip(const QString &value) { toolTip_ = value; }
+signals:
+ void destroyed(Property *prop);
+ void changed(Property *prop);
+private:
+ Property *parent_;
+ QString name_;
+ bool readOnly_;
+ QList<Property *> children_;
+ QString toolTip_;
+};
+
+class StringProperty : public Property
+{
+ Q_OBJECT
+public:
+ StringProperty(Property *parent, const QString &name, const QString &value);
+ virtual QString valueText() const;
+ virtual QWidget *createEditor(QWidget *parent);
+ QString value() const { return value_; }
+ void setValue(const QString &value);
+signals:
+ void valueChanged(const QString &value);
+private slots:
+ void editorChanged(const QString &value);
+private:
+ QString value_;
+};
+
+class BoolProperty : public Property
+{
+ Q_OBJECT
+public:
+ BoolProperty(Property *parent, const QString &name, bool value);
+ virtual QString valueText() const;
+ virtual QWidget *createEditor(QWidget *parent);
+ bool value() const { return value_; }
+ void setValue(bool value);
+signals:
+ void valueChanged(bool value);
+private slots:
+ void editorChanged(bool value);
+private:
+ bool value_;
+};
+
+class DateProperty : public Property
+{
+ Q_OBJECT
+public:
+ DateProperty(Property *parent, const QString &name, const QDate &value);
+ virtual QString valueText() const;
+ virtual QWidget *createEditor(QWidget *parent);
+ QDate value() const { return value_; }
+ void setValue(const QDate &value);
+signals:
+ void valueChanged(const QDate &value);
+private slots:
+ void editorChanged(const QDate &value);
+private:
+ QDate value_;
+};
+
+class StringListProperty : public StringProperty
+{
+public:
+ StringListProperty(Property *parent, const QString &name, const QString &value);
+ virtual QWidget *createEditor(QWidget *parent);
+};
+
+class GroupProperty : public Property
+{
+ Q_OBJECT
+public:
+ GroupProperty(Property *parent, const QString &name);
+ virtual bool hasValue() const { return false; }
+};
+
+class CommandProperty : public Property
+{
+ Q_OBJECT
+public:
+ CommandProperty(Property *parent, ICommand *value);
+ virtual QString valueText() const;
+ ICommand *value() const { return value_; }
+ virtual bool hasStaticText(int column) const;
+ virtual QString staticText(int column) const;
+ virtual QColor staticColor(int column) const;
+private:
+ ICommand *value_;
+ QString text_;
+};
+
+class EnumProperty : public Property
+{
+ Q_OBJECT
+public:
+ EnumProperty(Property *parent, const QString &name, const QStringList &items, int value);
+ int value() const { return value_; }
+ void setValue(int value);
+ void setItems(const QStringList &items) { items_ = items; }
+ virtual QString valueText() const;
+ virtual QWidget *createEditor(QWidget *parent);
+ void setText(int index, const QString &text) { items_[index] = text; }
+signals:
+ void valueChanged(int value);
+private slots:
+ void editorChanged(int value);
+private:
+ QStringList items_;
+ int value_;
+};
+
+class CompilationTypeProperty : public Property
+{
+ Q_OBJECT
+public:
+ CompilationTypeProperty(Property *parent, const QString &name, CompilationType value);
+ CompilationType value() const { return value_; }
+ void setValue(CompilationType value);
+ virtual QString valueText() const;
+ virtual QWidget *createEditor(QWidget *parent);
+ void setDefaultValue(CompilationType value) { defaultValue_ = value; }
+ void setText(int index, const QString &text) { items_[index] = text; }
+signals:
+ void valueChanged(CompilationType value);
+private slots:
+ void editorChanged(int value);
+private:
+ QStringList items_;
+ CompilationType value_;
+ CompilationType defaultValue_;
+};
+
+class FileNameProperty : public Property
+{
+ Q_OBJECT
+public:
+ FileNameProperty(Property *parent, const QString &name, const QString &filter, const QString &value, bool saveMode = false);
+ QString value() const { return value_; }
+ void setValue(const QString &value);
+ void setRelativePath(const QString &relativePath) { relativePath_ = relativePath; }
+ virtual QString valueText() const;
+ virtual QWidget *createEditor(QWidget *parent);
+ void setFilter(const QString &filter) { filter_ = filter; }
+signals:
+ void valueChanged(const QString &value);
+private slots:
+ void editorChanged(const QString &value);
+private:
+ QString filter_;
+ QString value_;
+ QString relativePath_;
+ bool saveMode_;
+};
+
+class WatermarkProperty : public Property
+{
+ Q_OBJECT
+public:
+ WatermarkProperty(Property *parent, const QString &name, const QString &value);
+ QString value() const { return value_; }
+ void setValue(const QString &value);
+ virtual QString valueText() const;
+ virtual QWidget *createEditor(QWidget *parent);
+signals:
+ void valueChanged(const QString &value);
+private slots:
+ void editorChanged(const QString &value);
+private:
+ QString value_;
+};
+
+class PropertyManager : public QAbstractItemModel
+{
+ Q_OBJECT
+public:
+ PropertyManager(QObject *parent = 0);
+ ~PropertyManager();
+ void clear();
+ virtual QModelIndex index(int row, int column, const QModelIndex &parent) const;
+ virtual QModelIndex parent(const QModelIndex &index) const;
+ virtual int rowCount(const QModelIndex &parent) const;
+ virtual int columnCount(const QModelIndex &parent) const;
+ virtual QVariant data(const QModelIndex &index, int role) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+ virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+ BoolProperty *addBoolProperty(Property *parent, const QString &name, bool value);
+ StringProperty *addStringProperty(Property *parent, const QString &name, const QString &value);
+ GroupProperty *addGroupProperty(Property *parent, const QString &name);
+ DateProperty *addDateProperty(Property *parent, const QString &name, const QDate &value);
+ StringListProperty *addStringListProperty(Property *parent, const QString &name, const QString &value);
+ EnumProperty *addEnumProperty(Property *parent, const QString &name, const QStringList &items, int value);
+ FileNameProperty *addFileNameProperty(Property *parent, const QString &name, const QString &filter, const QString &value, bool saveMode = false);
+ CommandProperty *addCommandProperty(Property *parent, ICommand *value);
+ WatermarkProperty *addWatermarkProperty(Property *parent, const QString &name, const QString &value);
+ CompilationTypeProperty *addCompilationTypeProperty(Property *parent, const QString &name, CompilationType value);
+ QModelIndex propertyToIndex(Property *prop) const;
+ Property *indexToProperty(const QModelIndex &index) const;
+ GroupProperty *root() const { return root_; }
+private slots:
+ void slotPropertyChanged(Property *prop);
+ void slotPropertyDestroyed(Property *prop);
+private:
+ void addProperty(Property *prop);
+ GroupProperty *root_;
+};
+
+class PropertyEditorDelegate : public TreeViewItemDelegate
+{
+ Q_OBJECT
+public:
+ PropertyEditorDelegate(QObject *parent = 0);
+ QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &index) const;
+private:
+ void setEditorData(QWidget * /*widget*/, const QModelIndex &) const;
+ Property *indexToProperty(const QModelIndex &index) const;
+};
+
+class TreePropertyEditor : public TreeView
+{
+ Q_OBJECT
+public:
+ TreePropertyEditor(QWidget *parent = NULL);
+protected:
+ void keyPressEvent(QKeyEvent *event);
+ void mousePressEvent(QMouseEvent *event);
+ Property *indexToProperty(const QModelIndex &index) const;
+protected slots:
+ virtual void dataChanged (const QModelIndex & topLeft, const QModelIndex & bottomRight, const QVector<int> &roles = QVector<int>());
+};
+
+class License;
+class InternalFile;
+
+class LicensePropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ LicensePropertyManager(QObject *parent = 0);
+ License *value() const { return value_; }
+ void setValue(License *value);
+ void update();
+ virtual QVariant data(const QModelIndex &index, int role) const;
+ void localize();
+ StringProperty *serialNumber() const { return licenseSerialNumber_; }
+private slots:
+ void nameChanged(const QString &value);
+ void emailChanged(const QString &value);
+ void orderChanged(const QString &value);
+ void dateChanged(const QDate &value);
+ void commentsChanged(const QString &value);
+ void blockedChanged(bool value);
+private:
+ License *value_;
+ bool lock_;
+
+ GroupProperty *details_;
+ StringProperty *licenseName_;
+ StringProperty *licenseEmail_;
+ DateProperty *licenseDate_;
+ StringProperty *licenseOrder_;
+ StringListProperty *licenseComments_;
+ StringProperty *licenseSerialNumber_;
+ BoolProperty *licenseBlocked_;
+
+ GroupProperty *contents_;
+ StringProperty *serialName_;
+ StringProperty *serialEmail_;
+ StringProperty *serialHWID_;
+ StringProperty *serialTimeLimit_;
+ DateProperty *serialExpirationDate_;
+ DateProperty *serialMaxBuildDate_;
+ StringProperty *serialUserData_;
+};
+
+class InternalFilePropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ InternalFilePropertyManager(QObject *parent = 0);
+ InternalFile *value() const { return value_; }
+ void setValue(InternalFile *value);
+ void update();
+ void localize();
+ QModelIndex fileNameIndex() const { return propertyToIndex(fileName_); }
+private slots:
+ void nameChanged(const QString &value);
+ void fileNameChanged(const QString &value);
+ void actionChanged(int value);
+private:
+ InternalFile *value_;
+ bool lock_;
+
+ GroupProperty *details_;
+ StringProperty *name_;
+ FileNameProperty *fileName_;
+ EnumProperty *action_;
+};
+
+class AssemblyPropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ AssemblyPropertyManager(QObject *parent = 0);
+ InternalFile *value() const { return value_; }
+ void setValue(InternalFile *value);
+ void update();
+ void localize();
+ QModelIndex fileNameIndex() const { return propertyToIndex(fileName_); }
+ private slots:
+ void nameChanged(const QString &value);
+ void fileNameChanged(const QString &value);
+private:
+ InternalFile *value_;
+ bool lock_;
+
+ GroupProperty *details_;
+ StringProperty *name_;
+ FileNameProperty *fileName_;
+};
+
+class FunctionPropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ FunctionPropertyManager(QObject *parent = 0);
+ FunctionBundle *value() const { return value_; }
+ void setValue(FunctionBundle *value);
+ void update();
+ void localize();
+ void addFunction(IFunction *func);
+ void updateFunction(IFunction *func);
+ bool removeFunction(IFunction *func);
+ virtual QVariant data(const QModelIndex &index, int role) const;
+ QModelIndex commandToIndex(ICommand *command) const;
+ ICommand *indexToCommand(const QModelIndex &index) const;
+ IFunction *indexToFunction(const QModelIndex &index) const;
+private slots:
+ void compilationTypeChanged(CompilationType value);
+ void lockToKeyChanged(bool value);
+private:
+ void createCommands(IFunction *func, Property *code);
+ bool internalAddFunction(IFunction *func);
+ bool internalRemoveFunction(IFunction *func);
+ struct ArchInfo {
+ StringProperty *code;
+ QMap<IFunction *, StringProperty *> map;
+ ArchInfo() : code(NULL) {}
+ };
+ FunctionBundle *value_;
+ bool lock_;
+
+ GroupProperty *protection_;
+ CompilationTypeProperty *compilationType_;
+ BoolProperty *lockToKey_;
+ GroupProperty *details_;
+ StringProperty *name_;
+ StringProperty *address_;
+ StringProperty *type_;
+ QMap<IArchitecture *, ArchInfo> map_;
+};
+
+class SectionPropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ SectionPropertyManager(QObject *parent = 0);
+ ISection *value() const { return value_; }
+ void setValue(ISection *value);
+ void update();
+ void localize();
+private:
+ ISection *value_;
+
+ GroupProperty *details_;
+ StringProperty *name_;
+ StringProperty *address_;
+ StringProperty *virtual_size_;
+ StringProperty *physical_offset_;
+ StringProperty *physical_size_;
+ StringProperty *flags_;
+};
+
+class SegmentPropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ SegmentPropertyManager(QObject *parent = 0);
+ ISection *value() const { return value_; }
+ void setValue(ISection *value);
+ void update();
+ void localize();
+private slots:
+ void excludedFromPackingChanged(bool value);
+ void excludedFromMemoryProtectionChanged(bool value);
+private:
+ ISection *value_;
+ bool lock_;
+
+ GroupProperty *options_;
+ GroupProperty *details_;
+ BoolProperty *excluded_from_packing_;
+ BoolProperty *excluded_from_memory_protection_;
+ StringProperty *name_;
+ StringProperty *address_;
+ StringProperty *virtual_size_;
+ StringProperty *physical_offset_;
+ StringProperty *physical_size_;
+ StringProperty *flags_;
+ BoolProperty *flag_readable_;
+ BoolProperty *flag_writable_;
+ BoolProperty *flag_executable_;
+ BoolProperty *flag_shared_;
+ BoolProperty *flag_discardable_;
+ BoolProperty *flag_notpaged_;
+};
+
+class ImportPropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ ImportPropertyManager(QObject *parent = 0);
+ ~ImportPropertyManager();
+ virtual QVariant data(const QModelIndex &index, int role) const;
+ IImportFunction *value() const { return value_; }
+ void setValue(IImportFunction *value);
+ void update();
+ void localize();
+private:
+ IImportFunction *value_;
+
+ GroupProperty *details_;
+ StringProperty *name_;
+ StringProperty *address_;
+ StringProperty *references_;
+ IFunction *func_;
+};
+
+class ExportPropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ ExportPropertyManager(QObject *parent = 0);
+ IExport *value() const { return value_; }
+ void setValue(IExport *value);
+ void update();
+ void localize();
+private:
+ IExport *value_;
+
+ GroupProperty *details_;
+ StringProperty *name_;
+ StringProperty *forwarded_;
+ StringProperty *address_;
+};
+
+class ResourcePropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ ResourcePropertyManager(QObject *parent = 0);
+ IResource *value() const { return value_; }
+ void setValue(IResource *value);
+ void update();
+ void localize();
+private slots:
+ void excludedFromPackingChanged(bool value);
+private:
+ IResource *value_;
+ bool lock_;
+
+ GroupProperty *options_;
+ BoolProperty *excluded_from_packing_;
+ GroupProperty *details_;
+ StringProperty *name_;
+ StringProperty *address_;
+ StringProperty *size_;
+};
+
+class LoadCommandPropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ LoadCommandPropertyManager(QObject *parent = 0);
+ ILoadCommand *value() const { return value_; }
+ void setValue(ILoadCommand *value);
+ void update();
+ void localize();
+private:
+ ILoadCommand *value_;
+
+ GroupProperty *details_;
+ StringProperty *name_;
+ StringProperty *address_;
+ StringProperty *size_;
+ StringProperty *segment_;
+};
+
+class CorePropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ CorePropertyManager(QObject *parent = 0);
+ Core *core() const { return core_; }
+ void setCore(Core *core);
+ void update();
+ virtual QVariant data(const QModelIndex &index, int role) const;
+ void localize();
+#ifndef LITE
+ QModelIndex watermarkNameIndex() const { return propertyToIndex(watermarkName_); }
+#endif
+private slots:
+ void memoryProtectionChanged(bool value);
+ void importProtectionChanged(bool value);
+ void resourceProtectionChanged(bool value);
+ void packOutputFileChanged(bool value);
+ void watermarkNameChanged(const QString &value);
+ void hwidChanged(const QString &value);
+ void outputFileChanged(const QString &value);
+ void detectionDebuggerChanged(int value);
+ void detectioncpVMToolsChanged(bool value);
+ void vmSectionNameChanged(const QString &value);
+ void stripDebugInfoChanged(bool value);
+ void stripRelocationsChanged(bool value);
+ void debugModeChanged(bool value);
+ void messageDebuggerFoundChanged(const QString &value);
+ void messageVMToolsFoundChanged(const QString &value);
+ void messageFileCorruptedChanged(const QString &value);
+ void messageSerialNumberRequiredChanged(const QString &value);
+ void messageHWIDMismatchedChanged(const QString &value);
+ void licenseDataFileNameChanged(const QString &value);
+ void activationServerChanged(const QString &value);
+private:
+ Core *core_;
+ bool lock_;
+
+ GroupProperty *file_;
+ BoolProperty *memoryProtection_;
+ BoolProperty *importProtection_;
+ BoolProperty *resourceProtection_;
+ BoolProperty *packOutputFile_;
+#ifndef LITE
+ WatermarkProperty *watermarkName_;
+#endif
+#ifdef ULTIMATE
+ StringProperty *hwid_;
+#endif
+ FileNameProperty *outputFileName_;
+
+ GroupProperty *detection_;
+ EnumProperty *detectionDebugger_;
+ BoolProperty *detectionVMTools_;
+
+#ifndef LITE
+ GroupProperty *messages_;
+ StringListProperty *messageDebuggerFound_;
+ StringListProperty *messageVMToolsFound_;
+ StringListProperty *messageFileCorrupted_;
+ StringListProperty *messageSerialNumberRequired_;
+ StringListProperty *messageHWIDMismatched_;
+#endif
+
+ GroupProperty *additional_;
+ StringProperty *vmSectionName_;
+ BoolProperty *stripDebugInfo_;
+ BoolProperty *stripRelocations_;
+
+#ifdef ULTIMATE
+ GroupProperty *licensingParameters_;
+ FileNameProperty *licenseDataFileName_;
+ StringProperty *keyPairAlgorithm_;
+ StringProperty *activationServer_;
+#endif
+};
+
+class WatermarkPropertyManager : public PropertyManager
+{
+ Q_OBJECT
+public:
+ WatermarkPropertyManager(QObject *parent = 0);
+ void setWatermark(Watermark *watermark);
+ Watermark *value() const { return watermark_; }
+ void update();
+private slots:
+ void nameChanged(const QString &value);
+ void blockedChanged(bool value);
+private:
+ bool lock_;
+ StringProperty *name_;
+ BoolProperty *blocked_;
+ StringProperty *useCount_;
+ Watermark *watermark_;
+};
+
+class AddressCalculator : public PropertyManager
+{
+ Q_OBJECT
+public:
+ AddressCalculator(QObject *parent = 0);
+ void setValue(IArchitecture *file);
+ void localize();
+private slots:
+ void addressChanged(const QString &value);
+ void offsetChanged(const QString &value);
+ void segmentChanged(int value);
+private:
+ IArchitecture *file_;
+ bool lock_;
+ StringProperty *address_;
+ StringProperty *offset_;
+ EnumProperty *segment_;
+};
+
+#endif \ No newline at end of file