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.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/bin/hardsploit_gui +2 -2
  3. data/lib/{Firmware → Firmwares}/FPGA/I2C/I2C_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_I2C_INTERACT.rpd +0 -0
  4. 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
  5. data/lib/Firmwares/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd +0 -0
  6. 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
  7. data/lib/Firmwares/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd +0 -0
  8. data/lib/{Firmware → Firmwares}/FPGA/TEST/TEST_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_TEST_INTERACT.rpd +0 -0
  9. data/lib/Firmwares/FPGA/UART/UART_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_UART_INTERACT.rpd +0 -0
  10. data/lib/{Firmware → Firmwares}/FPGA/VersionFPGA.rb +1 -1
  11. data/lib/{Firmware → Firmwares}/UC/HARDSPLOIT_FIRMWARE_UC.bin +0 -0
  12. data/lib/{Firmware → Firmwares}/UC/VersionUC.rb +1 -1
  13. data/lib/HardsploitAPI/Core/HardsploitAPI.rb +210 -0
  14. data/lib/HardsploitAPI/Core/HardsploitAPI_CONSTANT.rb +150 -0
  15. data/lib/HardsploitAPI/Core/HardsploitAPI_ERROR.rb +109 -0
  16. data/lib/HardsploitAPI/Core/HardsploitAPI_FIRMWARE.rb +305 -0
  17. data/lib/HardsploitAPI/{HardsploitAPI_PROGRESS.rb → Core/HardsploitAPI_PROGRESS.rb} +0 -0
  18. data/lib/HardsploitAPI/Core/HardsploitAPI_USB_COMMUNICATION.rb +166 -0
  19. data/lib/HardsploitAPI/Modules/I2C/HardsploitAPI_I2C.rb +356 -0
  20. data/lib/HardsploitAPI/{HardsploitAPI_NO_MUX_PARALLELE_MEMORY.rb → Modules/NO_MUX_PARALLEL_MEMORY/HardsploitAPI_NO_MUX_PARALLEL_MEMORY.rb} +26 -49
  21. data/lib/HardsploitAPI/Modules/NRF24L01/HardsploitAPI_NRF24L01.rb +306 -0
  22. data/lib/HardsploitAPI/Modules/SPI/HardsploitAPI_SPI.rb +340 -0
  23. data/lib/HardsploitAPI/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER.rb +83 -0
  24. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD.rb +367 -0
  25. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_DEBUG.rb +89 -0
  26. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_MEM_AP.rb +61 -0
  27. data/lib/HardsploitAPI/{SWD → Modules/SWD}/HardsploitAPI_SWD_STM32.rb +32 -15
  28. data/lib/HardsploitAPI/{HardsploitAPI_TEST_INTERACT.rb → Modules/TEST/HardsploitAPI_TEST_INTERACT.rb} +1 -1
  29. data/lib/HardsploitAPI/Modules/UART/HardsploitAPI_UART.rb +196 -0
  30. data/lib/Hardsploit_gui.rb +96 -0
  31. data/lib/class/Chip_editor.rb +186 -330
  32. data/lib/class/Chip_management.rb +496 -0
  33. data/lib/class/Command_editor.rb +130 -182
  34. data/lib/class/Command_table.rb +16 -22
  35. data/lib/class/Console.rb +0 -2
  36. data/lib/class/ErrorMsg.rb +312 -0
  37. data/lib/class/Export.rb +140 -0
  38. data/lib/class/Export_manager.rb +43 -43
  39. data/lib/class/Firmware.rb +52 -11
  40. data/lib/class/Generic_commands.rb +180 -190
  41. data/lib/class/Import.rb +193 -0
  42. data/lib/class/Progress_bar.rb +1 -0
  43. data/lib/class/Signal_mapper.rb +120 -0
  44. data/lib/class/Wire_helper.rb +132 -148
  45. data/lib/class/{I2C → i2c}/I2c_command.rb +16 -13
  46. data/lib/class/i2c/I2c_export.rb +95 -0
  47. data/lib/class/i2c/I2c_import.rb +117 -0
  48. data/lib/class/i2c/I2c_scanner.rb +114 -0
  49. data/lib/class/i2c/I2c_settings.rb +148 -0
  50. data/lib/class/parallel/Parallel_export.rb +118 -0
  51. data/lib/class/parallel/Parallel_import.rb +113 -0
  52. data/lib/class/parallel/Parallel_settings.rb +81 -0
  53. data/lib/class/spi/Spi_export.rb +108 -0
  54. data/lib/class/spi/Spi_import.rb +159 -0
  55. data/lib/class/spi/Spi_settings.rb +108 -0
  56. data/lib/class/spi/Spi_sniffer.rb +101 -0
  57. data/lib/class/swd/Swd.rb +125 -0
  58. data/lib/class/swd/Swd_scanner.rb +121 -0
  59. data/lib/class/swd/Swd_settings.rb +76 -0
  60. data/lib/class/uart/Uart_baudrate.rb +62 -0
  61. data/lib/class/uart/Uart_console.rb +115 -0
  62. data/lib/class/uart/Uart_settings.rb +102 -0
  63. data/lib/db/associations.rb +42 -29
  64. data/lib/db/database.rb +4 -0
  65. data/lib/db/development.sqlite3 +0 -0
  66. data/lib/db/migrate/004_create_manufacturers.rb +13 -0
  67. data/lib/db/migrate/005_create_packages.rb +13 -0
  68. data/lib/db/migrate/006_create_chip_types.rb +11 -0
  69. data/lib/db/migrate/007_create_buses.rb +11 -0
  70. data/lib/db/migrate/008_create_signals.rb +14 -0
  71. data/lib/db/migrate/009_create_chips.rb +25 -0
  72. data/lib/db/migrate/010_create_commands.rb +21 -0
  73. data/lib/db/migrate/011_create_bytes.rb +19 -0
  74. data/lib/db/migrate/012_create_i2c_settings.rb +21 -0
  75. data/lib/db/migrate/013_create_spi_settings.rb +26 -0
  76. data/lib/db/migrate/014_create_parallel_settings.rb +21 -0
  77. data/lib/db/migrate/015_create_pins.rb +19 -0
  78. data/lib/db/migrate/016_create_uses.rb +17 -0
  79. data/lib/db/migrate/017_create_swd_settings.rb +19 -0
  80. data/lib/db/migrate/018_create_uart_settings.rb +22 -0
  81. data/lib/db/schema.rb +157 -0
  82. data/lib/db/seeds.rb +161 -0
  83. data/lib/gui/gui_chip_editor.rb +23 -22
  84. data/lib/gui/gui_chip_management.rb +43 -38
  85. data/lib/gui/gui_command_editor.rb +2 -1
  86. data/lib/gui/gui_export.rb +132 -0
  87. data/lib/gui/gui_generic_commands.rb +69 -31
  88. data/lib/gui/gui_generic_export.rb +18 -2
  89. data/lib/gui/gui_generic_import.rb +18 -2
  90. data/lib/gui/gui_i2c_command.rb +2 -1
  91. data/lib/gui/gui_i2c_settings.rb +2 -2
  92. data/lib/gui/gui_import.rb +131 -0
  93. data/lib/gui/gui_parallel_settings.rb +2 -1
  94. data/lib/gui/gui_progress_bar.rb +2 -1
  95. data/lib/gui/gui_signal_mapper.rb +121 -0
  96. data/lib/gui/gui_signal_scanner.rb +146 -0
  97. data/lib/gui/gui_spi_settings.rb +6 -2
  98. data/lib/gui/gui_spi_sniffer.rb +112 -0
  99. data/lib/gui/gui_swd_settings.rb +166 -0
  100. data/lib/gui/gui_uart_baudrate.rb +114 -0
  101. data/lib/gui/gui_uart_console.rb +164 -0
  102. data/lib/gui/gui_uart_settings.rb +243 -0
  103. data/lib/gui_designer/gui_chip_editor.ui +9 -6
  104. data/lib/gui_designer/gui_chip_management.ui +79 -35
  105. data/lib/gui_designer/gui_command_editor.ui +3 -0
  106. data/lib/gui_designer/gui_export.ui +171 -0
  107. data/lib/gui_designer/gui_generic_commands.ui +274 -190
  108. data/lib/gui_designer/gui_generic_export.ui +24 -1
  109. data/lib/gui_designer/gui_generic_import.ui +25 -2
  110. data/lib/gui_designer/gui_i2c_command.ui +3 -0
  111. data/lib/gui_designer/gui_i2c_settings.ui +2 -2
  112. data/lib/gui_designer/gui_import.ui +168 -0
  113. data/lib/gui_designer/gui_parallel_settings.ui +4 -1
  114. data/lib/gui_designer/gui_progress_bar.ui +3 -0
  115. data/lib/gui_designer/gui_signal_mapper.ui +179 -0
  116. data/lib/gui_designer/gui_signal_scanner.ui +261 -0
  117. data/lib/gui_designer/gui_spi_settings.ui +15 -2
  118. data/lib/gui_designer/gui_spi_sniffer.ui +156 -0
  119. data/lib/gui_designer/gui_swd_settings.ui +189 -0
  120. data/lib/gui_designer/gui_uart_baudrate.ui +161 -0
  121. data/lib/gui_designer/gui_uart_console.ui +284 -0
  122. data/lib/gui_designer/gui_uart_settings.ui +280 -0
  123. data/lib/logs/error.log +63 -0
  124. data/lib/models/bus.rb +19 -0
  125. data/lib/models/byte.rb +29 -0
  126. data/lib/models/chip.rb +41 -0
  127. data/lib/models/chip_type.rb +14 -0
  128. data/lib/models/command.rb +20 -0
  129. data/lib/models/i2c_setting.rb +41 -0
  130. data/lib/models/manufacturer.rb +14 -0
  131. data/lib/models/package.rb +26 -0
  132. data/lib/models/parallel_setting.rb +37 -0
  133. data/lib/models/pin.rb +14 -0
  134. data/lib/models/signall.rb +20 -0
  135. data/lib/models/spi_setting.rb +67 -0
  136. data/lib/models/swd_setting.rb +25 -0
  137. data/lib/models/uart_setting.rb +52 -0
  138. data/lib/models/use.rb +6 -0
  139. data/lib/startHardsploit.rb +2 -2
  140. metadata +106 -41
  141. data/lib/Firmware/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd +0 -0
  142. data/lib/HardsploitAPI/HardsploitAPI.rb +0 -133
  143. data/lib/HardsploitAPI/HardsploitAPI_CONSTANT.rb +0 -145
  144. data/lib/HardsploitAPI/HardsploitAPI_ERROR.rb +0 -38
  145. data/lib/HardsploitAPI/HardsploitAPI_FIRMWARE.rb +0 -311
  146. data/lib/HardsploitAPI/HardsploitAPI_I2C.rb +0 -360
  147. data/lib/HardsploitAPI/HardsploitAPI_SPI.rb +0 -369
  148. data/lib/HardsploitAPI/HardsploitAPI_USB_COMMUNICATION.rb +0 -148
  149. data/lib/HardsploitAPI/LICENSE.txt +0 -674
  150. data/lib/HardsploitAPI/README.md +0 -22
  151. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD.rb +0 -249
  152. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb +0 -102
  153. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_MEM_AP.rb +0 -78
  154. data/lib/HardsploitAPI/TRADEMARK +0 -3
  155. data/lib/class/HardsploitGUI.rb +0 -463
  156. data/lib/class/I2C/I2c_export.rb +0 -118
  157. data/lib/class/I2C/I2c_import.rb +0 -79
  158. data/lib/class/I2C/I2c_settings.rb +0 -129
  159. data/lib/class/PARALLEL/Parallel_export.rb +0 -146
  160. data/lib/class/PARALLEL/Parallel_import.rb +0 -88
  161. data/lib/class/PARALLEL/Parallel_settings.rb +0 -102
  162. data/lib/class/SPI/Spi_export.rb +0 -138
  163. data/lib/class/SPI/Spi_import.rb +0 -113
  164. data/lib/class/SPI/Spi_settings.rb +0 -134
  165. data/lib/db/hs.db +0 -0
  166. data/lib/hardsploit.rb +0 -131
