hardsploit_gui 2.2 → 2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/bin/hardsploit_gui +2 -2
  3. data/lib/{Firmware → Firmwares}/FPGA/I2C/I2C_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_I2C_INTERACT.rpd +0 -0
  4. data/lib/{Firmware/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd → Firmwares/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd} +0 -0
  5. data/lib/Firmwares/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd +0 -0
  6. data/lib/{Firmware/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd → Firmwares/FPGA/SPI/SPI_SNIFFER/HARDSPLOIT_FIRMWARE_FPGA_SPI_SNIFFER.rpd} +0 -0
  7. data/lib/Firmwares/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd +0 -0
  8. data/lib/{Firmware → Firmwares}/FPGA/TEST/TEST_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_TEST_INTERACT.rpd +0 -0
  9. data/lib/Firmwares/FPGA/UART/UART_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_UART_INTERACT.rpd +0 -0
  10. data/lib/{Firmware → Firmwares}/FPGA/VersionFPGA.rb +1 -1
  11. data/lib/{Firmware → Firmwares}/UC/HARDSPLOIT_FIRMWARE_UC.bin +0 -0
  12. data/lib/{Firmware → Firmwares}/UC/VersionUC.rb +1 -1
  13. data/lib/HardsploitAPI/Core/HardsploitAPI.rb +210 -0
  14. data/lib/HardsploitAPI/Core/HardsploitAPI_CONSTANT.rb +150 -0
  15. data/lib/HardsploitAPI/Core/HardsploitAPI_ERROR.rb +109 -0
  16. data/lib/HardsploitAPI/Core/HardsploitAPI_FIRMWARE.rb +305 -0
  17. data/lib/HardsploitAPI/{HardsploitAPI_PROGRESS.rb → Core/HardsploitAPI_PROGRESS.rb} +0 -0
  18. data/lib/HardsploitAPI/Core/HardsploitAPI_USB_COMMUNICATION.rb +166 -0
  19. data/lib/HardsploitAPI/Modules/I2C/HardsploitAPI_I2C.rb +356 -0
  20. data/lib/HardsploitAPI/{HardsploitAPI_NO_MUX_PARALLELE_MEMORY.rb → Modules/NO_MUX_PARALLEL_MEMORY/HardsploitAPI_NO_MUX_PARALLEL_MEMORY.rb} +26 -49
  21. data/lib/HardsploitAPI/Modules/NRF24L01/HardsploitAPI_NRF24L01.rb +306 -0
  22. data/lib/HardsploitAPI/Modules/SPI/HardsploitAPI_SPI.rb +340 -0
  23. data/lib/HardsploitAPI/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER.rb +83 -0
  24. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD.rb +367 -0
  25. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_DEBUG.rb +89 -0
  26. data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_MEM_AP.rb +61 -0
  27. data/lib/HardsploitAPI/{SWD → Modules/SWD}/HardsploitAPI_SWD_STM32.rb +32 -15
  28. data/lib/HardsploitAPI/{HardsploitAPI_TEST_INTERACT.rb → Modules/TEST/HardsploitAPI_TEST_INTERACT.rb} +1 -1
  29. data/lib/HardsploitAPI/Modules/UART/HardsploitAPI_UART.rb +196 -0
  30. data/lib/Hardsploit_gui.rb +96 -0
  31. data/lib/class/Chip_editor.rb +186 -330
  32. data/lib/class/Chip_management.rb +496 -0
  33. data/lib/class/Command_editor.rb +130 -182
  34. data/lib/class/Command_table.rb +16 -22
  35. data/lib/class/Console.rb +0 -2
  36. data/lib/class/ErrorMsg.rb +312 -0
  37. data/lib/class/Export.rb +140 -0
  38. data/lib/class/Export_manager.rb +43 -43
  39. data/lib/class/Firmware.rb +52 -11
  40. data/lib/class/Generic_commands.rb +180 -190
  41. data/lib/class/Import.rb +193 -0
  42. data/lib/class/Progress_bar.rb +1 -0
  43. data/lib/class/Signal_mapper.rb +120 -0
  44. data/lib/class/Wire_helper.rb +132 -148
  45. data/lib/class/{I2C → i2c}/I2c_command.rb +16 -13
  46. data/lib/class/i2c/I2c_export.rb +95 -0
  47. data/lib/class/i2c/I2c_import.rb +117 -0
  48. data/lib/class/i2c/I2c_scanner.rb +114 -0
  49. data/lib/class/i2c/I2c_settings.rb +148 -0
  50. data/lib/class/parallel/Parallel_export.rb +118 -0
  51. data/lib/class/parallel/Parallel_import.rb +113 -0
  52. data/lib/class/parallel/Parallel_settings.rb +81 -0
  53. data/lib/class/spi/Spi_export.rb +108 -0
  54. data/lib/class/spi/Spi_import.rb +159 -0
  55. data/lib/class/spi/Spi_settings.rb +108 -0
  56. data/lib/class/spi/Spi_sniffer.rb +101 -0
  57. data/lib/class/swd/Swd.rb +125 -0
  58. data/lib/class/swd/Swd_scanner.rb +121 -0
  59. data/lib/class/swd/Swd_settings.rb +76 -0
  60. data/lib/class/uart/Uart_baudrate.rb +62 -0
  61. data/lib/class/uart/Uart_console.rb +115 -0
  62. data/lib/class/uart/Uart_settings.rb +102 -0
  63. data/lib/db/associations.rb +42 -29
  64. data/lib/db/database.rb +4 -0
  65. data/lib/db/development.sqlite3 +0 -0
  66. data/lib/db/migrate/004_create_manufacturers.rb +13 -0
  67. data/lib/db/migrate/005_create_packages.rb +13 -0
  68. data/lib/db/migrate/006_create_chip_types.rb +11 -0
  69. data/lib/db/migrate/007_create_buses.rb +11 -0
  70. data/lib/db/migrate/008_create_signals.rb +14 -0
  71. data/lib/db/migrate/009_create_chips.rb +25 -0
  72. data/lib/db/migrate/010_create_commands.rb +21 -0
  73. data/lib/db/migrate/011_create_bytes.rb +19 -0
  74. data/lib/db/migrate/012_create_i2c_settings.rb +21 -0
  75. data/lib/db/migrate/013_create_spi_settings.rb +26 -0
  76. data/lib/db/migrate/014_create_parallel_settings.rb +21 -0
  77. data/lib/db/migrate/015_create_pins.rb +19 -0
  78. data/lib/db/migrate/016_create_uses.rb +17 -0
  79. data/lib/db/migrate/017_create_swd_settings.rb +19 -0
  80. data/lib/db/migrate/018_create_uart_settings.rb +22 -0
  81. data/lib/db/schema.rb +157 -0
  82. data/lib/db/seeds.rb +161 -0
  83. data/lib/gui/gui_chip_editor.rb +23 -22
  84. data/lib/gui/gui_chip_management.rb +43 -38
  85. data/lib/gui/gui_command_editor.rb +2 -1
  86. data/lib/gui/gui_export.rb +132 -0
  87. data/lib/gui/gui_generic_commands.rb +69 -31
  88. data/lib/gui/gui_generic_export.rb +18 -2
  89. data/lib/gui/gui_generic_import.rb +18 -2
  90. data/lib/gui/gui_i2c_command.rb +2 -1
  91. data/lib/gui/gui_i2c_settings.rb +2 -2
  92. data/lib/gui/gui_import.rb +131 -0
  93. data/lib/gui/gui_parallel_settings.rb +2 -1
  94. data/lib/gui/gui_progress_bar.rb +2 -1
  95. data/lib/gui/gui_signal_mapper.rb +121 -0
  96. data/lib/gui/gui_signal_scanner.rb +146 -0
  97. data/lib/gui/gui_spi_settings.rb +6 -2
  98. data/lib/gui/gui_spi_sniffer.rb +112 -0
  99. data/lib/gui/gui_swd_settings.rb +166 -0
  100. data/lib/gui/gui_uart_baudrate.rb +114 -0
  101. data/lib/gui/gui_uart_console.rb +164 -0
  102. data/lib/gui/gui_uart_settings.rb +243 -0
  103. data/lib/gui_designer/gui_chip_editor.ui +9 -6
  104. data/lib/gui_designer/gui_chip_management.ui +79 -35
  105. data/lib/gui_designer/gui_command_editor.ui +3 -0
  106. data/lib/gui_designer/gui_export.ui +171 -0
  107. data/lib/gui_designer/gui_generic_commands.ui +274 -190
  108. data/lib/gui_designer/gui_generic_export.ui +24 -1
  109. data/lib/gui_designer/gui_generic_import.ui +25 -2
  110. data/lib/gui_designer/gui_i2c_command.ui +3 -0
  111. data/lib/gui_designer/gui_i2c_settings.ui +2 -2
  112. data/lib/gui_designer/gui_import.ui +168 -0
  113. data/lib/gui_designer/gui_parallel_settings.ui +4 -1
  114. data/lib/gui_designer/gui_progress_bar.ui +3 -0
  115. data/lib/gui_designer/gui_signal_mapper.ui +179 -0
  116. data/lib/gui_designer/gui_signal_scanner.ui +261 -0
  117. data/lib/gui_designer/gui_spi_settings.ui +15 -2
  118. data/lib/gui_designer/gui_spi_sniffer.ui +156 -0
  119. data/lib/gui_designer/gui_swd_settings.ui +189 -0
  120. data/lib/gui_designer/gui_uart_baudrate.ui +161 -0
  121. data/lib/gui_designer/gui_uart_console.ui +284 -0
  122. data/lib/gui_designer/gui_uart_settings.ui +280 -0
  123. data/lib/logs/error.log +63 -0
  124. data/lib/models/bus.rb +19 -0
  125. data/lib/models/byte.rb +29 -0
  126. data/lib/models/chip.rb +41 -0
  127. data/lib/models/chip_type.rb +14 -0
  128. data/lib/models/command.rb +20 -0
  129. data/lib/models/i2c_setting.rb +41 -0
  130. data/lib/models/manufacturer.rb +14 -0
  131. data/lib/models/package.rb +26 -0
  132. data/lib/models/parallel_setting.rb +37 -0
  133. data/lib/models/pin.rb +14 -0
  134. data/lib/models/signall.rb +20 -0
  135. data/lib/models/spi_setting.rb +67 -0
  136. data/lib/models/swd_setting.rb +25 -0
  137. data/lib/models/uart_setting.rb +52 -0
  138. data/lib/models/use.rb +6 -0
  139. data/lib/startHardsploit.rb +2 -2
  140. metadata +106 -41
  141. data/lib/Firmware/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd +0 -0
  142. data/lib/HardsploitAPI/HardsploitAPI.rb +0 -133
  143. data/lib/HardsploitAPI/HardsploitAPI_CONSTANT.rb +0 -145
  144. data/lib/HardsploitAPI/HardsploitAPI_ERROR.rb +0 -38
  145. data/lib/HardsploitAPI/HardsploitAPI_FIRMWARE.rb +0 -311
  146. data/lib/HardsploitAPI/HardsploitAPI_I2C.rb +0 -360
  147. data/lib/HardsploitAPI/HardsploitAPI_SPI.rb +0 -369
  148. data/lib/HardsploitAPI/HardsploitAPI_USB_COMMUNICATION.rb +0 -148
  149. data/lib/HardsploitAPI/LICENSE.txt +0 -674
  150. data/lib/HardsploitAPI/README.md +0 -22
  151. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD.rb +0 -249
  152. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb +0 -102
  153. data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_MEM_AP.rb +0 -78
  154. data/lib/HardsploitAPI/TRADEMARK +0 -3
  155. data/lib/class/HardsploitGUI.rb +0 -463
  156. data/lib/class/I2C/I2c_export.rb +0 -118
  157. data/lib/class/I2C/I2c_import.rb +0 -79
  158. data/lib/class/I2C/I2c_settings.rb +0 -129
  159. data/lib/class/PARALLEL/Parallel_export.rb +0 -146
  160. data/lib/class/PARALLEL/Parallel_import.rb +0 -88
  161. data/lib/class/PARALLEL/Parallel_settings.rb +0 -102
  162. data/lib/class/SPI/Spi_export.rb +0 -138
  163. data/lib/class/SPI/Spi_import.rb +0 -113
  164. data/lib/class/SPI/Spi_settings.rb +0 -134
  165. data/lib/db/hs.db +0 -0
  166. data/lib/hardsploit.rb +0 -131
