hardsploit_gui 2.2 → 2.3

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,133 +0,0 @@
1
- #!/usr/bin/ruby
2
- #===================================================
3
- # Hardsploit API - By Opale Security
4
- # www.opale-security.com || www.hardsploit.io
5
- # License: GNU General Public License v3
6
- # License URI: http://www.gnu.org/licenses/gpl.txt
7
- #===================================================
8
-
9
- require 'libusb'
10
- require_relative 'HardsploitAPI_CONSTANT'
11
- require_relative 'HardsploitAPI_USB_COMMUNICATION'
12
- require_relative 'HardsploitAPI_FIRMWARE'
13
- require_relative 'HardsploitAPI_NO_MUX_PARALLELE_MEMORY'
14
- require_relative 'HardsploitAPI_I2C'
15
- require_relative 'HardsploitAPI_SPI'
16
- require_relative 'HardsploitAPI_TEST_INTERACT'
17
- require_relative 'SWD/HardsploitAPI_SWD'
18
- require_relative 'HardsploitAPI_ERROR'
19
-
20
- require 'thread'
21
-
22
- class HardsploitAPI
23
- public
24
-
25
- attr_accessor :dev
26
-
27
- include USB
28
- include USB_STATE
29
- include USB_COMMAND
30
-
31
- # Initialize the HARDSPLOIT API
32
- # * +callbackData+:: callback to return data for dump function
33
- # * +callbackInfo+:: callback to get back general information
34
- # * +callbackError+:: callback not used for the moment and transform into progressCallback soon
35
- # * +callbackSpeedOfTransfert+:: callback to get back +information about speed+
36
- def initialize(*args)
37
- parametters = HardsploitAPI.checkParametters(["callbackData","callbackInfo","callbackProgress","callbackSpeedOfTransfert"],args)
38
- @callbackData = parametters[:callbackData]
39
- @callbackInfo = parametters[:callbackInfo]
40
- @callbackProgress = parametters[:callbackProgress]
41
- @callbackSpeedOfTransfert = parametters[:callbackSpeedOfTransfert]
42
-
43
- @packet_send = Array.new
44
- @usb = LIBUSB::Context.new
45
- @device = nil
46
- end
47
-
48
- # Set custom value to wiring led
49
- # * +value+:: 64 bits (8x8 Bytes) values to represent led (PortH PortG PortF PortE PortD PortC PortB PortA)
50
- def setWiringLeds(*args)
51
- parametters = HardsploitAPI.checkParametters(["value"],args)
52
- val = parametters[:value]
53
-
54
- packet = Array.new
55
- packet.push 0 #low byte of lenght of trame refresh automaticly before send by usb
56
- packet.push 0 #high byte of lenght of trame refresh automaticly before send by usb
57
- packet.push HardsploitAPI.lowByte(USB_COMMAND::FPGA_COMMAND)
58
- packet.push HardsploitAPI.highByte(USB_COMMAND::FPGA_COMMAND)
59
-
60
- packet.push 0x23 #Command SPI write wiring led
61
-
62
- packet.push HardsploitAPI.reverseBit((val & 0x00000000000000FF) >> 0)
63
- packet.push HardsploitAPI.reverseBit((val & 0x000000000000FF00) >> 8 )
64
- packet.push HardsploitAPI.reverseBit((val & 0x0000000000FF0000) >> 16 )
65
- packet.push HardsploitAPI.reverseBit((val & 0x00000000FF000000) >> 24 )
66
- packet.push HardsploitAPI.reverseBit((val & 0x000000FF00000000) >> 32 )
67
- packet.push HardsploitAPI.reverseBit((val & 0x0000FF0000000000) >> 40 )
68
- packet.push HardsploitAPI.reverseBit((val & 0x00FF000000000000) >> 48 )
69
- packet.push HardsploitAPI.reverseBit((val & 0xFF00000000000000) >> 56 )
70
-
71
- return self.sendPacket(packet)
72
- end
73
-
74
- # Obtaint the version number of the board
75
- def getVersionNumber
76
- packet = Array.new
77
- packet.push 0 #low byte of lenght of trame refresh automaticly before send by usb
78
- packet.push 0 #high byte of lenght of trame refresh automaticly before send by usb
79
- packet.push HardsploitAPI.lowByte(USB_COMMAND::GET_VERSION_NUMBER)
80
- packet.push HardsploitAPI.highByte(USB_COMMAND::GET_VERSION_NUMBER)
81
-
82
- #remove header
83
- version_number = sendAndReceiveDATA(packet,1000).drop(4)
84
- if version_number.size < 20 then #if size more thant 20 char error when reading version number
85
- return version_number.pack('U*')
86
- else
87
- return "BAD VERSION NUMBER"
88
- end
89
-
90
- end
91
-
92
- def self.reverseBit(byte)
93
- return byte.to_s(2).rjust(8, "0").reverse.to_i(2)
94
- end
95
-
96
- def self.checkParametters(arr_parametters,*args)
97
- params = Hash.new
98
- if args[0][0].class == Hash then
99
- hash_args = args[0][0]
100
- arr_parametters.each do |param|
101
- if hash_args[param.to_sym] == nil then
102
- raise "Wrong parametters, you need to specify #{param.to_sym}"
103
- else
104
- params[param.to_sym] = hash_args[param.to_sym]
105
- end
106
- end
107
- else
108
- if args[0].length == arr_parametters.size then
109
- args[0].each_with_index do |value,key|
110
- params[arr_parametters[key].to_sym] = value
111
- end
112
- else
113
- raise "Error : method need #{arr_parametters.size} parametters"
114
- end
115
- end
116
- return params
117
- end
118
-
119
- def consoleProgress(percent:,startTime:,endTime:)
120
- @callbackProgress.call(percent:percent,startTime:startTime,endTime:endTime)
121
- end
122
- def consoleData(value)
123
- @callbackData.call(value)
124
- end
125
- def consoleSpeed(value)
126
- @callbackSpeedOfTransfert.call(value)
127
- end
128
- def consoleInfo(value)
129
- @callbackInfo.call(value)
130
- end
131
-
132
-
133
- end
@@ -1,145 +0,0 @@
1
- #!/usr/bin/ruby
2
- #===================================================
3
- # Hardsploit API - By Opale Security
4
- # www.opale-security.com || www.hardsploit.io
5
- # License: GNU General Public License v3
6
- # License URI: http://www.gnu.org/licenses/gpl.txt
7
- #===================================================
8
-
9
- class HardsploitAPI
10
- public
11
-
12
- # Power on the led for each signal specified
13
- # Params:
14
- # +signal+:: Name of signal you want visual help (set the led)
15
- def signalHelpingWiring(*args)
16
- parametters = HardsploitAPI.checkParametters(["signal"],args)
17
- signal = parametters[:signal]
18
-
19
- wires = Hash.new
20
-
21
- #Parallel module
22
- wires["A0"] = 0
23
- wires["A1"] = 1
24
- wires["A2"] = 2
25
- wires["A3"] = 3
26
- wires["A4"] = 4
27
- wires["A5"] = 5
28
- wires["A6"] = 6
29
- wires["A7"] = 7
30
- wires["A8"] = 8
31
- wires["A9"] = 9
32
- wires["A10"] = 10
33
- wires["A11"] = 11
34
- wires["A12"] = 12
35
- wires["A13"] = 13
36
- wires["A14"] = 14
37
- wires["A15"] = 15
38
- wires["A16"] = 16
39
- wires["A17"] = 17
40
- wires["A18"] = 18
41
- wires["A19"] = 19
42
- wires["A20"] = 20
43
- wires["A21"] = 21
44
- wires["A22"] = 22
45
- wires["A23"] = 23
46
- wires["A24"] = 24
47
- wires["A25"] = 25
48
- wires["A26"] = 26
49
- wires["A27"] = 27
50
- wires["A28"] = 28
51
- wires["A29"] = 29
52
- wires["A30"] = 30
53
- wires["A31"] = 31
54
-
55
- wires["D0"] = 32
56
- wires["D1"] = 33
57
- wires["D2"] = 34
58
- wires["D3"] = 35
59
- wires["D4"] = 36
60
- wires["D5"] = 37
61
- wires["D6"] = 38
62
- wires["D7"] = 39
63
- wires["D8"] = 40
64
- wires["D9"] = 41
65
- wires["D10"] = 42
66
- wires["D11"] = 43
67
- wires["D12"] = 44
68
- wires["D13"] = 45
69
- wires["D14"] = 46
70
- wires["D15"] = 47
71
-
72
- wires["RST"] = 48
73
- wires["CE"] = 49
74
- wires["OE"] = 50
75
- wires["WE"] = 51
76
- wires["CLK"] = 52
77
- wires["WP"] = 53
78
- wires["ADV"] = 54
79
-
80
-
81
- #SPI module
82
- wires["CS"] = 0
83
- wires["SPI_CLK"] = 1
84
- wires["MOSI"] = 2
85
- wires["MISO"] = 3
86
-
87
- #I2C module
88
- wires["I2C_CLK"] = 0
89
- wires["SDA"] = 1
90
-
91
- begin
92
- setWiringLeds(2**wires[signal])
93
- rescue Exception => e
94
- raise 'UNKNOWN SIGNAL'
95
- end
96
- end
97
-
98
- module USB_COMMAND
99
- GREEN_LED = 0
100
- RED_LED = 1
101
- LOOPBACK = 2
102
- ERASE_FIRMWARE = 3
103
- WRITE_PAGE_FIRMWARE = 4
104
- READ_PAGE_FIRMWARE = 5
105
- READ_ID_FLASH = 6
106
- START_FPGA = 7
107
- STOP_FPGA = 8
108
- FPGA_COMMAND = 9
109
- FPGA_DATA = 10
110
- STOP_FPGA_DATA = 11
111
- START_FPGA_DATA = 12
112
- GET_SERIAL_NUMBER = 13
113
- GET_VERSION_NUMBER = 14
114
- VCP_ERROR = 0xFFFF
115
- end
116
-
117
- module I2C
118
- KHZ_100 = 0
119
- KHZ_400 = 1
120
- KHZ_1000 = 2
121
- end
122
-
123
- module USB
124
- OUT_ENDPOINT = 0X02
125
- IN_ENDPOINT = 0X81
126
- USB_TRAME_SIZE = 8191
127
- end
128
- module VERSION
129
- API = "1.2.1"
130
- end
131
- module USB_STATE
132
- public
133
- UNKNOWN_STATE = -2
134
- BUSY = -1
135
- NOT_CONNECTED = 0
136
- CONNECTED = 1
137
- UNKNOWN_CONNECTED = 2
138
- SUCCESSFUL_SEND = 3
139
- PACKET_IS_TOO_LARGE = 4
140
- ERROR_SEND = 5
141
- SUCCESSFUL_RECEIVE = 6
142
- TIMEOUT_RECEIVE = 7
143
-
144
- end
145
- end
@@ -1,38 +0,0 @@
1
- #!/usr/bin/ruby
2
- #===================================================
3
- # Hardsploit API - By Opale Security
4
- # www.opale-security.com || www.hardsploit.io
5
- # License: GNU General Public License v3
6
- # License URI: http://www.gnu.org/licenses/gpl.txt
7
- #===================================================
8
-
9
- class HardsploitAPI
10
- module Error
11
- class Standard < StandardError; end
12
-
13
- class FileIssue < Standard
14
- def initialize(msg="Issue with file")
15
- super(msg)
16
- end
17
- end
18
-
19
-
20
- class I2CWrongSpeed < Standard
21
- def initialize(msg="Uknown speed")
22
- super(msg)
23
- end
24
- end
25
-
26
- class WrongStartAddress < Standard
27
- def initialize(msg="Start address can't be negative and not more than size max - 1")
28
- super(msg)
29
- end
30
- end
31
-
32
- class SpiError < Standard
33
- def initialize(msg="Error during SPI processing")
34
- super(msg)
35
- end
36
- end
37
- end
38
- end
@@ -1,311 +0,0 @@
1
- #!/usr/bin/ruby
2
- #===================================================
3
- # Hardsploit API - By Opale Security
4
- # www.opale-security.com || www.hardsploit.io
5
- # License: GNU General Public License v3
6
- # License URI: http://www.gnu.org/licenses/gpl.txt
7
- #===================================================
8
-
9
- class HardsploitAPI
10
- public
11
-
12
- # Wait to receive data
13
- # * +pathFirmware+:: path of rpd file (vhdl)
14
- # * +checkFirmware+:: boolean if check is needed (recommended false, in case issue true to check)
15
- # Return true if firmware write == firmware read (slow because read the firmware for check)
16
- def uploadFirmware(*args)
17
- parametters = HardsploitAPI.checkParametters(["pathFirmware","checkFirmware"],args)
18
- pathFirmware = parametters[:pathFirmware]
19
- checkFirmware = parametters[:checkFirmware]
20
-
21
- stopFPGA
22
- eraseFirmware
23
- firmwarewrite = self.writeFirmware(pathFirmware)#return array of bytes write
24
- if checkFirmware == true then
25
- firmwareRead = self.readFirmware(firmwarewrite.length) #return array of bytes read
26
- startFPGA
27
- return (firmwarewrite == firmwareRead)
28
- else
29
- startFPGA
30
- return true
31
- end
32
- end
33
-
34
- def startFPGA
35
- packet = Array.new
36
- packet.push HardsploitAPI.lowByte(4)
37
- packet.push HardsploitAPI.highByte(4)
38
- packet.push HardsploitAPI.lowByte(USB_COMMAND::START_FPGA)
39
- packet.push HardsploitAPI.highByte(USB_COMMAND::START_FPGA)
40
- self.sendPacket(packet)
41
- end
42
- def stopFPGA
43
- packet = Array.new
44
- packet.push HardsploitAPI.lowByte(4)
45
- packet.push HardsploitAPI.highByte(4)
46
- packet.push HardsploitAPI.lowByte(USB_COMMAND::STOP_FPGA)
47
- packet.push HardsploitAPI.highByte(USB_COMMAND::STOP_FPGA)
48
- self.sendPacket(packet)
49
- end
50
-
51
-
52
- protected
53
- def eraseFirmware
54
- usbPacket = Array.new
55
- usbPacket.push HardsploitAPI.lowByte(4) #length of trame
56
- usbPacket.push HardsploitAPI.highByte(4)
57
- usbPacket.push HardsploitAPI.lowByte(USB_COMMAND::ERASE_FIRMWARE)
58
- usbPacket.push HardsploitAPI.highByte(USB_COMMAND::ERASE_FIRMWARE)
59
-
60
- consoleInfo "Start to erase Firmware\n"
61
- t1 = Time.now
62
- received_data = sendAndReceiveDATA(usbPacket,15000)
63
-
64
- case received_data
65
- when HardsploitAPI::USB_STATE::PACKET_IS_TOO_LARGE
66
- return HardsploitAPI::USB_STATE::ERROR_SEND
67
- when HardsploitAPI::USB_STATE::ERROR_SEND
68
- return HardsploitAPI::USB_STATE::ERROR_SEND
69
- when HardsploitAPI::USB_STATE::BUSY
70
- return HardsploitAPI::USB_STATE::ERROR_SEND
71
- when HardsploitAPI::USB_STATE::TIMEOUT_RECEIVE
72
- p "TIMEOUT_RECEIVE"
73
- return HardsploitAPI::USB_STATE::TIMEOUT_RECEIVE
74
- else
75
- t2 = Time.now
76
- delta = t2 - t1
77
- consoleSpeed "Firmware erased in #{delta.round(4)} sec\n\n"
78
- end
79
- end
80
-
81
- #Just path of file and wait. is a blocking function until firmware has been uploaded
82
- def writeFirmware (file_path)
83
- t1 = Time.now
84
- consoleInfo "Upload firmware in progress\n"
85
-
86
- usbPacket= Array.new
87
- file = File.read(file_path,:encoding => 'iso-8859-1').unpack('C*') #string to array byte
88
- #file = file.drop(168) #remove header of pof file
89
- #file.pop(52+355000) #remove footer of pof file + about 355k of unused memory
90
-
91
- consoleInfo "FIRMARE Write #{file.size} bytes\n"
92
-
93
- #firmwareFile = file.clone #copy the file in other variable to return it not just egal because copy pointer and after is the same array we want a copy -> clone
94
-
95
- nbFullPage = file.size/256
96
- nbLastByte = file.size%256
97
-
98
- nbFullPacket = nbFullPage/31
99
- nbLastPagePacket = nbFullPage%31
100
-
101
- #complete last page with the last alone byte ( without full page)
102
- if nbLastByte > 0 then
103
- for i in 0.. (256-nbLastByte)
104
- file.push 0xFF
105
- end
106
- nbFullPage = nbFullPage+1
107
- nbLastByte = 0
108
-
109
- #recalculating packet after complete half page to a full page
110
- nbFullPacket = nbFullPage/31
111
- nbLastPagePacket = nbFullPage%31
112
- end
113
-
114
- consoleInfo "REAL Write #{file.size} bytes\n"
115
-
116
- #Now only full page but maybe a half packet
117
- #Prepare the full packet (31 pages of 256 byte each)
118
- for ipacket in 0..nbFullPacket-1
119
- usbPacket= Array.new
120
- usbPacket.push 0 #lenght of trame modify by sendUSBPacket
121
- usbPacket.push 0
122
- usbPacket.push HardsploitAPI.lowByte(USB_COMMAND::WRITE_PAGE_FIRMWARE)
123
- usbPacket.push HardsploitAPI.highByte(USB_COMMAND::WRITE_PAGE_FIRMWARE)
124
- usbPacket.push HardsploitAPI.lowByte((ipacket)*31) # low byte Nb of the first page
125
- usbPacket.push HardsploitAPI.highByte((ipacket)*31) # high byte Nb of the first page
126
- usbPacket.push 31 #Nb of pages sent
127
-
128
- start = (ipacket)*31*256
129
- stop = (ipacket+1)*31*256 -1 #array start at index = 0
130
-
131
- for iFile in start..stop
132
- usbPacket.push HardsploitAPI.reverseBit(file[iFile])
133
- #usbPacket.push file[iFile]
134
- end
135
-
136
- percent = ipacket *100 / (nbFullPacket-1)
137
-
138
- case self.sendPacket(usbPacket)
139
- when USB_STATE::SUCCESSFUL_SEND
140
- consoleSpeed "UPLOAD AT : #{ipacket} / #{(nbFullPacket-1)} (#{percent}) %\n"
141
- when USB_STATE::PACKET_IS_TOO_LARGE
142
- return USB_STATE::PACKET_IS_TOO_LARGE
143
- when USB_STATE::ERROR_SEND
144
- return USB_STATE::ERROR_SEND
145
- else
146
- return USB_STATE::ERROR_SEND
147
- end
148
- end
149
-
150
- #Prepare the last packet with the rest of data
151
- if nbLastPagePacket >0 then
152
- usbPacket= Array.new
153
- usbPacket.push 0 #lenght of trame modify by sendUSBPacket
154
- usbPacket.push 0
155
- usbPacket.push HardsploitAPI.lowByte(USB_COMMAND::WRITE_PAGE_FIRMWARE)
156
- usbPacket.push HardsploitAPI.highByte(USB_COMMAND::WRITE_PAGE_FIRMWARE)
157
-
158
- if nbFullPacket == 0 then
159
- usbPacket.push HardsploitAPI.lowByte((nbFullPacket)*31) # low byte Nb of the first page
160
- usbPacket.push HardsploitAPI.highByte((nbFullPacket)*31) # high byte Nb of the first page
161
- else
162
- usbPacket.push HardsploitAPI.lowByte((nbFullPacket)*31 + 1 ) # low byte Nb of the first page
163
- usbPacket.push HardsploitAPI.highByte((nbFullPacket)*31+ 1 ) # high byte Nb of the first page
164
- end
165
-
166
- usbPacket.push nbLastPagePacket # nb of page < 31
167
-
168
- start = (nbFullPacket)*31*256
169
- stop = (nbFullPacket)*31*256 + nbLastPagePacket*256 -1
170
-
171
- for iFile in start..stop
172
- #inverted LSB MSB
173
- usbPacket.push HardsploitAPI.reverseBit(file[iFile])
174
- end
175
-
176
- case self.sendPacket(usbPacket)
177
- when USB_STATE::SUCCESSFUL_SEND
178
- consoleSpeed "UPLOAD AT : 100 %\n"
179
- when USB_STATE::PACKET_IS_TOO_LARGE
180
- return USB_STATE::PACKET_IS_TOO_LARGE
181
- when USB_STATE::ERROR_SEND
182
- return USB_STATE::ERROR_SEND
183
- else
184
- return USB_STATE::ERROR_SEND
185
- end
186
- end
187
-
188
- t2 = Time.now
189
- delta = t2 - t1
190
- consoleSpeed "FIRMWARE WAS WRITTEN in #{delta.round(4)} sec\n"
191
- return file
192
- end
193
-
194
-
195
- #Read firmware
196
- def readFirmware(size)
197
- consoleSpeed "START READ FIRMWARE \n"
198
- readFirmware = Array.new
199
- t1 = Time.now
200
-
201
- nbFullPage = size/256
202
- nbLastByte = size%256
203
-
204
-
205
- nbFullPacket = nbFullPage/31
206
- nbLastPagePacket = nbFullPage%31
207
-
208
- if nbLastByte > 0 then
209
- nbSuppressBytesAtLast = 256-nbLastByte
210
-
211
- nbFullPage = nbFullPage+1
212
- nbLastByte = 0
213
-
214
- nbFullPacket = nbFullPage/31
215
- nbLastPagePacket = nbFullPage%31
216
- else
217
- nbSuppressBytesAtLast = 0
218
-
219
- end
220
-
221
- for ipacket in 0..nbFullPacket-1
222
- usbPacket= Array.new
223
- usbPacket.push 7
224
- usbPacket.push 0
225
- usbPacket.push HardsploitAPI.lowByte(USB_COMMAND::READ_PAGE_FIRMWARE)
226
- usbPacket.push HardsploitAPI.highByte(USB_COMMAND::READ_PAGE_FIRMWARE)
227
- usbPacket.push HardsploitAPI.lowByte((ipacket)*31) # low byte Nb of the first page
228
- usbPacket.push HardsploitAPI.highByte((ipacket)*31) # high byte Nb of the first page
229
- usbPacket.push 31 # nb of page max 31 per packet
230
-
231
- received_data = sendAndReceiveDATA(usbPacket,3000)
232
- #p received_data
233
- case received_data
234
- when HardsploitAPI::USB_STATE::PACKET_IS_TOO_LARGE
235
- return HardsploitAPI::USB_STATE::ERROR_SEND
236
- when HardsploitAPI::USB_STATE::ERROR_SEND
237
- return HardsploitAPI::USB_STATE::ERROR_SEND
238
- when HardsploitAPI::USB_STATE::BUSY
239
- return HardsploitAPI::USB_STATE::ERROR_SEND
240
- when HardsploitAPI::USB_STATE::TIMEOUT_RECEIVE
241
- return HardsploitAPI::USB_STATE::TIMEOUT_RECEIVE
242
- else
243
- #remove header
244
- received_data = received_data.drop(7)
245
-
246
- #reverse byte
247
- received_data = received_data.collect {|x| HardsploitAPI.reverseBit(x) }
248
-
249
- readFirmware.push *received_data
250
-
251
- if nbFullPacket == 1 then
252
- consoleSpeed "READ AT : 1 / 2 50 %\n"
253
- else
254
- percent = ipacket *100 / (nbFullPacket-1)
255
- consoleSpeed "READ AT : #{ipacket} / #{(nbFullPacket-1)} (#{percent} %) \n"
256
- end
257
-
258
- end
259
- end
260
-
261
-
262
-
263
- #Prepare the last packet with the rest of data
264
- if nbLastPagePacket >0 then
265
- usbPacket= Array.new
266
- usbPacket.push 7
267
- usbPacket.push 0
268
- usbPacket.push HardsploitAPI.lowByte(USB_COMMAND::READ_PAGE_FIRMWARE)
269
- usbPacket.push HardsploitAPI.highByte(USB_COMMAND::READ_PAGE_FIRMWARE)
270
-
271
- #Increase nb of page to add the last byte
272
- if nbFullPacket == 0 then
273
- usbPacket.push HardsploitAPI.lowByte((nbFullPacket)*31) # low byte Nb of the first page
274
- usbPacket.push HardsploitAPI.highByte((nbFullPacket)*31) # high byte Nb of the first page
275
- else
276
- usbPacket.push HardsploitAPI.lowByte((nbFullPacket)*31 + 1 ) # low byte Nb of the first page
277
- usbPacket.push HardsploitAPI.highByte((nbFullPacket)*31+ 1 ) # high byte Nb of the first page
278
- end
279
-
280
- usbPacket.push nbLastPagePacket
281
- received_data = sendAndReceiveDATA(usbPacket,15000)
282
- case received_data
283
- when HardsploitAPI::USB_STATE::PACKET_IS_TOO_LARGE
284
- return HardsploitAPI::USB_STATE::ERROR_SEND
285
- when HardsploitAPI::USB_STATE::ERROR_SEND
286
- return HardsploitAPI::USB_STATE::ERROR_SEND
287
- when HardsploitAPI::USB_STATE::BUSY
288
- return HardsploitAPI::USB_STATE::ERROR_SEND
289
- when HardsploitAPI::USB_STATE::TIMEOUT_RECEIVE
290
- return HardsploitAPI::USB_STATE::TIMEOUT_RECEIVE
291
- else
292
- #remove header
293
- received_data = received_data.drop(7)
294
-
295
- #reverse byte
296
- received_data = received_data.collect {|x| HardsploitAPI.reverseBit(x) }
297
- readFirmware.push *received_data
298
-
299
- consoleSpeed "READ AT 100%\n"
300
- end
301
- end
302
-
303
- #remove a fake byte at last of reading just for transmiting
304
- readFirmware.pop(nbSuppressBytesAtLast)
305
-
306
- t2 = Time.now
307
- delta = t2 - t1
308
- consoleSpeed "READ FIRMWARE FINISH in #{delta.round(4)} sec\n"
309
- return readFirmware
310
- end
311
- end