@@ -0,0 +1,108 @@
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_spi_settings'
9
+ class Spi_settings < Qt::Widget
10
+ slots 'save_settings()'
11
+
12
+ def initialize(chip)
13
+ super()
14
+ @view = Ui_Spi_settings.new
15
+ centerWindow(self)
16
+ @view.setupUi(self)
17
+ @view.lbl_chip.setText(chip.reference)
18
+ inputRestrict(@view.lie_total_size, 0)
19
+ inputRestrict(@view.lie_page_size, 0)
20
+ inputRestrict(@view.lie_write_page_latency, 0)
21
+ inputRestrict(@view.lie_cmd_read, 0)
22
+ inputRestrict(@view.lie_cmd_write, 0)
23
+ inputRestrict(@view.lie_cmd_write_enable, 0)
24
+ inputRestrict(@view.lie_cmd_erase, 0)
25
+ inputRestrict(@view.lie_erase_time, 0)
26
+ @chip = chip
27
+ feed_settings_form unless chip.spi_setting.nil?
28
+ end
29
+
30
+ def save_settings
31
+ @chip.spi_setting.nil? ? create : update
32
+ @chip.reload
33
+ end
34
+
35
+ def feed_settings_form
36
+ @view.cbx_mode.setCurrentIndex(@view.cbx_mode.findText(@chip.spi_setting.mode.to_s))
37
+ @view.cbx_frequency.setCurrentIndex(@view.cbx_frequency.findText(@chip.spi_setting.frequency))
38
+ @view.lie_cmd_read.setText(@chip.spi_setting.command_read.to_s)
39
+ @view.lie_cmd_write.setText(@chip.spi_setting.command_write.to_s)
40
+ @view.lie_write_page_latency.setText(@chip.spi_setting.write_page_latency.to_s)
41
+ @view.lie_cmd_write_enable.setText(@chip.spi_setting.command_write_enable.to_s)
42
+ @view.lie_cmd_erase.setText(@chip.spi_setting.command_erase.to_s)
43
+ @view.lie_erase_time.setText(@chip.spi_setting.erase_time.to_s)
44
+ @view.lie_page_size.setText(@chip.spi_setting.page_size.to_s)
45
+ @view.lie_total_size.setText(@chip.spi_setting.total_size.to_s)
46
+ @view.rbn_no.setChecked(true) if @chip.spi_setting.is_flash.zero?
47
+ rescue Exception => msg
48
+ ErrorMsg.new.unknow(msg)
49
+ end
50
+
51
+ def is_flash?
52
+ return 0 if @view.rbn_no.isChecked
53
+ return 1
54
+ end
55
+
56
+ def create
57
+ chip_settings = SpiSetting.create(
58
+ mode: @view.cbx_mode.currentText.to_i,
59
+ frequency: @view.cbx_frequency.currentText,
60
+ write_page_latency: @view.lie_write_page_latency.text,
61
+ command_read: @view.lie_cmd_read.text,
62
+ command_write: @view.lie_cmd_write.text,
63
+ command_write_enable: @view.lie_cmd_write_enable.text,
64
+ command_erase: @view.lie_cmd_erase.text,
65
+ erase_time: @view.lie_erase_time.text,
66
+ page_size: @view.lie_page_size.text,
67
+ total_size: @view.lie_total_size.text,
68
+ is_flash: is_flash?,
69
+ chip_id: @chip.id
70
+ )
71
+ unless check_for_errors(chip_settings)
72
+ Qt::MessageBox.new(
73
+ Qt::MessageBox::Information,
74
+ 'Succes',
75
+ 'SPI settings saved'
76
+ ).exec
77
+ close
78
+ end
79
+ rescue Exception => msg
80
+ ErrorMsg.new.unknown(msg)
81
+ end
82
+
83
+ def update
84
+ @chip.spi_setting.update(
85
+ mode: @view.cbx_mode.currentText.to_i,
86
+ frequency: @view.cbx_frequency.currentText,
87
+ write_page_latency: @view.lie_write_page_latency.text,
88
+ command_read: @view.lie_cmd_read.text,
89
+ command_write: @view.lie_cmd_write.text,
90
+ command_write_enable: @view.lie_cmd_write_enable.text,
91
+ command_erase: @view.lie_cmd_erase.text,
92
+ erase_time: @view.lie_erase_time.text,
93
+ page_size: @view.lie_page_size.text,
94
+ total_size: @view.lie_total_size.text,
95
+ is_flash: is_flash?
96
+ )
97
+ unless check_for_errors(@chip.spi_setting)
98
+ Qt::MessageBox.new(
99
+ Qt::MessageBox::Information,
100
+ 'Succes',
101
+ 'SPI settings updated'
102
+ ).exec
103
+ close
104
+ end
105
+ rescue Exception => msg
106
+ ErrorMsg.new.unknown(msg)
107
+ end
108
+ end
@@ -0,0 +1,101 @@
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_spi_sniffer'
9
+ require_relative '../../HardsploitAPI/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER'
10
+
11
+ class Spi_sniffer < Qt::Widget
12
+ slots 'start()'
13
+ slots 'stop()'
14
+ slots 'update()'
15
+
16
+ def initialize(chip)
17
+ super()
18
+ @view = Ui_Spi_sniffer.new
19
+ centerWindow(self)
20
+ @view.setupUi(self)
21
+ @chip = chip
22
+ resize_to_content
23
+ end
24
+
25
+ def start
26
+ @view.btn_stop.setEnabled(true)
27
+ @view.btn_start.setEnabled(false)
28
+ @view.cbx_type.setEnabled(false)
29
+ Firmware.new('SPI_SNIFFER')
30
+ case @view.cbx_type.currentIndex
31
+ when 0; type = HardsploitAPI::SPISniffer::MISO_MOSI
32
+ when 1; type = HardsploitAPI::SPISniffer::MOSI
33
+ when 2; type = HardsploitAPI::SPISniffer::MISO
34
+ end
35
+ return ErrorMsg.new.spi_mode_missing if @chip.spi_setting.mode.nil?
36
+ @spi = HardsploitAPI_SPI_SNIFFER.new(
37
+ mode: @chip.spi_setting.mode,
38
+ sniff: type
39
+ )
40
+ @spi.spi_SetSettings
41
+ sleep(0.5)
42
+ @timer = Qt::Timer.new
43
+ Qt::Object.connect(@timer, SIGNAL('timeout()'), self, SLOT('update()'))
44
+ @timer.start(1000)
45
+ end
46
+
47
+ def update
48
+ result = @spi.spi_receive_available_data
49
+ unless result.empty?
50
+ if @spi.sniff == HardsploitAPI::SPISniffer::MISO_MOSI
51
+ result[0].each_with_index do |elem, i|
52
+ @view.tbl_result.insertRow(i)
53
+ @view.tbl_result.setItem(i, 0, Qt::TableWidgetItem.new(i.next.to_s))
54
+ @view.tbl_result.setItem(i, 1, Qt::TableWidgetItem.new("0x#{elem.to_s(16).rjust(2, "0").upcase}"))
55
+ @view.tbl_result.setItem(i, 2, Qt::TableWidgetItem.new("0x#{result[1][i].to_s(16).rjust(2, "0").upcase}"))
56
+ end
57
+ else # MOSI OR MISO
58
+ if @spi.sniff == HardsploitAPI::SPISniffer::MISO
59
+ result.each_with_index do |elem, i|
60
+ @view.tbl_result.insertRow(i)
61
+ @view.tbl_result.setItem(i, 0, Qt::TableWidgetItem.new(@view.tbl_result.rowCount.next.to_s))
62
+ @view.tbl_result.setItem(i, 1, Qt::TableWidgetItem.new('-'))
63
+ @view.tbl_result.setItem(i, 2, Qt::TableWidgetItem.new("0x#{elem.to_s(16).rjust(2, "0").upcase}"))
64
+ end
65
+ else
66
+ result.each_with_index do |elem, i|
67
+ @view.tbl_result.insertRow(i)
68
+ @view.tbl_result.setItem(i, 0, Qt::TableWidgetItem.new(@view.tbl_result.rowCount.next.to_s))
69
+ @view.tbl_result.setItem(i, 1, Qt::TableWidgetItem.new("0x#{elem.to_s(16).rjust(2, "0").upcase}"))
70
+ @view.tbl_result.setItem(i, 2, Qt::TableWidgetItem.new('-'))
71
+ end
72
+ end
73
+ resize_to_content
74
+ end
75
+ end
76
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
77
+ ErrorMsg.new.hardsploit_not_found
78
+ rescue HardsploitAPI::ERROR::USB_ERROR
79
+ p "Checking..."
80
+ rescue Exception => msg
81
+ ErrorMsg.new.unknown(msg)
82
+ end
83
+
84
+ def stop
85
+ @view.btn_start.setEnabled(true)
86
+ @view.cbx_type.setEnabled(true)
87
+ @view.btn_stop.setEnabled(false)
88
+ @timer.killTimer(@timer.timerId)
89
+ @timer = nil
90
+ end
91
+
92
+ def closeEvent(event)
93
+ @timer.killTimer(@timer.timerId) unless @timer.nil?
94
+ end
95
+
96
+ def resize_to_content
97
+ @view.tbl_result.resizeColumnsToContents
98
+ @view.tbl_result.resizeRowsToContents
99
+ @view.tbl_result.horizontalHeader.stretchLastSection = true
100
+ end
101
+ end
@@ -0,0 +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
@@ -0,0 +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