@@ -5,8 +5,6 @@
5
5
  # License URI: http://www.gnu.org/licenses/gpl.txt
6
6
  #===================================================
7
7
 
8
- require_relative '../HardsploitAPI/HardsploitAPI'
9
- require_relative '../class/Command_table'
10
8
  require_relative '../gui/gui_command_editor'
11
9
  class Command_editor < Qt::Widget
12
10
  slots 'add_cmd()'
@@ -16,70 +14,134 @@ class Command_editor < Qt::Widget
16
14
  slots 'remove_row()'
17
15
  slots 'check_cell_content(QTableWidgetItem*)'
18
16
 
19
- def initialize(action, cmd_name, chip, bus_id, parent, api, bus_param={})
17
+ def initialize(action, cmd_name, chip, bus_id, parent, bus_param={})
20
18
  super()
21
- @cmd_editor_gui = Ui_Command_editor.new
19
+ @view = Ui_Command_editor.new
22
20
  centerWindow(self)
23
- @cmd_editor_gui.setupUi(self)
24
- @bus = Bus.find_by(bus_id: bus_id)
25
- @chip_id = chip.chip_id
21
+ @view.setupUi(self)
22
+ @bus = Bus.find(bus_id)
23
+ @chip_id = chip.id
26
24
  @cmd_name = cmd_name
