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/Export.rb CHANGED
@@ -1,140 +1,140 @@
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_export'
9
- class Export < Qt::Widget
10
- slots 'export()'
11
- slots 'export_file()'
12
-
13
- def initialize(chip_list)
14
- super()
15
- @export_ui = Ui_Export.new
16
- centerWindow(self)
17
- @export_ui.setupUi(self)
18
- @chip_list = chip_list
19
- @export_ui.rbn_cmds.setEnabled(false) unless @chip_list.count == 1
20
- end
21
-
22
- def export_file
23
- @filepath = Qt::FileDialog.getSaveFileName(self, tr('Select a file'), '/')
24
- end
25
-
26
- def export
27
- unless @filepath.nil?
28
- @file = File.open("#{@filepath}.json", 'w')
29
- unless @file.nil?
30
- @file.write("{\n")
31
- @chip_list.each_with_index do |current_chip, index|
32
- @file.write("\t\"#{index}\": {\n")
33
- @chip = Chip.find_by(reference: current_chip.text)
34
- if @export_ui.rbn_both.isChecked
35
- export_chip
36
- export_commands
37
- elsif @export_ui.rbn_comp.isChecked
38
- export_chip
39
- else
40
- export_commands
41
- end
42
- if index.next < @chip_list.count
43
- @file.write("\t},\n")
44
- else
45
- @file.write("\t}\n")
46
- end
47
- end
48
- @file.write("}")
49
- @file.close
50
- end
51
- Qt::MessageBox.new(Qt::MessageBox::Information, 'Export status', 'Export finished').exec
52
- else
53
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'File missing', 'Choose a file before exporting').exec
54
- end
55
- end
56
-
57
- def export_chip
58
- @file.write("\t\t\"chip\":{\n")
59
- write_commons
60
- write_settings
61
- write_pins
62
- if @export_ui.rbn_both.isChecked
63
- @file.write("\t\t},\n")
64
- else
65
- @file.write("\t\t}\n")
66
- end
67
- end
68
-
69
- def write_commons
70
- @file.write("\t\t\t\t\"package\": #{@chip.package.to_json},\n")
71
- @file.write("\t\t\t\t\"chip_type\": #{@chip.chip_type.to_json},\n")
72
- @file.write("\t\t\t\t\"manufacturer\": #{@chip.manufacturer.to_json},\n")
73
- @file.write("\t\t\t\t\"characteristics\": #{@chip.to_json},\n")
74
- end
75
-
76
- def write_settings
77
- @file.write("\t\t\t\t\"settings\":{\n")
78
- if @chip.parallel_setting.nil?
79
- @file.write("\t\t\t\t\t\t\"parralel\": {},\n")
80
- else
81
- @file.write("\t\t\t\t\t\t\"parralel\": #{@chip.parallel_setting.to_json},\n")
82
- end
83
- if @chip.spi_setting.nil?
84
- @file.write("\t\t\t\t\t\t\"spi\": {},\n")
85
- else
86
- @file.write("\t\t\t\t\t\t\"spi\":#{@chip.spi_setting.to_json},\n")
87
- end
88
- if @chip.i2c_setting.nil?
89
- @file.write("\t\t\t\t\t\t\"i2c\": {},\n")
90
- else
91
- @file.write("\t\t\t\t\t\t\"i2c\": #{@chip.i2c_setting.to_json},\n")
92
- end
93
- if @chip.swd_setting.nil?
94
- @file.write("\t\t\t\t\t\t\"swd\": {},\n")
95
- else
96
- @file.write("\t\t\t\t\t\t\"swd\": #{@chip.swd_setting.to_json},\n")
97
- end
98
- if @chip.uart_setting.nil?
99
- @file.write("\t\t\t\t\t\t\"uart\": {}\n")
100
- else
101
- @file.write("\t\t\t\t\t\t\"uart\": #{@chip.uart_setting.to_json}\n")
102
- end
103
- @file.write("\t\t\t\t},\n")
104
- end
105
-
106
- def write_pins
107
- @file.write("\t\t\t\t\"pins\":[\n")
108
- @chip.pins.each_with_index do |pin, index|
109
- if index + 1 < @chip.pins.count
110
- @file.write("\t\t\t\t\t\t#{pin.to_json},\n")
111
- else
112
- @file.write("\t\t\t\t\t\t#{pin.to_json}\n")
113
- end
114
- end
115
- @file.write("\t\t\t\t]\n")
116
- end
117
-
118
- def export_commands
119
- @file.write("\t\t\"commands\":{\n")
120
- @chip.commands.each_with_index do |cmd, index|
121
- @file.write("\t\t\t\t\"#{index}\":{\n")
122
- @file.write("\t\t\t\t\t\t\"characteristics\": #{cmd.to_json},\n")
123
- @file.write("\t\t\t\t\t\t\"bytes\":[\n")
124
- cmd.bytes.each_with_index do |bytes, index|
125
- if index + 1 < cmd.bytes.count
126
- @file.write("\t\t\t\t\t\t\t\t#{bytes.to_json},\n")
127
- else
128
- @file.write("\t\t\t\t\t\t\t\t#{bytes.to_json}\n")
129
- end
130
- end
131
- @file.write("\t\t\t\t\t\t]\n")
132
- if index.next < @chip.commands.count
133
- @file.write("\t\t\t\t},\n")
134
- else
135
- @file.write("\t\t\t\t}\n")
136
- end
137
- end
138
- @file.write("\t\t}\n")
139
- end
140
- 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_export'
9
+ class Export < Qt::Widget
10
+ slots 'export()'
11
+ slots 'export_file()'
12
+
13
+ def initialize(chip_list)
14
+ super()
15
+ @export_ui = Ui_Export.new
16
+ centerWindow(self)
17
+ @export_ui.setupUi(self)
18
+ @chip_list = chip_list
19
+ @export_ui.rbn_cmds.setEnabled(false) unless @chip_list.count == 1
20
+ end
21
+
22
+ def export_file
23
+ @filepath = Qt::FileDialog.getSaveFileName(self, tr('Select a file'), '/')
24
+ end
25
+
26
+ def export
27
+ unless @filepath.nil?
28
+ @file = File.open("#{@filepath}.json", 'w')
29
+ unless @file.nil?
30
+ @file.write("{\n")
31
+ @chip_list.each_with_index do |current_chip, index|
32
+ @file.write("\t\"#{index}\": {\n")
33
+ @chip = Chip.find_by(reference: current_chip.text)
34
+ if @export_ui.rbn_both.isChecked
35
+ export_chip
36
+ export_commands
37
+ elsif @export_ui.rbn_comp.isChecked
38
+ export_chip
39
+ else
40
+ export_commands
41
+ end
42
+ if index.next < @chip_list.count
43
+ @file.write("\t},\n")
44
+ else
45
+ @file.write("\t}\n")
46
+ end
47
+ end
48
+ @file.write("}")
49
+ @file.close
50
+ end
51
+ Qt::MessageBox.new(Qt::MessageBox::Information, 'Export status', 'Export finished').exec
52
+ else
53
+ Qt::MessageBox.new(Qt::MessageBox::Warning, 'File missing', 'Choose a file before exporting').exec
54
+ end
55
+ end
56
+
57
+ def export_chip
58
+ @file.write("\t\t\"chip\":{\n")
59
+ write_commons
60
+ write_settings
61
+ write_pins
62
+ if @export_ui.rbn_both.isChecked
63
+ @file.write("\t\t},\n")
64
+ else
65
+ @file.write("\t\t}\n")
66
+ end
67
+ end
68
+
69
+ def write_commons
70
+ @file.write("\t\t\t\t\"package\": #{@chip.package.to_json},\n")
71
+ @file.write("\t\t\t\t\"chip_type\": #{@chip.chip_type.to_json},\n")
72
+ @file.write("\t\t\t\t\"manufacturer\": #{@chip.manufacturer.to_json},\n")
73
+ @file.write("\t\t\t\t\"characteristics\": #{@chip.to_json},\n")
74
+ end
75
+
76
+ def write_settings
77
+ @file.write("\t\t\t\t\"settings\":{\n")
78
+ if @chip.parallel_setting.nil?
79
+ @file.write("\t\t\t\t\t\t\"parralel\": {},\n")
80
+ else
81
+ @file.write("\t\t\t\t\t\t\"parralel\": #{@chip.parallel_setting.to_json},\n")
82
+ end
83
+ if @chip.spi_setting.nil?
84
+ @file.write("\t\t\t\t\t\t\"spi\": {},\n")
85
+ else
86
+ @file.write("\t\t\t\t\t\t\"spi\":#{@chip.spi_setting.to_json},\n")
87
+ end
88
+ if @chip.i2c_setting.nil?
89
+ @file.write("\t\t\t\t\t\t\"i2c\": {},\n")
90
+ else
91
+ @file.write("\t\t\t\t\t\t\"i2c\": #{@chip.i2c_setting.to_json},\n")
92
+ end
93
+ if @chip.swd_setting.nil?
94
+ @file.write("\t\t\t\t\t\t\"swd\": {},\n")
95
+ else
96
+ @file.write("\t\t\t\t\t\t\"swd\": #{@chip.swd_setting.to_json},\n")
97
+ end
98
+ if @chip.uart_setting.nil?
99
+ @file.write("\t\t\t\t\t\t\"uart\": {}\n")
100
+ else
101
+ @file.write("\t\t\t\t\t\t\"uart\": #{@chip.uart_setting.to_json}\n")
102
+ end
103
+ @file.write("\t\t\t\t},\n")
104
+ end
105
+
106
+ def write_pins
107
+ @file.write("\t\t\t\t\"pins\":[\n")
108
+ @chip.pins.each_with_index do |pin, index|
109
+ if index + 1 < @chip.pins.count
110
+ @file.write("\t\t\t\t\t\t#{pin.to_json},\n")
111
+ else
112
+ @file.write("\t\t\t\t\t\t#{pin.to_json}\n")
113
+ end
114
+ end
115
+ @file.write("\t\t\t\t]\n")
116
+ end
117
+
118
+ def export_commands
119
+ @file.write("\t\t\"commands\":{\n")
120
+ @chip.commands.each_with_index do |cmd, index|
121
+ @file.write("\t\t\t\t\"#{index}\":{\n")
122
+ @file.write("\t\t\t\t\t\t\"characteristics\": #{cmd.to_json},\n")
123
+ @file.write("\t\t\t\t\t\t\"bytes\":[\n")
124
+ cmd.bytes.each_with_index do |bytes, index|
125
+ if index + 1 < cmd.bytes.count
126
+ @file.write("\t\t\t\t\t\t\t\t#{bytes.to_json},\n")
127
+ else
128
+ @file.write("\t\t\t\t\t\t\t\t#{bytes.to_json}\n")
129
+ end
130
+ end
131
+ @file.write("\t\t\t\t\t\t]\n")
132
+ if index.next < @chip.commands.count
133
+ @file.write("\t\t\t\t},\n")
134
+ else
135
+ @file.write("\t\t\t\t}\n")
136
+ end
137
+ end
138
+ @file.write("\t\t}\n")
139
+ end
140
+ end
@@ -1,124 +1,124 @@
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 'csv'
9
- class Export_manager < Qt::Widget
10
- slots 'save_result()'
11
-
12
- def initialize(bus, result, spiDataSended = [])
13
- super()
14
- @view = Ui_Export_manager.new
15
- centerWindow(self)
16
- @view.setupUi(self)
17
- @bus = bus
18
- # Check the bus type to adapt the table column
19
- if bus == 'SPI'
20
- create_result_table('SPI')
21
- @view.cbx_export.hide
22
- @view.tbl_result.setRowCount(result.length)
23
- result.length.times do |i|
24
- @view.tbl_result.setItem(i, 0, Qt::TableWidgetItem.new(spiDataSended[i].to_s))
25
- @view.tbl_result.setItem(i, 1, Qt::TableWidgetItem.new(result[i].to_s))
26
- end
27
- @view.tbl_result.resizeColumnsToContents
28
- @view.tbl_result.resizeRowsToContents
29
- @view.tbl_result.horizontalHeader.stretchLastSection = true
30
- else
31
- create_result_table('I2C')
32
- @view.tbl_result.setRowCount(result.length / 2)
33
- (0..result.length - 1).step(2).each_with_index do |i, v|
34
- case result[i]
35
- when 0
36
- @view.tbl_result.setItem(v, 0, Qt::TableWidgetItem.new('Write'))
37
- @view.tbl_result.setItem(v, 1, Qt::TableWidgetItem.new('ACK'))
38
- @view.tbl_result.setItem(v, 2, Qt::TableWidgetItem.new(result[i + 1].to_s))
39
- when 1
40
- @view.tbl_result.setItem(v, 0, Qt::TableWidgetItem.new('Read'))
41
- @view.tbl_result.setItem(v, 1, Qt::TableWidgetItem.new('ACK'))
42
- @view.tbl_result.setItem(v, 2, Qt::TableWidgetItem.new(result[i + 1].to_s))
43
- when 2
44
- @view.tbl_result.setItem(v, 0, Qt::TableWidgetItem.new('Write'))
45
- @view.tbl_result.setItem(v, 1, Qt::TableWidgetItem.new('NACK'))
46
- @view.tbl_result.setItem(v, 2, Qt::TableWidgetItem.new(result[i + 1].to_s))
47
- else
48
- @view.tbl_result.setItem(v, 0, Qt::TableWidgetItem.new('Write'))
49
- @view.tbl_result.setItem(v, 1, Qt::TableWidgetItem.new('NACK'))
50
- @view.tbl_result.setItem(v, 2, Qt::TableWidgetItem.new(result[i + 1].to_s))
51
- end
52
- end
53
- @view.tbl_result.resizeColumnsToContents
54
- @view.tbl_result.resizeRowsToContents
55
- @view.tbl_result.horizontalHeader.stretchLastSection = true
56
- end
57
- end
58
-
59
- def create_result_table(bus)
60
- if bus == 'SPI'
61
- @view.tbl_result.insertColumn(0)
62
- @view.tbl_result.setHorizontalHeaderItem(0, Qt::TableWidgetItem.new('Data send'))
63
- @view.tbl_result.insertColumn(1)
64
- @view.tbl_result.setHorizontalHeaderItem(1, Qt::TableWidgetItem.new('Data receive'))
65
- else
66
- @view.tbl_result.insertColumn(0)
67
- @view.tbl_result.setHorizontalHeaderItem(0, Qt::TableWidgetItem.new('R/W'))
68
- @view.tbl_result.insertColumn(1)
69
- @view.tbl_result.setHorizontalHeaderItem(1, Qt::TableWidgetItem.new('(N)ACK)'))
70
- @view.tbl_result.insertColumn(2)
71
- @view.tbl_result.setHorizontalHeaderItem(2, Qt::TableWidgetItem.new('DATA'))
72
- end
73
- end
74
-
75
- def save_result
76
- result_file = Qt::FileDialog.getSaveFileName(self, tr('Create a file'), '/', tr('All files (*)'))
77
- unless result_file.nil?
78
- if @bus == 'I2C'
79
- if @view.cbx_export.currentIndex == 0
80
- save_i2c_csv(result_file)
81
- else
82
- save_i2c(result_file)
83
- end
84
- else
85
- save_spi(result_file)
86
- end
87
- end
88
- rescue Exception => msg
89
- logger = Logger.new($logFilePath)
90
- logger.error msg
91
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while saving the results. Consult the logs for more details').exec
92
- end
93
-
94
- def save_i2c_csv(result_file)
95
- CSV.open("#{result_file}.csv", 'wb', :col_sep => ';') do |csv|
96
- csv << ['R/W', '(N)ACK', 'DATA']
97
- @view.tbl_result.rowCount.times do |i|
98
- csv << [@view.tbl_result.item(i, 0).text, @view.tbl_result.item(i, 1).text, @view.tbl_result.item(i, 2).text]
99
- end
100
- end
101
- end
102
-
103
- def save_i2c(result_file)
104
- file = File.open("#{result_file}", 'w')
105
- result = []
106
- @view.tbl_result.rowCount.times do |i|
107
- if @view.tbl_result.item(i, 0).text == 'Read' && @view.tbl_result.item(i, 1).text == 'ACK'
108
- result.push(@view.tbl_result.item(i, 2).text.to_i)
109
- end
110
- end
111
- file.write(result.pack('C*'))
112
- file.close
113
- end
114
-
115
- def save_spi(result_file)
116
- file = File.open("#{result_file}", 'w')
117
- result = []
118
- @view.tbl_result.rowCount.times do |i|
119
- result.push(@view.tbl_result.item(i, 1).text.to_i)
120
- end
121
- file.write(result.pack('C*'))
122
- file.close
123
- end
124
- 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 'csv'
9
+ class Export_manager < Qt::Widget
10
+ slots 'save_result()'
11
+
12
+ def initialize(bus, result, spiDataSended = [])
13
+ super()
14
+ @view = Ui_Export_manager.new
15
+ centerWindow(self)
16
+ @view.setupUi(self)
17
+ @bus = bus
18
+ # Check the bus type to adapt the table column
19
+ if bus == 'SPI'
20
+ create_result_table('SPI')
21
+ @view.cbx_export.hide
22
+ @view.tbl_result.setRowCount(result.length)
23
+ result.length.times do |i|
24
+ @view.tbl_result.setItem(i, 0, Qt::TableWidgetItem.new(spiDataSended[i].to_s))
25
+ @view.tbl_result.setItem(i, 1, Qt::TableWidgetItem.new(result[i].to_s))
26
+ end
27
+ @view.tbl_result.resizeColumnsToContents
28
+ @view.tbl_result.resizeRowsToContents
29
+ @view.tbl_result.horizontalHeader.stretchLastSection = true
30
+ else
31
+ create_result_table('I2C')
32
+ @view.tbl_result.setRowCount(result.length / 2)
33
+ (0..result.length - 1).step(2).each_with_index do |i, v|
34
+ case result[i]
35
+ when 0
36
+ @view.tbl_result.setItem(v, 0, Qt::TableWidgetItem.new('Write'))
37
+ @view.tbl_result.setItem(v, 1, Qt::TableWidgetItem.new('ACK'))
38
+ @view.tbl_result.setItem(v, 2, Qt::TableWidgetItem.new(result[i + 1].to_s))
39
+ when 1
40
+ @view.tbl_result.setItem(v, 0, Qt::TableWidgetItem.new('Read'))
41
+ @view.tbl_result.setItem(v, 1, Qt::TableWidgetItem.new('ACK'))
42
+ @view.tbl_result.setItem(v, 2, Qt::TableWidgetItem.new(result[i + 1].to_s))
43
+ when 2
44
+ @view.tbl_result.setItem(v, 0, Qt::TableWidgetItem.new('Write'))
45
+ @view.tbl_result.setItem(v, 1, Qt::TableWidgetItem.new('NACK'))
46
+ @view.tbl_result.setItem(v, 2, Qt::TableWidgetItem.new(result[i + 1].to_s))
47
+ else
48
+ @view.tbl_result.setItem(v, 0, Qt::TableWidgetItem.new('Write'))
49
+ @view.tbl_result.setItem(v, 1, Qt::TableWidgetItem.new('NACK'))
50
+ @view.tbl_result.setItem(v, 2, Qt::TableWidgetItem.new(result[i + 1].to_s))
51
+ end
52
+ end
53
+ @view.tbl_result.resizeColumnsToContents
54
+ @view.tbl_result.resizeRowsToContents
55
+ @view.tbl_result.horizontalHeader.stretchLastSection = true
56
+ end
57
+ end
58
+
59
+ def create_result_table(bus)
60
+ if bus == 'SPI'
61
+ @view.tbl_result.insertColumn(0)
62
+ @view.tbl_result.setHorizontalHeaderItem(0, Qt::TableWidgetItem.new('Data send'))
63
+ @view.tbl_result.insertColumn(1)
64
+ @view.tbl_result.setHorizontalHeaderItem(1, Qt::TableWidgetItem.new('Data receive'))
65
+ else
66
+ @view.tbl_result.insertColumn(0)
67
+ @view.tbl_result.setHorizontalHeaderItem(0, Qt::TableWidgetItem.new('R/W'))
68
+ @view.tbl_result.insertColumn(1)
69
+ @view.tbl_result.setHorizontalHeaderItem(1, Qt::TableWidgetItem.new('(N)ACK)'))
70
+ @view.tbl_result.insertColumn(2)
71
+ @view.tbl_result.setHorizontalHeaderItem(2, Qt::TableWidgetItem.new('DATA'))
72
+ end
73
+ end
74
+
75
+ def save_result
76
+ result_file = Qt::FileDialog.getSaveFileName(self, tr('Create a file'), '/', tr('All files (*)'))
77
+ unless result_file.nil?
78
+ if @bus == 'I2C'
79
+ if @view.cbx_export.currentIndex == 0
80
+ save_i2c_csv(result_file)
81
+ else
82
+ save_i2c(result_file)
83
+ end
84
+ else
85
+ save_spi(result_file)
86
+ end
87
+ end
88
+ rescue Exception => msg
89
+ logger = Logger.new($logFilePath)
90
+ logger.error msg
91
+ Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while saving the results. Consult the logs for more details').exec
92
+ end
93
+
94
+ def save_i2c_csv(result_file)
95
+ CSV.open("#{result_file}.csv", 'wb', :col_sep => ';') do |csv|
96
+ csv << ['R/W', '(N)ACK', 'DATA']
97
+ @view.tbl_result.rowCount.times do |i|
98
+ csv << [@view.tbl_result.item(i, 0).text, @view.tbl_result.item(i, 1).text, @view.tbl_result.item(i, 2).text]
99
+ end
100
+ end
101
+ end
102
+
103
+ def save_i2c(result_file)
104
+ file = File.open("#{result_file}", 'w')
105
+ result = []
106
+ @view.tbl_result.rowCount.times do |i|
107
+ if @view.tbl_result.item(i, 0).text == 'Read' && @view.tbl_result.item(i, 1).text == 'ACK'
108
+ result.push(@view.tbl_result.item(i, 2).text.to_i)
109
+ end
110
+ end
111
+ file.write(result.pack('C*'))
112
+ file.close
113
+ end
114
+
115
+ def save_spi(result_file)
116
+ file = File.open("#{result_file}", 'w')
117
+ result = []
118
+ @view.tbl_result.rowCount.times do |i|
119
+ result.push(@view.tbl_result.item(i, 1).text.to_i)
120
+ end
121
+ file.write(result.pack('C*'))
122
+ file.close
123
+ end
124
+ end