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
@@ -9,38 +9,41 @@ require_relative '../../gui/gui_i2c_command'
9
9
  class I2c_command < Qt::Widget
10
10
  slots 'open_generic_cmd()'
11
11
 
12
- def initialize(api, chip, bus_id, parent)
12
+ def initialize(chip, bus_id, parent)
13
13
  super()
14
- @i2c_command_gui = Ui_I2c_command.new
14
+ @view = Ui_I2c_command.new
15
15
  centerWindow(self)
16
- @i2c_command_gui.setupUi(self)
17
- @i2c_command_gui.rbn_read.setChecked(true)
18
- inputRestrict(@i2c_command_gui.lie_size, 0)
16
+ @view.setupUi(self)
17
+ @view.rbn_read.setChecked(true)
18
+ inputRestrict(@view.lie_size, 0)
19
19
  @chip = chip
20
- @chip_settings = I2C.find_by(i2c_chip: chip.chip_id)
21
- @api = api
20
+ @chip_settings = chip.i2c_setting
22
21
  @bus_id = bus_id
23
22
  @parent = parent
24
23
  end
25
24
 
26
25
  def open_generic_cmd
27
26
  return 0 if check_form_param.zero?
28
- if @i2c_command_gui.rbn_read.isChecked
27
+ if @view.rbn_read.isChecked
29
28
  mode = "r"
30
- addr = @chip_settings.i2c_address_r
29
+ addr = @chip_settings.address_r
31
30
  else
32
31
  mode = "w"
33
- addr = @chip_settings.i2c_address_w
32
+ addr = @chip_settings.address_w
34
33
  end
35
- i2c_cmd_form = Command_editor.new(0, nil, @chip, @bus_id, @parent, @api, :mode => mode, :size => @i2c_command_gui.lie_size.text, :addr => addr)
34
+ i2c_cmd_form = Command_editor.new(0, nil, @chip, @bus_id, @parent, :mode => mode, :size => @view.lie_size.text, :addr => addr)
36
35
  i2c_cmd_form.setWindowModality(Qt::ApplicationModal)
37
36
  i2c_cmd_form.show
38
37
  close
39
38
  end
40
39
 
41
40
  def check_form_param
42
- if @i2c_command_gui.lie_size.text.empty? || @i2c_command_gui.lie_size.text.to_i.zero?
43
- Qt::MessageBox.new(Qt::MessageBox::Information, "Form invalid", "Payload size must be filled and superior to 0").exec
41
+ if @view.lie_size.text.empty? || @view.lie_size.text.to_i.zero?
42
+ Qt::MessageBox.new(
43
+ Qt::MessageBox::Information,
44
+ "Form invalid",
45
+ "Payload size must be filled and superior to 0"
46
+ ).exec
44
47
  return 0
45
48
  end
46
49
  return 1