27
25
  @bus_id = bus_id
28
26
  @parent = parent
29
- @api = api
30
- @cmd_table = Command_table.new(@api, @cmd_editor_gui.tbl_bytes, @bus.bus_name)
31
-
32
- inputRestrict(@cmd_editor_gui.lie_name, 2)
33
- inputRestrict(@cmd_editor_gui.lie_description, 2)
34
- @cmd_editor_gui.lbl_chip_val.setText(chip.chip_reference)
27
+ @cmd_table = Command_table.new(@view.tbl_bytes, @bus.name)
35
28
 
29
+ inputRestrict(@view.lie_name, 2)
30
+ inputRestrict(@view.lie_description, 2)
31
+ @view.lbl_chip_val.setText(chip.reference)
36
32
  @cmd_table.resize_to_content
37
- case @bus.bus_name
38
- when 'SPI'
39
- @cmd_table.build_spi
40
- end
41
- @cmd_editor_gui.lie_text_2_bytes.hide if @bus.bus_name != 'SPI'
33
+ @cmd_table.build_spi if @bus.name == 'SPI'
34
+ @view.lie_text_2_bytes.hide unless @bus.name == 'SPI'
42
35
 
43
36
  case action
44
37
  when 0
45
38
  # Add
46
- @cmd_editor_gui.lbl_cmd_val.text = '-'
47
- Qt::Object.connect(@cmd_editor_gui.btn_validate, SIGNAL('clicked()'), self, SLOT('add_cmd()'))
39
+ @view.lbl_cmd_val.setText('-')
40
+ Qt::Object.connect(@view.btn_validate, SIGNAL('clicked()'), self, SLOT('add_cmd()'))
48
41
  when 1
