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.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +22 -22
  3. data/Rakefile +1 -1
  4. data/bin/hardsploit_gui +3 -3
  5. data/lib/Firmwares/FPGA/I2C/I2C_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_I2C_INTERACT.rpd +0 -0
  6. data/lib/Firmwares/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd +0 -0
  7. data/lib/Firmwares/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd +0 -0
  8. data/lib/Firmwares/FPGA/SPI/SPI_SNIFFER/HARDSPLOIT_FIRMWARE_FPGA_SPI_SNIFFER.rpd +0 -0
  9. data/lib/Firmwares/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd +0 -0
  10. data/lib/Firmwares/FPGA/UART/UART_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_UART_INTERACT.rpd +0 -0
  11. data/lib/Firmwares/FPGA/VersionFPGA.rb +5 -5
  12. data/lib/Firmwares/UC/VersionUC.rb +12 -12
  13. data/lib/HardsploitAPI/Core/HardsploitAPI.rb +210 -210
  14. data/lib/HardsploitAPI/Core/HardsploitAPI_CONSTANT.rb +150 -150
  15. data/lib/HardsploitAPI/Core/HardsploitAPI_ERROR.rb +109 -109
  16. data/lib/HardsploitAPI/Core/HardsploitAPI_FIRMWARE.rb +305 -305
  17. data/lib/HardsploitAPI/Core/HardsploitAPI_PROGRESS.rb +28 -28
  18. data/lib/HardsploitAPI/Core/HardsploitAPI_USB_COMMUNICATION.rb +166 -166
  19. data/lib/HardsploitAPI/Modules/I2C/HardsploitAPI_I2C.rb +356 -356
  20. data/lib/HardsploitAPI/Modules/NO_MUX_PARALLEL_MEMORY/HardsploitAPI_NO_MUX_PARALLEL_MEMORY.rb +206 -206
  21. data/lib/HardsploitAPI/Modules/NRF24L01/HardsploitAPI_NRF24L01.rb +306 -306
  22. data/lib/HardsploitAPI/Modules/SPI/HardsploitAPI_SPI.rb +340 -340
  23. data/lib/HardsploitAPI/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER.rb +83 -83
  24. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD.rb +367 -367
  25. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_DEBUG.rb +89 -89
  26. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_MEM_AP.rb +61 -61
  27. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_STM32.rb +121 -121
  28. data/lib/HardsploitAPI/Modules/TEST/HardsploitAPI_TEST_INTERACT.rb +98 -98
  29. data/lib/HardsploitAPI/Modules/UART/HardsploitAPI_UART.rb +196 -196
  30. data/lib/Hardsploit_gui.rb +96 -96
  31. data/lib/LICENSE.txt +674 -674
  32. data/lib/README.md +22 -22
  33. data/lib/TRADEMARK +2 -2
  34. data/lib/class/Chip_editor.rb +304 -304
  35. data/lib/class/Chip_management.rb +496 -496
  36. data/lib/class/Command_editor.rb +216 -216
  37. data/lib/class/Command_table.rb +233 -233
  38. data/lib/class/Console.rb +26 -26
  39. data/lib/class/ErrorMsg.rb +312 -312
  40. data/lib/class/Export.rb +140 -140
  41. data/lib/class/Export_manager.rb +124 -124
  42. data/lib/class/Firmware.rb +70 -70
  43. data/lib/class/Generic_commands.rb +260 -260
  44. data/lib/class/{i2c → I2C}/I2c_command.rb +51 -51
  45. data/lib/class/{i2c → I2C}/I2c_export.rb +95 -95
  46. data/lib/class/{i2c → I2C}/I2c_import.rb +117 -117
  47. data/lib/class/{i2c → I2C}/I2c_scanner.rb +114 -114
  48. data/lib/class/{i2c → I2C}/I2c_settings.rb +148 -148
  49. data/lib/class/Import.rb +193 -193
  50. data/lib/class/{parallel → PARALLEL}/Parallel_export.rb +118 -118
  51. data/lib/class/{parallel → PARALLEL}/Parallel_import.rb +113 -113
  52. data/lib/class/{parallel → PARALLEL}/Parallel_settings.rb +81 -81
  53. data/lib/class/Progress_bar.rb +32 -32
  54. data/lib/class/{spi → SPI}/Spi_export.rb +108 -108
  55. data/lib/class/{spi → SPI}/Spi_import.rb +159 -159
  56. data/lib/class/{spi → SPI}/Spi_settings.rb +108 -108
  57. data/lib/class/{spi → SPI}/Spi_sniffer.rb +101 -101
  58. data/lib/class/Signal_mapper.rb +120 -120
  59. data/lib/class/Wire_helper.rb +230 -230
  60. data/lib/class/swd/Swd.rb +125 -125
  61. data/lib/class/swd/Swd_scanner.rb +121 -121
  62. data/lib/class/swd/Swd_settings.rb +76 -76
  63. data/lib/class/uart/Uart_baudrate.rb +62 -62
  64. data/lib/class/uart/Uart_console.rb +115 -115
  65. data/lib/class/uart/Uart_settings.rb +102 -102
  66. data/lib/db/associations.rb +138 -138
  67. data/lib/db/database.rb +4 -4
  68. data/lib/db/development.sqlite3 +0 -0
  69. data/lib/db/migrate/004_create_manufacturers.rb +13 -13
  70. data/lib/db/migrate/005_create_packages.rb +13 -13
  71. data/lib/db/migrate/006_create_chip_types.rb +11 -11
  72. data/lib/db/migrate/007_create_buses.rb +11 -11
  73. data/lib/db/migrate/008_create_signals.rb +14 -14
  74. data/lib/db/migrate/009_create_chips.rb +25 -25
  75. data/lib/db/migrate/010_create_commands.rb +21 -21
  76. data/lib/db/migrate/011_create_bytes.rb +19 -19
  77. data/lib/db/migrate/012_create_i2c_settings.rb +21 -21
  78. data/lib/db/migrate/013_create_spi_settings.rb +26 -26
  79. data/lib/db/migrate/014_create_parallel_settings.rb +21 -21
  80. data/lib/db/migrate/015_create_pins.rb +19 -19
  81. data/lib/db/migrate/016_create_uses.rb +17 -17
  82. data/lib/db/migrate/017_create_swd_settings.rb +19 -19
  83. data/lib/db/migrate/018_create_uart_settings.rb +22 -22
  84. data/lib/db/schema.rb +157 -157
  85. data/lib/db/seeds.rb +161 -161
  86. data/lib/gui/gui_chip_editor.rb +349 -349
  87. data/lib/gui/gui_chip_management.rb +377 -377
  88. data/lib/gui/gui_command_editor.rb +219 -219
  89. data/lib/gui/gui_export.rb +132 -132
  90. data/lib/gui/gui_export_manager.rb +93 -93
  91. data/lib/gui/gui_generic_commands.rb +202 -202
  92. data/lib/gui/gui_generic_export.rb +164 -164
  93. data/lib/gui/gui_generic_import.rb +142 -142
  94. data/lib/gui/gui_i2c_command.rb +116 -116
  95. data/lib/gui/gui_i2c_settings.rb +230 -230
  96. data/lib/gui/gui_import.rb +131 -131
  97. data/lib/gui/gui_parallel_settings.rb +195 -195
  98. data/lib/gui/gui_progress_bar.rb +85 -85
  99. data/lib/gui/gui_signal_mapper.rb +121 -121
  100. data/lib/gui/gui_signal_scanner.rb +146 -146
  101. data/lib/gui/gui_spi_import.rb +126 -126
  102. data/lib/gui/gui_spi_settings.rb +313 -313
  103. data/lib/gui/gui_spi_sniffer.rb +112 -112
  104. data/lib/gui/gui_swd_settings.rb +166 -166
  105. data/lib/gui/gui_uart_baudrate.rb +114 -114
  106. data/lib/gui/gui_uart_console.rb +164 -164
  107. data/lib/gui/gui_uart_settings.rb +243 -243
  108. data/lib/gui/gui_wire_helper.rb +99 -99
  109. data/lib/gui_designer/gui_chip_editor.ui +549 -549
  110. data/lib/gui_designer/gui_chip_management.ui +886 -886
  111. data/lib/gui_designer/gui_command_editor.ui +350 -350
  112. data/lib/gui_designer/gui_export.ui +171 -171
  113. data/lib/gui_designer/gui_export_manager.ui +115 -115
  114. data/lib/gui_designer/gui_generic_commands.ui +342 -342
  115. data/lib/gui_designer/gui_generic_export.ui +202 -202
  116. data/lib/gui_designer/gui_generic_import.ui +165 -165
  117. data/lib/gui_designer/gui_i2c_command.ui +148 -148
  118. data/lib/gui_designer/gui_i2c_settings.ui +292 -292
  119. data/lib/gui_designer/gui_import.ui +168 -168
  120. data/lib/gui_designer/gui_parallel_settings.ui +247 -247
  121. data/lib/gui_designer/gui_progress_bar.ui +86 -86
  122. data/lib/gui_designer/gui_signal_mapper.ui +179 -179
  123. data/lib/gui_designer/gui_signal_scanner.ui +261 -261
  124. data/lib/gui_designer/gui_spi_settings.ui +446 -446
  125. data/lib/gui_designer/gui_spi_sniffer.ui +156 -156
  126. data/lib/gui_designer/gui_swd_settings.ui +189 -189
  127. data/lib/gui_designer/gui_uart_baudrate.ui +161 -161
  128. data/lib/gui_designer/gui_uart_console.ui +284 -284
  129. data/lib/gui_designer/gui_uart_settings.ui +280 -280
  130. data/lib/gui_designer/gui_wire_helper.ui +117 -117
  131. data/lib/images/search.png +0 -0
  132. data/lib/logs/error.log +0 -63
  133. data/lib/models/bus.rb +19 -19
  134. data/lib/models/byte.rb +29 -29
  135. data/lib/models/chip.rb +41 -41
  136. data/lib/models/chip_type.rb +14 -14
  137. data/lib/models/command.rb +20 -20
  138. data/lib/models/i2c_setting.rb +41 -41
  139. data/lib/models/manufacturer.rb +14 -14
  140. data/lib/models/package.rb +26 -26
  141. data/lib/models/parallel_setting.rb +37 -37
  142. data/lib/models/pin.rb +14 -14
  143. data/lib/models/signall.rb +20 -20
  144. data/lib/models/spi_setting.rb +67 -67
  145. data/lib/models/swd_setting.rb +25 -25
  146. data/lib/models/uart_setting.rb +52 -52
  147. data/lib/models/use.rb +6 -6
  148. data/lib/startHardsploit.rb +10 -10
  149. 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