hardsploit_gui 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/lib/Hardsploit_gui.rb +4 -5
  3. data/lib/class/Chip_clone.rb +70 -0
  4. data/lib/class/Chip_editor.rb +1 -0
  5. data/lib/class/Chip_management.rb +73 -52
  6. data/lib/class/ErrorMsg.rb +1 -0
  7. data/lib/class/Firmware.rb +1 -1
  8. data/lib/class/Progress_bar.rb +1 -1
  9. data/lib/class/Wire_helper.rb +6 -3
  10. data/lib/class/{I2C → i2c}/I2c_command.rb +0 -0
  11. data/lib/class/{I2C/I2c_export.rb → i2c/I2c_read.rb} +15 -15
  12. data/lib/class/{I2C → i2c}/I2c_scanner.rb +2 -1
  13. data/lib/class/{I2C → i2c}/I2c_settings.rb +1 -0
  14. data/lib/class/{I2C/I2c_import.rb → i2c/I2c_write.rb} +13 -12
  15. data/lib/class/{PARALLEL/Parallel_export.rb → parallel/Parallel_read.rb} +17 -18
  16. data/lib/class/{PARALLEL → parallel}/Parallel_settings.rb +0 -0
  17. data/lib/class/{PARALLEL/Parallel_import.rb → parallel/Parallel_write.rb} +11 -10
  18. data/lib/class/{SPI/Spi_export.rb → spi/Spi_read.rb} +15 -15
  19. data/lib/class/{SPI → spi}/Spi_settings.rb +0 -0
  20. data/lib/class/{SPI → spi}/Spi_sniffer.rb +2 -1
  21. data/lib/class/{SPI/Spi_import.rb → spi/Spi_write.rb} +13 -12
  22. data/lib/class/swd/Swd.rb +10 -10
  23. data/lib/class/swd/Swd_scanner.rb +2 -1
  24. data/lib/class/uart/Uart_baudrate.rb +1 -1
  25. data/lib/class/uart/Uart_console.rb +1 -1
  26. data/lib/class/uart/Uart_settings.rb +1 -0
  27. data/lib/db/development.sqlite3 +0 -0
  28. data/lib/gui/gui_chip_clone.rb +87 -0
  29. data/lib/gui/gui_chip_editor.rb +349 -349
  30. data/lib/gui/gui_chip_management.rb +378 -377
  31. data/lib/gui/gui_command_editor.rb +219 -219
  32. data/lib/gui/gui_export.rb +132 -132
  33. data/lib/gui/gui_export_manager.rb +93 -93
  34. data/lib/gui/gui_generic_commands.rb +202 -202
  35. data/lib/gui/gui_generic_read.rb +185 -0
  36. data/lib/gui/gui_generic_write.rb +142 -0
  37. data/lib/gui/gui_i2c_command.rb +116 -116
  38. data/lib/gui/gui_i2c_settings.rb +242 -230
  39. data/lib/gui/gui_import.rb +131 -131
  40. data/lib/gui/gui_parallel_settings.rb +195 -195
  41. data/lib/gui/gui_progress_bar.rb +85 -85
  42. data/lib/gui/gui_signal_mapper.rb +121 -121
  43. data/lib/gui/gui_signal_scanner.rb +146 -146
  44. data/lib/gui/gui_spi_settings.rb +313 -313
  45. data/lib/gui/gui_spi_sniffer.rb +112 -112
  46. data/lib/gui/gui_swd_settings.rb +166 -166
  47. data/lib/gui/gui_uart_baudrate.rb +114 -114
  48. data/lib/gui/gui_uart_console.rb +164 -164
  49. data/lib/gui/gui_uart_settings.rb +243 -243
  50. data/lib/gui/gui_wire_helper.rb +99 -99
  51. data/lib/gui_designer/compile_to_ruby.sh +14 -0
  52. data/lib/gui_designer/gui_chip_clone.ui +96 -0
  53. data/lib/gui_designer/gui_chip_management.ui +25 -22
  54. data/lib/gui_designer/{gui_generic_export.ui → gui_generic_read.ui} +152 -72
  55. data/lib/gui_designer/{gui_generic_import.ui → gui_generic_write.ui} +47 -47
  56. data/lib/gui_designer/gui_i2c_settings.ui +68 -60
  57. data/lib/hardsploit-api/Examples/swdProgrammer.rb +76 -0
  58. data/lib/hardsploit-api/Examples/testI2C.rb +183 -0
  59. data/lib/hardsploit-api/Examples/testNRF24L01.rb +122 -0
  60. data/lib/hardsploit-api/Examples/testParralel.rb +84 -0
  61. data/lib/hardsploit-api/Examples/testSPI.rb +113 -0
  62. data/lib/hardsploit-api/Examples/testSPISniffer.rb +91 -0
  63. data/lib/hardsploit-api/Examples/testSWD.rb +224 -0
  64. data/lib/hardsploit-api/Examples/testUARTBufferOverflow.rb +113 -0
  65. data/lib/hardsploit-api/Examples/testUARTConsole.rb +74 -0
  66. data/lib/hardsploit-api/Examples/testUARTFuzzer.rb +109 -0
  67. data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/I2C/I2C_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_I2C_INTERACT.rpd +0 -0
  68. data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/PARALLEL/NO_MUX_PARALLEL_MEMORY/HARDSPLOIT_FIRMWARE_FPGA_NO_MUX_PARALLEL_MEMORY.rpd +0 -0
  69. data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/SPI/SPI_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SPI_INTERACT.rpd +0 -0
  70. data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/SPI/SPI_SNIFFER/HARDSPLOIT_FIRMWARE_FPGA_SPI_SNIFFER.rpd +0 -0
  71. data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/SWD/SWD_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_SWD_INTERACT.rpd +0 -0
  72. data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/TEST/TEST_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_TEST_INTERACT.rpd +0 -0
  73. data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/UART/UART_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_UART_INTERACT.rpd +0 -0
  74. data/lib/{Firmwares → hardsploit-api/Firmwares}/FPGA/VersionFPGA.rb +0 -0
  75. data/lib/{Firmwares → hardsploit-api/Firmwares}/UC/HARDSPLOIT_FIRMWARE_UC.bin +0 -0
  76. data/lib/{Firmwares → hardsploit-api/Firmwares}/UC/VersionUC.rb +0 -0
  77. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI.rb +0 -0
  78. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI_CONSTANT.rb +0 -0
  79. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI_ERROR.rb +0 -0
  80. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI_FIRMWARE.rb +0 -0
  81. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI_PROGRESS.rb +0 -0
  82. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Core/HardsploitAPI_USB_COMMUNICATION.rb +0 -0
  83. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/I2C/HardsploitAPI_I2C.rb +0 -0
  84. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/NO_MUX_PARALLEL_MEMORY/HardsploitAPI_NO_MUX_PARALLEL_MEMORY.rb +0 -0
  85. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/NRF24L01/HardsploitAPI_NRF24L01.rb +0 -0
  86. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SPI/HardsploitAPI_SPI.rb +0 -0
  87. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER.rb +0 -0
  88. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SWD/HardsploitAPI_SWD.rb +0 -0
  89. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SWD/HardsploitAPI_SWD_DEBUG.rb +0 -0
  90. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SWD/HardsploitAPI_SWD_MEM_AP.rb +0 -0
  91. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/SWD/HardsploitAPI_SWD_STM32.rb +0 -0
  92. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/TEST/HardsploitAPI_TEST_INTERACT.rb +0 -0
  93. data/lib/{HardsploitAPI → hardsploit-api/HardsploitAPI}/Modules/UART/HardsploitAPI_UART.rb +0 -0
  94. data/lib/hardsploit-api/LICENSE.txt +674 -0
  95. data/lib/hardsploit-api/README.md +22 -0
  96. data/lib/hardsploit-api/TRADEMARK +3 -0
  97. data/lib/logs/error.log +80 -0
  98. metadata +65 -49
  99. data/lib/gui/gui_generic_export.rb +0 -164
  100. data/lib/gui/gui_generic_import.rb +0 -142
  101. data/lib/gui/gui_spi_import.rb +0 -126
