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.
- checksums.yaml +4 -4
- data/bin/hardsploit_gui +2 -2
- data/lib/{Firmware → Firmwares}/FPGA/I2C/I2C_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_I2C_INTERACT.rpd +0 -0
- 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
- data/lib/Firmwares/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd +0 -0
- 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
- data/lib/Firmwares/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd +0 -0
- data/lib/{Firmware → Firmwares}/FPGA/TEST/TEST_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_TEST_INTERACT.rpd +0 -0
- data/lib/Firmwares/FPGA/UART/UART_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_UART_INTERACT.rpd +0 -0
- data/lib/{Firmware → Firmwares}/FPGA/VersionFPGA.rb +1 -1
- data/lib/{Firmware → Firmwares}/UC/HARDSPLOIT_FIRMWARE_UC.bin +0 -0
- data/lib/{Firmware → Firmwares}/UC/VersionUC.rb +1 -1
- data/lib/HardsploitAPI/Core/HardsploitAPI.rb +210 -0
- data/lib/HardsploitAPI/Core/HardsploitAPI_CONSTANT.rb +150 -0
- data/lib/HardsploitAPI/Core/HardsploitAPI_ERROR.rb +109 -0
- data/lib/HardsploitAPI/Core/HardsploitAPI_FIRMWARE.rb +305 -0
- data/lib/HardsploitAPI/{HardsploitAPI_PROGRESS.rb → Core/HardsploitAPI_PROGRESS.rb} +0 -0
- data/lib/HardsploitAPI/Core/HardsploitAPI_USB_COMMUNICATION.rb +166 -0
- data/lib/HardsploitAPI/Modules/I2C/HardsploitAPI_I2C.rb +356 -0
- data/lib/HardsploitAPI/{HardsploitAPI_NO_MUX_PARALLELE_MEMORY.rb → Modules/NO_MUX_PARALLEL_MEMORY/HardsploitAPI_NO_MUX_PARALLEL_MEMORY.rb} +26 -49
- data/lib/HardsploitAPI/Modules/NRF24L01/HardsploitAPI_NRF24L01.rb +306 -0
- data/lib/HardsploitAPI/Modules/SPI/HardsploitAPI_SPI.rb +340 -0
- data/lib/HardsploitAPI/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER.rb +83 -0
- data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD.rb +367 -0
- data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_DEBUG.rb +89 -0
- data/lib/HardsploitAPI/Modules/SWD/HardsploitAPI_SWD_MEM_AP.rb +61 -0
- data/lib/HardsploitAPI/{SWD → Modules/SWD}/HardsploitAPI_SWD_STM32.rb +32 -15
- data/lib/HardsploitAPI/{HardsploitAPI_TEST_INTERACT.rb → Modules/TEST/HardsploitAPI_TEST_INTERACT.rb} +1 -1
- data/lib/HardsploitAPI/Modules/UART/HardsploitAPI_UART.rb +196 -0
- data/lib/Hardsploit_gui.rb +96 -0
- data/lib/class/Chip_editor.rb +186 -330
- data/lib/class/Chip_management.rb +496 -0
- data/lib/class/Command_editor.rb +130 -182
- data/lib/class/Command_table.rb +16 -22
- data/lib/class/Console.rb +0 -2
- data/lib/class/ErrorMsg.rb +312 -0
- data/lib/class/Export.rb +140 -0
- data/lib/class/Export_manager.rb +43 -43
- data/lib/class/Firmware.rb +52 -11
- data/lib/class/Generic_commands.rb +180 -190
- data/lib/class/Import.rb +193 -0
- data/lib/class/Progress_bar.rb +1 -0
- data/lib/class/Signal_mapper.rb +120 -0
- data/lib/class/Wire_helper.rb +132 -148
- data/lib/class/{I2C → i2c}/I2c_command.rb +16 -13
- data/lib/class/i2c/I2c_export.rb +95 -0
- data/lib/class/i2c/I2c_import.rb +117 -0
- data/lib/class/i2c/I2c_scanner.rb +114 -0
- data/lib/class/i2c/I2c_settings.rb +148 -0
- data/lib/class/parallel/Parallel_export.rb +118 -0
- data/lib/class/parallel/Parallel_import.rb +113 -0
- data/lib/class/parallel/Parallel_settings.rb +81 -0
- data/lib/class/spi/Spi_export.rb +108 -0
- data/lib/class/spi/Spi_import.rb +159 -0
- data/lib/class/spi/Spi_settings.rb +108 -0
- data/lib/class/spi/Spi_sniffer.rb +101 -0
- data/lib/class/swd/Swd.rb +125 -0
- data/lib/class/swd/Swd_scanner.rb +121 -0
- data/lib/class/swd/Swd_settings.rb +76 -0
- data/lib/class/uart/Uart_baudrate.rb +62 -0
- data/lib/class/uart/Uart_console.rb +115 -0
- data/lib/class/uart/Uart_settings.rb +102 -0
- data/lib/db/associations.rb +42 -29
- data/lib/db/database.rb +4 -0
- data/lib/db/development.sqlite3 +0 -0
- data/lib/db/migrate/004_create_manufacturers.rb +13 -0
- data/lib/db/migrate/005_create_packages.rb +13 -0
- data/lib/db/migrate/006_create_chip_types.rb +11 -0
- data/lib/db/migrate/007_create_buses.rb +11 -0
- data/lib/db/migrate/008_create_signals.rb +14 -0
- data/lib/db/migrate/009_create_chips.rb +25 -0
- data/lib/db/migrate/010_create_commands.rb +21 -0
- data/lib/db/migrate/011_create_bytes.rb +19 -0
- data/lib/db/migrate/012_create_i2c_settings.rb +21 -0
- data/lib/db/migrate/013_create_spi_settings.rb +26 -0
- data/lib/db/migrate/014_create_parallel_settings.rb +21 -0
- data/lib/db/migrate/015_create_pins.rb +19 -0
- data/lib/db/migrate/016_create_uses.rb +17 -0
- data/lib/db/migrate/017_create_swd_settings.rb +19 -0
- data/lib/db/migrate/018_create_uart_settings.rb +22 -0
- data/lib/db/schema.rb +157 -0
- data/lib/db/seeds.rb +161 -0
- data/lib/gui/gui_chip_editor.rb +23 -22
- data/lib/gui/gui_chip_management.rb +43 -38
- data/lib/gui/gui_command_editor.rb +2 -1
- data/lib/gui/gui_export.rb +132 -0
- data/lib/gui/gui_generic_commands.rb +69 -31
- data/lib/gui/gui_generic_export.rb +18 -2
- data/lib/gui/gui_generic_import.rb +18 -2
- data/lib/gui/gui_i2c_command.rb +2 -1
- data/lib/gui/gui_i2c_settings.rb +2 -2
- data/lib/gui/gui_import.rb +131 -0
- data/lib/gui/gui_parallel_settings.rb +2 -1
- data/lib/gui/gui_progress_bar.rb +2 -1
- data/lib/gui/gui_signal_mapper.rb +121 -0
- data/lib/gui/gui_signal_scanner.rb +146 -0
- data/lib/gui/gui_spi_settings.rb +6 -2
- data/lib/gui/gui_spi_sniffer.rb +112 -0
- data/lib/gui/gui_swd_settings.rb +166 -0
- data/lib/gui/gui_uart_baudrate.rb +114 -0
- data/lib/gui/gui_uart_console.rb +164 -0
- data/lib/gui/gui_uart_settings.rb +243 -0
- data/lib/gui_designer/gui_chip_editor.ui +9 -6
- data/lib/gui_designer/gui_chip_management.ui +79 -35
- data/lib/gui_designer/gui_command_editor.ui +3 -0
- data/lib/gui_designer/gui_export.ui +171 -0
- data/lib/gui_designer/gui_generic_commands.ui +274 -190
- data/lib/gui_designer/gui_generic_export.ui +24 -1
- data/lib/gui_designer/gui_generic_import.ui +25 -2
- data/lib/gui_designer/gui_i2c_command.ui +3 -0
- data/lib/gui_designer/gui_i2c_settings.ui +2 -2
- data/lib/gui_designer/gui_import.ui +168 -0
- data/lib/gui_designer/gui_parallel_settings.ui +4 -1
- data/lib/gui_designer/gui_progress_bar.ui +3 -0
- data/lib/gui_designer/gui_signal_mapper.ui +179 -0
- data/lib/gui_designer/gui_signal_scanner.ui +261 -0
- data/lib/gui_designer/gui_spi_settings.ui +15 -2
- data/lib/gui_designer/gui_spi_sniffer.ui +156 -0
- data/lib/gui_designer/gui_swd_settings.ui +189 -0
- data/lib/gui_designer/gui_uart_baudrate.ui +161 -0
- data/lib/gui_designer/gui_uart_console.ui +284 -0
- data/lib/gui_designer/gui_uart_settings.ui +280 -0
- data/lib/logs/error.log +63 -0
- data/lib/models/bus.rb +19 -0
- data/lib/models/byte.rb +29 -0
- data/lib/models/chip.rb +41 -0
- data/lib/models/chip_type.rb +14 -0
- data/lib/models/command.rb +20 -0
- data/lib/models/i2c_setting.rb +41 -0
- data/lib/models/manufacturer.rb +14 -0
- data/lib/models/package.rb +26 -0
- data/lib/models/parallel_setting.rb +37 -0
- data/lib/models/pin.rb +14 -0
- data/lib/models/signall.rb +20 -0
- data/lib/models/spi_setting.rb +67 -0
- data/lib/models/swd_setting.rb +25 -0
- data/lib/models/uart_setting.rb +52 -0
- data/lib/models/use.rb +6 -0
- data/lib/startHardsploit.rb +2 -2
- metadata +106 -41
- data/lib/Firmware/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd +0 -0
- data/lib/HardsploitAPI/HardsploitAPI.rb +0 -133
- data/lib/HardsploitAPI/HardsploitAPI_CONSTANT.rb +0 -145
- data/lib/HardsploitAPI/HardsploitAPI_ERROR.rb +0 -38
- data/lib/HardsploitAPI/HardsploitAPI_FIRMWARE.rb +0 -311
- data/lib/HardsploitAPI/HardsploitAPI_I2C.rb +0 -360
- data/lib/HardsploitAPI/HardsploitAPI_SPI.rb +0 -369
- data/lib/HardsploitAPI/HardsploitAPI_USB_COMMUNICATION.rb +0 -148
- data/lib/HardsploitAPI/LICENSE.txt +0 -674
- data/lib/HardsploitAPI/README.md +0 -22
- data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD.rb +0 -249
- data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_DEBUG.rb +0 -102
- data/lib/HardsploitAPI/SWD/HardsploitAPI_SWD_MEM_AP.rb +0 -78
- data/lib/HardsploitAPI/TRADEMARK +0 -3
- data/lib/class/HardsploitGUI.rb +0 -463
- data/lib/class/I2C/I2c_export.rb +0 -118
- data/lib/class/I2C/I2c_import.rb +0 -79
- data/lib/class/I2C/I2c_settings.rb +0 -129
- data/lib/class/PARALLEL/Parallel_export.rb +0 -146
- data/lib/class/PARALLEL/Parallel_import.rb +0 -88
- data/lib/class/PARALLEL/Parallel_settings.rb +0 -102
- data/lib/class/SPI/Spi_export.rb +0 -138
- data/lib/class/SPI/Spi_import.rb +0 -113
- data/lib/class/SPI/Spi_settings.rb +0 -134
- data/lib/db/hs.db +0 -0
- data/lib/hardsploit.rb +0 -131
Binary file
|
@@ -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
|