49
- # Temp
50
- @cmd_editor_gui.lbl_cmd_val.text = cmd_name
42
+ # Template
43
+ @view.lbl_cmd_val.setText(cmd_name)
51
44
  feed_editor_form
52
- @cmd_editor_gui.lie_name.setText('')
53
- Qt::Object.connect(@cmd_editor_gui.btn_validate, SIGNAL('clicked()'), self, SLOT('add_cmd()'))
45
+ @view.lie_name.setText('')
46
+ Qt::Object.connect(@view.btn_validate, SIGNAL('clicked()'), self, SLOT('add_cmd()'))
54
47
  else
55
48
  # Edit
56
- @cmd_editor_gui.lbl_cmd_val.text = "#{cmd_name}"
49
+ @view.lbl_cmd_val.setText(cmd_name)
57
50
  feed_editor_form
58
- @cmd_editor_gui.btn_validate.setText('Edit')
59
- Qt::Object.connect(@cmd_editor_gui.btn_validate, SIGNAL('clicked()'), self, SLOT('edit_cmd()'))
51
+ @view.btn_validate.setText('Edit')
52
+ Qt::Object.connect(@view.btn_validate, SIGNAL('clicked()'), self, SLOT('edit_cmd()'))
60
53
  end
61
54
  unless bus_param.empty?
62
55
  feed_i2c_cmd_array(bus_param)
63
56
  end
64
57
  rescue Exception => msg
65
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while loading the GUI. Consult the logs for more details').exec
66
- logger = Logger.new($logFilePath)
67
- logger.error msg
58
+ ErrorMsg.new.unknown(msg)
59
+ end
60
+
61
+ def feed_i2c_cmd_array(bus_param)
62
+ if bus_param[:mode] == 'w'
63
+ @cmd_table.i2c_write_cmd(bus_param[:addr], bus_param[:size].to_i)
64
+ else
65
+ @cmd_table.i2c_read_cmd(bus_param[:addr], bus_param[:size].to_i)
66
+ end
67
+ end
68
+
69
+ def add_cmd
70
+ return false if @cmd_table.empty_data_exist? || is_cmd_size_valid? == false
71
+ @cmd = Command.create(
72
+ name: @view.lie_name.text,
73
+ description: @view.lie_description.text,
74
+ bus_id: @bus_id,
75
+ chip_id: @chip_id
76
+ )
77
+ unless check_for_errors(@cmd)
78
+ add_bytes
79
+ @parent.feed_cmd_array
80
+ close
81
+ end
82
+ rescue Exception => msg
83
+ ErrorMsg.new.unknown(msg)
84
+ end
85
+
86
+ def edit_cmd
87
+ return false if @cmd_table.empty_data_exist? && !is_cmd_size_valid?
88
+ @cmd = Command.find_by(name: @cmd_name, chip_id: @chip_id)
89
+ @cmd.update(
90
+ name: @view.lie_name.text,
91
+ description: @view.lie_description.text
92
+ )
93
+ @view.tbl_bytes.sortItems(0, Qt::AscendingOrder)
94
+ unless check_for_errors(@cmd)
95
+ Byte.where(command_id: @cmd.id).destroy_all
96
+ add_bytes
97
+ @parent.feed_cmd_array
98
+ close
99
+ end
100
+ rescue Exception => msg
101
+ ErrorMsg.new.unknown(msg)
102
+ end
103
+
104
+ def add_bytes
105
+ @view.tbl_bytes.sortItems(0, Qt::AscendingOrder)
106
+ @view.tbl_bytes.rowCount.times do |i|
107
+ if @bus.name == 'SPI'
108
+ iteration = @view.tbl_bytes.item(i, 2).text
109
+ description = @view.tbl_bytes.item(i, 3).text
110
+ else
111
+ iteration = nil
112
+ description = @view.tbl_bytes.item(i, 2).text
113
+ end
114
+ byte = Byte.create(
115
+ index: i.next,
116
+ value: @view.tbl_bytes.item(i, 1).text,
117
+ iteration: iteration,
118
+ description: description,
119
+ command_id: @cmd.id
120
+ )
121
+ return false if check_for_errors(byte)
122
+ end
123
+ Qt::MessageBox.new(
124
+ Qt::MessageBox::Information,
125
+ 'Command status',
126
+ 'Command saved'
127
+ ).exec
128
+ rescue Exception => msg
129
+ ErrorMsg.new.unknown(msg)
68
130
  end