@@ -0,0 +1,91 @@
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
+ require 'io/console'
9
+ require_relative '../HardsploitAPI/Core/HardsploitAPI'
10
+ require_relative '../HardsploitAPI/Modules/SPI_SNIFFER/HardsploitAPI_SPI_SNIFFER'
11
+
12
+ def callbackInfo(receiveData)
13
+ #print receiveData + "\n"
14
+ end
15
+
16
+ def callbackData(receiveData)
17
+ if receiveData != nil then
18
+ puts "received #{receiveData.size}"
19
+ p receiveData
20
+ else
21
+ puts "ISSUE BECAUSE DATA IS NIL"
22
+ end
23
+ end
24
+
25
+ def callbackSpeedOfTransfert(receiveData)
26
+ #puts "Speed : #{receiveData}"
27
+ end
28
+
29
+ def callbackProgress(percent:,startTime:,endTime:)
30
+ print "\r\e[#{31}mUpload of FPGA firmware in progress : #{percent}%\e[0m"
31
+ #puts "Progress : #{percent}% Start@ #{startTime} Stop@ #{endTime}"
32
+ #puts "Elasped time #{(endTime-startTime).round(4)} sec"
33
+ end
34
+
35
+ #puts "Number of hardsploit detected :#{HardsploitAPI.getNumberOfBoardAvailable}"
36
+
37
+ HardsploitAPI.callbackInfo = method(:callbackInfo)
38
+ HardsploitAPI.callbackData = method(:callbackData)
39
+ HardsploitAPI.callbackSpeedOfTransfert = method(:callbackSpeedOfTransfert)
40
+ HardsploitAPI.callbackProgress = method(:callbackProgress)
41
+ HardsploitAPI.id = 0 # id of hardsploit 0 for the first one, 1 for the second etc
42
+
43
+ HardsploitAPI.instance.getAllVersions
44
+
45
+ if ARGV[0] != "nofirmware" then
46
+ HardsploitAPI.instance.loadFirmware("SPI_SNIFFER")
47
+ end
48
+
49
+ @spi = HardsploitAPI_SPI_SNIFFER.new(mode:0,sniff:HardsploitAPI::SPISniffer::MOSI) # MISO MOSI MISO_MOSI
50
+
51
+ sleep(0.5)
52
+ def spiCustomCommand
53
+ i = '.'
54
+ while 1
55
+ i == "." ? i = ".." : i = "." #just to have a toggle in console to keep alive the console
56
+ begin
57
+ result = @spi.spi_receive_available_data
58
+
59
+ #if half a simple array, if fullduplex first item -> an array of MISO and second array -> an array of MOSI
60
+ case @spi.sniff
61
+ when HardsploitAPI::SPISniffer::MISO
62
+ puts "MISO : #{result}"
63
+ when HardsploitAPI::SPISniffer::MOSI
64
+ puts "MOSI : #{result}"
65
+ else
66
+ puts "MOSI : #{result[0]}"
67
+ puts "MISO : #{result[1]}"
68
+ end
69
+
70
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
71
+ puts "Hardsploit not found"
72
+ rescue HardsploitAPI::ERROR::USB_ERROR
73
+ puts i
74
+ #Ignore time out because we read in continous
75
+ end
76
+ end
77
+ end
78
+
79
+ while true
80
+ char = STDIN.getch
81
+ puts char
82
+ if char == "\u0003"
83
+ puts "Finished"
84
+ exit
85
+
86
+ elsif char == "i" then
87
+ spiCustomCommand
88
+ elsif char == "p" then
89
+ HardsploitAPI.instance.loadFirmware("SPI")
90
+ end
91
+ end
@@ -0,0 +1,224 @@
1
+ #!/usr/local/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
+ require 'io/console'
9
+ require_relative '../HardsploitAPI/Core/HardsploitAPI'
10
+ require_relative '../HardsploitAPI/Modules/SWD/HardsploitAPI_SWD'
11
+
12
+ def callbackInfo(receiveData)
13
+ #print receiveData + "\n"
14
+ end
15
+
16
+ def callbackData(receiveData)
17
+ if receiveData != nil then
18
+ puts "received #{receiveData.size}"
19
+ p receiveData
20
+ else
21
+ puts "ISSUE BECAUSE DATA IS NIL"
22
+ end
23
+ end
24
+
25
+ def callbackSpeedOfTransfert(receiveData)
26
+ #puts "Speed : #{receiveData}"
27
+ end
28
+ def callbackProgress(percent:,startTime:,endTime:)
29
+ print "\r\e[#{31}mUpload of FPGA firmware in progress : #{percent}%\e[0m"
30
+ #puts "Progress : #{percent}% Start@ #{startTime} Stop@ #{endTime}"
31
+ #puts "Elasped time #{(endTime-startTime).round(4)} sec"
32
+ end
33
+ puts "Number of hardsploit detected :#{HardsploitAPI.getNumberOfBoardAvailable}"
34
+ HardsploitAPI.callbackInfo = method(:callbackInfo)
35
+ HardsploitAPI.callbackData = method(:callbackData)
36
+ HardsploitAPI.callbackSpeedOfTransfert = method(:callbackSpeedOfTransfert)
37
+ HardsploitAPI.callbackProgress = method(:callbackProgress)
38
+ HardsploitAPI.id = 0 # id of hardsploit 0 for the first one, 1 for the second etc
39
+
40
+ HardsploitAPI.instance.getAllVersions
41
+
42
+ if ARGV[0] != "nofirmware" then
43
+ HardsploitAPI.instance.loadFirmware("SWD")
44
+ end
45
+
46
+ #The current API version
47
+ #p HardsploitAPI::VERSION::API
48
+ def swdCustomRead
49
+ begin
50
+ swd = HardsploitAPI_SWD.new(
51
+ memory_start_address: "0x08000000",
52
+ memory_size_address: "0x1FFFF7E0",
53
+ cpu_id_address: "0xE000ED00",
54
+ device_id_address: "0x1FFFF7E8"
55
+ )
56
+ #TO OBTAIN ID CODE
57
+ code = swd.obtainCodes
58
+ puts "DP.IDCODE: #{code[:DebugPortId].to_s(16)} "
59
+ #puts "AP.IDCODE: #{code[:AccessPortId].to_s(16)} "
60
+ #puts "CPU ID : #{code[:CpuId].to_s(16)} "
61
+ # puts "DEVICE ID : #{code[:DeviceId].to_s(16)}"
62
+ rescue
63
+ puts "MCU NOT FOUND"
64
+ #puts "Read ARM Register"
65
+ #swd.readRegs
66
+
67
+ #puts "stop"
68
+ #swd.stop
69
+
70
+ #TO DUMP FLASH
71
+ #swd.dumpFlash('dumdp.bin')
72
+ #swd.erase
73
+ # ERASE FLASH !!!!!!!!!! AND WRITE THE CONTENT OF THE FILE ON THE FLASH
74
+ #swd.writeFlash('dumdp2.bin')
75
+
76
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
77
+ puts "Hardsploit not found"
78
+ rescue HardsploitAPI::ERROR::USB_ERROR
79
+ puts "USB ERRROR"
80
+ end
81
+ end
82
+ def swdCustomWrite
83
+ begin
84
+
85
+ swd = HardsploitAPI_SWD.new(
86
+ memory_start_address: "0x08000000",
87
+ memory_size_address: "0x1FFFF7E0",
88
+ cpu_id_address: "0xE000ED00",
89
+ device_id_address: "0x1FFFF7E8"
90
+ )
91
+ #TO OBTAIN ID CODE
92
+ code = swd.obtainCodes
93
+ puts "DP.IDCODE: #{code[:DebugPortId].to_s(16)} "
94
+ puts "AP.IDCODE: #{code[:AccessPortId].to_s(16)} "
95
+ puts "CPU ID : #{code[:CpuId].to_s(16)} "
96
+
97
+ #TO DUMP FLASH
98
+ #swd.dumpFlash('dumdp.bin')
99
+ #swd.erase
100
+ # ERASE FLASH !!!!!!!!!! AND WRITE THE CONTENT OF THE FILE ON THE FLASH
101
+ swd.writeFlash('dumdp2.bin')
102
+ #unhalt
103
+ #swd.stop
104
+
105
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
106
+ puts "Hardsploit not found"
107
+ rescue HardsploitAPI::ERROR::USB_ERROR
108
+ puts "USB ERRROR"
109
+ end
110
+ end
111
+
112
+ while true
113
+ char = STDIN.getch
114
+ puts char
115
+ if char == "\u0003"
116
+ puts "Finished"
117
+ exit
118
+
119
+ elsif char == "z" then
120
+ crossvalue = Array.new
121
+ #Default wiring
122
+ for i in 0..63
123
+ crossvalue.push i
124
+ end
125
+ crossvalue[1] = HardsploitAPI.getSignalId(signal:"SWD_CLK")
126
+ crossvalue[2] = HardsploitAPI.getSignalId(signal:"SWD_IO")
127
+
128
+ crossvalue[0] = 2
129
+
130
+ p crossvalue
131
+ HardsploitAPI.instance.setCrossWiring(value:crossvalue)
132
+
133
+ puts "cross SWAP"
134
+ HardsploitAPI.instance.signalHelpingWiring(signal:"SWD_CLK")
135
+ elsif char == "e" then
136
+ crossvalue = Array.new
137
+ #Default wiring
138
+ for i in 0..63
139
+ crossvalue.push i
140
+ end
141
+
142
+ crossvalue[0] = 2
143
+ crossvalue[1] = HardsploitAPI.getSignalId(signal:"SWD_IO")
144
+ crossvalue[2] = HardsploitAPI.getSignalId(signal:"SWD_CLK")
145
+
146
+ p crossvalue
147
+ HardsploitAPI.instance.setCrossWiring(value:crossvalue)
148
+ puts "cross Normal"
149
+
150
+ HardsploitAPI.instance.signalHelpingWiring(signal:"SWD_CLK")
151
+ # TEST POUR LE BUG DE CROSS WIRING PRESS M
152
+ elsif char == 'm'
153
+ # 0 = CLK
154
+ # 1 = IO
155
+ swd = HardsploitAPI_SWD.new(
156
+ memory_start_address: "0x08000000",
157
+ memory_size_address: "0x1FFFF7E0",
158
+ cpu_id_address: "0xE000ED00",
159
+ device_id_address: "0x1FFFF7E8"
160
+ )
161
+ base_crossvalue = Array.new
162
+ for i in 0..63
163
+ base_crossvalue.push i
164
+ end
165
+ crossvalue = Array.new(base_crossvalue)
166
+ crossvalue[0] = 2
167
+ crossvalue[1] = 3
168
+ crossvalue[2] = 1
169
+ crossvalue[3] = 0
170
+ HardsploitAPI.instance.setCrossWiring(value:crossvalue)
171
+ result = swd.obtainCodes
172
+ #for i in 0..63
173
+ # crossvalue = Array.new(base_crossvalue)
174
+ # crossvalue[i] = 0
175
+ # crossvalue[0] = i
176
+ # crossvalue[i.next] = 1
177
+ # crossvalue[1] = i.next
178
+ # p crossvalue
179
+ # HardsploitAPI.instance.setCrossWiring(value:crossvalue)
180
+ # result = swd.obtainCodes
181
+ # p result unless result.nil?
182
+ # char = 'r'
183
+ # p "Branchement suivant"
184
+ # while char != 'n'
185
+ # char = STDIN.getch
186
+ # p "Next"
187
+ # end
188
+ #end
189
+ elsif char == "i" then
190
+ crossvalue = Array.new
191
+ #Default wiring
192
+ for i in 0..63
193
+ crossvalue.push i
194
+ end
195
+ #HardsploitAPI.instance.stopFPGA
196
+ #sleep(1)
197
+ #HardsploitAPI.instance.startFPGA
198
+ #sleep(1)
199
+ HardsploitAPI.instance.setCrossWiring(value:crossvalue)
200
+
201
+ swd.find(numberOfConnectedPinFromA0:2)
202
+ elsif char == "w" then
203
+ HardsploitAPI.instance.setStatutLed(led:HardsploitAPI::USB_COMMAND::GREEN_LED,state:true);
204
+ elsif char == "x" then
205
+ HardsploitAPI.instance.setStatutLed(led:HardsploitAPI::USB_COMMAND::GREEN_LED,state:false);
206
+ elsif char == "f" then
207
+ swdCustomRead
208
+ elsif char == "g" then
209
+ swdCustomWrite
210
+
211
+ elsif char == "1" then
212
+ puts "Read @ 0x20000000 "
213
+ p swd.read_mem32(0x20000000,3)
214
+ #p swd.read_mem8(0x20000000,4)
215
+
216
+ elsif char == "2" then
217
+ puts "Write @ 0x20000000 "
218
+ swd.write_mem32(0x20000000,[11,11,11,11,11,11,11,11,11,11,11,11])
219
+ swd.write_mem8(0x20000000,[1,2,3,4,5,6,7,8,9,10,14,12])
220
+
221
+ elsif char == "p" then
222
+ HardsploitAPI.instance.loadFirmware("SWD")
223
+ end
224
+ end
@@ -0,0 +1,113 @@
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
+ require 'io/console'
9
+ require_relative '../HardsploitAPI/Core/HardsploitAPI'
10
+ require_relative '../HardsploitAPI/Modules/UART/HardsploitAPI_UART'
11
+
12
+ def callbackInfo(receiveData)
13
+ #print receiveData + "\n"
14
+ end
15
+
16
+ def callbackData(receiveData)
17
+ if receiveData != nil then
18
+ puts "received #{receiveData.size}"
19
+ p receiveData
20
+ end
21
+ end
22
+
23
+ def callbackSpeedOfTransfert(receiveData)
24
+ #puts "Speed : #{receiveData}"
25
+ end
26
+ def callbackProgress(percent:,startTime:,endTime:)
27
+ print "\r\e[#{31}mUpload of FPGA firmware in progress : #{percent}%\e[0m"
28
+ #puts "Progress : #{percent}% Start@ #{startTime} Stop@ #{endTime}"
29
+ #puts "Elasped time #{(endTime-startTime).round(4)} sec"
30
+ end
31
+
32
+ #puts "Number of hardsploit detected :#{HardsploitAPI.getNumberOfBoardAvailable}"
33
+
34
+ HardsploitAPI.callbackInfo = method(:callbackInfo)
35
+ HardsploitAPI.callbackData = method(:callbackData)
36
+ HardsploitAPI.callbackSpeedOfTransfert = method(:callbackSpeedOfTransfert)
37
+ HardsploitAPI.callbackProgress = method(:callbackProgress)
38
+ HardsploitAPI.id = 0 # id of hardsploit 0 for the first one, 1 for the second etc
39
+
40
+ HardsploitAPI.instance.getAllVersions
41
+
42
+ if ARGV[0] != "nofirmware" then
43
+ HardsploitAPI.instance.loadFirmware("UART")
44
+ end
45
+ @uart = HardsploitAPI_UART.new(baud_rate:57600, word_width:8,use_parity_bit:0,parity_type:0,nb_stop_bits:1,idle_line_level:1)
46
+ puts "Effective baudrate #{@uart.baud_rate}"
47
+
48
+ Thread.new{uartCustomRead()}
49
+ puts "Reading :"
50
+
51
+ def uartCustomSend
52
+ begin
53
+ #Send 32 bytes
54
+ payload = Array.new
55
+ for i in 0..35
56
+ payload.push 0x40
57
+ end
58
+ #Address OpenDoor
59
+ payload.push 0xFD
60
+ payload.push 0x29
61
+
62
+ payload.push 13 #Carriage return
63
+ @uart.write(payload:payload)
64
+ puts payload.pack("C*")
65
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
66
+ puts "Hardsploit not found"
67
+ rescue HardsploitAPI::ERROR::USB_ERROR
68
+ puts "USB ERRROR"
69
+ end
70
+ end
71
+
72
+ def uartCustomRead
73
+ while 1
74
+ begin
75
+ tab = @uart.sendAndReceived
76
+ print tab.pack('c*')
77
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
78
+ puts "Hardsploit not found"
79
+ rescue HardsploitAPI::ERROR::USB_ERROR
80
+ puts "USB ERRROR"
81
+ end
82
+ sleep(0.2)
83
+ end
84
+ end
85
+
86
+ while true
87
+ char = STDIN.getch
88
+ puts char
89
+ if char == "\u0003"
90
+ puts "Finished"
91
+ exit
92
+
93
+ elsif char == "e" then
94
+ puts "enableMeasureBaudRate"
95
+ @uart.enableMeasureBaudRate
96
+
97
+ elsif char == "d" then
98
+ puts "disableMeasureBaudRate"
99
+ @uart.disableMeasureBaudRate
100
+
101
+ elsif char == "b" then
102
+ p @uart.measureBaudRate
103
+ elsif char == "s" then
104
+ puts "uartCustomSend"
105
+ uartCustomSend
106
+ elsif char == "r" then
107
+ #Thread.new{uartCustomRead()}
108
+ uartCustomRead()
109
+ elsif char == "p" then
110
+ print "Upload Firmware check : #{HardsploitAPI.instance.uploadFirmware(pathFirmware:File.expand_path(File.dirname(__FILE__)) + "/../../HARDSPLOIT-VHDL/Firmware/FPGA/UART/UART_INTERACT/HARDSPLOIT_FIRMWARE_FPGA_UART_INTERACT.rpd",checkFirmware:false)}\n"
111
+ @uart.setSettings
112
+ end
113
+ end
@@ -0,0 +1,74 @@
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
+ require 'io/console'
9
+ require_relative '../HardsploitAPI/Core/HardsploitAPI'
10
+ require_relative '../HardsploitAPI/Modules/UART/HardsploitAPI_UART'
11
+
12
+ def callbackInfo(receiveData)
13
+ #print receiveData + "\n"
14
+ end
15
+
16
+ def callbackData(receiveData)
17
+ if receiveData != nil then
18
+ puts "received #{receiveData.size}"
19
+ p receiveData
20
+ end
21
+ end
22
+
23
+ def callbackSpeedOfTransfert(receiveData)
24
+ #puts "Speed : #{receiveData}"
25
+ end
26
+ def callbackProgress(percent:,startTime:,endTime:)
27
+ print "\r\e[#{31}mUpload of FPGA firmware in progress : #{percent}%\e[0m"
28
+ #puts "Progress : #{percent}% Start@ #{startTime} Stop@ #{endTime}"
29
+ #puts "Elasped time #{(endTime-startTime).round(4)} sec"
30
+ end
31
+
32
+ #puts "Number of hardsploit detected :#{HardsploitAPI.getNumberOfBoardAvailable}"
33
+
34
+ HardsploitAPI.callbackInfo = method(:callbackInfo)
35
+ HardsploitAPI.callbackData = method(:callbackData)
36
+ HardsploitAPI.callbackSpeedOfTransfert = method(:callbackSpeedOfTransfert)
37
+ HardsploitAPI.callbackProgress = method(:callbackProgress)
38
+ HardsploitAPI.id = 0 # id of hardsploit 0 for the first one, 1 for the second etc
39
+
40
+ HardsploitAPI.instance.getAllVersions
41
+
42
+ if ARGV[0] != "nofirmware" then
43
+ HardsploitAPI.instance.loadFirmware("UART")
44
+ end
45
+
46
+ @uart = HardsploitAPI_UART.new(baud_rate:57600, word_width:8,use_parity_bit:0,parity_type:0,nb_stop_bits:2,idle_line_level:1)
47
+ puts "\nEffective baudrate #{@uart.baud_rate} \n"
48
+ Thread.new{uartCustomRead()}
49
+ puts "Start reading :\n\n"
50
+
51
+ def uartCustomRead
52
+ while 1
53
+ begin
54
+ tab = @uart.sendAndReceived
55
+ print tab.pack('c*')
56
+ rescue HardsploitAPI::ERROR::HARDSPLOIT_NOT_FOUND
57
+ puts "Hardsploit not found"
58
+ rescue HardsploitAPI::ERROR::USB_ERROR
59
+ puts "USB ERRROR"
60
+ end
61
+ sleep(0.1)
62
+ end
63
+ end
64
+
65
+ while true
66
+ char = STDIN.getch
67
+ if char == "\u0003"
68
+ puts "Finished"
69
+ exit
70
+ else
71
+ @uart.write(payload:[char.ord])
72
+ print char
73
+ end
74
+ end