hardsploit_gui 2.3 → 2.4.0
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/README.md +22 -22
- data/Rakefile +1 -1
- data/bin/hardsploit_gui +3 -3
- data/lib/Firmwares/FPGA/I2C/I2C_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_I2C_INTERACT.rpd +0 -0
- data/lib/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/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/Firmwares/FPGA/UART/UART_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_UART_INTERACT.rpd +0 -0
- data/lib/Firmwares/FPGA/VersionFPGA.rb +5 -5
- data/lib/Firmwares/UC/VersionUC.rb +12 -12
- data/lib/HardsploitAPI/Core/HardsploitAPI.rb +210 -210
- data/lib/HardsploitAPI/Core/HardsploitAPI_CONSTANT.rb +150 -150
- data/lib/HardsploitAPI/Core/HardsploitAPI_ERROR.rb +109 -109
- data/lib/HardsploitAPI/Core/HardsploitAPI_FIRMWARE.rb +305 -305
- data/lib/HardsploitAPI/Core/HardsploitAPI_PROGRESS.rb +28 -28
- data/lib/HardsploitAPI/Core/HardsploitAPI_USB_COMMUNICATION.rb +166 -166
- data/lib/HardsploitAPI/Modules/I2C/HardsploitAPI_I2C.rb +356 -356
- data/lib/HardsploitAPI/Modules/NO_MUX_PARALLEL_MEMORY/HardsploitAPI_NO_MUX_PARALLEL_MEMORY.rb +206 -206
- data/lib/HardsploitAPI/Modules/NRF24L01/HardsploitAPI_NRF24L01.rb +306 -306
- data/lib/HardsploitAPI/Modules/SPI/HardsploitAPI_SPI.rb +340 -340
- data/lib/HardsploitAPI/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER.rb +83 -83
- data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD.rb +367 -367
- data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_DEBUG.rb +89 -89
- data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_MEM_AP.rb +61 -61
- data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_STM32.rb +121 -121
- data/lib/HardsploitAPI/Modules/TEST/HardsploitAPI_TEST_INTERACT.rb +98 -98
- data/lib/HardsploitAPI/Modules/UART/HardsploitAPI_UART.rb +196 -196
- data/lib/Hardsploit_gui.rb +96 -96
- data/lib/LICENSE.txt +674 -674
- data/lib/README.md +22 -22
- data/lib/TRADEMARK +2 -2
- data/lib/class/Chip_editor.rb +304 -304
- data/lib/class/Chip_management.rb +496 -496
- data/lib/class/Command_editor.rb +216 -216
- data/lib/class/Command_table.rb +233 -233
- data/lib/class/Console.rb +26 -26
- data/lib/class/ErrorMsg.rb +312 -312
- data/lib/class/Export.rb +140 -140
- data/lib/class/Export_manager.rb +124 -124
- data/lib/class/Firmware.rb +70 -70
- data/lib/class/Generic_commands.rb +260 -260
- data/lib/class/{i2c → I2C}/I2c_command.rb +51 -51
- data/lib/class/{i2c → I2C}/I2c_export.rb +95 -95
- data/lib/class/{i2c → I2C}/I2c_import.rb +117 -117
- data/lib/class/{i2c → I2C}/I2c_scanner.rb +114 -114
- data/lib/class/{i2c → I2C}/I2c_settings.rb +148 -148
- data/lib/class/Import.rb +193 -193
- data/lib/class/{parallel → PARALLEL}/Parallel_export.rb +118 -118
- data/lib/class/{parallel → PARALLEL}/Parallel_import.rb +113 -113
- data/lib/class/{parallel → PARALLEL}/Parallel_settings.rb +81 -81
- data/lib/class/Progress_bar.rb +32 -32
- data/lib/class/{spi → SPI}/Spi_export.rb +108 -108
- data/lib/class/{spi → SPI}/Spi_import.rb +159 -159
- data/lib/class/{spi → SPI}/Spi_settings.rb +108 -108
- data/lib/class/{spi → SPI}/Spi_sniffer.rb +101 -101
- data/lib/class/Signal_mapper.rb +120 -120
- data/lib/class/Wire_helper.rb +230 -230
- data/lib/class/swd/Swd.rb +125 -125
- data/lib/class/swd/Swd_scanner.rb +121 -121
- data/lib/class/swd/Swd_settings.rb +76 -76
- data/lib/class/uart/Uart_baudrate.rb +62 -62
- data/lib/class/uart/Uart_console.rb +115 -115
- data/lib/class/uart/Uart_settings.rb +102 -102
- data/lib/db/associations.rb +138 -138
- data/lib/db/database.rb +4 -4
- data/lib/db/development.sqlite3 +0 -0
- data/lib/db/migrate/004_create_manufacturers.rb +13 -13
- data/lib/db/migrate/005_create_packages.rb +13 -13
- data/lib/db/migrate/006_create_chip_types.rb +11 -11
- data/lib/db/migrate/007_create_buses.rb +11 -11
- data/lib/db/migrate/008_create_signals.rb +14 -14
- data/lib/db/migrate/009_create_chips.rb +25 -25
- data/lib/db/migrate/010_create_commands.rb +21 -21
- data/lib/db/migrate/011_create_bytes.rb +19 -19
- data/lib/db/migrate/012_create_i2c_settings.rb +21 -21
- data/lib/db/migrate/013_create_spi_settings.rb +26 -26
- data/lib/db/migrate/014_create_parallel_settings.rb +21 -21
- data/lib/db/migrate/015_create_pins.rb +19 -19
- data/lib/db/migrate/016_create_uses.rb +17 -17
- data/lib/db/migrate/017_create_swd_settings.rb +19 -19
- data/lib/db/migrate/018_create_uart_settings.rb +22 -22
- data/lib/db/schema.rb +157 -157
- data/lib/db/seeds.rb +161 -161
- data/lib/gui/gui_chip_editor.rb +349 -349
- data/lib/gui/gui_chip_management.rb +377 -377
- data/lib/gui/gui_command_editor.rb +219 -219
- data/lib/gui/gui_export.rb +132 -132
- data/lib/gui/gui_export_manager.rb +93 -93
- data/lib/gui/gui_generic_commands.rb +202 -202
- data/lib/gui/gui_generic_export.rb +164 -164
- data/lib/gui/gui_generic_import.rb +142 -142
- data/lib/gui/gui_i2c_command.rb +116 -116
- data/lib/gui/gui_i2c_settings.rb +230 -230
- data/lib/gui/gui_import.rb +131 -131
- data/lib/gui/gui_parallel_settings.rb +195 -195
- data/lib/gui/gui_progress_bar.rb +85 -85
- data/lib/gui/gui_signal_mapper.rb +121 -121
- data/lib/gui/gui_signal_scanner.rb +146 -146
- data/lib/gui/gui_spi_import.rb +126 -126
- data/lib/gui/gui_spi_settings.rb +313 -313
- data/lib/gui/gui_spi_sniffer.rb +112 -112
- data/lib/gui/gui_swd_settings.rb +166 -166
- data/lib/gui/gui_uart_baudrate.rb +114 -114
- data/lib/gui/gui_uart_console.rb +164 -164
- data/lib/gui/gui_uart_settings.rb +243 -243
- data/lib/gui/gui_wire_helper.rb +99 -99
- data/lib/gui_designer/gui_chip_editor.ui +549 -549
- data/lib/gui_designer/gui_chip_management.ui +886 -886
- data/lib/gui_designer/gui_command_editor.ui +350 -350
- data/lib/gui_designer/gui_export.ui +171 -171
- data/lib/gui_designer/gui_export_manager.ui +115 -115
- data/lib/gui_designer/gui_generic_commands.ui +342 -342
- data/lib/gui_designer/gui_generic_export.ui +202 -202
- data/lib/gui_designer/gui_generic_import.ui +165 -165
- data/lib/gui_designer/gui_i2c_command.ui +148 -148
- data/lib/gui_designer/gui_i2c_settings.ui +292 -292
- data/lib/gui_designer/gui_import.ui +168 -168
- data/lib/gui_designer/gui_parallel_settings.ui +247 -247
- data/lib/gui_designer/gui_progress_bar.ui +86 -86
- data/lib/gui_designer/gui_signal_mapper.ui +179 -179
- data/lib/gui_designer/gui_signal_scanner.ui +261 -261
- data/lib/gui_designer/gui_spi_settings.ui +446 -446
- data/lib/gui_designer/gui_spi_sniffer.ui +156 -156
- data/lib/gui_designer/gui_swd_settings.ui +189 -189
- data/lib/gui_designer/gui_uart_baudrate.ui +161 -161
- data/lib/gui_designer/gui_uart_console.ui +284 -284
- data/lib/gui_designer/gui_uart_settings.ui +280 -280
- data/lib/gui_designer/gui_wire_helper.ui +117 -117
- data/lib/images/search.png +0 -0
- data/lib/logs/error.log +0 -63
- data/lib/models/bus.rb +19 -19
- data/lib/models/byte.rb +29 -29
- data/lib/models/chip.rb +41 -41
- data/lib/models/chip_type.rb +14 -14
- data/lib/models/command.rb +20 -20
- data/lib/models/i2c_setting.rb +41 -41
- data/lib/models/manufacturer.rb +14 -14
- data/lib/models/package.rb +26 -26
- data/lib/models/parallel_setting.rb +37 -37
- data/lib/models/pin.rb +14 -14
- data/lib/models/signall.rb +20 -20
- data/lib/models/spi_setting.rb +67 -67
- data/lib/models/swd_setting.rb +25 -25
- data/lib/models/uart_setting.rb +52 -52
- data/lib/models/use.rb +6 -6
- data/lib/startHardsploit.rb +10 -10
- metadata +14 -14
data/lib/class/swd/Swd.rb
CHANGED
@@ -1,125 +1,125 @@
|
|
1
|
-
#===================================================
|
2
|
-
# Hardsploit API - 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 '../../HardsploitAPI/Modules/SWD/HardsploitAPI_SWD'
|
9
|
-
|
10
|
-
class Swd
|
11
|
-
|
12
|
-
def initialize(chip, console)
|
13
|
-
if HardsploitAPI.getNumberOfBoardAvailable > 0
|
14
|
-
@console = console
|
15
|
-
@chip = chip
|
16
|
-
else
|
17
|
-
Qt::MessageBox.new(
|
18
|
-
Qt::MessageBox::Critical,
|
19
|
-
"Error",
|
20
|
-
"Hardsploit not plugged. Operation canceled"
|
21
|
-
).exec
|
22
|
-
end
|
23
|
-
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
|
24
|
-
ErrorMsg.new.hardsploit_not_found
|
25
|
-
return false
|
26
|
-
rescue HardsploitAPI::ERROR::USB_ERROR
|
27
|
-
ErrorMsg.new.usb_error
|
28
|
-
return false
|
29
|
-
rescue Exception => msg
|
30
|
-
ErrorMsg.new.unknow(msg)
|
31
|
-
return false
|
32
|
-
end
|
33
|
-
|
34
|
-
def do_swd_action(action, option = {})
|
35
|
-
Firmware.new('SWD')
|
36
|
-
api = HardsploitAPI_SWD.new(
|
37
|
-
memory_start_address: @chip.swd_setting.memory_start_address,
|
38
|
-
memory_size_address: @chip.swd_setting.memory_size_address,
|
39
|
-
cpu_id_address: @chip.swd_setting.cpu_id_address,
|
40
|
-
device_id_address: @chip.swd_setting.device_id_address
|
41
|
-
)
|
42
|
-
return 0 if api.nil?
|
43
|
-
case action
|
44
|
-
when 'detect'
|
45
|
-
return api.obtainCodes
|
46
|
-
when 'export'
|
47
|
-
$pgb = Progress_bar.new("SWD: #{action}...")
|
48
|
-
$pgb.show
|
49
|
-
api.dumpFlash(option)
|
50
|
-
when 'import'
|
51
|
-
$pgb = Progress_bar.new("SWD: #{action}...")
|
52
|
-
$pgb.show
|
53
|
-
api.writeFlash(option)
|
54
|
-
when 'erase'
|
55
|
-
api.eraseFlash
|
56
|
-
end
|
57
|
-
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
|
58
|
-
ErrorMsg.new.hardsploit_not_found
|
59
|
-
return false
|
60
|
-
rescue HardsploitAPI::ERROR::USB_ERROR
|
61
|
-
ErrorMsg.new.usb_error
|
62
|
-
return false
|
63
|
-
rescue HardsploitAPI::ERROR::SWD_ERROR
|
64
|
-
ErrorMsg.new.swd_not_found
|
65
|
-
return false
|
66
|
-
rescue Exception => msg
|
67
|
-
ErrorMsg.new.unknown(msg)
|
68
|
-
return false
|
69
|
-
end
|
70
|
-
|
71
|
-
def detect
|
72
|
-
code = do_swd_action('detect')
|
73
|
-
unless code == false
|
74
|
-
@console.print('New action: SWD Detect')
|
75
|
-
Qt::MessageBox.new(
|
76
|
-
Qt::MessageBox::Information,
|
77
|
-
"SWD detection",
|
78
|
-
"Detected:\n"+
|
79
|
-
"DP.IDCODE: #{code[:DebugPortId].to_s(16)}\n"+
|
80
|
-
"AP.IDCODE: #{code[:AccessPortId].to_s(16)}\n"+
|
81
|
-
"CPU ID: #{code[:CpuId].to_s(16)}\n"
|
82
|
-
).exec
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def export(filepath)
|
87
|
-
unless do_swd_action('export', filepath) == false
|
88
|
-
Qt::MessageBox.new(
|
89
|
-
Qt::MessageBox::Information,
|
90
|
-
"SWD Export Action",
|
91
|
-
"Dump finished"
|
92
|
-
).exec
|
93
|
-
$pgb.close
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
def import(filepath)
|
98
|
-
unless do_swd_action('import', filepath) == false
|
99
|
-
Qt::MessageBox.new(
|
100
|
-
Qt::MessageBox::Information,
|
101
|
-
"SWD Import Action",
|
102
|
-
"Import finished"
|
103
|
-
).exec
|
104
|
-
$pgb.close
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
def erase
|
109
|
-
msg = Qt::MessageBox.new
|
110
|
-
msg.setWindowTitle("Delete the data")
|
111
|
-
msg.setText("You are going to delete all the data. Continue?")
|
112
|
-
msg.setIcon(Qt::MessageBox::Information)
|
113
|
-
msg.setStandardButtons(Qt::MessageBox::Cancel | Qt::MessageBox::Ok)
|
114
|
-
msg.setDefaultButton(Qt::MessageBox::Cancel)
|
115
|
-
if msg.exec == Qt::MessageBox::Ok
|
116
|
-
unless do_swd_action('erase') == false
|
117
|
-
Qt::MessageBox.new(
|
118
|
-
Qt::MessageBox::Information,
|
119
|
-
"SWD Erase Action",
|
120
|
-
"Erase finished"
|
121
|
-
).exec
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
1
|
+
#===================================================
|
2
|
+
# Hardsploit API - 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 '../../HardsploitAPI/Modules/SWD/HardsploitAPI_SWD'
|
9
|
+
|
10
|
+
class Swd
|
11
|
+
|
12
|
+
def initialize(chip, console)
|
13
|
+
if HardsploitAPI.getNumberOfBoardAvailable > 0
|
14
|
+
@console = console
|
15
|
+
@chip = chip
|
16
|
+
else
|
17
|
+
Qt::MessageBox.new(
|
18
|
+
Qt::MessageBox::Critical,
|
19
|
+
"Error",
|
20
|
+
"Hardsploit not plugged. Operation canceled"
|
21
|
+
).exec
|
22
|
+
end
|
23
|
+
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
|
24
|
+
ErrorMsg.new.hardsploit_not_found
|
25
|
+
return false
|
26
|
+
rescue HardsploitAPI::ERROR::USB_ERROR
|
27
|
+
ErrorMsg.new.usb_error
|
28
|
+
return false
|
29
|
+
rescue Exception => msg
|
30
|
+
ErrorMsg.new.unknow(msg)
|
31
|
+
return false
|
32
|
+
end
|
33
|
+
|
34
|
+
def do_swd_action(action, option = {})
|
35
|
+
Firmware.new('SWD')
|
36
|
+
api = HardsploitAPI_SWD.new(
|
37
|
+
memory_start_address: @chip.swd_setting.memory_start_address,
|
38
|
+
memory_size_address: @chip.swd_setting.memory_size_address,
|
39
|
+
cpu_id_address: @chip.swd_setting.cpu_id_address,
|
40
|
+
device_id_address: @chip.swd_setting.device_id_address
|
41
|
+
)
|
42
|
+
return 0 if api.nil?
|
43
|
+
case action
|
44
|
+
when 'detect'
|
45
|
+
return api.obtainCodes
|
46
|
+
when 'export'
|
47
|
+
$pgb = Progress_bar.new("SWD: #{action}...")
|
48
|
+
$pgb.show
|
49
|
+
api.dumpFlash(option)
|
50
|
+
when 'import'
|
51
|
+
$pgb = Progress_bar.new("SWD: #{action}...")
|
52
|
+
$pgb.show
|
53
|
+
api.writeFlash(option)
|
54
|
+
when 'erase'
|
55
|
+
api.eraseFlash
|
56
|
+
end
|
57
|
+
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
|
58
|
+
ErrorMsg.new.hardsploit_not_found
|
59
|
+
return false
|
60
|
+
rescue HardsploitAPI::ERROR::USB_ERROR
|
61
|
+
ErrorMsg.new.usb_error
|
62
|
+
return false
|
63
|
+
rescue HardsploitAPI::ERROR::SWD_ERROR
|
64
|
+
ErrorMsg.new.swd_not_found
|
65
|
+
return false
|
66
|
+
rescue Exception => msg
|
67
|
+
ErrorMsg.new.unknown(msg)
|
68
|
+
return false
|
69
|
+
end
|
70
|
+
|
71
|
+
def detect
|
72
|
+
code = do_swd_action('detect')
|
73
|
+
unless code == false
|
74
|
+
@console.print('New action: SWD Detect')
|
75
|
+
Qt::MessageBox.new(
|
76
|
+
Qt::MessageBox::Information,
|
77
|
+
"SWD detection",
|
78
|
+
"Detected:\n"+
|
79
|
+
"DP.IDCODE: #{code[:DebugPortId].to_s(16)}\n"+
|
80
|
+
"AP.IDCODE: #{code[:AccessPortId].to_s(16)}\n"+
|
81
|
+
"CPU ID: #{code[:CpuId].to_s(16)}\n"
|
82
|
+
).exec
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def export(filepath)
|
87
|
+
unless do_swd_action('export', filepath) == false
|
88
|
+
Qt::MessageBox.new(
|
89
|
+
Qt::MessageBox::Information,
|
90
|
+
"SWD Export Action",
|
91
|
+
"Dump finished"
|
92
|
+
).exec
|
93
|
+
$pgb.close
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def import(filepath)
|
98
|
+
unless do_swd_action('import', filepath) == false
|
99
|
+
Qt::MessageBox.new(
|
100
|
+
Qt::MessageBox::Information,
|
101
|
+
"SWD Import Action",
|
102
|
+
"Import finished"
|
103
|
+
).exec
|
104
|
+
$pgb.close
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def erase
|
109
|
+
msg = Qt::MessageBox.new
|
110
|
+
msg.setWindowTitle("Delete the data")
|
111
|
+
msg.setText("You are going to delete all the data. Continue?")
|
112
|
+
msg.setIcon(Qt::MessageBox::Information)
|
113
|
+
msg.setStandardButtons(Qt::MessageBox::Cancel | Qt::MessageBox::Ok)
|
114
|
+
msg.setDefaultButton(Qt::MessageBox::Cancel)
|
115
|
+
if msg.exec == Qt::MessageBox::Ok
|
116
|
+
unless do_swd_action('erase') == false
|
117
|
+
Qt::MessageBox.new(
|
118
|
+
Qt::MessageBox::Information,
|
119
|
+
"SWD Erase Action",
|
120
|
+
"Erase finished"
|
121
|
+
).exec
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -1,121 +1,121 @@
|
|
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/SWD/HardsploitAPI_SWD'
|
10
|
-
|
11
|
-
class Swd_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('SWD')
|
31
|
-
swd = HardsploitAPI_SWD.new(
|
32
|
-
memory_start_address: '0x08000000',
|
33
|
-
memory_size_address: '0x1FFFF7E0',
|
34
|
-
cpu_id_address: '0xE000ED00',
|
35
|
-
device_id_address: '0x1FFFF7E8'
|
36
|
-
)
|
37
|
-
@result = swd.find(
|
38
|
-
start_from: @view.cbx_start.currentText[1].to_i + 9,
|
39
|
-
stop_to: @view.cbx_stop.currentText[1].to_i + 9
|
40
|
-
)
|
41
|
-
unless @result[1].is_a? Array
|
42
|
-
@view.tbl_result.setItem(@result.index(0), 1, Qt::TableWidgetItem.new('CLK'))
|
43
|
-
@view.tbl_result.setItem(@result.index(1), 1, Qt::TableWidgetItem.new('IO'))
|
44
|
-
end
|
45
|
-
@view.cbx_start.setEnabled(true)
|
46
|
-
@view.cbx_stop.setEnabled(true)
|
47
|
-
@view.btn_scan.setEnabled(true)
|
48
|
-
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
|
49
|
-
ErrorMsg.new.hardsploit_not_found
|
50
|
-
return false
|
51
|
-
rescue HardsploitAPI::ERROR::USB_ERROR
|
52
|
-
ErrorMsg.new.usb_error
|
53
|
-
return false
|
54
|
-
rescue HardsploitAPI::ERROR::SWD_ERROR
|
55
|
-
return ErrorMsg.new.swd_error
|
56
|
-
rescue Exception => msg
|
57
|
-
ErrorMsg.new.unknown(msg)
|
58
|
-
return false
|
59
|
-
end
|
60
|
-
|
61
|
-
def autowiring
|
62
|
-
signal_found = false
|
63
|
-
@view.tbl_result.rowCount.times do |i|
|
64
|
-
if @view.tbl_result.item(i, 1).text == 'IO'
|
65
|
-
signal_found = true
|
66
|
-
current_signal = Signall.find_by(name: 'SWD_IO')
|
67
|
-
current_signal.update(pin: @view.tbl_result.item(i, 0).text)
|
68
|
-
elsif @view.tbl_result.item(i, 1).text == 'CLK'
|
69
|
-
signal_found = true
|
70
|
-
current_signal = Signall.find_by(name: 'SWD_CLK')
|
71
|
-
current_signal.update(pin: @view.tbl_result.item(i, 0).text)
|
72
|
-
else
|
73
|
-
# Next row
|
74
|
-
end
|
75
|
-
end
|
76
|
-
if signal_found
|
77
|
-
Qt::MessageBox.new(
|
78
|
-
Qt::MessageBox::Information,
|
79
|
-
'Hardsploit Autowiring',
|
80
|
-
'Wiring saved. To change it, go to Menu > Signal mapper'
|
81
|
-
).exec
|
82
|
-
else
|
83
|
-
Qt::MessageBox.new(
|
84
|
-
Qt::MessageBox::Information,
|
85
|
-
'Hardsploit Autowiring',
|
86
|
-
'No signals found in the array'
|
87
|
-
).exec
|
88
|
-
end
|
89
|
-
rescue Exception => msg
|
90
|
-
ErrorMsg.new.unknown(msg)
|
91
|
-
return false
|
92
|
-
end
|
93
|
-
|
94
|
-
def update_tbl(pin)
|
95
|
-
unless @view.cbx_stop.count.zero?
|
96
|
-
@view.tbl_result.setRowCount(0)
|
97
|
-
nbr = pin[1].to_i - (@view.cbx_start.currentText[1].to_i) + 1
|
98
|
-
nbr.times do |i|
|
99
|
-
@view.tbl_result.insertRow(i)
|
100
|
-
@view.tbl_result.setItem(i, 0, Qt::TableWidgetItem.new("B#{(i + @view.cbx_start.currentText[1].to_i)}"))
|
101
|
-
@view.tbl_result.setItem(i, 1, Qt::TableWidgetItem.new('-'))
|
102
|
-
end
|
103
|
-
resize_to_content
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def resize_to_content
|
108
|
-
@view.tbl_result.resizeColumnsToContents
|
109
|
-
@view.tbl_result.resizeRowsToContents
|
110
|
-
@view.tbl_result.horizontalHeader.stretchLastSection = true
|
111
|
-
end
|
112
|
-
|
113
|
-
def update_cbx(pin)
|
114
|
-
@view.cbx_stop.clear
|
115
|
-
start_at = pin[1].to_i
|
116
|
-
end_at = 7
|
117
|
-
(end_at - start_at).times do |i|
|
118
|
-
@view.cbx_stop.addItem("B#{(i + start_at) + 1}")
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
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/SWD/HardsploitAPI_SWD'
|
10
|
+
|
11
|
+
class Swd_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('SWD')
|
31
|
+
swd = HardsploitAPI_SWD.new(
|
32
|
+
memory_start_address: '0x08000000',
|
33
|
+
memory_size_address: '0x1FFFF7E0',
|
34
|
+
cpu_id_address: '0xE000ED00',
|
35
|
+
device_id_address: '0x1FFFF7E8'
|
36
|
+
)
|
37
|
+
@result = swd.find(
|
38
|
+
start_from: @view.cbx_start.currentText[1].to_i + 9,
|
39
|
+
stop_to: @view.cbx_stop.currentText[1].to_i + 9
|
40
|
+
)
|
41
|
+
unless @result[1].is_a? Array
|
42
|
+
@view.tbl_result.setItem(@result.index(0), 1, Qt::TableWidgetItem.new('CLK'))
|
43
|
+
@view.tbl_result.setItem(@result.index(1), 1, Qt::TableWidgetItem.new('IO'))
|
44
|
+
end
|
45
|
+
@view.cbx_start.setEnabled(true)
|
46
|
+
@view.cbx_stop.setEnabled(true)
|
47
|
+
@view.btn_scan.setEnabled(true)
|
48
|
+
rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
|
49
|
+
ErrorMsg.new.hardsploit_not_found
|
50
|
+
return false
|
51
|
+
rescue HardsploitAPI::ERROR::USB_ERROR
|
52
|
+
ErrorMsg.new.usb_error
|
53
|
+
return false
|
54
|
+
rescue HardsploitAPI::ERROR::SWD_ERROR
|
55
|
+
return ErrorMsg.new.swd_error
|
56
|
+
rescue Exception => msg
|
57
|
+
ErrorMsg.new.unknown(msg)
|
58
|
+
return false
|
59
|
+
end
|
60
|
+
|
61
|
+
def autowiring
|
62
|
+
signal_found = false
|
63
|
+
@view.tbl_result.rowCount.times do |i|
|
64
|
+
if @view.tbl_result.item(i, 1).text == 'IO'
|
65
|
+
signal_found = true
|
66
|
+
current_signal = Signall.find_by(name: 'SWD_IO')
|
67
|
+
current_signal.update(pin: @view.tbl_result.item(i, 0).text)
|
68
|
+
elsif @view.tbl_result.item(i, 1).text == 'CLK'
|
69
|
+
signal_found = true
|
70
|
+
current_signal = Signall.find_by(name: 'SWD_CLK')
|
71
|
+
current_signal.update(pin: @view.tbl_result.item(i, 0).text)
|
72
|
+
else
|
73
|
+
# Next row
|
74
|
+
end
|
75
|
+
end
|
76
|
+
if signal_found
|
77
|
+
Qt::MessageBox.new(
|
78
|
+
Qt::MessageBox::Information,
|
79
|
+
'Hardsploit Autowiring',
|
80
|
+
'Wiring saved. To change it, go to Menu > Signal mapper'
|
81
|
+
).exec
|
82
|
+
else
|
83
|
+
Qt::MessageBox.new(
|
84
|
+
Qt::MessageBox::Information,
|
85
|
+
'Hardsploit Autowiring',
|
86
|
+
'No signals found in the array'
|
87
|
+
).exec
|
88
|
+
end
|
89
|
+
rescue Exception => msg
|
90
|
+
ErrorMsg.new.unknown(msg)
|
91
|
+
return false
|
92
|
+
end
|
93
|
+
|
94
|
+
def update_tbl(pin)
|
95
|
+
unless @view.cbx_stop.count.zero?
|
96
|
+
@view.tbl_result.setRowCount(0)
|
97
|
+
nbr = pin[1].to_i - (@view.cbx_start.currentText[1].to_i) + 1
|
98
|
+
nbr.times do |i|
|
99
|
+
@view.tbl_result.insertRow(i)
|
100
|
+
@view.tbl_result.setItem(i, 0, Qt::TableWidgetItem.new("B#{(i + @view.cbx_start.currentText[1].to_i)}"))
|
101
|
+
@view.tbl_result.setItem(i, 1, Qt::TableWidgetItem.new('-'))
|
102
|
+
end
|
103
|
+
resize_to_content
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def resize_to_content
|
108
|
+
@view.tbl_result.resizeColumnsToContents
|
109
|
+
@view.tbl_result.resizeRowsToContents
|
110
|
+
@view.tbl_result.horizontalHeader.stretchLastSection = true
|
111
|
+
end
|
112
|
+
|
113
|
+
def update_cbx(pin)
|
114
|
+
@view.cbx_stop.clear
|
115
|
+
start_at = pin[1].to_i
|
116
|
+
end_at = 7
|
117
|
+
(end_at - start_at).times do |i|
|
118
|
+
@view.cbx_stop.addItem("B#{(i + start_at) + 1}")
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|