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
@@ -0,0 +1,89 @@
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
+ class SWD_DEBUG_PORT
9
+
10
+ def initialize(swdAPI)
11
+ @swdAPI = swdAPI
12
+ sleep(0.5)
13
+ @swdAPI.resetSWD
14
+
15
+ @curAP = -1
16
+ @curBank = -1
17
+ abort(1,1,1,1,1)
18
+ select(0,0)
19
+
20
+ # power shit up
21
+ HardsploitAPI.instance.consoleInfo "Power shit up"
22
+
23
+ @swdAPI.writeSWD(FALSE, 1, 0x54000000)
24
+ if (status() >> 24) != 0xF4 then
25
+ raise "error powering up system"
26
+ exit(0)
27
+ else
28
+ HardsploitAPI.instance.consoleInfo "POWERING UP SYTEM OK"
29
+ end
30
+ end
31
+
32
+ def getAPI
33
+ return @swdAPI
34
+ end
35
+
36
+ def idcode
37
+ return @swdAPI.readSWD(FALSE, 0)
38
+ end
39
+
40
+ def abort (orunerr, wdataerr, stickyerr, stickycmp, dap)
41
+ value = 0x00000000
42
+ (orunerr ? value |= 0x10 : value |= 0x00)
43
+ (wdataerr ? value |= 0x08 : value |= 0x00)
44
+ (stickyerr ? value |= 0x04 : value |= 0x00)
45
+ (stickycmp ? value |= 0x02 : value |= 0x00)
46
+ (dap ? value |= 0x01 : value |= 0x00)
47
+ @swdAPI.writeSWD(FALSE, 0, value)
48
+ end
49
+
50
+ def status
51
+ val= @swdAPI.readSWD(FALSE,1)
52
+ return val
53
+ end
54
+
55
+ def control (trnCount = 0, trnMode = 0, maskLane = 0, orunDetect = 0)
56
+ value = 0x54000000
57
+ value = value | ((trnCount & 0xFFF) << 12)
58
+ value = value | ((maskLane & 0x00F) << 8)
59
+ value = value | ((trnMode & 0x003) << 2)
60
+ (orunDetect ? value |= 0x01 : value |= 0x00)
61
+ @swdAPI.writeSWD(False, 1, value)
62
+ end
63
+
64
+ def select (apsel, apbank)
65
+ if apsel != @curAP or apbank != @curBank then
66
+ @curAP = apsel
67
+ @curBank = apbank
68
+ value = 0 | ((apsel & 0xFF) << 24) | ((apbank & 0x0F) << 4)
69
+ @swdAPI.writeSWD(FALSE, 2, value)
70
+ end
71
+ end
72
+
73
+ def readRB
74
+ return @swdAPI.readSWD(FALSE, 3)
75
+ end
76
+ def readAP ( apsel, address)
77
+ adrBank = (address >> 4) & 0xF
78
+ adrReg = (address >> 2) & 0x3
79
+ select(apsel, adrBank)
80
+ return @swdAPI.readSWD(TRUE, adrReg)
81
+ end
82
+
83
+ def writeAP (apsel, address, data)
84
+ adrBank = (address >> 4) & 0xF
85
+ adrReg = (address >> 2) & 0x3
86
+ select(apsel, adrBank)
87
+ @swdAPI.writeSWD(TRUE, adrReg, data)
88
+ end
89
+ end
@@ -0,0 +1,61 @@
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 SWD_MEM_AP
10
+
11
+ def initialize( dp, apsel)
12
+ @dp = dp
13
+ @apsel = apsel
14
+ csw(1,2) # 32-bit auto-incrementing addressing
15
+ end
16
+
17
+ def csw ( addrInc, size)
18
+ @dp.readAP(@apsel, 0x00)
19
+ val = @dp.readRB() & 0xFFFFFF00
20
+ @dp.writeAP(@apsel, 0x00, val + (addrInc << 4) + size)
21
+ end
22
+
23
+ def idcode
24
+ @dp.readAP(@apsel, 0xFC)
25
+ id = @dp.readRB()
26
+ @dp.select(0,0)
27
+ return id
28
+ end
29
+
30
+ def readWord (addr)
31
+ @dp.writeAP(@apsel, 0x04, addr)
32
+ @dp.readAP(@apsel, 0x0C)
33
+ return @dp.readRB()
34
+ end
35
+
36
+ def writeWord (addr, data)
37
+ @dp.writeAP(@apsel, 0x04, addr)
38
+ @dp.writeAP(@apsel, 0x0C, data)
39
+ return @dp.readRB()
40
+ end
41
+
42
+ def readBlock ( address, size)#1K boundaries and return 4K of data word alignement
43
+ if size < 1 then
44
+ raise "readBlock error : count must be >= 1"
45
+ end
46
+ if size > 1024 then
47
+ raise "readBlock error : size must be <= 1024 "
48
+ end
49
+ return @dp.getAPI.read_mem32(address,size)
50
+ end
51
+
52
+ def writeBlock (address,data) #1K boundaries
53
+ if data.length < 1 then
54
+ raise "readBlock error : count must be >= 1"
55
+ end
56
+ if data.length > 1024 then
57
+ raise "readBlock error : size must be <= 1024 "
58
+ end
59
+ @dp.getAPI.write_mem16Packed(address,data)
60
+ end
61
+ end
@@ -13,6 +13,7 @@ attr_accessor :ahb
13
13
 
