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
@@ -1,108 +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_generic_export'
9
- require_relative '../../HardsploitAPI/Modules/SPI/HardsploitAPI_SPI'
10
-
11
- class Spi_export < Qt::Widget
12
- slots 'export()'
13
- slots 'select_export_file()'
14
-
15
- def initialize(chip)
16
- super()
17
- @view = Ui_Generic_export.new
18
- centerWindow(self)
19
- @view.setupUi(self)
20
- @view.lbl_chip.setText(chip.reference)
21
- inputRestrict(@view.lie_start, 0)
22
- inputRestrict(@view.lie_stop, 0)
23
- @chip = chip
24
- @speeds = {
25
- '25.00' => 3,
26
- '18.75' => 4,
27
- '15.00' => 5,
28
- '12.50' => 6,
29
- '10.71' => 7,
30
- '9.38' => 8,
31
- '7.50' => 10,
32
- '5.00' => 15,
33
- '3.95' => 19,
34
- '3.00' => 25,
35
- '2.03' => 37,
36
- '1.00' => 75,
37
- '0.50' => 150,
38
- '0.29' => 255
39
- }
40
- end
41
-
42
- def select_export_file
43
- @filepath = Qt::FileDialog.getSaveFileName(self, tr('Select a file'), '/', tr('*.*'))
44
- unless @filepath.nil?
45
- @view.btn_export.setEnabled(true)
46
- @view.btn_full_export.setEnabled(true)
47
- @view.lbl_selected_file.setText("#{@filepath.split("/").last}")
48
- end
49
- rescue Exception => msg
50
- ErrorMsg.new.unknown(msg)
51
- end
52
-
53
- def export
54
- $file = File.open("#{@filepath}", 'w') unless @filepath.nil?
55
- if sender.objectName == 'btn_full_export'
56
- return false unless control_export_settings('full')
57
- start = 0
58
- stop = @chip.spi_setting.total_size - 1
59
- control = @chip.spi_setting.total_size
60
- else
61
- return false unless control_export_settings('partial')
62
- start = @view.lie_start.text.to_i
63
- stop = @view.lie_stop.text.to_i
64
- control = (stop - start) + 1
65
- end
66
- Firmware.new('SPI')
67
- $pgb = Progress_bar.new("SPI: Exporting...")
68
- $pgb.show
69
- spi = HardsploitAPI_SPI.new(
70
- speed: @speeds[@chip.spi_setting.frequency],
71
- mode: @chip.spi_setting.mode
72
- )
73
- spi.spi_Generic_Dump(
74
- readSpiCommand: @chip.spi_setting.command_read,
75
- startAddress: start,
76
- stopAddress: stop,
77
- sizeMax: @chip.spi_setting.total_size.to_i
78
- )
79
- $file.close unless $file.nil?
80
- ErrorMsg.new.filesize_error unless control == File.size(@filepath)
81
- rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
82
- ErrorMsg.new.hardsploit_not_found
83
- rescue HardsploitAPI::ERROR::USB_ERROR
84
- ErrorMsg.new.usb_error
85
- rescue Exception => msg
86
- ErrorMsg.new.unknown(msg)
87
- end
88
-
89
- def control_export_settings(type)
90
- return ErrorMsg.new.settings_missing if @chip.spi_setting.nil?
91
- return ErrorMsg.new.frequency_missing if @chip.spi_setting.frequency.nil?
92
- return ErrorMsg.new.mode_missing if @chip.spi_setting.command_read.nil?
93
- return ErrorMsg.new.full_size_error if @chip.spi_setting.total_size.nil?
94
- return ErrorMsg.new.full_size_error if @chip.spi_setting.total_size.zero?
95
- if type == 'partial'
96
- return ErrorMsg.new.start_stop_missing if @view.lie_start.text.empty?
97
- return ErrorMsg.new.start_stop_missing if @view.lie_stop.text.empty?
98
- start = @view.lie_start.text.to_i
99
- stop = @view.lie_stop.text.to_i
100
- total_size = @chip.spi_setting.total_size
101
- return ErrorMsg.new.start_neq_stop if start == stop
102
- return ErrorMsg.new.start_inf_to_stop if start > stop
103
- return ErrorMsg.new.inf_to_total_size if start > (total_size - 1)
104
- return ErrorMsg.new.inf_to_total_size if stop > (total_size - 1)
105
- end
106
- return true
107
- end
108
- 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_generic_export'
9
+ require_relative '../../HardsploitAPI/Modules/SPI/HardsploitAPI_SPI'
10
+
11
+ class Spi_export < Qt::Widget
12
+ slots 'export()'
13
+ slots 'select_export_file()'
14
+
15
+ def initialize(chip)
16
+ super()
17
+ @view = Ui_Generic_export.new
18
+ centerWindow(self)
19
+ @view.setupUi(self)
20
+ @view.lbl_chip.setText(chip.reference)
21
+ inputRestrict(@view.lie_start, 0)
22
+ inputRestrict(@view.lie_stop, 0)
23
+ @chip = chip
24
+ @speeds = {
25
+ '25.00' => 3,
26
+ '18.75' => 4,
27
+ '15.00' => 5,
28
+ '12.50' => 6,
29
+ '10.71' => 7,
30
+ '9.38' => 8,
31
+ '7.50' => 10,
32
+ '5.00' => 15,
33
+ '3.95' => 19,
34
+ '3.00' => 25,
35
+ '2.03' => 37,
36
+ '1.00' => 75,
37
+ '0.50' => 150,
38
+ '0.29' => 255
39
+ }
40
+ end
41
+
42
+ def select_export_file
43
+ @filepath = Qt::FileDialog.getSaveFileName(self, tr('Select a file'), '/', tr('*.*'))
44
+ unless @filepath.nil?
45
+ @view.btn_export.setEnabled(true)
46
+ @view.btn_full_export.setEnabled(true)
47
+ @view.lbl_selected_file.setText("#{@filepath.split("/").last}")
48
+ end
49
+ rescue Exception => msg
50
+ ErrorMsg.new.unknown(msg)
51
+ end
52
+
53
+ def export
54
+ $file = File.open("#{@filepath}", 'w') unless @filepath.nil?
55
+ if sender.objectName == 'btn_full_export'
56
+ return false unless control_export_settings('full')
57
+ start = 0
58
+ stop = @chip.spi_setting.total_size - 1
59
+ control = @chip.spi_setting.total_size
60
+ else
61
+ return false unless control_export_settings('partial')
62
+ start = @view.lie_start.text.to_i
63
+ stop = @view.lie_stop.text.to_i
64
+ control = (stop - start) + 1
65
+ end
66
+ Firmware.new('SPI')
67
+ $pgb = Progress_bar.new("SPI: Exporting...")
68
+ $pgb.show
69
+ spi = HardsploitAPI_SPI.new(
70
+ speed: @speeds[@chip.spi_setting.frequency],
71
+ mode: @chip.spi_setting.mode
72
+ )
73
+ spi.spi_Generic_Dump(
74
+ readSpiCommand: @chip.spi_setting.command_read,
75
+ startAddress: start,
76
+ stopAddress: stop,
77
+ sizeMax: @chip.spi_setting.total_size.to_i
78
+ )
79
+ $file.close unless $file.nil?
80
+ ErrorMsg.new.filesize_error unless control == File.size(@filepath)
81
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
82
+ ErrorMsg.new.hardsploit_not_found
83
+ rescue HardsploitAPI::ERROR::USB_ERROR
84
+ ErrorMsg.new.usb_error
85
+ rescue Exception => msg
86
+ ErrorMsg.new.unknown(msg)
87
+ end
88
+
89
+ def control_export_settings(type)
90
+ return ErrorMsg.new.settings_missing if @chip.spi_setting.nil?
91
+ return ErrorMsg.new.frequency_missing if @chip.spi_setting.frequency.nil?
92
+ return ErrorMsg.new.mode_missing if @chip.spi_setting.command_read.nil?
93
+ return ErrorMsg.new.full_size_error if @chip.spi_setting.total_size.nil?
94
+ return ErrorMsg.new.full_size_error if @chip.spi_setting.total_size.zero?
95
+ if type == 'partial'
96
+ return ErrorMsg.new.start_stop_missing if @view.lie_start.text.empty?
97
+ return ErrorMsg.new.start_stop_missing if @view.lie_stop.text.empty?
98
+ start = @view.lie_start.text.to_i
99
+ stop = @view.lie_stop.text.to_i
100
+ total_size = @chip.spi_setting.total_size
101
+ return ErrorMsg.new.start_neq_stop if start == stop
102
+ return ErrorMsg.new.start_inf_to_stop if start > stop
103
+ return ErrorMsg.new.inf_to_total_size if start > (total_size - 1)
104
+ return ErrorMsg.new.inf_to_total_size if stop > (total_size - 1)
105
+ end
106
+ return true
107
+ end
108
+ end
@@ -1,159 +1,159 @@
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/SPI/HardsploitAPI_SPI'
10
-
11
- class Spi_import < Qt::Widget
12
- slots 'import()'
13
- slots 'select_import_file()'
14
-
15
- def initialize(chip)
16
- super()
17
- @view = Ui_Generic_import.new
18
- centerWindow(self)
19
- @view.setupUi(self)
20
- @view.lbl_chip.setText(chip.reference)
21
- inputRestrict(@view.lie_start, 0)
22
- @chip = chip
23
- @speeds = {
24
- '25.00' => 3,
25
- '18.75' => 4,
26
- '15.00' => 5,
27
- '12.50' => 6,
28
- '10.71' => 7,
29
- '9.38' => 8,
30
- '7.50' => 10,
31
- '5.00' => 15,
32
- '3.95' => 19,
33
- '3.00' => 25,
34
- '2.03' => 37,
35
- '1.00' => 75,
36
- '0.50' => 150,
37
- '0.29' => 255
38
- }
39
- end
40
-
41
- def select_import_file
42
- @filepath = Qt::FileDialog.getOpenFileName(self, tr('Select a file'), '/', tr('*.*'))
43
- unless @filepath.nil?
44
- @view.btn_import.setEnabled(true)
45
- @view.lbl_selected_file.setText("#{@filepath.split("/").last}")
46
- end
47
- rescue Exception => msg
48
- ErrorMsg.new.unknown(msg)
49
- end
50
-
51
- def import
52
- return 0 if control_import_settings.zero?
53
- spi = HardsploitAPI_SPI.new(
54
- speed: @speeds[@chip.spi_setting.frequency],
55
- mode: @chip.spi_setting.mode
56
- )
57
- Firmware.new('SPI')
58
- $pgb = Progress_bar.new("SPI: Importing...")
59
- $pgb.show
60
- @chip.spi_setting.is_flash.zero? ? flash = false : flash = true
61
- spi.spi_Generic_Import(
62
- startAddress: @view.lie_start.text.to_i,
63
- pageSize: @chip.spi_setting.page_size,
64
- memorySize: @chip.spi_setting.total_size,
65
- dataFile: @filepath,
66
- writeSpiCommand: @chip.spi_setting.command_write,
67
- writePageLatency: @chip.spi_setting.write_page_latency / 1000.0,
68
- enableWriteSpiCommand: @chip.spi_setting.command_write_enable,
69
- clearSpiCommand: @chip.spi_setting.command_erase,
70
- clearChipTime: @chip.spi_setting.erase_time,
71
- isFLASH: flash
72
- )
73
- rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
74
- ErrorMsg.new.hardsploit_not_found
75
- rescue HardsploitAPI::ERROR::USB_ERROR
76
- ErrorMsg.new.usb_error
77
- rescue Exception => msg
78
- ErrorMsg.new.unknown(msg)
79
- end
80
-
81
- def control_import_settings
82
- if @chip.spi_setting.nil?
83
- Qt::MessageBox.new(
84
- Qt::MessageBox::Warning,
85
- 'Missing SPI settings',
86
- 'No settings saved for this chip'
87
- ).exec
88
- return 0
89
- end
90
- if @chip.spi_setting.total_size.nil? || @chip.spi_setting.page_size.nil?
91
- Qt::MessageBox.new(
92
- Qt::MessageBox::Warning,
93
- 'Missing SPI settings',
94
- 'Total size or page size missing'
95
- ).exec
96
- return 0
97
- end
98
- if @chip.spi_setting.command_read.nil? || @chip.spi_setting.frequency.nil?
99
- Qt::MessageBox.new(
100
- Qt::MessageBox::Warning,
101
- 'Missing SPI settings',
102
- 'Read command or frequency missing'
103
- ).exec
104
- return 0
105
- end
106
- if @chip.spi_setting.command_write.nil?
107
- Qt::MessageBox.new(
108
- Qt::MessageBox::Warning,
109
- 'Missing SPI settings',
110
- 'Write command missing'
111
- ).exec
112
- return 0
113
- end
114
- if @chip.spi_setting.write_page_latency.nil?
115
- Qt::MessageBox.new(
116
- Qt::MessageBox::Warning,
117
- 'Missing SPI setting',
118
- 'SPI write page latency missing'
119
- ).exec
120
- return 0
121
- end
122
- if @chip.spi_setting.is_flash.nil?
123
- Qt::MessageBox.new(
124
- Qt::MessageBox::Warning,
125
- 'Missing SPI setting',
126
- 'SPI flash nature missing'
127
- ).exec
128
- return 0
129
- else
130
- if @chip.spi_setting.is_flash == 1
131
- if @chip.spi_setting.erase_time.nil? || @chip.spi_setting.command_erase.nil?
132
- Qt::MessageBox.new(
133
- Qt::MessageBox::Warning,
134
- 'Missing SPI setting',
135
- 'SPI erase time or command missing'
136
- ).exec
137
- return 0
138
- end
139
- end
140
- end
141
- if @chip.spi_setting.mode.nil?
142
- Qt::MessageBox.new(
143
- Qt::MessageBox::Warning,
144
- 'Missing SPI setting',
145
- 'Mode missing'
146
- ).exec
147
- return 0
148
- end
149
- if @view.lie_start.text.empty?
150
- Qt::MessageBox.new(
151
- Qt::MessageBox::Warning,
152
- 'Missing start address',
153
- 'Please fill the Start address field'
154
- ).exec
155
- return 0
156
- end
157
- return 1
158
- end
159
- 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_generic_import'
9
+ require_relative '../../HardsploitAPI/Modules/SPI/HardsploitAPI_SPI'
10
+
11
+ class Spi_import < Qt::Widget
12
+ slots 'import()'
13
+ slots 'select_import_file()'
14
+
15
+ def initialize(chip)
16
+ super()
17
+ @view = Ui_Generic_import.new
18
+ centerWindow(self)
19
+ @view.setupUi(self)
20
+ @view.lbl_chip.setText(chip.reference)
21
+ inputRestrict(@view.lie_start, 0)
22
+ @chip = chip
23
+ @speeds = {
24
+ '25.00' => 3,
25
+ '18.75' => 4,
26
+ '15.00' => 5,
27
+ '12.50' => 6,
28
+ '10.71' => 7,
29
+ '9.38' => 8,
30
+ '7.50' => 10,
31
+ '5.00' => 15,
32
+ '3.95' => 19,
33
+ '3.00' => 25,
34
+ '2.03' => 37,
35
+ '1.00' => 75,
36
+ '0.50' => 150,
37
+ '0.29' => 255
38
+ }
39
+ end
40
+
41
+ def select_import_file
42
+ @filepath = Qt::FileDialog.getOpenFileName(self, tr('Select a file'), '/', tr('*.*'))
43
+ unless @filepath.nil?
44
+ @view.btn_import.setEnabled(true)
45
+ @view.lbl_selected_file.setText("#{@filepath.split("/").last}")
46
+ end
47
+ rescue Exception => msg
48
+ ErrorMsg.new.unknown(msg)
49
+ end
50
+
51
+ def import
52
+ return 0 if control_import_settings.zero?
53
+ spi = HardsploitAPI_SPI.new(
54
+ speed: @speeds[@chip.spi_setting.frequency],
55
+ mode: @chip.spi_setting.mode
56
+ )
57
+ Firmware.new('SPI')
58
+ $pgb = Progress_bar.new("SPI: Importing...")
59
+ $pgb.show
60
+ @chip.spi_setting.is_flash.zero? ? flash = false : flash = true
61
+ spi.spi_Generic_Import(
62
+ startAddress: @view.lie_start.text.to_i,
63
+ pageSize: @chip.spi_setting.page_size,
64
+ memorySize: @chip.spi_setting.total_size,
65
+ dataFile: @filepath,
66
+ writeSpiCommand: @chip.spi_setting.command_write,
67
+ writePageLatency: @chip.spi_setting.write_page_latency / 1000.0,
68
+ enableWriteSpiCommand: @chip.spi_setting.command_write_enable,
69
+ clearSpiCommand: @chip.spi_setting.command_erase,
70
+ clearChipTime: @chip.spi_setting.erase_time,
71
+ isFLASH: flash
72
+ )
73
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
74
+ ErrorMsg.new.hardsploit_not_found
75
+ rescue HardsploitAPI::ERROR::USB_ERROR
76
+ ErrorMsg.new.usb_error
77
+ rescue Exception => msg
78
+ ErrorMsg.new.unknown(msg)
79
+ end
80
+
81
+ def control_import_settings
82
+ if @chip.spi_setting.nil?
83
+ Qt::MessageBox.new(
84
+ Qt::MessageBox::Warning,
85
+ 'Missing SPI settings',
86
+ 'No settings saved for this chip'
87
+ ).exec
88
+ return 0
89
+ end
90
+ if @chip.spi_setting.total_size.nil? || @chip.spi_setting.page_size.nil?
91
+ Qt::MessageBox.new(
92
+ Qt::MessageBox::Warning,
93
+ 'Missing SPI settings',
94
+ 'Total size or page size missing'
95
+ ).exec
96
+ return 0
97
+ end
98
+ if @chip.spi_setting.command_read.nil? || @chip.spi_setting.frequency.nil?
99
+ Qt::MessageBox.new(
100
+ Qt::MessageBox::Warning,
101
+ 'Missing SPI settings',
102
+ 'Read command or frequency missing'
103
+ ).exec
104
+ return 0
105
+ end
106
+ if @chip.spi_setting.command_write.nil?
107
+ Qt::MessageBox.new(
108
+ Qt::MessageBox::Warning,
109
+ 'Missing SPI settings',
110
+ 'Write command missing'
111
+ ).exec
112
+ return 0
113
+ end
114
+ if @chip.spi_setting.write_page_latency.nil?
115
+ Qt::MessageBox.new(
116
+ Qt::MessageBox::Warning,
117
+ 'Missing SPI setting',
118
+ 'SPI write page latency missing'
119
+ ).exec
120
+ return 0
121
+ end
122
+ if @chip.spi_setting.is_flash.nil?
123
+ Qt::MessageBox.new(
124
+ Qt::MessageBox::Warning,
125
+ 'Missing SPI setting',
126
+ 'SPI flash nature missing'
127
+ ).exec
128
+ return 0
129
+ else
130
+ if @chip.spi_setting.is_flash == 1
131
+ if @chip.spi_setting.erase_time.nil? || @chip.spi_setting.command_erase.nil?
132
+ Qt::MessageBox.new(
133
+ Qt::MessageBox::Warning,
134
+ 'Missing SPI setting',
135
+ 'SPI erase time or command missing'
136
+ ).exec
137
+ return 0
138
+ end
139
+ end
140
+ end
141
+ if @chip.spi_setting.mode.nil?
142
+ Qt::MessageBox.new(
143
+ Qt::MessageBox::Warning,
144
+ 'Missing SPI setting',
145
+ 'Mode missing'
146
+ ).exec
147
+ return 0
148
+ end
149
+ if @view.lie_start.text.empty?
150
+ Qt::MessageBox.new(
151
+ Qt::MessageBox::Warning,
152
+ 'Missing start address',
153
+ 'Please fill the Start address field'
154
+ ).exec
155
+ return 0
156
+ end
157
+ return 1
158
+ end
159
+ end