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/README.md CHANGED
@@ -1,22 +1,22 @@
1
- # Hardsploit
2
-
3
- The essential security auditing tool for Internet of Things devices you'll need in your toolbox
4
-
5
- ### [GO TO HARDSPLOIT](http://www.hardsploit.io)
6
-
7
- TO LEARN ABOUT IT
8
-
9
- ### [GO TO SHOP](https://www.shop-hardsploit.com)
10
- TO BUY
11
-
12
- ### [GO TO WIKI](http://wiki.hardsploit.io)
13
-
14
- TO UNDERSTAND HOW USE IT
15
-
16
- ### [GO TO FORUM](http://forum.hardsploit.io)
17
-
18
- FOR SUPPORT / HELP
19
-
20
- ### [GO TO BUG TRACKER](http://issues.hardsploit.io)
21
-
22
- FOR BUGS OR IMPROVEMENTS
1
+ # Hardsploit
2
+
3
+ The essential security auditing tool for Internet of Things devices you'll need in your toolbox
4
+
5
+ ### [GO TO HARDSPLOIT](http://www.hardsploit.io)
6
+
7
+ TO LEARN ABOUT IT
8
+
9
+ ### [GO TO SHOP](https://www.shop-hardsploit.com)
10
+ TO BUY
11
+
12
+ ### [GO TO WIKI](http://wiki.hardsploit.io)
13
+
14
+ TO UNDERSTAND HOW USE IT
15
+
16
+ ### [GO TO FORUM](http://forum.hardsploit.io)
17
+
18
+ FOR SUPPORT / HELP
19
+
20
+ ### [GO TO BUG TRACKER](http://issues.hardsploit.io)
21
+
22
+ FOR BUGS OR IMPROVEMENTS
data/lib/TRADEMARK CHANGED
@@ -1,3 +1,3 @@
1
- "Hardsploit" is a trademark of OPALE SECURITY. Permission to use the trademark
2
- with attribution to OPALE SECURITY is denied to all licensees of Hardsploit for
1
+ "Hardsploit" is a trademark of OPALE SECURITY. Permission to use the trademark
2
+ with attribution to OPALE SECURITY is denied to all licensees of Hardsploit for
3
3
  the purpose of naming or describing copies or derived works.