14
14
  def initialize(debugPort)
15
15
  @ahb = SWD_MEM_AP.new(debugPort, 0)
16
+ @debugPort = debugPort
16
17
  end
17
18
 
18
19
  def halt
@@ -38,21 +39,31 @@ attr_accessor :ahb
38
39
  # IMPLEMENTATION DEFINED. This means that auto address incrementing at a 1KB boundary
39
40
  # is IMPLEMENTATION DEFINED
40
41
 
41
- #But for hardsploit max 8192 so chuck to 1k
42
+ #But for hardsploit max 8192 so chuck to 1k due to swd limitation
42
43
 
43
44
  packet_size = 1024
44
- number_complet_packet = (size/packet_size).floor
45
+ number_complet_packet = (size / packet_size).floor
45
46
  size_last_packet = size % packet_size
46
-
47
+ startTime = Time.now
47
48
  #number_complet_packet
48
- for i in 0..number_complet_packet-1 do
49
- data.push(*self.ahb.readBlock(i*4*packet_size+address,packet_size))
50
- puts "Read #{packet_size} KB : #{i}"
49
+ for i in 0..number_complet_packet - 1 do
50
+ data.push(*self.ahb.readBlock(i * 4 * packet_size + address, packet_size))
51
+ #puts "Read #{packet_size} KB : #{i}"
52
+ HardsploitAPI.instance.consoleProgress(
53
+ percent: 100 * (i + 1) / (number_complet_packet + (size_last_packet.zero? ? 0 : 1)),
54
+ startTime: startTime,
55
+ endTime: Time.new
56
+ )
51
57
  end
52
58
  #Last partial packet
53
59
  if size_last_packet > 0 then
54
60
  data.push(*self.ahb.readBlock(number_complet_packet*4*packet_size+address,size_last_packet))
55
- puts "Read last packet : #{size_last_packet} packet of 4 bytes"
61
+ #puts "Read last packet : #{size_last_packet} packet of 4 bytes"
62
+ HardsploitAPI.instance.consoleProgress(
63
+ percent: 100,
64
+ startTime: startTime,
65
+ endTime: Time.new
66
+ )
56
67
  end
57
68
  return data
58
69
  end
@@ -62,19 +73,25 @@ attr_accessor :ahb
62
73
  packet_size = 1024 #1024
63
74
  number_complet_packet = (data.size/packet_size).floor
64
75
  size_last_packet = data.size % packet_size
65
-
66
- ahb.csw(2, 1) # 16-bit packed incrementing addressing
76
+ startTime = Time.now
77
+ #ahb.csw(2, 1) # 16-bit packed incrementing addressing
67
78
  #number_complet_packet
68
79
  for i in 0..number_complet_packet-1 do
69
80
  self.ahb.writeBlock(address+i*packet_size,data[i*packet_size..i*packet_size-1+packet_size])
70
- puts "Write #{packet_size} KB : #{i}"
81
+ #puts "Write #{packet_size} KB : #{i}"
82
+ HardsploitAPI.instance.consoleProgress(
83
+ percent: 100 * (i + 1) / (number_complet_packet + (size_last_packet.zero? ? 0 : 1)),
84
+ startTime: startTime,
85
+ endTime:Time.new
86
+ )
71
87
  end
72
88
  #Last partial packet
73
89
  if size_last_packet > 0 then
74
90
  self.ahb.writeBlock(address+number_complet_packet*packet_size,data[number_complet_packet*packet_size..number_complet_packet*packet_size+size_last_packet])