69
131
 
70
132
  def check_cell_content(item)
71
- case @cmd_editor_gui.tbl_bytes.horizontalHeaderItem(item.column).text
133
+ case @view.tbl_bytes.horizontalHeaderItem(item.column).text
72
134
  when 'Order', 'Repetition'
73
135
  if item.text.to_i < 0
74
136
  item.setData(0, Qt::Variant.new(0))
75
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Wrong data', 'Only positive values are accepted in this cell').exec
137
+ ErrorMsg.new.positive_cell_value
76
138
  end
77
139
  when 'Byte (Hexa)'
78
140
  reg = Qt::RegExp.new("^[A-Fa-f0-9]{2}")
79
141
  reg_val = Qt::RegExpValidator.new(reg, self)
80
142
  if reg_val.validate(item.text, item.text.length) == 0
81
143
  item.setText('')
82
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Wrong data', 'Only hexadecimal values are accepted in this cell').exec
144
+ ErrorMsg.new.hexa_cell_value
83
145
  end
84
146
  when 'Description'
85
147
  unless item.text.nil?
@@ -87,174 +149,60 @@ class Command_editor < Qt::Widget
87
149
  reg_val = Qt::RegExpValidator.new(reg, self)
88
150
  if reg_val.validate(item.text, item.text.length) == 0
89
151
  item.setText('')
90
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Wrong data', 'Wrong characters in this cell').exec
152
+ ErrorMsg.new.char_cell_value
91
153
  end
92
154
  end
93
155
  end
94
156
  rescue Exception => msg
95
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while verifying the command byte column. Consult the logs for more details').exec
96
- logger = Logger.new($logFilePath)
97
- logger.error msg
157
+ ErrorMsg.new.unknown(msg)
98
158
  end
99
159
 
100
160
  def is_cmd_size_valid?
