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
@@ -9,38 +9,41 @@ require_relative '../../gui/gui_i2c_command'
|
|
9
9
|
class I2c_command < Qt::Widget
|
10
10
|
slots 'open_generic_cmd()'
|
11
11
|
|
12
|
-
def initialize(
|
12
|
+
def initialize(chip, bus_id, parent)
|
13
13
|
super()
|
14
|
-
@
|
14
|
+
@view = Ui_I2c_command.new
|
15
15
|
centerWindow(self)
|
16
|
-
@
|
17
|
-
@
|
18
|
-
inputRestrict(@
|
16
|
+
@view.setupUi(self)
|
17
|
+
@view.rbn_read.setChecked(true)
|
18
|
+
inputRestrict(@view.lie_size, 0)
|
19
19
|
@chip = chip
|
20
|
-
@chip_settings =
|
21
|
-
@api = api
|
20
|
+
@chip_settings = chip.i2c_setting
|
22
21
|
@bus_id = bus_id
|
23
22
|
@parent = parent
|
24
23
|
end
|
25
24
|
|
26
25
|
def open_generic_cmd
|
27
26
|
return 0 if check_form_param.zero?
|
28
|
-
if @
|
27
|
+
if @view.rbn_read.isChecked
|
29
28
|
mode = "r"
|
30
|
-
addr = @chip_settings.
|
29
|
+
addr = @chip_settings.address_r
|
31
30
|
else
|
32
31
|
mode = "w"
|
33
|
-
addr = @chip_settings.
|
32
|
+
addr = @chip_settings.address_w
|
34
33
|
end
|
35
|
-
i2c_cmd_form = Command_editor.new(0, nil, @chip, @bus_id, @parent,
|
34
|
+
i2c_cmd_form = Command_editor.new(0, nil, @chip, @bus_id, @parent, :mode => mode, :size => @view.lie_size.text, :addr => addr)
|
36
35
|
i2c_cmd_form.setWindowModality(Qt::ApplicationModal)
|
37
36
|
i2c_cmd_form.show
|
38
37
|
close
|
39
38
|
end
|
40
39
|
|
41
40
|
def check_form_param
|
42
|
-
if @
|
43
|
-
Qt::MessageBox.new(
|
41
|
+
if @view.lie_size.text.empty? || @view.lie_size.text.to_i.zero?
|
42
|
+
Qt::MessageBox.new(
|
43
|
+
Qt::MessageBox::Information,
|
44
|
+
"Form invalid",
|
45
|
+
"Payload size must be filled and superior to 0"
|
46
|
+
).exec
|
44
47
|
return 0
|
45
48
|
end
|
46
49
|
return 1
|
@@ -0,0 +1,95 @@
|
|
1
|
+
#===================================================
|
2
|
+
# Hardsploit GUI - By Opale Security
|
3
|
+
# www.opale-security.com || www.hardsploit.io
|
4
|
+
# License: GNU General Public License v3
|
5
|
+
# License URI: http://www.gnu.org/licenses/gpl.txt
|
6
|
+
#===================================================
|
7
|
+
|
8
|
+
require_relative '../../gui/gui_generic_export'
|
9
|
+
require_relative '../../HardsploitAPI/Modules/I2C/HardsploitAPI_I2C'
|
10
|
+
class I2c_export < Qt::Widget
|
11
|
+
slots 'export()'
|
12
|
+
slots 'select_export_file()'
|
13
|
+
|
14
|
+
def initialize(chip)
|
15
|
+
super()
|
16
|
+
@view = Ui_Generic_export.new
|
17
|
+
centerWindow(self)
|
18
|
+
@view.setupUi(self)
|
19
|
+
@view.lbl_chip.setText(chip.reference)
|
20
|
+
inputRestrict(@view.lie_start, 0)
|
21
|
+
inputRestrict(@view.lie_stop, 0)
|
22
|
+
@chip = chip
|
23
|
+
end
|
24
|
+
|
25
|
+
def select_export_file
|
26
|
+
@filepath = Qt::FileDialog.getSaveFileName(self, tr('Select a file'), '/', tr('*.*'))
|
27
|
+
unless @filepath.nil?
|
28
|
+
@view.btn_export.setEnabled(true)
|
29
|
+
@view.btn_full_export.setEnabled(true)
|
30
|
+
@view.lbl_selected_file.setText("#{@filepath.split("/").last}")
|
31
|
+
end
|
32
|
+
rescue Exception => msg
|
33
|
+
ErrorMsg.new.unknown(msg)
|
34
|
+
end
|
35
|
+
|
36
|
+
def export
|
37
|
+
$file = File.open("#{@filepath}", 'w') unless @filepath.nil?
|
38
|
+
if sender.objectName == 'btn_full_export'
|
39
|
+
return false unless control_export_settings('full')
|
40
|
+
start = 0
|
41
|
+
stop = @chip.i2c_setting.total_size - 1
|
42
|
+
control = @chip.i2c_setting.total_size
|
43
|
+
else
|
44
|
+
return false unless control_export_settings('partial')
|
45
|
+
start = @view.lie_start.text.to_i
|
46
|
+
stop = @view.lie_stop.text.to_i
|
47
|
+
control = (stop - start) + 1
|
48
|
+
end
|
49
|
+
Firmware.new('I2C')
|
50
|
+
$pgb = Progress_bar.new("I²C: Exporting...")
|
51
|
+
$pgb.show
|
52
|
+
|
53
|
+
if [40, 100, 400, 1000].include?(@chip.i2c_setting.frequency)
|
54
|
+
speed = 0 if @chip.i2c_setting.frequency == 100
|
55
|
+
speed = 1 if @chip.i2c_setting.frequency == 400
|
56
|
+
speed = 2 if @chip.i2c_setting.frequency == 1000
|
57
|
+
speed = 3 if @chip.i2c_setting.frequency == 40
|
58
|
+
i2c = HardsploitAPI_I2C.new(speed: speed)
|
59
|
+
i2c.i2c_Generic_Dump(
|
60
|
+
i2cBaseAddress: @chip.i2c_setting.address_w.to_i(16),
|
61
|
+
startAddress: start,
|
62
|
+
stopAddress: stop,
|
63
|
+
sizeMax: @chip.i2c_setting.total_size
|
64
|
+
)
|
65
|
+
end
|
66
|
+
$file.close unless $file.nil?
|
67
|
+
ErrorMsg.new.filesize_error unless control == File.size(@filepath)
|
68
|
+
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
|
69
|
+
ErrorMsg.new.hardsploit_not_found
|
70
|
+
rescue HardsploitAPI::ERROR::USB_ERROR
|
71
|
+
ErrorMsg.new.usb_error
|
72
|
+
rescue Exception => msg
|
73
|
+
ErrorMsg.new.unknown(msg)
|
74
|
+
end
|
75
|
+
|
76
|
+
def control_export_settings(type)
|
77
|
+
return ErrorMsg.new.settings_missing if @chip.i2c_setting.nil?
|
78
|
+
return ErrorMsg.new.frequency_missing if @chip.i2c_setting.frequency.nil?
|
79
|
+
return ErrorMsg.new.mode_missing if @chip.i2c_setting.address_w.nil?
|
80
|
+
return ErrorMsg.new.full_size_error if @chip.i2c_setting.total_size.nil?
|
81
|
+
return ErrorMsg.new.full_size_error if @chip.i2c_setting.total_size.zero?
|
82
|
+
if type == 'partial'
|
83
|
+
return ErrorMsg.new.start_stop_missing if @view.lie_start.text.empty?
|
84
|
+
return ErrorMsg.new.start_stop_missing if @view.lie_stop.text.empty?
|
85
|
+
start = @view.lie_start.text.to_i
|
86
|
+
stop = @view.lie_stop.text.to_i
|
87
|
+
total_size = @chip.i2c_setting.total_size
|
88
|
+
return ErrorMsg.new.start_neq_stop if start == stop
|
89
|
+
return ErrorMsg.new.start_inf_to_stop if start > stop
|
90
|
+
return ErrorMsg.new.inf_to_total_size if start > (total_size - 1)
|
91
|
+
return ErrorMsg.new.inf_to_total_size if stop > (total_size - 1)
|
92
|
+
end
|
93
|
+
return true
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
#===================================================
|
2
|
+
# Hardsploit GUI - By Opale Security
|
3
|
+
# www.opale-security.com || www.hardsploit.io
|
4
|
+
# License: GNU General Public License v3
|
5
|
+
# License URI: http://www.gnu.org/licenses/gpl.txt
|
6
|
+
#===================================================
|
7
|
+
|
8
|
+
require_relative '../../gui/gui_generic_import'
|
9
|
+
require_relative '../../HardsploitAPI/Modules/I2C/HardsploitAPI_I2C'
|
10
|
+
class I2c_import < Qt::Widget
|
11
|
+
slots 'import()'
|
12
|
+
slots 'select_import_file()'
|
13
|
+
|
14
|
+
def initialize(chip)
|
15
|
+
super()
|
16
|
+
@view = Ui_Generic_import.new
|
17
|
+
centerWindow(self)
|
18
|
+
@view.setupUi(self)
|
19
|
+
@view.lbl_chip.setText(chip.reference)
|
20
|
+
inputRestrict(@view.lie_start, 0)
|
21
|
+
@chip = chip
|
22
|
+
end
|
23
|
+
|
24
|
+
def select_import_file
|
25
|
+
@filepath = Qt::FileDialog.getOpenFileName(self, tr('Select a file'), '/', tr('*.*'))
|
26
|
+
unless @filepath.nil?
|
27
|
+
@view.btn_import.setEnabled(true)
|
28
|
+
@view.lbl_selected_file.setText("#{@filepath.split("/").last}")
|
29
|
+
end
|
30
|
+
rescue Exception => msg
|
31
|
+
ErrorMsg.new.unknown(msg)
|
32
|
+
end
|
33
|
+
|
34
|
+
def import
|
35
|
+
return 0 if control_import_settings.zero?
|
36
|
+
Firmware.new('I2C')
|
37
|
+
$pgb = Progress_bar.new("I²C: Exporting...")
|
38
|
+
$pgb.show
|
39
|
+
if [40, 100, 400, 1000].include?(@chip.i2c_setting.frequency)
|
40
|
+
speed = 0 if @chip.i2c_setting.frequency == 100
|
41
|
+
speed = 1 if @chip.i2c_setting.frequency == 400
|
42
|
+
speed = 2 if @chip.i2c_setting.frequency == 1000
|
43
|
+
speed = 3 if @chip.i2c_setting.frequency == 40
|
44
|
+
i2c = HardsploitAPI_I2C.new(speed: speed)
|
45
|
+
i2c.i2c_Generic_Import(
|
46
|
+
i2cBaseAddress: @chip.i2c_setting.address_w.to_i(16),
|
47
|
+
startAddress: @view.lie_start.text.to_i,
|
48
|
+
pageSize: @chip.i2c_setting.page_size,
|
49
|
+
memorySize: @chip.i2c_setting.total_size,
|
50
|
+
dataFile: @filepath,
|
51
|
+
writePageLatency: @chip.i2c_setting.write_page_latency / 1000.0
|
52
|
+
)
|
53
|
+
end
|
54
|
+
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
|
55
|
+
ErrorMsg.new.hardsploit_not_found
|
56
|
+
rescue HardsploitAPI::ERROR::USB_ERROR
|
57
|
+
ErrorMsg.new.usb_error
|
58
|
+
rescue HardsploitAPI::ERROR::I2CWrongSpeed
|
59
|
+
ErrorMsg.new.i2c_error
|
60
|
+
rescue Exception => msg
|
61
|
+
ErrorMsg.new.unknown(msg)
|
62
|
+
end
|
63
|
+
|
64
|
+
def control_import_settings
|
65
|
+
if @chip.i2c_setting.nil?
|
66
|
+
Qt::MessageBox.new(
|
67
|
+
Qt::MessageBox::Warning,
|
68
|
+
'Missing I2C setting',
|
69
|
+
'No settings saved for this chip'
|
70
|
+
).exec
|
71
|
+
return 0
|
72
|
+
end
|
73
|
+
if @chip.i2c_setting.total_size.nil?
|
74
|
+
Qt::MessageBox.new(
|
75
|
+
Qt::MessageBox::Warning,
|
76
|
+
'Missing I2C setting',
|
77
|
+
'Total size setting missing'
|
78
|
+
).exec
|
79
|
+
return 0
|
80
|
+
end
|
81
|
+
if @chip.i2c_setting.page_size.nil?
|
82
|
+
Qt::MessageBox.new(
|
83
|
+
Qt::MessageBox::Warning,
|
84
|
+
'Missing I2C setting',
|
85
|
+
'Page size setting missing'
|
86
|
+
).exec
|
87
|
+
return 0
|
88
|
+
end
|
89
|
+
if @chip.i2c_setting.write_page_latency.nil?
|
90
|
+
Qt::MessageBox.new(
|
91
|
+
Qt::MessageBox::Warning,
|
92
|
+
'Missing I2C setting',
|
93
|
+
'Write page latency setting missing'
|
94
|
+
).exec
|
95
|
+
return 0
|
96
|
+
end
|
97
|
+
if @chip.i2c_setting.frequency.nil? || @chip.i2c_setting.address_w.nil?
|
98
|
+
Qt::MessageBox.new(
|
99
|
+
Qt::MessageBox::Warning,
|
100
|
+
'Missing I2C setting',
|
101
|
+
'Write base address or frequency settings missing'
|
102
|
+
).exec
|
103
|
+
return 0
|
104
|
+
end
|
105
|
+
if @view.lie_start.text.empty?
|
106
|
+
Qt::MessageBox.new(
|
107
|
+
Qt::MessageBox::Warning,
|
108
|
+
'Missing start address',
|
109
|
+
'Please fill the Start address field'
|
110
|
+
).exec
|
111
|
+
return 0
|
112
|
+
end
|
113
|
+
return 1
|
114
|
+
rescue Exception => msg
|
115
|
+
ErrorMsg.new.unknown(msg)
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
#===================================================
|
2
|
+
# Hardsploit GUI - By Opale Security
|
3
|
+
# www.opale-security.com || www.hardsploit.io
|
4
|
+
# License: GNU General Public License v3
|
5
|
+
# License URI: http://www.gnu.org/licenses/gpl.txt
|
6
|
+
#===================================================
|
7
|
+
|
8
|
+
require_relative '../../gui/gui_signal_scanner'
|
9
|
+
require_relative '../../HardsploitAPI/Modules/I2C/HardsploitAPI_I2C'
|
10
|
+
|
11
|
+
class I2c_scanner < Qt::Widget
|
12
|
+
slots 'scan()'
|
13
|
+
slots 'autowiring()'
|
14
|
+
slots 'update_tbl(QString)'
|
15
|
+
slots 'update_cbx(QString)'
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
super()
|
19
|
+
@view = Ui_Signal_scanner.new
|
20
|
+
centerWindow(self)
|
21
|
+
@view.setupUi(self)
|
22
|
+
update_cbx('B0')
|
23
|
+
end
|
24
|
+
|
25
|
+
def scan
|
26
|
+
@view.cbx_start.setEnabled(false)
|
27
|
+
@view.cbx_stop.setEnabled(false)
|
28
|
+
@view.btn_scan.setEnabled(false)
|
29
|
+
update_tbl(@view.cbx_stop.currentText)
|
30
|
+
Firmware.new('I2C')
|
31
|
+
i2c = HardsploitAPI_I2C.new(speed: 3)
|
32
|
+
@result = i2c.find(
|
33
|
+
start_from: @view.cbx_start.currentText[1].to_i + 9,
|
34
|
+
stop_to: @view.cbx_stop.currentText[1].to_i + 9
|
35
|
+
)
|
36
|
+
unless @result[1].is_a? Array
|
37
|
+
@view.tbl_result.setItem(@result.index(0), 1, Qt::TableWidgetItem.new("CLK"))
|
38
|
+
@view.tbl_result.setItem(@result.index(1), 1, Qt::TableWidgetItem.new("SDA"))
|
39
|
+
end
|
40
|
+
@view.cbx_start.setEnabled(true)
|
41
|
+
@view.cbx_stop.setEnabled(true)
|
42
|
+
@view.btn_scan.setEnabled(true)
|
43
|
+
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
|
44
|
+
ErrorMsg.new.hardsploit_not_found
|
45
|
+
return false
|
46
|
+
rescue HardsploitAPI::ERROR::USB_ERROR
|
47
|
+
ErrorMsg.new.usb_error
|
48
|
+
return false
|
49
|
+
rescue Exception => msg
|
50
|
+
ErrorMsg.new.unknown(msg)
|
51
|
+
return false
|
52
|
+
end
|
53
|
+
|
54
|
+
def autowiring
|
55
|
+
signal_found = false
|
56
|
+
@view.tbl_result.rowCount.times do |i|
|
57
|
+
if @view.tbl_result.item(i, 1).text == 'SDA'
|
58
|
+
signal_found = true
|
59
|
+
current_signal = Signall.find_by(name: 'SDA')
|
60
|
+
current_signal.update(pin: @view.tbl_result.item(i, 0).text)
|
61
|
+
elsif @view.tbl_result.item(i, 1).text == 'CLK'
|
62
|
+
signal_found = true
|
63
|
+
current_signal = Signall.find_by(name: 'I2C_CLK')
|
64
|
+
current_signal.update(pin: @view.tbl_result.item(i, 0).text)
|
65
|
+
else
|
66
|
+
# Next row
|
67
|
+
end
|
68
|
+
end
|
69
|
+
if signal_found
|
70
|
+
Qt::MessageBox.new(
|
71
|
+
Qt::MessageBox::Information,
|
72
|
+
'Hardsploit Autowiring',
|
73
|
+
'Wiring saved. To change it, go to Menu > Signal mapper'
|
74
|
+
).exec
|
75
|
+
else
|
76
|
+
Qt::MessageBox.new(
|
77
|
+
Qt::MessageBox::Information,
|
78
|
+
'Hardsploit Autowiring',
|
79
|
+
'No signals found in the array'
|
80
|
+
).exec
|
81
|
+
end
|
82
|
+
rescue Exception => msg
|
83
|
+
ErrorMsg.new.unknown(msg)
|
84
|
+
return false
|
85
|
+
end
|
86
|
+
|
87
|
+
def update_tbl(pin)
|
88
|
+
unless @view.cbx_stop.count.zero?
|
89
|
+
@view.tbl_result.setRowCount(0)
|
90
|
+
nbr = pin[1].to_i - (@view.cbx_start.currentText[1].to_i) + 1
|
91
|
+
nbr.times do |i|
|
92
|
+
@view.tbl_result.insertRow(i)
|
93
|
+
@view.tbl_result.setItem(i, 0, Qt::TableWidgetItem.new("B#{(i + @view.cbx_start.currentText[1].to_i)}"))
|
94
|
+
@view.tbl_result.setItem(i, 1, Qt::TableWidgetItem.new('-'))
|
95
|
+
end
|
96
|
+
resize_to_content
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def resize_to_content
|
101
|
+
@view.tbl_result.resizeColumnsToContents
|
102
|
+
@view.tbl_result.resizeRowsToContents
|
103
|
+
@view.tbl_result.horizontalHeader.stretchLastSection = true
|
104
|
+
end
|
105
|
+
|
106
|
+
def update_cbx(pin)
|
107
|
+
@view.cbx_stop.clear
|
108
|
+
start_at = pin[1].to_i
|
109
|
+
end_at = 7
|
110
|
+
(end_at - start_at).times do |i|
|
111
|
+
@view.cbx_stop.addItem("B#{(i + start_at) + 1}")
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
#===================================================
|
2
|
+
# Hardsploit GUI - By Opale Security
|
3
|
+
# www.opale-security.com || www.hardsploit.io
|
4
|
+
# License: GNU General Public License v3
|
5
|
+
# License URI: http://www.gnu.org/licenses/gpl.txt
|
6
|
+
#===================================================
|
7
|
+
|
8
|
+
require_relative '../../gui/gui_i2c_settings'
|
9
|
+
class I2c_settings < Qt::Widget
|
10
|
+
slots 'save_settings()'
|
11
|
+
slots 'bus_scan()'
|
12
|
+
|
13
|
+
def initialize(chip)
|
14
|
+
super()
|
15
|
+
@view = Ui_I2c_settings.new
|
16
|
+
centerWindow(self)
|
17
|
+
@view.setupUi(self)
|
18
|
+
@view.lbl_chip.setText(chip.reference)
|
19
|
+
inputRestrict(@view.lie_total_size, 0)
|
20
|
+
inputRestrict(@view.lie_page_size, 0)
|
21
|
+
inputRestrict(@view.lie_write_page_latency, 0)
|
22
|
+
inputRestrict(@view.lie_address_r, 3)
|
23
|
+
inputRestrict(@view.lie_address_w, 3)
|
24
|
+
@view.tbl_bus_scan.resizeColumnsToContents
|
25
|
+
@view.tbl_bus_scan.resizeRowsToContents
|
26
|
+
@view.tbl_bus_scan.horizontalHeader.stretchLastSection = true
|
27
|
+
@chip = chip
|
28
|
+
feed_settings_form unless @chip.i2c_setting.nil?
|
29
|
+
rescue Exception => msg
|
30
|
+
ErrorMsg.new.unknown(msg)
|
31
|
+
end
|
32
|
+
|
33
|
+
def save_settings
|
34
|
+
@chip.i2c_setting.nil? ? create : update
|
35
|
+
@chip.reload
|
36
|
+
end
|
37
|
+
|
38
|
+
def feed_settings_form
|
39
|
+
@view.lie_address_w.setText(@chip.i2c_setting.address_w)
|
40
|
+
@view.lie_address_r.setText(@chip.i2c_setting.address_r)
|
41
|
+
@view.cbx_frequency.setCurrentIndex(@view.cbx_frequency.findText(@chip.i2c_setting.frequency.to_s))
|
42
|
+
@view.lie_write_page_latency.setText(@chip.i2c_setting.write_page_latency.to_s)
|
43
|
+
@view.lie_page_size.setText(@chip.i2c_setting.page_size.to_s)
|
44
|
+
@view.lie_total_size.setText(@chip.i2c_setting.total_size.to_s)
|
45
|
+
end
|
46
|
+
|
47
|
+
def create
|
48
|
+
chip_setting = I2cSetting.create(
|
49
|
+
address_w: @view.lie_address_w.text,
|
50
|
+
address_r: @view.lie_address_r.text,
|
51
|
+
frequency: @view.cbx_frequency.currentText.to_i,
|
52
|
+
write_page_latency: @view.lie_write_page_latency.text,
|
53
|
+
page_size: @view.lie_page_size.text,
|
54
|
+
total_size: @view.lie_total_size.text,
|
55
|
+
chip_id: @chip.id
|
56
|
+
)
|
57
|
+
unless check_for_errors(chip_setting)
|
58
|
+
Qt::MessageBox.new(
|
59
|
+
Qt::MessageBox::Information,
|
60
|
+
'Succes',
|
61
|
+
'I2C settings saved'
|
62
|
+
).exec
|
63
|
+
close
|
64
|
+
end
|
65
|
+
rescue Exception => msg
|
66
|
+
ErrorMsg.new.unknown(msg)
|
67
|
+
end
|
68
|
+
|
69
|
+
def update
|
70
|
+
@chip.i2c_setting.update(
|
71
|
+
address_w: @view.lie_address_w.text,
|
72
|
+
address_r: @view.lie_address_r.text,
|
73
|
+
frequency: @view.cbx_frequency.currentText.to_i,
|
74
|
+
write_page_latency: @view.lie_write_page_latency.text,
|
75
|
+
page_size: @view.lie_page_size.text,
|
76
|
+
total_size: @view.lie_total_size.text
|
77
|
+
)
|
78
|
+
unless check_for_errors(@chip.i2c_setting)
|
79
|
+
Qt::MessageBox.new(
|
80
|
+
Qt::MessageBox::Information,
|
81
|
+
'Succes',
|
82
|
+
'I2C settings updated'
|
83
|
+
).exec
|
84
|
+
close
|
85
|
+
end
|
86
|
+
rescue Exception => msg
|
87
|
+
ErrorMsg.new.unknown(msg)
|
88
|
+
end
|
89
|
+
|
90
|
+
def bus_scan
|
91
|
+
@view.tbl_bus_scan.setRowCount(0)
|
92
|
+
Firmware.new('I2C')
|
93
|
+
speed = 0
|
94
|
+
if [40, 100, 400, 1000].include?(@chip.i2c_setting.frequency)
|
95
|
+
speed = 0 if @chip.i2c_setting.frequency == 100
|
96
|
+
speed = 1 if @chip.i2c_setting.frequency == 400
|
97
|
+
speed = 2 if @chip.i2c_setting.frequency == 1000
|
98
|
+
speed = 3 if @chip.i2c_setting.frequency == 40
|
99
|
+
end
|
100
|
+
i2c = HardsploitAPI_I2C.new(speed: speed)
|
101
|
+
scan_result = i2c.i2c_Scan
|
102
|
+
if scan_result.include?(1)
|
103
|
+
scan_result.each_with_index do |v, i|
|
104
|
+
if v == 1
|
105
|
+
@view.tbl_bus_scan.insertRow(@view.tbl_bus_scan.rowCount)
|
106
|
+
@view.tbl_bus_scan.setItem(
|
107
|
+
@view.tbl_bus_scan.rowCount - 1,
|
108
|
+
0,
|
109
|
+
Qt::TableWidgetItem.new("0x#{i.to_s(16).upcase}")
|
110
|
+
)
|
111
|
+
if i % 2 == 0
|
112
|
+
@view.tbl_bus_scan.setItem(
|
113
|
+
@view.tbl_bus_scan.rowCount - 1,
|
114
|
+
1,
|
115
|
+
Qt::TableWidgetItem.new('Write')
|
116
|
+
)
|
117
|
+
else
|
118
|
+
@view.tbl_bus_scan.setItem(
|
119
|
+
@view.tbl_bus_scan.rowCount - 1,
|
120
|
+
1,
|
121
|
+
Qt::TableWidgetItem.new('Read')
|
122
|
+
)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
@view.tbl_bus_scan.resizeColumnsToContents
|
127
|
+
@view.tbl_bus_scan.resizeRowsToContents
|
128
|
+
@view.tbl_bus_scan.horizontalHeader.stretchLastSection = true
|
129
|
+
Qt::MessageBox.new(
|
130
|
+
Qt::MessageBox::Information,
|
131
|
+
"Bus Scan",
|
132
|
+
"Bus scan ended correctly: #{@view.tbl_bus_scan.rowCount} address(es) found"
|
133
|
+
).exec
|
134
|
+
else
|
135
|
+
Qt::MessageBox.new(
|
136
|
+
Qt::MessageBox::Information,
|
137
|
+
"Bus addresses",
|
138
|
+
"No valid addresses have been returned by the scan"
|
139
|
+
).exec
|
140
|
+
end
|
141
|
+
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
|
142
|
+
ErrorMsg.new.hardsploit_not_found
|
143
|
+
rescue HardsploitAPI::ERROR::USB_ERROR
|
144
|
+
ErrorMsg.new.usb_error
|
145
|
+
rescue Exception => msg
|
146
|
+
ErrorMsg.new.unknown(msg)
|
147
|
+
end
|
148
|
+
end
|