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_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
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
@@ -1,101 +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
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
@@ -1,120 +1,120 @@
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_mapper'
9
- class Signal_mapper < Qt::Widget
10
- slots 'check_mapping_value(QTableWidgetItem*)'
11
- slots 'update_map_table(QString)'
12
- slots 'save_signal_mapping()'
13
-
14
- def initialize
15
- super()
16
- @view = Ui_Signal_mapper.new
17
- centerWindow(self)
18
- @view.setupUi(self)
19
- init_bus_list
20
- rescue Exception => msg
21
- ErrorMsg.new.unknown(msg)
22
- end
23
-
24
- def init_bus_list
25
- Bus.all.each do |b|
26
- @view.cbx_bus.addItem(b.name) unless b.name == "NA"
27
- end
28
- end
29
-
30
- def check_mapping_value(item)
31
- if item.column == 1
32
- item.setText(item.text.upcase)
33
- reg = Qt::RegExp.new("^[A-H]{1}[0-7]${1}")
34
- reg_val = Qt::RegExpValidator.new(reg, self)
35
- if reg_val.validate(item.text, item.text.length) == Qt::Validator::Invalid || item.text.nil?
36
- item.setText('')
37
- Qt::MessageBox.new(
38
- Qt::MessageBox::Warning,
39
- 'Wrong data',
40
- 'Only values from A0 to H7 are accepted in this cell'
41
- ).exec
42
- end
43
- end
44
- rescue Exception => msg
45
- ErrorMsg.new.unknown(msg)
46
- end
47
-
48
- def update_map_table(bus_name)
49
- unless bus_name == 'Bus...'
50
- @view.map_table.clearContents
51
- @view.map_table.setRowCount(0)
52
- Bus.find_by(name: bus_name).signalls.each do |s|
53
- @view.map_table.insertRow(@view.map_table.rowCount)
54
- signal_cell = Qt::TableWidgetItem.new(s.name)
55
- signal_cell.setFlags(Qt::ItemIsEnabled)
56
- @view.map_table.setItem(@view.map_table.rowCount - 1, 0, signal_cell)
57
- pin_cell = Qt::TableWidgetItem.new(s.pin)
58
- @view.map_table.setItem(@view.map_table.rowCount - 1, 1, pin_cell)
59
- end
60
- resize_to_content
61
- end
62
- rescue Exception => msg
63
- ErrorMsg.new.unknown(msg)
64
- end
65
-
66
- def save_signal_mapping
67
- return 0 unless are_values_ok?
68
- @view.map_table.rowCount.times do |i|
69
- current_signal = Signall.find_by(name: @view.map_table.item(i, 0).text)
70
- if current_signal.name != @view.map_table.item(i, 1).text
71
- current_signal.update(pin: @view.map_table.item(i, 1).text)
72
- end
73
- end
74
- Qt::MessageBox.new(
75
- Qt::MessageBox::Information,
76
- 'Save mapping',
77
- 'Pin mapping saved successfuly'
78
- ).exec
79
- close
80
- end
81
-
82
- def are_values_ok?
83
- pins = []
84
- @view.map_table.rowCount.times do |i|
85
- pins.push(@view.map_table.item(i, 1).text)
86
- end
87
- return true if check_empty(pins) && check_duplicate(pins)
88
- end
89
-
90
- def check_empty(pins)
91
- return true unless pins.include?('')
92
- @view.map_table.setCurrentItem(@view.map_table.item(pins.index(''), 1))
93
- Qt::MessageBox.new(
94
- Qt::MessageBox::Warning,
95
- 'Empty pin',
96
- 'Empty pin value detected'
97
- ).exec
98
- return false
99
- end
100
-
101
- def check_duplicate(pins)
102
- duplicate = pins.inject(Hash.new(0)) {|ha, e| ha[e] += 1 ; ha}.delete_if {|k, v| v == 1}.keys
103
- unless duplicate.empty?
104
- @view.map_table.setCurrentItem(@view.map_table.item(pins.index(duplicate[0]), 1))
105
- Qt::MessageBox.new(
106
- Qt::MessageBox::Warning,
107
- 'Wrong value',
108
- "Duplicate values detected: #{duplicate[0]}"
109
- ).exec
110
- return false
111
- end
112
- return true
113
- end
114
-
115
- def resize_to_content
116
- @view.map_table.resizeColumnsToContents
117
- @view.map_table.resizeRowsToContents
118
- @view.map_table.horizontalHeader.stretchLastSection = true
119
- end
120
- 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_mapper'
9
+ class Signal_mapper < Qt::Widget
10
+ slots 'check_mapping_value(QTableWidgetItem*)'
11
+ slots 'update_map_table(QString)'
12
+ slots 'save_signal_mapping()'
13
+
14
+ def initialize
15
+ super()
16
+ @view = Ui_Signal_mapper.new
17
+ centerWindow(self)
18
+ @view.setupUi(self)
19
+ init_bus_list
20
+ rescue Exception => msg
21
+ ErrorMsg.new.unknown(msg)
22
+ end
23
+
24
+ def init_bus_list
25
+ Bus.all.each do |b|
26
+ @view.cbx_bus.addItem(b.name) unless b.name == "NA"
27
+ end
28
+ end
29
+
30
+ def check_mapping_value(item)
31
+ if item.column == 1
32
+ item.setText(item.text.upcase)
33
+ reg = Qt::RegExp.new("^[A-H]{1}[0-7]${1}")
34
+ reg_val = Qt::RegExpValidator.new(reg, self)
35
+ if reg_val.validate(item.text, item.text.length) == Qt::Validator::Invalid || item.text.nil?
36
+ item.setText('')
37
+ Qt::MessageBox.new(
38
+ Qt::MessageBox::Warning,
39
+ 'Wrong data',
40
+ 'Only values from A0 to H7 are accepted in this cell'
41
+ ).exec
42
+ end
43
+ end
44
+ rescue Exception => msg
45
+ ErrorMsg.new.unknown(msg)
46
+ end
47
+
48
+ def update_map_table(bus_name)
49
+ unless bus_name == 'Bus...'
50
+ @view.map_table.clearContents
51
+ @view.map_table.setRowCount(0)
52
+ Bus.find_by(name: bus_name).signalls.each do |s|
53
+ @view.map_table.insertRow(@view.map_table.rowCount)
54
+ signal_cell = Qt::TableWidgetItem.new(s.name)
55
+ signal_cell.setFlags(Qt::ItemIsEnabled)
56
+ @view.map_table.setItem(@view.map_table.rowCount - 1, 0, signal_cell)
57
+ pin_cell = Qt::TableWidgetItem.new(s.pin)
58
+ @view.map_table.setItem(@view.map_table.rowCount - 1, 1, pin_cell)
59
+ end
60
+ resize_to_content
61
+ end
62
+ rescue Exception => msg
63
+ ErrorMsg.new.unknown(msg)
64
+ end
65
+
66
+ def save_signal_mapping
67
+ return 0 unless are_values_ok?
68
+ @view.map_table.rowCount.times do |i|
69
+ current_signal = Signall.find_by(name: @view.map_table.item(i, 0).text)
70
+ if current_signal.name != @view.map_table.item(i, 1).text
71
+ current_signal.update(pin: @view.map_table.item(i, 1).text)
72
+ end
73
+ end
74
+ Qt::MessageBox.new(
75
+ Qt::MessageBox::Information,
76
+ 'Save mapping',
77
+ 'Pin mapping saved successfuly'
78
+ ).exec
79
+ close
80
+ end
81
+
82
+ def are_values_ok?
83
+ pins = []
84
+ @view.map_table.rowCount.times do |i|
85
+ pins.push(@view.map_table.item(i, 1).text)
86
+ end
87
+ return true if check_empty(pins) && check_duplicate(pins)
88
+ end
89
+
90
+ def check_empty(pins)
91
+ return true unless pins.include?('')
92
+ @view.map_table.setCurrentItem(@view.map_table.item(pins.index(''), 1))
93
+ Qt::MessageBox.new(
94
+ Qt::MessageBox::Warning,
95
+ 'Empty pin',
96
+ 'Empty pin value detected'
97
+ ).exec
98
+ return false
99
+ end
100
+
101
+ def check_duplicate(pins)
102
+ duplicate = pins.inject(Hash.new(0)) {|ha, e| ha[e] += 1 ; ha}.delete_if {|k, v| v == 1}.keys
103
+ unless duplicate.empty?
104
+ @view.map_table.setCurrentItem(@view.map_table.item(pins.index(duplicate[0]), 1))
105
+ Qt::MessageBox.new(
106
+ Qt::MessageBox::Warning,
107
+ 'Wrong value',
108
+ "Duplicate values detected: #{duplicate[0]}"
109
+ ).exec
110
+ return false
111
+ end
112
+ return true
113
+ end
114
+
115
+ def resize_to_content
116
+ @view.map_table.resizeColumnsToContents
117
+ @view.map_table.resizeRowsToContents
118
+ @view.map_table.horizontalHeader.stretchLastSection = true
119
+ end
120
+ end