101
- # SPI
102
- if @bus.bus_name == 'SPI'
103
- if (@cmd_editor_gui.tbl_bytes.rowCount + @cmd_table.count_total_repetition) > 4000
104
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'SPI command invalid', 'SPI command size is to big (> 4000)').exec
105
- return false
106
- else
107
- return true
108
- end
109
- # I2C
110
- elsif @bus.bus_name == 'I2C'
111
- count = 0
112
- i = 0
113
- while i <= (@cmd_editor_gui.tbl_bytes.rowCount) - 1 do
114
- if @cmd_editor_gui.tbl_bytes.item(i, 1).nil?
115
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Command error', 'Payload size invalid or payload size (low) missing').exec
116
- return false
117
- else
118
- lowByte = @cmd_editor_gui.tbl_bytes.item(i, 1).text
119
- end
120
- if @cmd_editor_gui.tbl_bytes.item(i + 1, 1).nil?
121
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Command error', 'Payload size invalid or payload size (high) missing').exec
122
- return false
123
- else
124
- highByte = @cmd_editor_gui.tbl_bytes.item(i + 1, 1).text
125
- end
126
- if @cmd_editor_gui.tbl_bytes.item(i + 2, 1).nil?
127
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Command error', 'Payload size invalid or Read / Write address missing').exec
128
- return false
129
- else
130
- commandType = @cmd_editor_gui.tbl_bytes.item(i + 2, 1).text
131
- end
132
- count = count + (HardsploitAPI.BytesToInt(lowByte.to_i(16), highByte.to_i(16)))
133
- if commandType.to_i(16) % 2 == 0 #WRITE
134
- i = (i + ((HardsploitAPI.BytesToInt(lowByte.to_i(16), highByte.to_i(16))) + 3))
135
- else #READ
136
- i = (i + 3)
137
- end
138
- end
139
- if i != @cmd_editor_gui.tbl_bytes.rowCount
140
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Command error', 'I2C command incorrectly formated: The payload size does not match with the row number').exec
141
- return false
142
- end
143
- if count > 2000
144
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'I2C command invalid', 'Your payload is too big (> 2000)').exec
145
- return false
146
- else
147
- return true
148
- end
149
- else
150
- return false
151
- end
152
- rescue Exception => msg
153
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while verifying the command size. Consult the logs for more details').exec
154
- logger = Logger.new($logFilePath)
155
- logger.error msg
156
- end
157
-
158
- def feed_i2c_cmd_array(bus_param)
159
- if bus_param[:mode] == 'w'
160
- @cmd_table.i2c_write_cmd(bus_param[:addr], bus_param[:size].to_i)
161
- else
162
- @cmd_table.i2c_read_cmd(bus_param[:addr], bus_param[:size].to_i)
163
- end
164
- end
165
-
166
- def add_cmd
167
- if @cmd_table.empty_data_exist? || is_cmd_size_valid? == false
168
- return false
169
- end
170
- if @cmd_editor_gui.lie_name.text.empty? || @cmd_editor_gui.lie_description.text.empty?
171
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Information missing', 'Name or description empty').exec
172
- return false
173
- end
174
- cmd = Cmd.new
175
- cmd.cmd_name = @cmd_editor_gui.lie_name.text
176
- cmd.cmd_desc = @cmd_editor_gui.lie_description.text
177
- cmd.cmd_bus = @bus_id
178
- cmd.cmd_chip = @chip_id
179
- cmd.save
180
- @cmd_editor_gui.tbl_bytes.sortItems(0, Qt::AscendingOrder)
181
- @cmd_editor_gui.tbl_bytes.rowCount.times do |i|
182
- byte = Byte.new
183
- byte.byte_index = i + 1
184
- byte.byte_value = @cmd_editor_gui.tbl_bytes.item(i, 1).text
185
- if @bus.bus_name == 'SPI'
186
- byte.byte_iteration = @cmd_editor_gui.tbl_bytes.item(i, 2).text
187
- byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 3).text
188
- else
189
- byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 2).text
190
- end
191
- byte.byte_cmd = Cmd.ids.last
192
- byte.save
193
- end
194
- @parent.feed_cmd_array
195
- close
196
- rescue Exception => msg
197
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while adding the command. Consult the logs for more details').exec
198
- logger = Logger.new($logFilePath)
199
- logger.error msg
200
- end
201
-
202
- def edit_cmd
203
- if @cmd_table.empty_data_exist? && !is_cmd_size_valid?
204
- return false
205
- end
206
- if @cmd_editor_gui.lie_name.text.empty? || @cmd_editor_gui.lie_description.text.empty?
207
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'Information missing', 'Name or description empty').exec
208
- return false
209
- end
210
- cmd = Cmd.find_by(cmd_name: @cmd_name, cmd_chip: @chip_id)
211
- if cmd.cmd_name != @cmd_editor_gui.lie_name.text
212
- cmd.update(cmd_name: @cmd_editor_gui.lie_name.text)
213
- end
214
- if cmd.cmd_desc != @cmd_editor_gui.lie_description.text
215
- cmd.update(cmd_desc: @cmd_editor_gui.lie_description.text)
216
- end
217
- @cmd_editor_gui.tbl_bytes.sortItems(0, Qt::AscendingOrder)
218
- bytes = Byte.where(byte_cmd: cmd.cmd_id)
219
- bytes.destroy_all
220
- @cmd_editor_gui.tbl_bytes.rowCount.times do |i|
221
- byte = Byte.new
222
- byte.byte_index = i + 1
223
- byte.byte_value = @cmd_editor_gui.tbl_bytes.item(i, 1).text
224
- if @bus.bus_name == 'SPI'
225
- byte.byte_iteration = @cmd_editor_gui.tbl_bytes.item(i, 2).text
226
- byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 3).text
227
- else
228
- byte.byte_description = @cmd_editor_gui.tbl_bytes.item(i, 2).text
161
+ byte_table_size = @view.tbl_bytes.rowCount
162
+ case @bus_name
163
+ when 'SPI'
164
+ cmd_size = byte_table_size + @cmd_table.count_total_repetition
165
+ return true if cmd_size < 4000
166
+ return ErrorMsg.new.spi_cmd_too_long
167
+ when 'I2C'
168
+ count = i = 0
169
+ while i <= byte_table_size - 1 do
170
+ low_byte = @view.tbl_bytes.item(i, 1)
171
+ high_byte = @view.tbl_bytes.item(i + 1, 1)
172
+ command_byte = @view.tbl_bytes.item(i + 2, 1)
173
+ return ErrorMsg.new.lowbyte_missing if low_byte.nil?
174
+ return ErrorMsg.new.highbyte_missing if high_byte.nil?
175
+ return ErrorMsg.new.mode_missing if command_byte.nil?
176
+ current_count = HardsploitAPI.BytesToInt(
177
+ lByte: low_byte.text.to_i(16),
178
+ hByte: high_byte.text.to_i(16)
179
+ )
180
+ count += current_count
181
+ (command_type.to_i(16) % 2).zero? ? i += current_count + 3 : i += 3
229
182
  end