@@ -0,0 +1,95 @@
1
+ #===================================================
2
+ # Hardsploit GUI - By Opale Security
3
+ # www.opale-security.com || www.hardsploit.io
4
+ # License: GNU General Public License v3
5
+ # License URI: http://www.gnu.org/licenses/gpl.txt
6
+ #===================================================
7
+
8
+ require_relative '../../gui/gui_generic_export'
9
+ require_relative '../../HardsploitAPI/Modules/I2C/HardsploitAPI_I2C'
10
+ class I2c_export < Qt::Widget
11
+ slots 'export()'
12
+ slots 'select_export_file()'
13
+
14
+ def initialize(chip)
15
+ super()
16
+ @view = Ui_Generic_export.new
17
+ centerWindow(self)
18
+ @view.setupUi(self)
19
+ @view.lbl_chip.setText(chip.reference)
20
+ inputRestrict(@view.lie_start, 0)
21
+ inputRestrict(@view.lie_stop, 0)
22
+ @chip = chip
23
+ end
24
+
25
+ def select_export_file
26
+ @filepath = Qt::FileDialog.getSaveFileName(self, tr('Select a file'), '/', tr('*.*'))
27
+ unless @filepath.nil?
28
+ @view.btn_export.setEnabled(true)
29
+ @view.btn_full_export.setEnabled(true)
30
+ @view.lbl_selected_file.setText("#{@filepath.split("/").last}")
31
+ end
32
+ rescue Exception => msg
33
+ ErrorMsg.new.unknown(msg)
34
+ end
35
+
36
+ def export
37
+ $file = File.open("#{@filepath}", 'w') unless @filepath.nil?
38
+ if sender.objectName == 'btn_full_export'
39
+ return false unless control_export_settings('full')
40
+ start = 0
41
+ stop = @chip.i2c_setting.total_size - 1
42
+ control = @chip.i2c_setting.total_size
43
+ else
44
+ return false unless control_export_settings('partial')
45
+ start = @view.lie_start.text.to_i
46
+ stop = @view.lie_stop.text.to_i
47
+ control = (stop - start) + 1
48
+ end
49
+ Firmware.new('I2C')
50
+ $pgb = Progress_bar.new("I²C: Exporting...")
51
+ $pgb.show
52
+
53
+ if [40, 100, 400, 1000].include?(@chip.i2c_setting.frequency)
54
+ speed = 0 if @chip.i2c_setting.frequency == 100
55
+ speed = 1 if @chip.i2c_setting.frequency == 400
56
+ speed = 2 if @chip.i2c_setting.frequency == 1000
57
+ speed = 3 if @chip.i2c_setting.frequency == 40
58
+ i2c = HardsploitAPI_I2C.new(speed: speed)
59
+ i2c.i2c_Generic_Dump(
60
+ i2cBaseAddress: @chip.i2c_setting.address_w.to_i(16),
61
+ startAddress: start,
62
+ stopAddress: stop,
63
+ sizeMax: @chip.i2c_setting.total_size
64
+ )
65
+ end
66
+ $file.close unless $file.nil?
67
+ ErrorMsg.new.filesize_error unless control == File.size(@filepath)
68
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
69
+ ErrorMsg.new.hardsploit_not_found
70
+ rescue HardsploitAPI::ERROR::USB_ERROR
71
+ ErrorMsg.new.usb_error
72
+ rescue Exception => msg
73
+ ErrorMsg.new.unknown(msg)
74
+ end
75
+
76
+ def control_export_settings(type)
77
+ return ErrorMsg.new.settings_missing if @chip.i2c_setting.nil?
78
+ return ErrorMsg.new.frequency_missing if @chip.i2c_setting.frequency.nil?
79
+ return ErrorMsg.new.mode_missing if @chip.i2c_setting.address_w.nil?
80
+ return ErrorMsg.new.full_size_error if @chip.i2c_setting.total_size.nil?
81
+ return ErrorMsg.new.full_size_error if @chip.i2c_setting.total_size.zero?
82
+ if type == 'partial'
83
+ return ErrorMsg.new.start_stop_missing if @view.lie_start.text.empty?
84
+ return ErrorMsg.new.start_stop_missing if @view.lie_stop.text.empty?
85
+ start = @view.lie_start.text.to_i
86
+ stop = @view.lie_stop.text.to_i
87
+ total_size = @chip.i2c_setting.total_size
88
+ return ErrorMsg.new.start_neq_stop if start == stop
89
+ return ErrorMsg.new.start_inf_to_stop if start > stop
90
+ return ErrorMsg.new.inf_to_total_size if start > (total_size - 1)
91
+ return ErrorMsg.new.inf_to_total_size if stop > (total_size - 1)
92
+ end
93
+ return true
94
+ end
95
+ end
@@ -0,0 +1,117 @@
1
+ #===================================================
2
+ # Hardsploit GUI - By Opale Security
3
+ # www.opale-security.com || www.hardsploit.io
4
+ # License: GNU General Public License v3
5
+ # License URI: http://www.gnu.org/licenses/gpl.txt
6
+ #===================================================
7
+
8
+ require_relative '../../gui/gui_generic_import'
9
+ require_relative '../../HardsploitAPI/Modules/I2C/HardsploitAPI_I2C'
10
+ class I2c_import < Qt::Widget
11
+ slots 'import()'
12
+ slots 'select_import_file()'
13
+
14
+ def initialize(chip)
15
+ super()
16
+ @view = Ui_Generic_import.new
17
+ centerWindow(self)
18
+ @view.setupUi(self)
19
+ @view.lbl_chip.setText(chip.reference)
20
+ inputRestrict(@view.lie_start, 0)
21
+ @chip = chip
22
+ end
23
+
24
+ def select_import_file
25
+ @filepath = Qt::FileDialog.getOpenFileName(self, tr('Select a file'), '/', tr('*.*'))
26
+ unless @filepath.nil?
27
+ @view.btn_import.setEnabled(true)
28
+ @view.lbl_selected_file.setText("#{@filepath.split("/").last}")
29
+ end
30
+ rescue Exception => msg
31
+ ErrorMsg.new.unknown(msg)
32
+ end
33
+
34
+ def import
35
+ return 0 if control_import_settings.zero?
36
+ Firmware.new('I2C')
37
+ $pgb = Progress_bar.new("I²C: Exporting...")
38
+ $pgb.show
39
+ if [40, 100, 400, 1000].include?(@chip.i2c_setting.frequency)
40
+ speed = 0 if @chip.i2c_setting.frequency == 100
41
+ speed = 1 if @chip.i2c_setting.frequency == 400
42
+ speed = 2 if @chip.i2c_setting.frequency == 1000
43
+ speed = 3 if @chip.i2c_setting.frequency == 40
44
+ i2c = HardsploitAPI_I2C.new(speed: speed)
45
+ i2c.i2c_Generic_Import(
46
+ i2cBaseAddress: @chip.i2c_setting.address_w.to_i(16),
47
+ startAddress: @view.lie_start.text.to_i,
48
+ pageSize: @chip.i2c_setting.page_size,
49
+ memorySize: @chip.i2c_setting.total_size,
50
+ dataFile: @filepath,
51
+ writePageLatency: @chip.i2c_setting.write_page_latency / 1000.0
52
+ )
53
+ end
54
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
55
+ ErrorMsg.new.hardsploit_not_found
56
+ rescue HardsploitAPI::ERROR::USB_ERROR
57
+ ErrorMsg.new.usb_error
58
+ rescue HardsploitAPI::ERROR::I2CWrongSpeed
59
+ ErrorMsg.new.i2c_error
60
+ rescue Exception => msg
61
+ ErrorMsg.new.unknown(msg)
62
+ end
63
+
64
+ def control_import_settings
65
+ if @chip.i2c_setting.nil?
66
+ Qt::MessageBox.new(
67
+ Qt::MessageBox::Warning,
68
+ 'Missing I2C setting',
69
+ 'No settings saved for this chip'
70
+ ).exec
71
+ return 0
72
+ end
73
+ if @chip.i2c_setting.total_size.nil?
74
+ Qt::MessageBox.new(
75
+ Qt::MessageBox::Warning,
76
+ 'Missing I2C setting',
77
+ 'Total size setting missing'
78
+ ).exec
79
+ return 0
80
+ end
81
+ if @chip.i2c_setting.page_size.nil?
82
+ Qt::MessageBox.new(
83
+ Qt::MessageBox::Warning,
84
+ 'Missing I2C setting',
85
+ 'Page size setting missing'
86
+ ).exec
87
+ return 0
88
+ end
89
+ if @chip.i2c_setting.write_page_latency.nil?
90
+ Qt::MessageBox.new(
91
+ Qt::MessageBox::Warning,
92
+ 'Missing I2C setting',
93
+ 'Write page latency setting missing'
94
+ ).exec
95
+ return 0
96
+ end
97
+ if @chip.i2c_setting.frequency.nil? || @chip.i2c_setting.address_w.nil?
98
+ Qt::MessageBox.new(
99
+ Qt::MessageBox::Warning,
100
+ 'Missing I2C setting',
101
+ 'Write base address or frequency settings missing'
102
+ ).exec
103
+ return 0
104
+ end
105
+ if @view.lie_start.text.empty?
106
+ Qt::MessageBox.new(
107
+ Qt::MessageBox::Warning,
108
+ 'Missing start address',
109
+ 'Please fill the Start address field'
110
+ ).exec
111
+ return 0
112
+ end
113
+ return 1
114
+ rescue Exception => msg
115
+ ErrorMsg.new.unknown(msg)
116
+ end
117
+ end
@@ -0,0 +1,114 @@
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_scanner'
9
+ require_relative '../../HardsploitAPI/Modules/I2C/HardsploitAPI_I2C'
10
+
11
+ class I2c_scanner < Qt::Widget
12
+ slots 'scan()'
13
+ slots 'autowiring()'
14
+ slots 'update_tbl(QString)'
15
+ slots 'update_cbx(QString)'
16
+
17
+ def initialize
18
+ super()
19
+ @view = Ui_Signal_scanner.new
20
+ centerWindow(self)
21
+ @view.setupUi(self)
22
+ update_cbx('B0')
23
+ end
24
+
25
+ def scan
26
+ @view.cbx_start.setEnabled(false)
27
+ @view.cbx_stop.setEnabled(false)
28
+ @view.btn_scan.setEnabled(false)
29
+ update_tbl(@view.cbx_stop.currentText)
30
+ Firmware.new('I2C')
31
+ i2c = HardsploitAPI_I2C.new(speed: 3)
32
+ @result = i2c.find(
33
+ start_from: @view.cbx_start.currentText[1].to_i + 9,
34
+ stop_to: @view.cbx_stop.currentText[1].to_i + 9
35
+ )
36
+ unless @result[1].is_a? Array
37
+ @view.tbl_result.setItem(@result.index(0), 1, Qt::TableWidgetItem.new("CLK"))
38
+ @view.tbl_result.setItem(@result.index(1), 1, Qt::TableWidgetItem.new("SDA"))
39
+ end
40
+ @view.cbx_start.setEnabled(true)
41
+ @view.cbx_stop.setEnabled(true)
42
+ @view.btn_scan.setEnabled(true)
43
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
44
+ ErrorMsg.new.hardsploit_not_found
45
+ return false
46
+ rescue HardsploitAPI::ERROR::USB_ERROR
47
+ ErrorMsg.new.usb_error
48
+ return false
49
+ rescue Exception => msg
50
+ ErrorMsg.new.unknown(msg)
51
+ return false
52
+ end
53
+
54
+ def autowiring
55
+ signal_found = false
56
+ @view.tbl_result.rowCount.times do |i|
57
+ if @view.tbl_result.item(i, 1).text == 'SDA'
58
+ signal_found = true
59
+ current_signal = Signall.find_by(name: 'SDA')
60
+ current_signal.update(pin: @view.tbl_result.item(i, 0).text)
61
+ elsif @view.tbl_result.item(i, 1).text == 'CLK'
62
+ signal_found = true
63
+ current_signal = Signall.find_by(name: 'I2C_CLK')
64
+ current_signal.update(pin: @view.tbl_result.item(i, 0).text)
65
+ else
66
+ # Next row
67
+ end
68
+ end
69
+ if signal_found
70
+ Qt::MessageBox.new(
71
+ Qt::MessageBox::Information,
72
+ 'Hardsploit Autowiring',
73
+ 'Wiring saved. To change it, go to Menu > Signal mapper'
74
+ ).exec
75
+ else
76
+ Qt::MessageBox.new(
77
+ Qt::MessageBox::Information,
78
+ 'Hardsploit Autowiring',
79
+ 'No signals found in the array'
80
+ ).exec
81
+ end
82
+ rescue Exception => msg
83
+ ErrorMsg.new.unknown(msg)
84
+ return false
85
+ end
86
+
87
+ def update_tbl(pin)
88
+ unless @view.cbx_stop.count.zero?
89
+ @view.tbl_result.setRowCount(0)
90
+ nbr = pin[1].to_i - (@view.cbx_start.currentText[1].to_i) + 1
91
+ nbr.times do |i|
92
+ @view.tbl_result.insertRow(i)
93
+ @view.tbl_result.setItem(i, 0, Qt::TableWidgetItem.new("B#{(i + @view.cbx_start.currentText[1].to_i)}"))
94
+ @view.tbl_result.setItem(i, 1, Qt::TableWidgetItem.new('-'))
95
+ end
96
+ resize_to_content
97
+ end
98
+ end
99
+
100
+ def resize_to_content
101
+ @view.tbl_result.resizeColumnsToContents
102
+ @view.tbl_result.resizeRowsToContents
103
+ @view.tbl_result.horizontalHeader.stretchLastSection = true
104
+ end
105
+
106
+ def update_cbx(pin)
107
+ @view.cbx_stop.clear
108
+ start_at = pin[1].to_i
109
+ end_at = 7
110
+ (end_at - start_at).times do |i|
111
+ @view.cbx_stop.addItem("B#{(i + start_at) + 1}")
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,148 @@
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_i2c_settings'
9
+ class I2c_settings < Qt::Widget
10
+ slots 'save_settings()'
11
+ slots 'bus_scan()'
12
+
13
+ def initialize(chip)
14
+ super()
15
+ @view = Ui_I2c_settings.new
16
+ centerWindow(self)
17
+ @view.setupUi(self)
18
+ @view.lbl_chip.setText(chip.reference)
19
+ inputRestrict(@view.lie_total_size, 0)
20
+ inputRestrict(@view.lie_page_size, 0)
21
+ inputRestrict(@view.lie_write_page_latency, 0)
22
+ inputRestrict(@view.lie_address_r, 3)
23
+ inputRestrict(@view.lie_address_w, 3)
24
+ @view.tbl_bus_scan.resizeColumnsToContents
25
+ @view.tbl_bus_scan.resizeRowsToContents
26
+ @view.tbl_bus_scan.horizontalHeader.stretchLastSection = true
27
+ @chip = chip
28
+ feed_settings_form unless @chip.i2c_setting.nil?
29
+ rescue Exception => msg
30
+ ErrorMsg.new.unknown(msg)
31
+ end
32
+
33
+ def save_settings
34
+ @chip.i2c_setting.nil? ? create : update
35
+ @chip.reload
36
+ end
37
+
38
+ def feed_settings_form
39
+ @view.lie_address_w.setText(@chip.i2c_setting.address_w)
40
+ @view.lie_address_r.setText(@chip.i2c_setting.address_r)
41
+ @view.cbx_frequency.setCurrentIndex(@view.cbx_frequency.findText(@chip.i2c_setting.frequency.to_s))
42
+ @view.lie_write_page_latency.setText(@chip.i2c_setting.write_page_latency.to_s)
43
+ @view.lie_page_size.setText(@chip.i2c_setting.page_size.to_s)
44
+ @view.lie_total_size.setText(@chip.i2c_setting.total_size.to_s)
45
+ end
46
+
47
+ def create
48
+ chip_setting = I2cSetting.create(
49
+ address_w: @view.lie_address_w.text,
50
+ address_r: @view.lie_address_r.text,
51
+ frequency: @view.cbx_frequency.currentText.to_i,
52
+ write_page_latency: @view.lie_write_page_latency.text,
53
+ page_size: @view.lie_page_size.text,
54
+ total_size: @view.lie_total_size.text,
55
+ chip_id: @chip.id
56
+ )
57
+ unless check_for_errors(chip_setting)
58
+ Qt::MessageBox.new(
59
+ Qt::MessageBox::Information,
60
+ 'Succes',
61
+ 'I2C settings saved'
62
+ ).exec
63
+ close
64
+ end
65
+ rescue Exception => msg
66
+ ErrorMsg.new.unknown(msg)
67
+ end
68
+
69
+ def update
70
+ @chip.i2c_setting.update(
71
+ address_w: @view.lie_address_w.text,
72
+ address_r: @view.lie_address_r.text,
73
+ frequency: @view.cbx_frequency.currentText.to_i,
74
+ write_page_latency: @view.lie_write_page_latency.text,
75
+ page_size: @view.lie_page_size.text,
76
+ total_size: @view.lie_total_size.text
77
+ )
78
+ unless check_for_errors(@chip.i2c_setting)
79
+ Qt::MessageBox.new(
80
+ Qt::MessageBox::Information,
81
+ 'Succes',
82
+ 'I2C settings updated'
83
+ ).exec
84
+ close
85
+ end
86
+ rescue Exception => msg
87
+ ErrorMsg.new.unknown(msg)
88
+ end
89
+
90
+ def bus_scan
91
+ @view.tbl_bus_scan.setRowCount(0)
92
+ Firmware.new('I2C')
93
+ speed = 0
94
+ if [40, 100, 400, 1000].include?(@chip.i2c_setting.frequency)
95
+ speed = 0 if @chip.i2c_setting.frequency == 100
96
+ speed = 1 if @chip.i2c_setting.frequency == 400
97
+ speed = 2 if @chip.i2c_setting.frequency == 1000
98
+ speed = 3 if @chip.i2c_setting.frequency == 40
99
+ end
100
+ i2c = HardsploitAPI_I2C.new(speed: speed)
101
+ scan_result = i2c.i2c_Scan
102
+ if scan_result.include?(1)
103
+ scan_result.each_with_index do |v, i|
104
+ if v == 1
105
+ @view.tbl_bus_scan.insertRow(@view.tbl_bus_scan.rowCount)
106
+ @view.tbl_bus_scan.setItem(
107
+ @view.tbl_bus_scan.rowCount - 1,
108
+ 0,
109
+ Qt::TableWidgetItem.new("0x#{i.to_s(16).upcase}")
110
+ )
111
+ if i % 2 == 0
112
+ @view.tbl_bus_scan.setItem(
113
+ @view.tbl_bus_scan.rowCount - 1,
114
+ 1,
115
+ Qt::TableWidgetItem.new('Write')
116
+ )
117
+ else
118
+ @view.tbl_bus_scan.setItem(
119
+ @view.tbl_bus_scan.rowCount - 1,
120
+ 1,
121
+ Qt::TableWidgetItem.new('Read')
122
+ )
123
+ end
124
+ end
125
+ end
126
+ @view.tbl_bus_scan.resizeColumnsToContents
127
+ @view.tbl_bus_scan.resizeRowsToContents
128
+ @view.tbl_bus_scan.horizontalHeader.stretchLastSection = true
129
+ Qt::MessageBox.new(
130
+ Qt::MessageBox::Information,
131
+ "Bus Scan",
132
+ "Bus scan ended correctly: #{@view.tbl_bus_scan.rowCount} address(es) found"
133
+ ).exec
134
+ else
135
+ Qt::MessageBox.new(
136
+ Qt::MessageBox::Information,
137
+ "Bus addresses",
138
+ "No valid addresses have been returned by the scan"
139
+ ).exec
140
+ end
141
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
142
+ ErrorMsg.new.hardsploit_not_found
143
+ rescue HardsploitAPI::ERROR::USB_ERROR
144
+ ErrorMsg.new.usb_error
145
+ rescue Exception => msg
146
+ ErrorMsg.new.unknown(msg)
147
+ end
148
+ end