75
- puts "Write last packet : #{size_last_packet} packet"
91
+ #puts "Write last packet : #{size_last_packet} packet"
92
+ HardsploitAPI.instance.consoleProgress(percent:100,startTime:startTime,endTime:Time.new)
76
93
  end
77
- ahb.csw(1, 2) # 16-bit packed incrementing addressing
94
+ ahb.csw(1, 2) # set to default 32-bit incrementing addressing
78
95
  end
79
96
 
80
97
  def flashUnlock
@@ -83,17 +100,17 @@ attr_accessor :ahb
83
100
  @ahb.writeWord(0x40022004, 0xCDEF89AB)
84
101
  end
85
102
  def flashErase
86
- puts "Flash unlock"
103
+ HardsploitAPI.instance.consoleInfo "Flash unlock"
87
104
  flashUnlock
88
105
  # start the mass erase
89
106
  @ahb.writeWord(0x40022010, 0x00000204)
90
107
  @ahb.writeWord(0x40022010, 0x00000244)
91
108
  # check the BSY flag
92
109
  while (@ahb.readWord(0x4002200C) & 1) == 1
93
- puts "waiting for erase completion..."
110
+ HardsploitAPI.instance.consoleInfo "waiting for erase completion..."
94
111
  end
95
112
  @ahb.writeWord(0x40022010, 0x00000200)
96
- puts "Finish unlock flash"
113
+ HardsploitAPI.instance.consoleInfo "Finish unlock flash"
97
114
  end
98
115
  def flashProgram
99
116
  @ahb.writeWord(0x40022010, 0x00000201)
@@ -6,7 +6,7 @@
6
6
  # License URI: http://www.gnu.org/licenses/gpl.txt
7
7
  #===================================================
8
8
 
9
- class HardsploitAPI
9
+ class HardsploitAPI_TEST
10
10
  public
11
11
  # Write value of 64 IO for testing purpose
12
12
  # * +value+:: 64bits to write on all ports