230
- byte.byte_cmd = cmd.cmd_id
231
- byte.save
183
+ return ErrorMsg.new.size_neq_row_number unless i == byte_table_size
184
+ return ErrorMsg.new.i2c_cmd_too_long if count > 2000
185
+ return true
232
186
  end
233
- @parent.feed_cmd_array
234
- close
235
187
  rescue Exception => msg
236
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured while editing the command. Consult the logs for more details').exec
237
- logger = Logger.new($logFilePath)
238
- logger.error msg
188
+ ErrorMsg.new.unknown(msg)
239
189
  end
240
190
 
241
191
  def feed_editor_form
242
- cmd = Cmd.find_by(cmd_name: @cmd_name)
243
- @cmd_editor_gui.lie_name.setText(@cmd_name)
244
- @cmd_editor_gui.lie_description.setText(cmd.cmd_desc)
245
- @cmd_table.fill_byte_table(cmd.byte)
192
+ cmd = Command.find_by(name: @cmd_name)
193
+ @view.lie_name.setText(@cmd_name)
194
+ @view.lie_description.setText(cmd.description)
195
+ @cmd_table.fill_byte_table(cmd.bytes)
246
196
  rescue Exception => msg
247
- Qt::MessageBox.new(Qt::MessageBox::Critical, 'Critical error', 'Error occured when loading the command. Consult the logs for more details').exec
248
- logger = Logger.new($logFilePath)
249
- logger.error msg
197
+ ErrorMsg.new.unknown(msg)
250
198
  end
251
199
 
252
200
  def add_row
253
- if @cmd_editor_gui.lie_text_2_bytes.text.empty?
201
+ if @view.lie_text_2_bytes.text.empty?
254
202
  @cmd_table.add_row
255
203
  else
256
- @cmd_table.add_text_rows(@cmd_editor_gui.lie_text_2_bytes.text)
257
- @cmd_editor_gui.lie_text_2_bytes.setText('')
204
+ @cmd_table.add_text_rows(@view.lie_text_2_bytes.text)
205
+ @view.lie_text_2_bytes.setText('')
258
206
  end
259
207
  end
260
208
 
@@ -5,15 +5,12 @@
5
5
  # License URI: http://www.gnu.org/licenses/gpl.txt
6
6
  #===================================================
7
7
 
8
- require_relative '../HardsploitAPI/HardsploitAPI'
9
-
10
8
  class Command_table < Qt::Widget
11
9
 
12
- def initialize(api, cmd_table, bus)
10
+ def initialize(cmd_table, bus)
13
11
  super()
14
12
  @cmd_table = cmd_table
15
13
  @bus = bus
16
- @api = api
17
14
  cmd_table.insertColumn(0)
18
15
  cmd_table.setHorizontalHeaderItem(0, Qt::TableWidgetItem.new('Order'))
19
16
  cmd_table.insertColumn(1)
@@ -30,17 +27,17 @@ class Command_table < Qt::Widget
30
27
  def fill_byte_table(byte_list)
31
28
  byte_list.to_enum.with_index(0).each do |b, i|
32
29
  @cmd_table.insertRow(@cmd_table.rowCount)
33
- @cmd_table.setItem(i, 1, Qt::TableWidgetItem.new(b.byte_value))
30
+ @cmd_table.setItem(i, 1, Qt::TableWidgetItem.new(b.value))
34
31
  if @bus == 'SPI'
35
32
  item = Qt::TableWidgetItem.new
36
- item.setData(0, Qt::Variant.new(b.byte_iteration))
33
+ item.setData(0, Qt::Variant.new(b.iteration))
37
34
  @cmd_table.setItem(i, 2, item)
38
- @cmd_table.setItem(i, 3, Qt::TableWidgetItem.new(b.byte_description))
35
+ @cmd_table.setItem(i, 3, Qt::TableWidgetItem.new(b.description))
39
36
  else
40
- @cmd_table.setItem(i, 2, Qt::TableWidgetItem.new(b.byte_description))
37
+ @cmd_table.setItem(i, 2, Qt::TableWidgetItem.new(b.description))
41
38
  end
42
39
  item = Qt::TableWidgetItem.new
43
- item.setData(0, Qt::Variant.new(b.byte_index))
40
+ item.setData(0, Qt::Variant.new(b.index))
44
41
  @cmd_table.setItem(i, 0, item)
45
42
  end
46
43
  end
@@ -62,7 +59,7 @@ class Command_table < Qt::Widget
62
59
  end
63
60
 
64
61
  def add_text_rows(txt)
65
- if txt.ascii_only?
62
+ return ErrorMsg.new.ascii_only unless txt.ascii_only?
66
63
  txt.each_byte do |x|
67
64
  @cmd_table.insertRow(@cmd_table.rowCount)
68
65
  @cmd_table.setItem(@cmd_table.rowCount - 1, 1, Qt::TableWidgetItem.new(x.to_s(16)))