@@ -1,304 +1,304 @@
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_chip_editor'
9
- class Chip_editor < Qt::Widget
10
- slots 'select_package()'
11
- slots 'edit_chip()'
12
- slots 'add_chip()'
13
- slots 'select_manufacturer()'
14
- slots 'select_type()'
15
- slots 'fill_pin_table()'
16
- slots 'filter_cbx()'
17
- slots 'delete_cbx_element()'
18
-
19
- def initialize(parent, chip, action)
20
- super()
21
- @view = Ui_Chip_editor.new
22
- centerWindow(self)
23
- @view.setupUi(self)
24
- @parent = parent
25
- @chip = chip
26
-
27
- inputRestrict(@view.lie_pack_name, 2)
28
- inputRestrict(@view.lie_pack_pin, 0)
29
- inputRestrict(@view.lie_manu_name, 2)
30
- inputRestrict(@view.lie_type_name, 2)
31
- inputRestrict(@view.lie_reference, 2)
32
- inputRestrict(@view.lie_description, 2)
33
-
34
- # Combobox
35
- Package.all.each do |p|
36
- @view.cbx_package.addItem(p.name)
37
- end
38
- Manufacturer.all.each do |m|
39
- @view.cbx_manufacturer.addItem(m.name)
40
- end
41
- ChipType.all.each do |c|
42
- @view.cbx_type.addItem(c.name)
43
- end
44
-
45
- unless action == 'new'
46
- package_name = chip.package.name
47
- manufacturer_name = chip.manufacturer.name
48
- chip_type_name = chip.chip_type.name
49
- @view.cbx_package.setCurrentIndex(@view.cbx_package.findText(package_name))
50
- @view.lie_pack_name.setText(package_name)
51
- @view.lie_pack_name.setEnabled(false)
52
- @view.cbx_manufacturer.setCurrentIndex(@view.cbx_manufacturer.findText(manufacturer_name))
53
- @view.lie_manu_name.setText(manufacturer_name)
54
- @view.lie_manu_name.setEnabled(false)
55
- @view.cbx_type.setCurrentIndex(@view.cbx_type.findText(chip_type_name))
56
- @view.lie_type_name.setText(chip_type_name)
57
- @view.lie_type_name.setEnabled(false)
58
- @view.rbn_rectangular.setEnabled(false)
59
- @view.rbn_square.setEnabled(false)
60
- chip.voltage.zero? ? @view.rbn_5v.setChecked(true) : @view.rbn_3v.setChecked(true)
61
- chip.package.shape.zero? ? @view.rbn_square.setChecked(true) : @view.rbn_rectangular.setChecked(true)
62
- @view.lie_reference.setText(@chip.reference) if action == 'edit'
63
- fill_pin_table('edit')
64
- @view.lie_description.setText(@chip.description)
65
- end
66
-
67
- # Array struct
68
- @view.tbl_pins.horizontalHeader.stretchLastSection = true
69
- @view.tbl_pins.verticalHeader.setVisible(false)
70
-
71
- # Button text
72
- if action == 'edit'
73
- @view.btn_add.setText('Edit')
74
- Qt::Object.connect(@view.btn_add, SIGNAL('clicked()'), self, SLOT('edit_chip()'))
75
- else
76
- @view.btn_add.setText('Add')
77
- Qt::Object.connect(@view.btn_add, SIGNAL('clicked()'), self, SLOT('add_chip()'))
78
- end
79
- rescue Exception => msg
80
- ErrorMsg.new.unknown(msg)
81
- end
82
-
83
- def closeEvent(event)
84
- unless @chip == 'none' || Chip.exists?(@chip.id)
85
- @parent.instance_variable_get('@view').tw_chip.clear
86
- end
87
- end
88
-
89
- def prepare_rq
90
- # Manufacturer
91
- @manufacturer = Manufacturer.find_or_create_by(name: @view.lie_manu_name.text)
92
- return false if check_for_errors(@manufacturer)
93
- # Package
94
- @view.rbn_square.checked ? @shape = 0 : @shape = 1
95
- @package = Package.find_or_create_by(
96
- name: @view.lie_pack_name.text,
97
- pin_number: @view.lie_pack_pin.text,
98
- shape: @shape
99
- )
100
- return false if check_for_errors(@package)
101
- # Type
102
- @chip_type = ChipType.find_or_create_by(name: @view.lie_type_name.text)
103
- return false if check_for_errors(@chip_type)
104
- # Voltage
105
- @view.rbn_3v.checked? ? @voltage = 1 : @voltage = 0
106
- return true
107
- end
108
-
109
- def add_chip
110
- if prepare_rq
111
- @chip = Chip.create(
112
- reference: @view.lie_reference.text,
113
- description: @view.lie_description.text,
114
- voltage: @voltage,
115
- manufacturer_id: @manufacturer.id,
116
- package_id: @package.id,
117
- chip_type_id: @chip_type.id
118
- )
119
- unless check_for_errors(@chip)
120
- add_pins
121
- end
122
- end
123
- end
124
-
125
- def edit_chip
126
- if prepare_rq
127
- @chip.update(
128
- reference: @view.lie_reference.text,
129
- description: @view.lie_description.text,
130
- voltage: @voltage,
131
- manufacturer_id: @manufacturer.id,
132
- package_id: @package.id,
133
- chip_type_id: @chip_type.id
134
- )
135
- unless check_for_errors(@chip)
136
- @chip.pins.reload.destroy_all
137
- add_pins
138
- end
139
- end
140
- rescue Exception => msg
141
- ErrorMsg.new.unknown(msg)
142
- end
143
-
144
- def add_pins
145
- for i in 0..(@view.lie_pack_pin.text.to_i) - 1 do
146
- pin_num = @view.tbl_pins.item(i, 0)
147
- pin_signal = @view.tbl_pins.cellWidget(i, 2)
148
- pin_bus = @view.tbl_pins.cellWidget(i, 1)
149
- if pin_bus.currentIndex == 0
150
- signal = 1
151
- else
152
- signal = Signall.find_by(name: pin_signal.currentText).id
153
- end
154
- pin = Pin.create(
155
- number: pin_num.text.to_i,
156
- chip_id: @chip.id,
157
- signal_id: signal
158
- )
159
- check_for_errors(pin)
160
- end
161
- @parent.feed_chip_array
162
- close
163
- end
164
-
165
- # Package combobox
166
- def select_package
167
- unless @view.cbx_package.currentIndex.zero?
168
- selected_package = Package.find_by(name: @view.cbx_package.currentText)
169
- @view.lie_pack_name.setEnabled(false)
170
- @view.lie_pack_name.setText(selected_package.name)
171
- @view.lie_pack_pin.setEnabled(false)
172
- @view.lie_pack_pin.setText(selected_package.pin_number.to_s)
173
- @view.rbn_square.setEnabled(false)
174
- @view.rbn_rectangular.setEnabled(false)
175
- if selected_package.shape.zero?
176
- @view.rbn_square.setChecked(true)
177
- else
178
- @view.rbn_rectangular.setChecked(true)
179
- end
180
- fill_pin_table
181
- else
182
- @view.lie_pack_name.setEnabled(true)
183
- @view.lie_pack_name.clear
184
- @view.lie_pack_pin.setEnabled(true)
185
- @view.lie_pack_pin.clear
186
- @view.rbn_square.setChecked(true)
187
- @view.rbn_rectangular.setEnabled(true)
188
- @view.rbn_square.setEnabled(true)
189
- @view.tbl_pins.clear
190
- @view.tbl_pins.setRowCount(0)
191
- end
192
- end
193
-
194
- # Manufacturer combobox
195
- def select_manufacturer
196
- unless @view.cbx_manufacturer.currentIndex.zero?
197
- @view.lie_manu_name.setEnabled(false)
198
- @view.lie_manu_name.setText(@view.cbx_manufacturer.currentText)
199
- else
200
- @view.lie_manu_name.setEnabled(true)
201
- @view.lie_manu_name.setText('')
202
- end
203
- end
204
-
205
- # Type combobox
206
- def select_type
207
- unless @view.cbx_type.currentIndex.zero?
208
- @view.lie_type_name.setEnabled(false)
209
- @view.lie_type_name.setText(@view.cbx_type.currentText)
210
- else
211
- @view.lie_type_name.setEnabled(true)
212
- @view.lie_type_name.setText('')
213
- end
214
- end
215
-
216
- def fill_pin_table(action = '')
217
- if @view.lie_pack_pin.text.to_i <= 144 && @view.lie_pack_pin.text.to_i >= 4
218
- @view.tbl_pins.setRowCount(@view.lie_pack_pin.text.to_i)
219
- full_bus_list = Bus.all
220
- @view.lie_pack_pin.text.to_i.times do |i|
221
- cbx_bus = Qt::ComboBox.new
222
- row = Qt::Variant.new(i)
223
- cbx_bus.setProperty('row', row)
224
- @view.tbl_pins.setCellWidget(i, 1, cbx_bus)
225
- cbx_signal = Qt::ComboBox.new
226
- @view.tbl_pins.setCellWidget(i, 2, cbx_signal)
227
- item = Qt::TableWidgetItem.new
228
- item.setFlags(Qt::ItemIsEnabled)
229
- item.setData(0, Qt::Variant.new(i.next))
230
- @view.tbl_pins.setItem(i, 0, item)
231
- cbx_bus.addItem('Bus...')
232
- full_bus_list.each do |b|
233
- cbx_bus.addItem(b.name)
234
- end
235
- if action == 'edit'
236
- pin = Pin.find_by(number: i.next, chip_id: @chip.id)
237
- unless pin.signal_id == 1
238
- current_bus = pin.signall.buses
239
- cbx_bus.setCurrentIndex(cbx_bus.findText(current_bus[0].name))
240
- current_signals = current_bus[0].signalls
241
- current_signals.each do |s|
242
- cbx_signal.addItem(s.name)
243
- end
244
- cbx_signal.setCurrentIndex(cbx_signal.findText(pin.signall.name))
245
- end
246
- end
247
- Qt::Object.connect(cbx_bus, SIGNAL('currentIndexChanged(int)'), self, SLOT('filter_cbx()'))
248
- end
249
- else
250
- ErrorMsg.new.invalid_pin_nbr
251
- end
252
- rescue Exception => msg
253
- ErrorMsg.new.unknown(msg)
254
- end
255
-
256
- def delete_cbx_element
257
- msg = Qt::MessageBox.new
258
- msg.setWindowTitle('Delete element')
259
- msg.setText('Chips and commands associated with it will be deleted too.')
260
- msg.setIcon(Qt::MessageBox::Warning)
261
- msg.setStandardButtons(Qt::MessageBox::Cancel | Qt::MessageBox::Ok)
262
- msg.setDefaultButton(Qt::MessageBox::Cancel)
263
- if msg.exec == Qt::MessageBox::Ok
264
- case sender.objectName
265
- when 'btn_delete_package'
266
- return false if @view.cbx_package.currentIndex == 0
267
- Package.find_by(name: @view.cbx_package.currentText).destroy
268
- @view.cbx_package.removeItem(@view.cbx_package.currentIndex)
269
- @view.cbx_package.setCurrentIndex(0)
270
- when 'btn_delete_manufacturer'
271
- return false if @view.cbx_manufacturer.currentIndex == 0
272
- Manufacturer.find_by(name: @view.cbx_manufacturer.currentText).destroy
273
- @view.cbx_manufacturer.removeItem(@view.cbx_manufacturer.currentIndex)
274
- @view.cbx_manufacturer.setCurrentIndex(0)
275
- when 'btn_delete_type'
276
- return false if @view.cbx_type.currentIndex == 0
277
- ChipType.find_by(name: @view.cbx_type.currentText).destroy
278
- @view.cbx_type.removeItem(@view.cbx_type.currentIndex)
279
- @view.cbx_type.setCurrentIndex(0)
280
- end
281
- @parent.feed_chip_array
282
- end
283
- rescue Exception => msg
284
- ErrorMsg.new.unknown(msg)
285
- end
286
-
287
- # Filter signals by bus
288
- def filter_cbx
289
- bus_item_row = sender.property('row').to_i
290
- busItem = @view.tbl_pins.cellWidget(bus_item_row, 1)
291
- associated_signal_item = @view.tbl_pins.cellWidget(bus_item_row, 2)
292
- associated_signal_item.clear
293
- if busItem.currentText != 'Bus...'
294
- bus = Bus.find_by(name: busItem.currentText).id
295
- filtered_signal_list = Use.where(bus_id: bus)
296
- filtered_signal_list.each do |s|
297
- signal_name = Signall.find_by(id: s.signal_id).name
298
- associated_signal_item.addItem(signal_name)
299
- end
300
- end
301
- rescue Exception => msg
302
- ErrorMsg.new.unknown(msg)
303
- end
304
- 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_chip_editor'
9
+ class Chip_editor < Qt::Widget
10
+ slots 'select_package()'
11
+ slots 'edit_chip()'
12
+ slots 'add_chip()'
13
+ slots 'select_manufacturer()'
14
+ slots 'select_type()'
15
+ slots 'fill_pin_table()'
16
+ slots 'filter_cbx()'
17
+ slots 'delete_cbx_element()'
18
+
19
+ def initialize(parent, chip, action)
20
+ super()
21
+ @view = Ui_Chip_editor.new
22
+ centerWindow(self)
23
+ @view.setupUi(self)
24
+ @parent = parent
25
+ @chip = chip
26
+
27
+ inputRestrict(@view.lie_pack_name, 2)
28
+ inputRestrict(@view.lie_pack_pin, 0)
29
+ inputRestrict(@view.lie_manu_name, 2)
30
+ inputRestrict(@view.lie_type_name, 2)
31
+ inputRestrict(@view.lie_reference, 2)
32
+ inputRestrict(@view.lie_description, 2)
33
+
34
+ # Combobox
35
+ Package.all.each do |p|
36
+ @view.cbx_package.addItem(p.name)
37
+ end
38
+ Manufacturer.all.each do |m|
39
+ @view.cbx_manufacturer.addItem(m.name)
40
+ end
41
+ ChipType.all.each do |c|
42
+ @view.cbx_type.addItem(c.name)
43
+ end
44
+
45
+ unless action == 'new'
46
+ package_name = chip.package.name
47
+ manufacturer_name = chip.manufacturer.name
48
+ chip_type_name = chip.chip_type.name
49
+ @view.cbx_package.setCurrentIndex(@view.cbx_package.findText(package_name))
50
+ @view.lie_pack_name.setText(package_name)
51
+ @view.lie_pack_name.setEnabled(false)
52
+ @view.cbx_manufacturer.setCurrentIndex(@view.cbx_manufacturer.findText(manufacturer_name))
53
+ @view.lie_manu_name.setText(manufacturer_name)
54
+ @view.lie_manu_name.setEnabled(false)
55
+ @view.cbx_type.setCurrentIndex(@view.cbx_type.findText(chip_type_name))
56
+ @view.lie_type_name.setText(chip_type_name)
57
+ @view.lie_type_name.setEnabled(false)
58
+ @view.rbn_rectangular.setEnabled(false)
59
+ @view.rbn_square.setEnabled(false)
60
+ chip.voltage.zero? ? @view.rbn_5v.setChecked(true) : @view.rbn_3v.setChecked(true)
61
+ chip.package.shape.zero? ? @view.rbn_square.setChecked(true) : @view.rbn_rectangular.setChecked(true)
62
+ @view.lie_reference.setText(@chip.reference) if action == 'edit'
63
+ fill_pin_table('edit')
64
+ @view.lie_description.setText(@chip.description)
65
+ end
66
+
67
+ # Array struct
68
+ @view.tbl_pins.horizontalHeader.stretchLastSection = true
69
+ @view.tbl_pins.verticalHeader.setVisible(false)
70
+
71
+ # Button text
72
+ if action == 'edit'
73
+ @view.btn_add.setText('Edit')
74
+ Qt::Object.connect(@view.btn_add, SIGNAL('clicked()'), self, SLOT('edit_chip()'))
75
+ else
76
+ @view.btn_add.setText('Add')
77
+ Qt::Object.connect(@view.btn_add, SIGNAL('clicked()'), self, SLOT('add_chip()'))
78
+ end
79
+ rescue Exception => msg
80
+ ErrorMsg.new.unknown(msg)
81
+ end
82
+
83
+ def closeEvent(event)
84
+ unless @chip == 'none' || Chip.exists?(@chip.id)
85
+ @parent.instance_variable_get('@view').tw_chip.clear
86
+ end
87
+ end
88
+
89
+ def prepare_rq
90
+ # Manufacturer
91
+ @manufacturer = Manufacturer.find_or_create_by(name: @view.lie_manu_name.text)
92
+ return false if check_for_errors(@manufacturer)
93
+ # Package
94
+ @view.rbn_square.checked ? @shape = 0 : @shape = 1
95
+ @package = Package.find_or_create_by(
96
+ name: @view.lie_pack_name.text,
97
+ pin_number: @view.lie_pack_pin.text,
98
+ shape: @shape
99
+ )
100
+ return false if check_for_errors(@package)
101
+ # Type
102
+ @chip_type = ChipType.find_or_create_by(name: @view.lie_type_name.text)
103
+ return false if check_for_errors(@chip_type)
104
+ # Voltage
105
+ @view.rbn_3v.checked? ? @voltage = 1 : @voltage = 0
106
+ return true
107
+ end
108
+
109
+ def add_chip
110
+ if prepare_rq
111
+ @chip = Chip.create(
112
+ reference: @view.lie_reference.text,
113
+ description: @view.lie_description.text,
114
+ voltage: @voltage,
115
+ manufacturer_id: @manufacturer.id,
116
+ package_id: @package.id,
117
+ chip_type_id: @chip_type.id
118
+ )
119
+ unless check_for_errors(@chip)
120
+ add_pins
121
+ end
122
+ end
123
+ end
124
+
125
+ def edit_chip
126
+ if prepare_rq
127
+ @chip.update(
128
+ reference: @view.lie_reference.text,
129
+ description: @view.lie_description.text,
130
+ voltage: @voltage,
131
+ manufacturer_id: @manufacturer.id,
132
+ package_id: @package.id,
133
+ chip_type_id: @chip_type.id
134
+ )
135
+ unless check_for_errors(@chip)
136
+ @chip.pins.reload.destroy_all
137
+ add_pins
138
+ end
139
+ end
140
+ rescue Exception => msg
141
+ ErrorMsg.new.unknown(msg)
142
+ end
143
+
144
+ def add_pins
145
+ for i in 0..(@view.lie_pack_pin.text.to_i) - 1 do
146
+ pin_num = @view.tbl_pins.item(i, 0)
147
+ pin_signal = @view.tbl_pins.cellWidget(i, 2)
148
+ pin_bus = @view.tbl_pins.cellWidget(i, 1)
149
+ if pin_bus.currentIndex == 0
150
+ signal = 1
151
+ else
152
+ signal = Signall.find_by(name: pin_signal.currentText).id
153
+ end
154
+ pin = Pin.create(
155
+ number: pin_num.text.to_i,
156
+ chip_id: @chip.id,
157
+ signal_id: signal
158
+ )
159
+ check_for_errors(pin)
160
+ end
161
+ @parent.feed_chip_array
162
+ close
163
+ end
164
+
165
+ # Package combobox
166
+ def select_package
167
+ unless @view.cbx_package.currentIndex.zero?
168
+ selected_package = Package.find_by(name: @view.cbx_package.currentText)
169
+ @view.lie_pack_name.setEnabled(false)
170
+ @view.lie_pack_name.setText(selected_package.name)
171
+ @view.lie_pack_pin.setEnabled(false)
172
+ @view.lie_pack_pin.setText(selected_package.pin_number.to_s)
173
+ @view.rbn_square.setEnabled(false)
174
+ @view.rbn_rectangular.setEnabled(false)
175
+ if selected_package.shape.zero?
176
+ @view.rbn_square.setChecked(true)
177
+ else
178
+ @view.rbn_rectangular.setChecked(true)
179
+ end
180
+ fill_pin_table
181
+ else
182
+ @view.lie_pack_name.setEnabled(true)
183
+ @view.lie_pack_name.clear
184
+ @view.lie_pack_pin.setEnabled(true)
185
+ @view.lie_pack_pin.clear
186
+ @view.rbn_square.setChecked(true)
187
+ @view.rbn_rectangular.setEnabled(true)
188
+ @view.rbn_square.setEnabled(true)
189
+ @view.tbl_pins.clear
190
+ @view.tbl_pins.setRowCount(0)
191
+ end
192
+ end
193
+
194
+ # Manufacturer combobox
195
+ def select_manufacturer
196
+ unless @view.cbx_manufacturer.currentIndex.zero?
197
+ @view.lie_manu_name.setEnabled(false)
198
+ @view.lie_manu_name.setText(@view.cbx_manufacturer.currentText)
199
+ else
200
+ @view.lie_manu_name.setEnabled(true)
201
+ @view.lie_manu_name.setText('')
202
+ end
203
+ end
204
+
205
+ # Type combobox
206
+ def select_type
207
+ unless @view.cbx_type.currentIndex.zero?
208
+ @view.lie_type_name.setEnabled(false)
209
+ @view.lie_type_name.setText(@view.cbx_type.currentText)
210
+ else
211
+ @view.lie_type_name.setEnabled(true)
212
+ @view.lie_type_name.setText('')
213
+ end
214
+ end
215
+
216
+ def fill_pin_table(action = '')
217
+ if @view.lie_pack_pin.text.to_i <= 144 && @view.lie_pack_pin.text.to_i >= 4
218
+ @view.tbl_pins.setRowCount(@view.lie_pack_pin.text.to_i)
219
+ full_bus_list = Bus.all
220
+ @view.lie_pack_pin.text.to_i.times do |i|
221
+ cbx_bus = Qt::ComboBox.new
222
+ row = Qt::Variant.new(i)
223
+ cbx_bus.setProperty('row', row)
224
+ @view.tbl_pins.setCellWidget(i, 1, cbx_bus)
225
+ cbx_signal = Qt::ComboBox.new
226
+ @view.tbl_pins.setCellWidget(i, 2, cbx_signal)
227
+ item = Qt::TableWidgetItem.new
228
+ item.setFlags(Qt::ItemIsEnabled)
229
+ item.setData(0, Qt::Variant.new(i.next))
230
+ @view.tbl_pins.setItem(i, 0, item)
231
+ cbx_bus.addItem('Bus...')
232
+ full_bus_list.each do |b|
233
+ cbx_bus.addItem(b.name)
234
+ end
235
+ if action == 'edit'
236
+ pin = Pin.find_by(number: i.next, chip_id: @chip.id)
237
+ unless pin.signal_id == 1
238
+ current_bus = pin.signall.buses
239
+ cbx_bus.setCurrentIndex(cbx_bus.findText(current_bus[0].name))
240
+ current_signals = current_bus[0].signalls
241
+ current_signals.each do |s|
242
+ cbx_signal.addItem(s.name)
243
+ end
244
+ cbx_signal.setCurrentIndex(cbx_signal.findText(pin.signall.name))
245
+ end
246
+ end
247
+ Qt::Object.connect(cbx_bus, SIGNAL('currentIndexChanged(int)'), self, SLOT('filter_cbx()'))
248
+ end
249
+ else
250
+ ErrorMsg.new.invalid_pin_nbr
251
+ end
252
+ rescue Exception => msg
253
+ ErrorMsg.new.unknown(msg)
254
+ end
255
+
256
+ def delete_cbx_element
257
+ msg = Qt::MessageBox.new
258
+ msg.setWindowTitle('Delete element')
259
+ msg.setText('Chips and commands associated with it will be deleted too.')
260
+ msg.setIcon(Qt::MessageBox::Warning)
261
+ msg.setStandardButtons(Qt::MessageBox::Cancel | Qt::MessageBox::Ok)
262
+ msg.setDefaultButton(Qt::MessageBox::Cancel)
263
+ if msg.exec == Qt::MessageBox::Ok
264
+ case sender.objectName
265
+ when 'btn_delete_package'
266
+ return false if @view.cbx_package.currentIndex == 0
267
+ Package.find_by(name: @view.cbx_package.currentText).destroy
268
+ @view.cbx_package.removeItem(@view.cbx_package.currentIndex)
269
+ @view.cbx_package.setCurrentIndex(0)
270
+ when 'btn_delete_manufacturer'
271
+ return false if @view.cbx_manufacturer.currentIndex == 0
272
+ Manufacturer.find_by(name: @view.cbx_manufacturer.currentText).destroy
273
+ @view.cbx_manufacturer.removeItem(@view.cbx_manufacturer.currentIndex)
274
+ @view.cbx_manufacturer.setCurrentIndex(0)
275
+ when 'btn_delete_type'
276
+ return false if @view.cbx_type.currentIndex == 0
277
+ ChipType.find_by(name: @view.cbx_type.currentText).destroy
278
+ @view.cbx_type.removeItem(@view.cbx_type.currentIndex)
279
+ @view.cbx_type.setCurrentIndex(0)
280
+ end
281
+ @parent.feed_chip_array
282
+ end
283
+ rescue Exception => msg
284
+ ErrorMsg.new.unknown(msg)
285
+ end
286
+
287
+ # Filter signals by bus
288
+ def filter_cbx
289
+ bus_item_row = sender.property('row').to_i
290
+ busItem = @view.tbl_pins.cellWidget(bus_item_row, 1)
291
+ associated_signal_item = @view.tbl_pins.cellWidget(bus_item_row, 2)
292
+ associated_signal_item.clear
293
+ if busItem.currentText != 'Bus...'
294
+ bus = Bus.find_by(name: busItem.currentText).id
295
+ filtered_signal_list = Use.where(bus_id: bus)
296
+ filtered_signal_list.each do |s|
297
+ signal_name = Signall.find_by(id: s.signal_id).name
298
+ associated_signal_item.addItem(signal_name)
299
+ end
300
+ end
301
+ rescue Exception => msg
302
+ ErrorMsg.new.unknown(msg)
303
+ end
304
+ end