@@ -0,0 +1,196 @@
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_relative '../../Core/HardsploitAPI'
10
+ class HardsploitAPI_UART
11
+ public
12
+ def initialize(baud_rate:,word_width:,use_parity_bit:,parity_type:,nb_stop_bits:,idle_line_level:)
13
+ #to be sure the singleton was initialize
14
+ HardsploitAPI.instance
15
+ self.baud_rate = baud_rate
16
+ self.word_width = word_width
17
+ self.use_parity_bit = use_parity_bit
18
+ self.parity_type = parity_type
19
+ self.nb_stop_bits = nb_stop_bits
20
+ self.idle_line_level = idle_line_level
21
+ setSettings
22
+
23
+ @payload_TX = Array.new
24
+ end
25
+
26
+ def baud_rate
27
+ return 150000000 / @baud_rate
28
+ end
29
+
30
+ def baud_rate=(baud_rate)
31
+ if (baud_rate >= 2400) and (baud_rate <= 1036800) then
32
+ @baud_rate = 150000000 / baud_rate
33
+ else
34
+ raise HardsploitAPI::ERROR::UART_WrongSettings
35
+ end
36
+ end
37
+
38
+ def word_width
39
+ return @word_width
40
+ end
41
+
42
+ def word_width=(word_width)
43
+ if (word_width >= 5) and (word_width <= 8) then
44
+ @word_width = word_width
45
+ else
46
+ raise HardsploitAPI::ERROR::UART_WrongSettings
47
+ end
48
+ end
49
+
50
+ def use_parity_bit
51
+ return @use_parity_bit
52
+ end
53
+
54
+ def use_parity_bit=(use_parity_bit)
55
+ if (use_parity_bit >= 0) and (use_parity_bit <= 1) then
56
+ @use_parity_bit = use_parity_bit
57
+ else
58
+ raise HardsploitAPI::ERROR::UART_WrongSettings
59
+ end
60
+ end
61
+
62
+ def parity_type
63
+ return @parity_type
64
+ end
65
+
66
+ def parity_type=(parity_type)
67
+ if (parity_type >= 0) and (parity_type <= 1) then
68
+ @parity_type = parity_type
69
+ else
70
+ raise HardsploitAPI::ERROR::UART_WrongSettings
71
+ end
72
+ end
73
+
74
+ def nb_stop_bits
75
+ return @nb_stop_bits
76
+ end
77
+
78
+ def nb_stop_bits=(nb_stop_bits)
79
+ if (nb_stop_bits >= 1) and (nb_stop_bits <= 2) then
80
+ @nb_stop_bits = nb_stop_bits
81
+ else
82
+ raise HardsploitAPI::ERROR::UART_WrongSettings
83
+ end
84
+ end
85
+
86
+ def idle_line_level
87
+ return @idle_line_level
88
+ end
89
+
90
+ def idle_line_level=(idle_line_level)
91
+ if (idle_line_level >= 0) and (idle_line_level <= 1) then
92
+ @idle_line_level = idle_line_level
93
+ else
94
+ raise HardsploitAPI::ERROR::UART_WrongSettings
95
+ end
96
+ end
97
+
98
+ # write
99
+ # * +payload+:: Byte array want to send
100
+ # * Return nothing
101
+ def write(payload:)
102
+ if ( (@payload_TX.size + payload.size) > 4000) then
103
+ raise HardsploitAPI::ERROR::UART_WrongTxPayloadSize
104
+ end
105
+ @payload_TX.concat payload #Add data
106
+ end
107
+
108
+ # sendAndReceived ( send and receive)
109
+ # First write data if needed and refresh (data are sent and reveived data if needed) and you obtain available data
110
+ # * Return nothing
111
+ def sendAndReceived
112
+ packet = HardsploitAPI.prepare_packet
113
+ packet.push 0x20 #Send command
114
+ packet.concat @payload_TX
115
+
116
+ begin
117
+ tmp = HardsploitAPI.instance.sendAndReceiveDATA(packet,1000)
118
+ rescue
119
+ raise HardsploitAPI::ERROR::USB_ERROR
120
+ end
121
+
122
+ @payload_TX.clear
123
+ #remove header (4 bytes 2 for size 2 for type of command 1 dummy byte)
124
+ return tmp.drop(5)
125
+ end
126
+
127
+ # enableMeasureBaudRate
128
+ #
129
+ # *
130
+ def enableMeasureBaudRate
131
+ packet = HardsploitAPI.prepare_packet
132
+ packet.push 0x41 # command
133
+ begin
134
+ tmp = HardsploitAPI.instance.sendAndReceiveDATA(packet,1000)
135
+ rescue
136
+ raise HardsploitAPI::ERROR::USB_ERROR
137
+ end
138
+ end
139
+
140
+ # disableMeasureBaudRate
141
+ #
142
+ # *
143
+ def disableMeasureBaudRate
144
+ packet = HardsploitAPI.prepare_packet
145
+ packet.push 0x40 # command
146
+ begin
147
+ tmp = HardsploitAPI.instance.sendAndReceiveDATA(packet,1000)
148
+ rescue
149
+ raise HardsploitAPI::ERROR::USB_ERROR
150
+ end
151
+ end
152
+
153
+ # measureBaudRate
154
+ #
155
+ # * Return 32 bits period
156
+ def measureBaudRate
157
+ packet = HardsploitAPI.prepare_packet
158
+ packet.push 0x30 # command
159
+
160
+ begin
161
+ tmp = HardsploitAPI.instance.sendAndReceiveDATA(packet,1000)
162
+ rescue
163
+ raise HardsploitAPI::ERROR::USB_ERROR
164
+ end
165
+ #remove header (4 bytes 2 for size 2 for type of command)
166
+ tmp = tmp.drop(4)
167
+ period = tmp[0] + (tmp[1] << 8 ) + (tmp[2] << 16 ) + (tmp[3] << 24 )
168
+ period = period * 33.33*(10**-9) #s
169
+ if period > 0 then
170
+ return (1 / period).to_i
171
+ else
172
+ return 0
173
+ end
174
+ end
175
+
176
+ # settings
177
+ # * Return nothing
178
+ def setSettings
179
+ packet = HardsploitAPI.prepare_packet
180
+ packet.push 0x00 #Settings command
181
+ packet.push ((@parity_type & 0b1) << 7) || ((@use_parity_bit & 0b1) << 6) || ((@nb_stop_bits & 0b11) << 4) || (@word_width & 0b1111)
182
+ packet.push @idle_line_level & 1
183
+ packet.push HardsploitAPI.lowByte(word: @baud_rate)
184
+ packet.push HardsploitAPI.highByte(word: @baud_rate)
185
+
186
+ begin
187
+ HardsploitAPI.instance.sendPacket packet
188
+ sleep(1)
189
+ # tmp= HardsploitAPI.instance.receiveDATA(1000)
190
+ #remove header (4 bytes 2 for size 2 for type of command)
191
+ # return tmp.bytes.drop(4)
192
+ rescue
193
+ raise HardsploitAPI::ERROR::USB_ERROR
194
+ end
195
+ end
196
+ end