@@ -74,9 +71,6 @@ class Command_table < Qt::Widget
74
71
  item.setData(0, Qt::Variant.new(@cmd_table.rowCount))
75
72
  @cmd_table.setItem(@cmd_table.rowCount - 1, 0, item)
76
73
  end
77
- else
78
- Qt::MessageBox.new(Qt::MessageBox::Warning, 'String error', 'Only ASCII characters can be specified').exec
79
- end
80
74
  end
81
75
 
82
76
  def clone_rows
@@ -102,7 +96,7 @@ class Command_table < Qt::Widget
102
96
  end
103
97
  else
104
98
  unless @cmd_table.item(row, 2).nil?
105
- @cmd_table.setItem(@cmd_table.rowCount - 1, 2, Qt::TableWidgetItem.new(@cmd_table.item(row, 3).text))
99
+ @cmd_table.setItem(@cmd_table.rowCount - 1, 2, Qt::TableWidgetItem.new(@cmd_table.item(row, 2).text))
106
100
  end
107
101
  end
108
102
  unless @cmd_table.item(row, 0).nil?
@@ -129,14 +123,14 @@ class Command_table < Qt::Widget
129
123
  # Byte array size
130
124
  @cmd_table.setRowCount(3)
131
125
  # Size 1
132
- @cmd_table.setItem(0, 1, Qt::TableWidgetItem.new(HardsploitAPI.lowByte(cmd_size).to_s(16).upcase))
126
+ @cmd_table.setItem(0, 1, Qt::TableWidgetItem.new(HardsploitAPI.lowByte(word: cmd_size).to_s(16).upcase))
133
127
  @cmd_table.setItem(0, 2, Qt::TableWidgetItem.new('Payload size - low'))
134
128
  # Index
135
129
  item = Qt::TableWidgetItem.new
136
130
  item.setData(0, Qt::Variant.new(1))
137
131
  @cmd_table.setItem(0, 0, item)
138
132
  # Size 2
139
- @cmd_table.setItem(1, 1, Qt::TableWidgetItem.new(HardsploitAPI.highByte(cmd_size).to_s(16).upcase))
133
+ @cmd_table.setItem(1, 1, Qt::TableWidgetItem.new(HardsploitAPI.highByte(word: cmd_size).to_s(16).upcase))
140
134
  @cmd_table.setItem(1, 2, Qt::TableWidgetItem.new('Payload size - high'))
141
135
  # Index
142
136
  item = Qt::TableWidgetItem.new
@@ -156,7 +150,7 @@ class Command_table < Qt::Widget
156
150
  @cmd_table.setRowCount(3 + cmd_size)
157
151
  # Payload size low
158
152
  # -byte
159
- itemLB1 = Qt::TableWidgetItem.new(HardsploitAPI.lowByte(cmd_size).to_s(16).upcase)
153
+ itemLB1 = Qt::TableWidgetItem.new(HardsploitAPI.lowByte(word: cmd_size).to_s(16).upcase)
160
154
  @cmd_table.setItem(0, 1, itemLB1)
161
155
  # -description
162
156
  itemLB3 = Qt::TableWidgetItem.new('Payload size - low')
@@ -167,7 +161,7 @@ class Command_table < Qt::Widget
167
161
  @cmd_table.setItem(0, 0, itemLB0)
168
162
  # Payload size high
169
163
  # -byte
170
- itemHB1 = Qt::TableWidgetItem.new(HardsploitAPI.highByte(cmd_size).to_s(16).upcase)
164
+ itemHB1 = Qt::TableWidgetItem.new(HardsploitAPI.highByte(word: cmd_size).to_s(16).upcase)
171
165
  @cmd_table.setItem(1, 1, itemHB1)
172
166
  # -description
173
167
  itemHB3 = Qt::TableWidgetItem.new('Payload size - high')
@@ -193,7 +187,7 @@ class Command_table < Qt::Widget
193
187
  @cmd_table.setItem(i, 2, Qt::TableWidgetItem.new('Payload byte'))
194
188
  # Index
195
189
  item = Qt::TableWidgetItem.new
196
- item.setData(0, Qt::Variant.new((i + 1)))
190
+ item.setData(0, Qt::Variant.new(i.next))
197
191
  @cmd_table.setItem(i, 0, item)
198
192
  end
199
193
  end
@@ -205,11 +199,11 @@ class Command_table < Qt::Widget
205
199
  end
206
200
 
207
201
  def count_total_repetition
208
- repetitionValue = 0
202
+ repetition_value = 0
209
203
  @cmd_table.rowCount.times do |i|
210
- repetitionValue += @cmd_table.item(i, 2).text.to_i
204
+ repetition_value += @cmd_table.item(i, 2).text.to_i
211
205
  end
212
- return repetitionValue
206
+ return repetition_value
213
207
  end
214
208
 
215
209
  def empty_data_exist?