hardsploit_gui 2.2 → 2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/hardsploit_gui +2 -2
- data/lib/{Firmware → Firmwares}/FPGA/I2C/I2C_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_I2C_INTERACT.rpd +0 -0
- data/lib/{Firmware/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd → Firmwares/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd} +0 -0
- data/lib/Firmwares/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd +0 -0
- data/lib/{Firmware/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd → Firmwares/FPGA/SPI/SPI_SNIFFER/HARDSPLOIT_FIRMWARE_FPGA_SPI_SNIFFER.rpd} +0 -0
- data/lib/Firmwares/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd +0 -0
- data/lib/{Firmware → Firmwares}/FPGA/TEST/TEST_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_TEST_INTERACT.rpd +0 -0
- data/lib/Firmwares/FPGA/UART/UART_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_UART_INTERACT.rpd +0 -0
- data/lib/{Firmware → Firmwares}/FPGA/VersionFPGA.rb +1 -1
- data/lib/{Firmware → Firmwares}/UC/HARDSPLOIT_FIRMWARE_UC.bin +0 -0
- data/lib/{Firmware → Firmwares}/UC/VersionUC.rb +1 -1
- data/lib/HardsploitAPI/Core/HardsploitAPI.rb +210 -0
- data/lib/HardsploitAPI/Core/HardsploitAPI_CONSTANT.rb +150 -0
- data/lib/HardsploitAPI/Core/HardsploitAPI_ERROR.rb +109 -0
- data/lib/HardsploitAPI/Core/HardsploitAPI_FIRMWARE.rb +305 -0
- data/lib/HardsploitAPI/{HardsploitAPI_PROGRESS.rb → Core/HardsploitAPI_PROGRESS.rb} +0 -0
- data/lib/HardsploitAPI/Core/HardsploitAPI_USB_COMMUNICATION.rb +166 -0
- data/lib/HardsploitAPI/Modules/I2C/HardsploitAPI_I2C.rb +356 -0
- data/lib/HardsploitAPI/{HardsploitAPI_NO_MUX_PARALLELE_MEMORY.rb → Modules/NO_MUX_PARALLEL_MEMORY/HardsploitAPI_NO_MUX_PARALLEL_MEMORY.rb} +26 -49
- data/lib/HardsploitAPI/Modules/NRF24L01/HardsploitAPI_NRF24L01.rb +306 -0
- data/lib/HardsploitAPI/Modules/SPI/HardsploitAPI_SPI.rb +340 -0
- data/lib/HardsploitAPI/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER.rb +83 -0
- data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD.rb +367 -0
- data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_DEBUG.rb +89 -0
- data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_MEM_AP.rb +61 -0
- data/lib/HardsploitAPI/{SWD → Modules/SWD}/HardsploitAPI_SWD_STM32.rb +32 -15
- data/lib/HardsploitAPI/{HardsploitAPI_TEST_INTERACT.rb → Modules/TEST/HardsploitAPI_TEST_INTERACT.rb} +1 -1
- data/lib/HardsploitAPI/Modules/UART/HardsploitAPI_UART.rb +196 -0
- data/lib/Hardsploit_gui.rb +96 -0
- data/lib/class/Chip_editor.rb +186 -330
- data/lib/class/Chip_management.rb +496 -0
- data/lib/class/Command_editor.rb +130 -182
- data/lib/class/Command_table.rb +16 -22
- data/lib/class/Console.rb +0 -2
- data/lib/class/ErrorMsg.rb +312 -0
- data/lib/class/Export.rb +140 -0
- data/lib/class/Export_manager.rb +43 -43
- data/lib/class/Firmware.rb +52 -11
- data/lib/class/Generic_commands.rb +180 -190
- data/lib/class/Import.rb +193 -0
- data/lib/class/Progress_bar.rb +1 -0
- data/lib/class/Signal_mapper.rb +120 -0
- data/lib/class/Wire_helper.rb +132 -148
- data/lib/class/{I2C → i2c}/I2c_command.rb +16 -13
- data/lib/class/i2c/I2c_export.rb +95 -0
- data/lib/class/i2c/I2c_import.rb +117 -0
- data/lib/class/i2c/I2c_scanner.rb +114 -0
- data/lib/class/i2c/I2c_settings.rb +148 -0
- data/lib/class/parallel/Parallel_export.rb +118 -0
- data/lib/class/parallel/Parallel_import.rb +113 -0
- data/lib/class/parallel/Parallel_settings.rb +81 -0
- data/lib/class/spi/Spi_export.rb +108 -0
- data/lib/class/spi/Spi_import.rb +159 -0
- data/lib/class/spi/Spi_settings.rb +108 -0
- data/lib/class/spi/Spi_sniffer.rb +101 -0
- data/lib/class/swd/Swd.rb +125 -0
- data/lib/class/swd/Swd_scanner.rb +121 -0
- data/lib/class/swd/Swd_settings.rb +76 -0
- data/lib/class/uart/Uart_baudrate.rb +62 -0
- data/lib/class/uart/Uart_console.rb +115 -0
- data/lib/class/uart/Uart_settings.rb +102 -0
- data/lib/db/associations.rb +42 -29
- data/lib/db/database.rb +4 -0
- data/lib/db/development.sqlite3 +0 -0
- data/lib/db/migrate/004_create_manufacturers.rb +13 -0
- data/lib/db/migrate/005_create_packages.rb +13 -0
- data/lib/db/migrate/006_create_chip_types.rb +11 -0
- data/lib/db/migrate/007_create_buses.rb +11 -0
- data/lib/db/migrate/008_create_signals.rb +14 -0
- data/lib/db/migrate/009_create_chips.rb +25 -0
- data/lib/db/migrate/010_create_commands.rb +21 -0
- data/lib/db/migrate/011_create_bytes.rb +19 -0
- data/lib/db/migrate/012_create_i2c_settings.rb +21 -0
- data/lib/db/migrate/013_create_spi_settings.rb +26 -0
- data/lib/db/migrate/014_create_parallel_settings.rb +21 -0
- data/lib/db/migrate/015_create_pins.rb +19 -0
- data/lib/db/migrate/016_create_uses.rb +17 -0
- data/lib/db/migrate/017_create_swd_settings.rb +19 -0
- data/lib/db/migrate/018_create_uart_settings.rb +22 -0
- data/lib/db/schema.rb +157 -0
- data/lib/db/seeds.rb +161 -0
- data/lib/gui/gui_chip_editor.rb +23 -22
- data/lib/gui/gui_chip_management.rb +43 -38
- data/lib/gui/gui_command_editor.rb +2 -1
- data/lib/gui/gui_export.rb +132 -0
- data/lib/gui/gui_generic_commands.rb +69 -31
- data/lib/gui/gui_generic_export.rb +18 -2
- data/lib/gui/gui_generic_import.rb +18 -2
- data/lib/gui/gui_i2c_command.rb +2 -1
- data/lib/gui/gui_i2c_settings.rb +2 -2
- data/lib/gui/gui_import.rb +131 -0
- data/lib/gui/gui_parallel_settings.rb +2 -1
- data/lib/gui/gui_progress_bar.rb +2 -1
- data/lib/gui/gui_signal_mapper.rb +121 -0
- data/lib/gui/gui_signal_scanner.rb +146 -0
- data/lib/gui/gui_spi_settings.rb +6 -2
- data/lib/gui/gui_spi_sniffer.rb +112 -0
- data/lib/gui/gui_swd_settings.rb +166 -0
- data/lib/gui/gui_uart_baudrate.rb +114 -0
- data/lib/gui/gui_uart_console.rb +164 -0
- data/lib/gui/gui_uart_settings.rb +243 -0
- data/lib/gui_designer/gui_chip_editor.ui +9 -6
- data/lib/gui_designer/gui_chip_management.ui +79 -35
- data/lib/gui_designer/gui_command_editor.ui +3 -0
- data/lib/gui_designer/gui_export.ui +171 -0
- data/lib/gui_designer/gui_generic_commands.ui +274 -190
- data/lib/gui_designer/gui_generic_export.ui +24 -1
- data/lib/gui_designer/gui_generic_import.ui +25 -2
- data/lib/gui_designer/gui_i2c_command.ui +3 -0
- data/lib/gui_designer/gui_i2c_settings.ui +2 -2
- data/lib/gui_designer/gui_import.ui +168 -0
- data/lib/gui_designer/gui_parallel_settings.ui +4 -1
- data/lib/gui_designer/gui_progress_bar.ui +3 -0
- data/lib/gui_designer/gui_signal_mapper.ui +179 -0
- data/lib/gui_designer/gui_signal_scanner.ui +261 -0
- data/lib/gui_designer/gui_spi_settings.ui +15 -2
- data/lib/gui_designer/gui_spi_sniffer.ui +156 -0
- data/lib/gui_designer/gui_swd_settings.ui +189 -0
- data/lib/gui_designer/gui_uart_baudrate.ui +161 -0
- data/lib/gui_designer/gui_uart_console.ui +284 -0
- data/lib/gui_designer/gui_uart_settings.ui +280 -0
- data/lib/logs/error.log +63 -0
- data/lib/models/bus.rb +19 -0
- data/lib/models/byte.rb +29 -0
- data/lib/models/chip.rb +41 -0
- data/lib/models/chip_type.rb +14 -0
- data/lib/models/command.rb +20 -0
- data/lib/models/i2c_setting.rb +41 -0
- data/lib/models/manufacturer.rb +14 -0
- data/lib/models/package.rb +26 -0
- data/lib/models/parallel_setting.rb +37 -0
- data/lib/models/pin.rb +14 -0
- data/lib/models/signall.rb +20 -0
- data/lib/models/spi_setting.rb +67 -0
- data/lib/models/swd_setting.rb +25 -0
- data/lib/models/uart_setting.rb +52 -0
- data/lib/models/use.rb +6 -0
- data/lib/startHardsploit.rb +2 -2
- metadata +106 -41
- data/lib/Firmware/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd +0 -0
- data/lib/HardsploitAPI/HardsploitAPI.rb +0 -133
- data/lib/HardsploitAPI/HardsploitAPI_CONSTANT.rb +0 -145
- data/lib/HardsploitAPI/HardsploitAPI_ERROR.rb +0 -38
- data/lib/HardsploitAPI/HardsploitAPI_FIRMWARE.rb +0 -311
- data/lib/HardsploitAPI/HardsploitAPI_I2C.rb +0 -360
- data/lib/HardsploitAPI/HardsploitAPI_SPI.rb +0 -369
- data/lib/HardsploitAPI/HardsploitAPI_USB_COMMUNICATION.rb +0 -148
- data/lib/HardsploitAPI/LICENSE.txt +0 -674
- data/lib/HardsploitAPI/README.md +0 -22
- data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD.rb +0 -249
- data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb +0 -102
- data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_MEM_AP.rb +0 -78
- data/lib/HardsploitAPI/TRADEMARK +0 -3
- data/lib/class/HardsploitGUI.rb +0 -463
- data/lib/class/I2C/I2c_export.rb +0 -118
- data/lib/class/I2C/I2c_import.rb +0 -79
- data/lib/class/I2C/I2c_settings.rb +0 -129
- data/lib/class/PARALLEL/Parallel_export.rb +0 -146
- data/lib/class/PARALLEL/Parallel_import.rb +0 -88
- data/lib/class/PARALLEL/Parallel_settings.rb +0 -102
- data/lib/class/SPI/Spi_export.rb +0 -138
- data/lib/class/SPI/Spi_import.rb +0 -113
- data/lib/class/SPI/Spi_settings.rb +0 -134
- data/lib/db/hs.db +0 -0
- data/lib/hardsploit.rb +0 -131
data/lib/class/Command_editor.rb
CHANGED
@@ -5,8 +5,6 @@
|
|
5
5
|
# License URI: http://www.gnu.org/licenses/gpl.txt
|
6
6
|
#===================================================
|
7
7
|
|
8
|
-
require_relative '../HardsploitAPI/HardsploitAPI'
|
9
|
-
require_relative '../class/Command_table'
|
10
8
|
require_relative '../gui/gui_command_editor'
|
11
9
|
class Command_editor < Qt::Widget
|
12
10
|
slots 'add_cmd()'
|
@@ -16,70 +14,134 @@ class Command_editor < Qt::Widget
|
|
16
14
|
slots 'remove_row()'
|
17
15
|
slots 'check_cell_content(QTableWidgetItem*)'
|
18
16
|
|
19
|
-
def initialize(action, cmd_name, chip, bus_id, parent,
|
17
|
+
def initialize(action, cmd_name, chip, bus_id, parent, bus_param={})
|
20
18
|
super()
|
21
|
-
@
|
19
|
+
@view = Ui_Command_editor.new
|
22
20
|
centerWindow(self)
|
23
|
-
@
|
24
|
-
@bus = Bus.
|
25
|
-
@chip_id = chip.
|
21
|
+
@view.setupUi(self)
|
22
|
+
@bus = Bus.find(bus_id)
|
23
|
+
@chip_id = chip.id
|
26
24
|
@cmd_name = cmd_name
|
27
25
|
@bus_id = bus_id
|
28
26
|
@parent = parent
|
29
|
-
@
|
30
|
-
@cmd_table = Command_table.new(@api, @cmd_editor_gui.tbl_bytes, @bus.bus_name)
|
31
|
-
|
32
|
-
inputRestrict(@cmd_editor_gui.lie_name, 2)
|
33
|
-
inputRestrict(@cmd_editor_gui.lie_description, 2)
|
34
|
-
@cmd_editor_gui.lbl_chip_val.setText(chip.chip_reference)
|
27
|
+
@cmd_table = Command_table.new(@view.tbl_bytes, @bus.name)
|
35
28
|
|
29
|
+
inputRestrict(@view.lie_name, 2)
|
30
|
+
inputRestrict(@view.lie_description, 2)
|
31
|
+
@view.lbl_chip_val.setText(chip.reference)
|
36
32
|
@cmd_table.resize_to_content
|
37
|
-
|
38
|
-
|
39
|
-
@cmd_table.build_spi
|
40
|
-
end
|
41
|
-
@cmd_editor_gui.lie_text_2_bytes.hide if @bus.bus_name != 'SPI'
|
33
|
+
@cmd_table.build_spi if @bus.name == 'SPI'
|
34
|
+
@view.lie_text_2_bytes.hide unless @bus.name == 'SPI'
|
42
35
|
|
43
36
|
case action
|
44
37
|
when 0
|
45
38
|
# Add
|
46
|
-
@
|
47
|
-
Qt::Object.connect(@
|
39
|
+
@view.lbl_cmd_val.setText('-')
|
40
|
+
Qt::Object.connect(@view.btn_validate, SIGNAL('clicked()'), self, SLOT('add_cmd()'))
|
48
41
|
when 1
|
49
|
-
#
|
50
|
-
@
|
42
|
+
# Template
|
43
|
+
@view.lbl_cmd_val.setText(cmd_name)
|
51
44
|
feed_editor_form
|
52
|
-
@
|
53
|
-
Qt::Object.connect(@
|
45
|
+
@view.lie_name.setText('')
|
46
|
+
Qt::Object.connect(@view.btn_validate, SIGNAL('clicked()'), self, SLOT('add_cmd()'))
|
54
47
|
else
|
55
48
|
# Edit
|
56
|
-
@
|
49
|
+
@view.lbl_cmd_val.setText(cmd_name)
|
57
50
|
feed_editor_form
|
58
|
-
@
|
59
|
-
Qt::Object.connect(@
|
51
|
+
@view.btn_validate.setText('Edit')
|
52
|
+
Qt::Object.connect(@view.btn_validate, SIGNAL('clicked()'), self, SLOT('edit_cmd()'))
|
60
53
|
end
|
61
54
|
unless bus_param.empty?
|
62
55
|
feed_i2c_cmd_array(bus_param)
|
63
56
|
end
|
64
57
|
rescue Exception => msg
|
65
|
-
|
66
|
-
|
67
|
-
|
58
|
+
ErrorMsg.new.unknown(msg)
|
59
|
+
end
|
60
|
+
|
61
|
+
def feed_i2c_cmd_array(bus_param)
|
62
|
+
if bus_param[:mode] == 'w'
|
63
|
+
@cmd_table.i2c_write_cmd(bus_param[:addr], bus_param[:size].to_i)
|
64
|
+
else
|
65
|
+
@cmd_table.i2c_read_cmd(bus_param[:addr], bus_param[:size].to_i)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def add_cmd
|
70
|
+
return false if @cmd_table.empty_data_exist? || is_cmd_size_valid? == false
|
71
|
+
@cmd = Command.create(
|
72
|
+
name: @view.lie_name.text,
|
73
|
+
description: @view.lie_description.text,
|
74
|
+
bus_id: @bus_id,
|
75
|
+
chip_id: @chip_id
|
76
|
+
)
|
77
|
+
unless check_for_errors(@cmd)
|
78
|
+
add_bytes
|
79
|
+
@parent.feed_cmd_array
|
80
|
+
close
|
81
|
+
end
|
82
|
+
rescue Exception => msg
|
83
|
+
ErrorMsg.new.unknown(msg)
|
84
|
+
end
|
85
|
+
|
86
|
+
def edit_cmd
|
87
|
+
return false if @cmd_table.empty_data_exist? && !is_cmd_size_valid?
|
88
|
+
@cmd = Command.find_by(name: @cmd_name, chip_id: @chip_id)
|
89
|
+
@cmd.update(
|
90
|
+
name: @view.lie_name.text,
|
91
|
+
description: @view.lie_description.text
|
92
|
+
)
|
93
|
+
@view.tbl_bytes.sortItems(0, Qt::AscendingOrder)
|
94
|
+
unless check_for_errors(@cmd)
|
95
|
+
Byte.where(command_id: @cmd.id).destroy_all
|
96
|
+
add_bytes
|
97
|
+
@parent.feed_cmd_array
|
98
|
+
close
|
99
|
+
end
|
100
|
+
rescue Exception => msg
|
101
|
+
ErrorMsg.new.unknown(msg)
|
102
|
+
end
|
103
|
+
|
104
|
+
def add_bytes
|
105
|
+
@view.tbl_bytes.sortItems(0, Qt::AscendingOrder)
|
106
|
+
@view.tbl_bytes.rowCount.times do |i|
|
107
|
+
if @bus.name == 'SPI'
|
108
|
+
iteration = @view.tbl_bytes.item(i, 2).text
|
109
|
+
description = @view.tbl_bytes.item(i, 3).text
|
110
|
+
else
|
111
|
+
iteration = nil
|
112
|
+
description = @view.tbl_bytes.item(i, 2).text
|
113
|
+
end
|
114
|
+
byte = Byte.create(
|
115
|
+
index: i.next,
|
116
|
+
value: @view.tbl_bytes.item(i, 1).text,
|
117
|
+
iteration: iteration,
|
118
|
+
description: description,
|
119
|
+
command_id: @cmd.id
|
120
|
+
)
|
121
|
+
return false if check_for_errors(byte)
|
122
|
+
end
|
123
|
+
Qt::MessageBox.new(
|
124
|
+
Qt::MessageBox::Information,
|
125
|
+
'Command status',
|
126
|
+
'Command saved'
|
127
|
+
).exec
|
128
|
+
rescue Exception => msg
|
129
|
+
ErrorMsg.new.unknown(msg)
|
68
130
|
end
|
69
131
|
|
70
132
|
def check_cell_content(item)
|
71
|
-
case @
|
133
|
+
case @view.tbl_bytes.horizontalHeaderItem(item.column).text
|
72
134
|
when 'Order', 'Repetition'
|
73
135
|
if item.text.to_i < 0
|
74
136
|
item.setData(0, Qt::Variant.new(0))
|
75
|
-
|
137
|
+
ErrorMsg.new.positive_cell_value
|
76
138
|
end
|
77
139
|
when 'Byte (Hexa)'
|
78
140
|
reg = Qt::RegExp.new("^[A-Fa-f0-9]{2}")
|
79
141
|
reg_val = Qt::RegExpValidator.new(reg, self)
|
80
142
|
if reg_val.validate(item.text, item.text.length) == 0
|
81
143
|
item.setText('')
|
82
|
-
|
144
|
+
ErrorMsg.new.hexa_cell_value
|
83
145
|
end
|
84
146
|
when 'Description'
|
85
147
|
unless item.text.nil?
|
@@ -87,174 +149,60 @@ class Command_editor < Qt::Widget
|
|
87
149
|
reg_val = Qt::RegExpValidator.new(reg, self)
|
88
150
|
if reg_val.validate(item.text, item.text.length) == 0
|
89
151
|
item.setText('')
|
90
|
-
|
152
|
+
ErrorMsg.new.char_cell_value
|
91
153
|
end
|
92
154
|
end
|
93
155
|
end
|
94
156
|
rescue Exception => msg
|
95
|
-
|
96
|
-
logger = Logger.new($logFilePath)
|
97
|
-
logger.error msg
|
157
|
+
ErrorMsg.new.unknown(msg)
|
98
158
|
end
|
99
159
|
|
100
160
|
def is_cmd_size_valid?
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
return false
|
123
|
-
else
|
124
|
-
highByte = @cmd_editor_gui.tbl_bytes.item(i + 1, 1).text
|
125
|
-
end
|
126
|
-
if @cmd_editor_gui.tbl_bytes.item(i + 2, 1).nil?
|
127
|
-
Qt::MessageBox.new(Qt::MessageBox::Critical, 'Command error', 'Payload size invalid or Read / Write address missing').exec
|
128
|
-
return false
|
129
|
-
else
|
130
|
-
commandType = @cmd_editor_gui.tbl_bytes.item(i + 2, 1).text
|
131
|
-
end
|
132
|
-
count = count + (HardsploitAPI.BytesToInt(lowByte.to_i(16), highByte.to_i(16)))
|
133
|
-
if commandType.to_i(16) % 2 == 0 #WRITE
|
134
|
-
i = (i + ((HardsploitAPI.BytesToInt(lowByte.to_i(16), highByte.to_i(16))) + 3))
|
135
|
-
else #READ
|
136
|
-
i = (i + 3)
|
137
|
-
end
|
138
|
-
end
|
139
|
-
if i != @cmd_editor_gui.tbl_bytes.rowCount
|
140
|
-
Qt::MessageBox.new(Qt::MessageBox::Critical, 'Command error', 'I2C command incorrectly formated: The payload size does not match with the row number').exec
|
141
|
-
return false
|
142
|
-
end
|
143
|
-
if count > 2000
|
144
|
-
Qt::MessageBox.new(Qt::MessageBox::Critical, 'I2C command invalid', 'Your payload is too big (> 2000)').exec
|
145
|
-
return false
|
146
|
-
else
|
147
|
-
return true
|
148
|
-
end
|
149
|
-
else
|
150
|
-
return false
|
151
|
-
end
|
152
|
-
rescue Exception => msg
|
153
|
-
Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while verifying the command size. Consult the logs for more details').exec
|
154
|
-
logger = Logger.new($logFilePath)
|
155
|
-
logger.error msg
|
156
|
-
end
|
157
|
-
|
158
|
-
def feed_i2c_cmd_array(bus_param)
|
159
|
-
if bus_param[:mode] == 'w'
|
160
|
-
@cmd_table.i2c_write_cmd(bus_param[:addr], bus_param[:size].to_i)
|
161
|
-
else
|
162
|
-
@cmd_table.i2c_read_cmd(bus_param[:addr], bus_param[:size].to_i)
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
def add_cmd
|
167
|
-
if @cmd_table.empty_data_exist? || is_cmd_size_valid? == false
|
168
|
-
return false
|
169
|
-
end
|
170
|
-
if @cmd_editor_gui.lie_name.text.empty? || @cmd_editor_gui.lie_description.text.empty?
|
171
|
-
Qt::MessageBox.new(Qt::MessageBox::Warning, 'Information missing', 'Name or description empty').exec
|
172
|
-
return false
|
173
|
-
end
|
174
|
-
cmd = Cmd.new
|
175
|
-
cmd.cmd_name = @cmd_editor_gui.lie_name.text
|
176
|
-
cmd.cmd_desc = @cmd_editor_gui.lie_description.text
|
177
|
-
cmd.cmd_bus = @bus_id
|
178
|
-
cmd.cmd_chip = @chip_id
|
179
|
-
cmd.save
|
180
|
-
@cmd_editor_gui.tbl_bytes.sortItems(0, Qt::AscendingOrder)
|
181
|
-
@cmd_editor_gui.tbl_bytes.rowCount.times do |i|
|
182
|
-
byte = Byte.new
|
183
|
-
byte.byte_index = i + 1
|
184
|
-
byte.byte_value = @cmd_editor_gui.tbl_bytes.item(i, 1).text
|
185
|
-
if @bus.bus_name == 'SPI'
|
186
|
-
byte.byte_iteration = @cmd_editor_gui.tbl_bytes.item(i, 2).text
|
187
|
-
byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 3).text
|
188
|
-
else
|
189
|
-
byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 2).text
|
190
|
-
end
|
191
|
-
byte.byte_cmd = Cmd.ids.last
|
192
|
-
byte.save
|
193
|
-
end
|
194
|
-
@parent.feed_cmd_array
|
195
|
-
close
|
196
|
-
rescue Exception => msg
|
197
|
-
Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while adding the command. Consult the logs for more details').exec
|
198
|
-
logger = Logger.new($logFilePath)
|
199
|
-
logger.error msg
|
200
|
-
end
|
201
|
-
|
202
|
-
def edit_cmd
|
203
|
-
if @cmd_table.empty_data_exist? && !is_cmd_size_valid?
|
204
|
-
return false
|
205
|
-
end
|
206
|
-
if @cmd_editor_gui.lie_name.text.empty? || @cmd_editor_gui.lie_description.text.empty?
|
207
|
-
Qt::MessageBox.new(Qt::MessageBox::Warning, 'Information missing', 'Name or description empty').exec
|
208
|
-
return false
|
209
|
-
end
|
210
|
-
cmd = Cmd.find_by(cmd_name: @cmd_name, cmd_chip: @chip_id)
|
211
|
-
if cmd.cmd_name != @cmd_editor_gui.lie_name.text
|
212
|
-
cmd.update(cmd_name: @cmd_editor_gui.lie_name.text)
|
213
|
-
end
|
214
|
-
if cmd.cmd_desc != @cmd_editor_gui.lie_description.text
|
215
|
-
cmd.update(cmd_desc: @cmd_editor_gui.lie_description.text)
|
216
|
-
end
|
217
|
-
@cmd_editor_gui.tbl_bytes.sortItems(0, Qt::AscendingOrder)
|
218
|
-
bytes = Byte.where(byte_cmd: cmd.cmd_id)
|
219
|
-
bytes.destroy_all
|
220
|
-
@cmd_editor_gui.tbl_bytes.rowCount.times do |i|
|
221
|
-
byte = Byte.new
|
222
|
-
byte.byte_index = i + 1
|
223
|
-
byte.byte_value = @cmd_editor_gui.tbl_bytes.item(i, 1).text
|
224
|
-
if @bus.bus_name == 'SPI'
|
225
|
-
byte.byte_iteration = @cmd_editor_gui.tbl_bytes.item(i, 2).text
|
226
|
-
byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 3).text
|
227
|
-
else
|
228
|
-
byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 2).text
|
161
|
+
byte_table_size = @view.tbl_bytes.rowCount
|
162
|
+
case @bus_name
|
163
|
+
when 'SPI'
|
164
|
+
cmd_size = byte_table_size + @cmd_table.count_total_repetition
|
165
|
+
return true if cmd_size < 4000
|
166
|
+
return ErrorMsg.new.spi_cmd_too_long
|
167
|
+
when 'I2C'
|
168
|
+
count = i = 0
|
169
|
+
while i <= byte_table_size - 1 do
|
170
|
+
low_byte = @view.tbl_bytes.item(i, 1)
|
171
|
+
high_byte = @view.tbl_bytes.item(i + 1, 1)
|
172
|
+
command_byte = @view.tbl_bytes.item(i + 2, 1)
|
173
|
+
return ErrorMsg.new.lowbyte_missing if low_byte.nil?
|
174
|
+
return ErrorMsg.new.highbyte_missing if high_byte.nil?
|
175
|
+
return ErrorMsg.new.mode_missing if command_byte.nil?
|
176
|
+
current_count = HardsploitAPI.BytesToInt(
|
177
|
+
lByte: low_byte.text.to_i(16),
|
178
|
+
hByte: high_byte.text.to_i(16)
|
179
|
+
)
|
180
|
+
count += current_count
|
181
|
+
(command_type.to_i(16) % 2).zero? ? i += current_count + 3 : i += 3
|
229
182
|
end
|
230
|
-
|
231
|
-
|
183
|
+
return ErrorMsg.new.size_neq_row_number unless i == byte_table_size
|
184
|
+
return ErrorMsg.new.i2c_cmd_too_long if count > 2000
|
185
|
+
return true
|
232
186
|
end
|
233
|
-
@parent.feed_cmd_array
|
234
|
-
close
|
235
187
|
rescue Exception => msg
|
236
|
-
|
237
|
-
logger = Logger.new($logFilePath)
|
238
|
-
logger.error msg
|
188
|
+
ErrorMsg.new.unknown(msg)
|
239
189
|
end
|
240
190
|
|
241
191
|
def feed_editor_form
|
242
|
-
cmd =
|
243
|
-
@
|
244
|
-
@
|
245
|
-
@cmd_table.fill_byte_table(cmd.
|
192
|
+
cmd = Command.find_by(name: @cmd_name)
|
193
|
+
@view.lie_name.setText(@cmd_name)
|
194
|
+
@view.lie_description.setText(cmd.description)
|
195
|
+
@cmd_table.fill_byte_table(cmd.bytes)
|
246
196
|
rescue Exception => msg
|
247
|
-
|
248
|
-
logger = Logger.new($logFilePath)
|
249
|
-
logger.error msg
|
197
|
+
ErrorMsg.new.unknown(msg)
|
250
198
|
end
|
251
199
|
|
252
200
|
def add_row
|
253
|
-
if @
|
201
|
+
if @view.lie_text_2_bytes.text.empty?
|
254
202
|
@cmd_table.add_row
|
255
203
|
else
|
256
|
-
@cmd_table.add_text_rows(@
|
257
|
-
@
|
204
|
+
@cmd_table.add_text_rows(@view.lie_text_2_bytes.text)
|
205
|
+
@view.lie_text_2_bytes.setText('')
|
258
206
|
end
|
259
207
|
end
|
260
208
|
|
data/lib/class/Command_table.rb
CHANGED
@@ -5,15 +5,12 @@
|
|
5
5
|
# License URI: http://www.gnu.org/licenses/gpl.txt
|
6
6
|
#===================================================
|
7
7
|
|
8
|
-
require_relative '../HardsploitAPI/HardsploitAPI'
|
9
|
-
|
10
8
|
class Command_table < Qt::Widget
|
11
9
|
|
12
|
-
def initialize(
|
10
|
+
def initialize(cmd_table, bus)
|
13
11
|
super()
|
14
12
|
@cmd_table = cmd_table
|
15
13
|
@bus = bus
|
16
|
-
@api = api
|
17
14
|
cmd_table.insertColumn(0)
|
18
15
|
cmd_table.setHorizontalHeaderItem(0, Qt::TableWidgetItem.new('Order'))
|
19
16
|
cmd_table.insertColumn(1)
|
@@ -30,17 +27,17 @@ class Command_table < Qt::Widget
|
|
30
27
|
def fill_byte_table(byte_list)
|
31
28
|
byte_list.to_enum.with_index(0).each do |b, i|
|
32
29
|
@cmd_table.insertRow(@cmd_table.rowCount)
|
33
|
-
@cmd_table.setItem(i, 1, Qt::TableWidgetItem.new(b.
|
30
|
+
@cmd_table.setItem(i, 1, Qt::TableWidgetItem.new(b.value))
|
34
31
|
if @bus == 'SPI'
|
35
32
|
item = Qt::TableWidgetItem.new
|
36
|
-
item.setData(0, Qt::Variant.new(b.
|
33
|
+
item.setData(0, Qt::Variant.new(b.iteration))
|
37
34
|
@cmd_table.setItem(i, 2, item)
|
38
|
-
@cmd_table.setItem(i, 3, Qt::TableWidgetItem.new(b.
|
35
|
+
@cmd_table.setItem(i, 3, Qt::TableWidgetItem.new(b.description))
|
39
36
|
else
|
40
|
-
@cmd_table.setItem(i, 2, Qt::TableWidgetItem.new(b.
|
37
|
+
@cmd_table.setItem(i, 2, Qt::TableWidgetItem.new(b.description))
|
41
38
|
end
|
42
39
|
item = Qt::TableWidgetItem.new
|
43
|
-
item.setData(0, Qt::Variant.new(b.
|
40
|
+
item.setData(0, Qt::Variant.new(b.index))
|
44
41
|
@cmd_table.setItem(i, 0, item)
|
45
42
|
end
|
46
43
|
end
|
@@ -62,7 +59,7 @@ class Command_table < Qt::Widget
|
|
62
59
|
end
|
63
60
|
|
64
61
|
def add_text_rows(txt)
|
65
|
-
|
62
|
+
return ErrorMsg.new.ascii_only unless txt.ascii_only?
|
66
63
|
txt.each_byte do |x|
|
67
64
|
@cmd_table.insertRow(@cmd_table.rowCount)
|
68
65
|
@cmd_table.setItem(@cmd_table.rowCount - 1, 1, Qt::TableWidgetItem.new(x.to_s(16)))
|
@@ -74,9 +71,6 @@ class Command_table < Qt::Widget
|
|
74
71
|
item.setData(0, Qt::Variant.new(@cmd_table.rowCount))
|
75
72
|
@cmd_table.setItem(@cmd_table.rowCount - 1, 0, item)
|
76
73
|
end
|
77
|
-
else
|
78
|
-
Qt::MessageBox.new(Qt::MessageBox::Warning, 'String error', 'Only ASCII characters can be specified').exec
|
79
|
-
end
|
80
74
|
end
|
81
75
|
|
82
76
|
def clone_rows
|
@@ -102,7 +96,7 @@ class Command_table < Qt::Widget
|
|
102
96
|
end
|
103
97
|
else
|
104
98
|
unless @cmd_table.item(row, 2).nil?
|
105
|
-
@cmd_table.setItem(@cmd_table.rowCount - 1, 2, Qt::TableWidgetItem.new(@cmd_table.item(row,
|
99
|
+
@cmd_table.setItem(@cmd_table.rowCount - 1, 2, Qt::TableWidgetItem.new(@cmd_table.item(row, 2).text))
|
106
100
|
end
|
107
101
|
end
|
108
102
|
unless @cmd_table.item(row, 0).nil?
|
@@ -129,14 +123,14 @@ class Command_table < Qt::Widget
|
|
129
123
|
# Byte array size
|
130
124
|
@cmd_table.setRowCount(3)
|
131
125
|
# Size 1
|
132
|
-
@cmd_table.setItem(0, 1, Qt::TableWidgetItem.new(HardsploitAPI.lowByte(cmd_size).to_s(16).upcase))
|
126
|
+
@cmd_table.setItem(0, 1, Qt::TableWidgetItem.new(HardsploitAPI.lowByte(word: cmd_size).to_s(16).upcase))
|
133
127
|
@cmd_table.setItem(0, 2, Qt::TableWidgetItem.new('Payload size - low'))
|
134
128
|
# Index
|
135
129
|
item = Qt::TableWidgetItem.new
|
136
130
|
item.setData(0, Qt::Variant.new(1))
|
137
131
|
@cmd_table.setItem(0, 0, item)
|
138
132
|
# Size 2
|
139
|
-
@cmd_table.setItem(1, 1, Qt::TableWidgetItem.new(HardsploitAPI.highByte(cmd_size).to_s(16).upcase))
|
133
|
+
@cmd_table.setItem(1, 1, Qt::TableWidgetItem.new(HardsploitAPI.highByte(word: cmd_size).to_s(16).upcase))
|
140
134
|
@cmd_table.setItem(1, 2, Qt::TableWidgetItem.new('Payload size - high'))
|
141
135
|
# Index
|
142
136
|
item = Qt::TableWidgetItem.new
|
@@ -156,7 +150,7 @@ class Command_table < Qt::Widget
|
|
156
150
|
@cmd_table.setRowCount(3 + cmd_size)
|
157
151
|
# Payload size low
|
158
152
|
# -byte
|
159
|
-
itemLB1 = Qt::TableWidgetItem.new(HardsploitAPI.lowByte(cmd_size).to_s(16).upcase)
|
153
|
+
itemLB1 = Qt::TableWidgetItem.new(HardsploitAPI.lowByte(word: cmd_size).to_s(16).upcase)
|
160
154
|
@cmd_table.setItem(0, 1, itemLB1)
|
161
155
|
# -description
|
162
156
|
itemLB3 = Qt::TableWidgetItem.new('Payload size - low')
|
@@ -167,7 +161,7 @@ class Command_table < Qt::Widget
|
|
167
161
|
@cmd_table.setItem(0, 0, itemLB0)
|
168
162
|
# Payload size high
|
169
163
|
# -byte
|
170
|
-
itemHB1 = Qt::TableWidgetItem.new(HardsploitAPI.highByte(cmd_size).to_s(16).upcase)
|
164
|
+
itemHB1 = Qt::TableWidgetItem.new(HardsploitAPI.highByte(word: cmd_size).to_s(16).upcase)
|
171
165
|
@cmd_table.setItem(1, 1, itemHB1)
|
172
166
|
# -description
|
173
167
|
itemHB3 = Qt::TableWidgetItem.new('Payload size - high')
|
@@ -193,7 +187,7 @@ class Command_table < Qt::Widget
|
|
193
187
|
@cmd_table.setItem(i, 2, Qt::TableWidgetItem.new('Payload byte'))
|
194
188
|
# Index
|
195
189
|
item = Qt::TableWidgetItem.new
|
196
|
-
item.setData(0, Qt::Variant.new(
|
190
|
+
item.setData(0, Qt::Variant.new(i.next))
|
197
191
|
@cmd_table.setItem(i, 0, item)
|
198
192
|
end
|
199
193
|
end
|
@@ -205,11 +199,11 @@ class Command_table < Qt::Widget
|
|
205
199
|
end
|
206
200
|
|
207
201
|
def count_total_repetition
|
208
|
-
|
202
|
+
repetition_value = 0
|
209
203
|
@cmd_table.rowCount.times do |i|
|
210
|
-
|
204
|
+
repetition_value += @cmd_table.item(i, 2).text.to_i
|
211
205
|
end
|
212
|
-
return
|
206
|
+
return repetition_value
|
213
207
|
end
|
214
208
|
|
215
209
|
def empty_data_exist?
|