aardwolf 0.2.7__cp39-cp39-linux_armv7l.whl

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 (591) hide show
  1. aardwolf/__init__.py +10 -0
  2. aardwolf/_version.py +7 -0
  3. aardwolf/channels.py +77 -0
  4. aardwolf/commons/__init__.py +0 -0
  5. aardwolf/commons/cryptolayer.py +259 -0
  6. aardwolf/commons/factory.py +145 -0
  7. aardwolf/commons/iosettings.py +70 -0
  8. aardwolf/commons/params.py +56 -0
  9. aardwolf/commons/queuedata/__init__.py +19 -0
  10. aardwolf/commons/queuedata/beep.py +21 -0
  11. aardwolf/commons/queuedata/clipboard.py +57 -0
  12. aardwolf/commons/queuedata/constants.py +42 -0
  13. aardwolf/commons/queuedata/keyboard.py +19 -0
  14. aardwolf/commons/queuedata/mouse.py +31 -0
  15. aardwolf/commons/queuedata/video.py +65 -0
  16. aardwolf/commons/serverinfo.py +149 -0
  17. aardwolf/commons/target.py +139 -0
  18. aardwolf/commons/utils/__init__.py +0 -0
  19. aardwolf/commons/utils/ts2dt.py +17 -0
  20. aardwolf/connection.py +1304 -0
  21. aardwolf/examples/__init__.py +0 -0
  22. aardwolf/examples/scancommons/__init__.py +0 -0
  23. aardwolf/examples/scancommons/internal.py +23 -0
  24. aardwolf/examples/scancommons/targetgens.py +38 -0
  25. aardwolf/examples/scancommons/utils.py +11 -0
  26. aardwolf/examples/scanners/__init__.py +0 -0
  27. aardwolf/examples/scanners/__main__.py +117 -0
  28. aardwolf/examples/scanners/rdplogin.py +44 -0
  29. aardwolf/examples/scanners/rdpscaps.py +101 -0
  30. aardwolf/examples/scanners/rdpscreen.py +65 -0
  31. aardwolf/extensions/RDPECLIP/__init__.py +0 -0
  32. aardwolf/extensions/RDPECLIP/channel.py +299 -0
  33. aardwolf/extensions/RDPECLIP/protocol/__init__.py +115 -0
  34. aardwolf/extensions/RDPECLIP/protocol/clienttemporarydirectory.py +33 -0
  35. aardwolf/extensions/RDPECLIP/protocol/clipboardcapabilities.py +102 -0
  36. aardwolf/extensions/RDPECLIP/protocol/filecontentsrequest.py +67 -0
  37. aardwolf/extensions/RDPECLIP/protocol/filecontentsresponse.py +40 -0
  38. aardwolf/extensions/RDPECLIP/protocol/formatdatarequest.py +42 -0
  39. aardwolf/extensions/RDPECLIP/protocol/formatdataresponse.py +282 -0
  40. aardwolf/extensions/RDPECLIP/protocol/formatlist.py +206 -0
  41. aardwolf/extensions/RDPECLIP/protocol/lockclipboarddata.py +33 -0
  42. aardwolf/extensions/RDPECLIP/protocol/unlockclipboarddata.py +33 -0
  43. aardwolf/extensions/RDPEDYC/__init__.py +0 -0
  44. aardwolf/extensions/RDPEDYC/channel.py +130 -0
  45. aardwolf/extensions/RDPEDYC/protocol/__init__.py +77 -0
  46. aardwolf/extensions/RDPEDYC/protocol/caps.py +83 -0
  47. aardwolf/extensions/RDPEDYC/protocol/close.py +30 -0
  48. aardwolf/extensions/RDPEDYC/protocol/create.py +84 -0
  49. aardwolf/extensions/RDPEDYC/protocol/data.py +122 -0
  50. aardwolf/extensions/RDPEDYC/protocol/softsync.py +116 -0
  51. aardwolf/extensions/RDPEDYC/vchannels/__init__.py +80 -0
  52. aardwolf/extensions/RDPEDYC/vchannels/echo/__init__.py +18 -0
  53. aardwolf/extensions/RDPEDYC/vchannels/socksoverrdp/__init__.py +112 -0
  54. aardwolf/extensions/RDPEDYC/vchannels/test/__init__.py +22 -0
  55. aardwolf/extensions/__init__.py +0 -0
  56. aardwolf/keyboard/__init__.py +125 -0
  57. aardwolf/keyboard/layoutmanager.py +52 -0
  58. aardwolf/keyboard/layouts/__init__.py +0 -0
  59. aardwolf/keyboard/layouts/layout_00000401.py +1 -0
  60. aardwolf/keyboard/layouts/layout_00000402.py +1 -0
  61. aardwolf/keyboard/layouts/layout_00000404.py +1 -0
  62. aardwolf/keyboard/layouts/layout_00000405.py +1 -0
  63. aardwolf/keyboard/layouts/layout_00000406.py +1 -0
  64. aardwolf/keyboard/layouts/layout_00000407.py +1 -0
  65. aardwolf/keyboard/layouts/layout_00000408.py +1 -0
  66. aardwolf/keyboard/layouts/layout_00000409.py +1 -0
  67. aardwolf/keyboard/layouts/layout_0000040a.py +1 -0
  68. aardwolf/keyboard/layouts/layout_0000040b.py +1 -0
  69. aardwolf/keyboard/layouts/layout_0000040c.py +1 -0
  70. aardwolf/keyboard/layouts/layout_0000040d.py +1 -0
  71. aardwolf/keyboard/layouts/layout_0000040e.py +1 -0
  72. aardwolf/keyboard/layouts/layout_0000040f.py +1 -0
  73. aardwolf/keyboard/layouts/layout_00000410.py +1 -0
  74. aardwolf/keyboard/layouts/layout_00000411.py +1 -0
  75. aardwolf/keyboard/layouts/layout_00000412.py +1 -0
  76. aardwolf/keyboard/layouts/layout_00000413.py +1 -0
  77. aardwolf/keyboard/layouts/layout_00000414.py +1 -0
  78. aardwolf/keyboard/layouts/layout_00000415.py +1 -0
  79. aardwolf/keyboard/layouts/layout_00000416.py +1 -0
  80. aardwolf/keyboard/layouts/layout_00000418.py +1 -0
  81. aardwolf/keyboard/layouts/layout_00000419.py +1 -0
  82. aardwolf/keyboard/layouts/layout_0000041a.py +1 -0
  83. aardwolf/keyboard/layouts/layout_0000041b.py +1 -0
  84. aardwolf/keyboard/layouts/layout_0000041c.py +1 -0
  85. aardwolf/keyboard/layouts/layout_0000041d.py +1 -0
  86. aardwolf/keyboard/layouts/layout_0000041e.py +1 -0
  87. aardwolf/keyboard/layouts/layout_0000041f.py +1 -0
  88. aardwolf/keyboard/layouts/layout_00000420.py +1 -0
  89. aardwolf/keyboard/layouts/layout_00000422.py +1 -0
  90. aardwolf/keyboard/layouts/layout_00000423.py +1 -0
  91. aardwolf/keyboard/layouts/layout_00000424.py +1 -0
  92. aardwolf/keyboard/layouts/layout_00000425.py +1 -0
  93. aardwolf/keyboard/layouts/layout_00000426.py +1 -0
  94. aardwolf/keyboard/layouts/layout_00000427.py +1 -0
  95. aardwolf/keyboard/layouts/layout_00000428.py +1 -0
  96. aardwolf/keyboard/layouts/layout_00000429.py +1 -0
  97. aardwolf/keyboard/layouts/layout_0000042a.py +1 -0
  98. aardwolf/keyboard/layouts/layout_0000042b.py +1 -0
  99. aardwolf/keyboard/layouts/layout_0000042c.py +1 -0
  100. aardwolf/keyboard/layouts/layout_0000042e.py +1 -0
  101. aardwolf/keyboard/layouts/layout_0000042f.py +1 -0
  102. aardwolf/keyboard/layouts/layout_00000432.py +1 -0
  103. aardwolf/keyboard/layouts/layout_00000437.py +1 -0
  104. aardwolf/keyboard/layouts/layout_00000438.py +1 -0
  105. aardwolf/keyboard/layouts/layout_00000439.py +1 -0
  106. aardwolf/keyboard/layouts/layout_0000043a.py +1 -0
  107. aardwolf/keyboard/layouts/layout_0000043b.py +1 -0
  108. aardwolf/keyboard/layouts/layout_0000043f.py +1 -0
  109. aardwolf/keyboard/layouts/layout_00000440.py +1 -0
  110. aardwolf/keyboard/layouts/layout_00000442.py +1 -0
  111. aardwolf/keyboard/layouts/layout_00000444.py +1 -0
  112. aardwolf/keyboard/layouts/layout_00000445.py +1 -0
  113. aardwolf/keyboard/layouts/layout_00000446.py +1 -0
  114. aardwolf/keyboard/layouts/layout_00000447.py +1 -0
  115. aardwolf/keyboard/layouts/layout_00000448.py +1 -0
  116. aardwolf/keyboard/layouts/layout_00000449.py +1 -0
  117. aardwolf/keyboard/layouts/layout_0000044a.py +1 -0
  118. aardwolf/keyboard/layouts/layout_0000044b.py +1 -0
  119. aardwolf/keyboard/layouts/layout_0000044c.py +1 -0
  120. aardwolf/keyboard/layouts/layout_0000044d.py +1 -0
  121. aardwolf/keyboard/layouts/layout_0000044e.py +1 -0
  122. aardwolf/keyboard/layouts/layout_00000450.py +1 -0
  123. aardwolf/keyboard/layouts/layout_00000451.py +1 -0
  124. aardwolf/keyboard/layouts/layout_00000452.py +1 -0
  125. aardwolf/keyboard/layouts/layout_00000453.py +1 -0
  126. aardwolf/keyboard/layouts/layout_00000454.py +1 -0
  127. aardwolf/keyboard/layouts/layout_0000045a.py +1 -0
  128. aardwolf/keyboard/layouts/layout_0000045b.py +1 -0
  129. aardwolf/keyboard/layouts/layout_0000045c.py +1 -0
  130. aardwolf/keyboard/layouts/layout_00000461.py +1 -0
  131. aardwolf/keyboard/layouts/layout_00000463.py +1 -0
  132. aardwolf/keyboard/layouts/layout_00000465.py +1 -0
  133. aardwolf/keyboard/layouts/layout_00000468.py +1 -0
  134. aardwolf/keyboard/layouts/layout_0000046a.py +1 -0
  135. aardwolf/keyboard/layouts/layout_0000046c.py +1 -0
  136. aardwolf/keyboard/layouts/layout_0000046d.py +1 -0
  137. aardwolf/keyboard/layouts/layout_0000046e.py +1 -0
  138. aardwolf/keyboard/layouts/layout_0000046f.py +1 -0
  139. aardwolf/keyboard/layouts/layout_00000470.py +1 -0
  140. aardwolf/keyboard/layouts/layout_00000474.py +1 -0
  141. aardwolf/keyboard/layouts/layout_00000475.py +1 -0
  142. aardwolf/keyboard/layouts/layout_00000480.py +1 -0
  143. aardwolf/keyboard/layouts/layout_00000481.py +1 -0
  144. aardwolf/keyboard/layouts/layout_00000485.py +1 -0
  145. aardwolf/keyboard/layouts/layout_00000488.py +1 -0
  146. aardwolf/keyboard/layouts/layout_00000492.py +1 -0
  147. aardwolf/keyboard/layouts/layout_00000804.py +1 -0
  148. aardwolf/keyboard/layouts/layout_00000807.py +1 -0
  149. aardwolf/keyboard/layouts/layout_00000809.py +1 -0
  150. aardwolf/keyboard/layouts/layout_0000080a.py +1 -0
  151. aardwolf/keyboard/layouts/layout_0000080c.py +1 -0
  152. aardwolf/keyboard/layouts/layout_00000813.py +1 -0
  153. aardwolf/keyboard/layouts/layout_00000816.py +1 -0
  154. aardwolf/keyboard/layouts/layout_0000081a.py +1 -0
  155. aardwolf/keyboard/layouts/layout_0000082c.py +1 -0
  156. aardwolf/keyboard/layouts/layout_0000083b.py +1 -0
  157. aardwolf/keyboard/layouts/layout_00000843.py +1 -0
  158. aardwolf/keyboard/layouts/layout_00000850.py +1 -0
  159. aardwolf/keyboard/layouts/layout_0000085d.py +1 -0
  160. aardwolf/keyboard/layouts/layout_0000085f.py +1 -0
  161. aardwolf/keyboard/layouts/layout_00000c04.py +1 -0
  162. aardwolf/keyboard/layouts/layout_00000c0c.py +1 -0
  163. aardwolf/keyboard/layouts/layout_00000c1a.py +1 -0
  164. aardwolf/keyboard/layouts/layout_00000c51.py +1 -0
  165. aardwolf/keyboard/layouts/layout_00001004.py +1 -0
  166. aardwolf/keyboard/layouts/layout_00001009.py +1 -0
  167. aardwolf/keyboard/layouts/layout_0000100c.py +1 -0
  168. aardwolf/keyboard/layouts/layout_0000105f.py +1 -0
  169. aardwolf/keyboard/layouts/layout_00001404.py +1 -0
  170. aardwolf/keyboard/layouts/layout_00001409.py +1 -0
  171. aardwolf/keyboard/layouts/layout_00001809.py +1 -0
  172. aardwolf/keyboard/layouts/layout_0000201a.py +1 -0
  173. aardwolf/keyboard/layouts/layout_00004009.py +1 -0
  174. aardwolf/keyboard/layouts/layout_00010401.py +1 -0
  175. aardwolf/keyboard/layouts/layout_00010402.py +1 -0
  176. aardwolf/keyboard/layouts/layout_00010405.py +1 -0
  177. aardwolf/keyboard/layouts/layout_00010407.py +1 -0
  178. aardwolf/keyboard/layouts/layout_00010408.py +1 -0
  179. aardwolf/keyboard/layouts/layout_00010409.py +1 -0
  180. aardwolf/keyboard/layouts/layout_0001040a.py +1 -0
  181. aardwolf/keyboard/layouts/layout_0001040e.py +1 -0
  182. aardwolf/keyboard/layouts/layout_00010410.py +1 -0
  183. aardwolf/keyboard/layouts/layout_00010415.py +1 -0
  184. aardwolf/keyboard/layouts/layout_00010416.py +1 -0
  185. aardwolf/keyboard/layouts/layout_00010418.py +1 -0
  186. aardwolf/keyboard/layouts/layout_00010419.py +1 -0
  187. aardwolf/keyboard/layouts/layout_0001041b.py +1 -0
  188. aardwolf/keyboard/layouts/layout_0001041e.py +1 -0
  189. aardwolf/keyboard/layouts/layout_0001041f.py +1 -0
  190. aardwolf/keyboard/layouts/layout_00010426.py +1 -0
  191. aardwolf/keyboard/layouts/layout_00010427.py +1 -0
  192. aardwolf/keyboard/layouts/layout_0001042b.py +1 -0
  193. aardwolf/keyboard/layouts/layout_0001042c.py +1 -0
  194. aardwolf/keyboard/layouts/layout_0001042e.py +1 -0
  195. aardwolf/keyboard/layouts/layout_0001042f.py +1 -0
  196. aardwolf/keyboard/layouts/layout_00010437.py +1 -0
  197. aardwolf/keyboard/layouts/layout_00010439.py +1 -0
  198. aardwolf/keyboard/layouts/layout_0001043a.py +1 -0
  199. aardwolf/keyboard/layouts/layout_0001043b.py +1 -0
  200. aardwolf/keyboard/layouts/layout_00010444.py +1 -0
  201. aardwolf/keyboard/layouts/layout_00010445.py +1 -0
  202. aardwolf/keyboard/layouts/layout_00010451.py +1 -0
  203. aardwolf/keyboard/layouts/layout_00010453.py +1 -0
  204. aardwolf/keyboard/layouts/layout_0001045a.py +1 -0
  205. aardwolf/keyboard/layouts/layout_0001045b.py +1 -0
  206. aardwolf/keyboard/layouts/layout_0001045c.py +1 -0
  207. aardwolf/keyboard/layouts/layout_0001045d.py +1 -0
  208. aardwolf/keyboard/layouts/layout_00010465.py +1 -0
  209. aardwolf/keyboard/layouts/layout_00010480.py +1 -0
  210. aardwolf/keyboard/layouts/layout_0001080c.py +1 -0
  211. aardwolf/keyboard/layouts/layout_0001083b.py +1 -0
  212. aardwolf/keyboard/layouts/layout_00010850.py +1 -0
  213. aardwolf/keyboard/layouts/layout_00010c00.py +1 -0
  214. aardwolf/keyboard/layouts/layout_00011009.py +1 -0
  215. aardwolf/keyboard/layouts/layout_0001105f.py +1 -0
  216. aardwolf/keyboard/layouts/layout_00011809.py +1 -0
  217. aardwolf/keyboard/layouts/layout_00020401.py +1 -0
  218. aardwolf/keyboard/layouts/layout_00020402.py +1 -0
  219. aardwolf/keyboard/layouts/layout_00020405.py +1 -0
  220. aardwolf/keyboard/layouts/layout_00020408.py +1 -0
  221. aardwolf/keyboard/layouts/layout_00020409.py +1 -0
  222. aardwolf/keyboard/layouts/layout_0002040d.py +1 -0
  223. aardwolf/keyboard/layouts/layout_00020418.py +1 -0
  224. aardwolf/keyboard/layouts/layout_00020419.py +1 -0
  225. aardwolf/keyboard/layouts/layout_0002041e.py +1 -0
  226. aardwolf/keyboard/layouts/layout_00020422.py +1 -0
  227. aardwolf/keyboard/layouts/layout_00020426.py +1 -0
  228. aardwolf/keyboard/layouts/layout_00020427.py +1 -0
  229. aardwolf/keyboard/layouts/layout_0002042b.py +1 -0
  230. aardwolf/keyboard/layouts/layout_0002042e.py +1 -0
  231. aardwolf/keyboard/layouts/layout_00020437.py +1 -0
  232. aardwolf/keyboard/layouts/layout_00020445.py +1 -0
  233. aardwolf/keyboard/layouts/layout_00020449.py +1 -0
  234. aardwolf/keyboard/layouts/layout_0002083b.py +1 -0
  235. aardwolf/keyboard/layouts/layout_00020c00.py +1 -0
  236. aardwolf/keyboard/layouts/layout_00030402.py +1 -0
  237. aardwolf/keyboard/layouts/layout_00030408.py +1 -0
  238. aardwolf/keyboard/layouts/layout_00030409.py +1 -0
  239. aardwolf/keyboard/layouts/layout_0003041e.py +1 -0
  240. aardwolf/keyboard/layouts/layout_0003042b.py +1 -0
  241. aardwolf/keyboard/layouts/layout_00030437.py +1 -0
  242. aardwolf/keyboard/layouts/layout_00030c00.py +1 -0
  243. aardwolf/keyboard/layouts/layout_00040402.py +1 -0
  244. aardwolf/keyboard/layouts/layout_00040408.py +1 -0
  245. aardwolf/keyboard/layouts/layout_00040409.py +1 -0
  246. aardwolf/keyboard/layouts/layout_00040437.py +1 -0
  247. aardwolf/keyboard/layouts/layout_00040c00.py +1 -0
  248. aardwolf/keyboard/layouts/layout_00050408.py +1 -0
  249. aardwolf/keyboard/layouts/layout_00050409.py +1 -0
  250. aardwolf/keyboard/layouts/layout_00050429.py +1 -0
  251. aardwolf/keyboard/layouts/layout_00060408.py +1 -0
  252. aardwolf/keyboard/layouts/layout_00070c00.py +1 -0
  253. aardwolf/keyboard/layouts/layout_00080c00.py +1 -0
  254. aardwolf/keyboard/layouts/layout_00090c00.py +1 -0
  255. aardwolf/keyboard/layouts/layout_000a0c00.py +1 -0
  256. aardwolf/keyboard/layouts/layout_000b0c00.py +1 -0
  257. aardwolf/keyboard/layouts/layout_000c0c00.py +1 -0
  258. aardwolf/keyboard/layouts/layout_000d0c00.py +1 -0
  259. aardwolf/keyboard/layouts/layout_000e0c00.py +1 -0
  260. aardwolf/keyboard/layouts/layout_000f0c00.py +1 -0
  261. aardwolf/keyboard/layouts/layout_00100c00.py +1 -0
  262. aardwolf/keyboard/layouts/layout_00110c00.py +1 -0
  263. aardwolf/keyboard/layouts/layout_00120c00.py +1 -0
  264. aardwolf/keyboard/layouts/layout_00130c00.py +1 -0
  265. aardwolf/keyboard/layouts/layout_00140c00.py +1 -0
  266. aardwolf/keyboard/layouts/layout_00150c00.py +1 -0
  267. aardwolf/keyboard/layouts/layout_KBDA1.py +1 -0
  268. aardwolf/keyboard/layouts/layout_KBDA2.py +1 -0
  269. aardwolf/keyboard/layouts/layout_KBDA3.py +1 -0
  270. aardwolf/keyboard/layouts/layout_KBDADLM.py +1 -0
  271. aardwolf/keyboard/layouts/layout_KBDAL.py +1 -0
  272. aardwolf/keyboard/layouts/layout_KBDARME.py +1 -0
  273. aardwolf/keyboard/layouts/layout_KBDARMW.py +1 -0
  274. aardwolf/keyboard/layouts/layout_KBDAZE.py +1 -0
  275. aardwolf/keyboard/layouts/layout_KBDAZEL.py +1 -0
  276. aardwolf/keyboard/layouts/layout_KBDAZST.py +1 -0
  277. aardwolf/keyboard/layouts/layout_KBDBASH.py +1 -0
  278. aardwolf/keyboard/layouts/layout_KBDBE.py +1 -0
  279. aardwolf/keyboard/layouts/layout_KBDBENE.py +1 -0
  280. aardwolf/keyboard/layouts/layout_KBDBGPH.py +1 -0
  281. aardwolf/keyboard/layouts/layout_KBDBGPH1.py +1 -0
  282. aardwolf/keyboard/layouts/layout_KBDBLR.py +1 -0
  283. aardwolf/keyboard/layouts/layout_KBDBR.py +1 -0
  284. aardwolf/keyboard/layouts/layout_KBDBU.py +1 -0
  285. aardwolf/keyboard/layouts/layout_KBDBUG.py +1 -0
  286. aardwolf/keyboard/layouts/layout_KBDBULG.py +1 -0
  287. aardwolf/keyboard/layouts/layout_KBDCA.py +1 -0
  288. aardwolf/keyboard/layouts/layout_KBDCAN.py +1 -0
  289. aardwolf/keyboard/layouts/layout_KBDCHER.py +1 -0
  290. aardwolf/keyboard/layouts/layout_KBDCHERP.py +1 -0
  291. aardwolf/keyboard/layouts/layout_KBDCR.py +1 -0
  292. aardwolf/keyboard/layouts/layout_KBDCZ.py +1 -0
  293. aardwolf/keyboard/layouts/layout_KBDCZ1.py +1 -0
  294. aardwolf/keyboard/layouts/layout_KBDCZ2.py +1 -0
  295. aardwolf/keyboard/layouts/layout_KBDDA.py +1 -0
  296. aardwolf/keyboard/layouts/layout_KBDDIV1.py +1 -0
  297. aardwolf/keyboard/layouts/layout_KBDDIV2.py +1 -0
  298. aardwolf/keyboard/layouts/layout_KBDDV.py +1 -0
  299. aardwolf/keyboard/layouts/layout_KBDDZO.py +1 -0
  300. aardwolf/keyboard/layouts/layout_KBDES.py +1 -0
  301. aardwolf/keyboard/layouts/layout_KBDEST.py +1 -0
  302. aardwolf/keyboard/layouts/layout_KBDFA.py +1 -0
  303. aardwolf/keyboard/layouts/layout_KBDFC.py +1 -0
  304. aardwolf/keyboard/layouts/layout_KBDFI.py +1 -0
  305. aardwolf/keyboard/layouts/layout_KBDFO.py +1 -0
  306. aardwolf/keyboard/layouts/layout_KBDFR.py +1 -0
  307. aardwolf/keyboard/layouts/layout_KBDFTHRK.py +1 -0
  308. aardwolf/keyboard/layouts/layout_KBDGAE.py +1 -0
  309. aardwolf/keyboard/layouts/layout_KBDGEO.py +1 -0
  310. aardwolf/keyboard/layouts/layout_KBDGKL.py +1 -0
  311. aardwolf/keyboard/layouts/layout_KBDGN.py +1 -0
  312. aardwolf/keyboard/layouts/layout_KBDGR.py +1 -0
  313. aardwolf/keyboard/layouts/layout_KBDGR1.py +1 -0
  314. aardwolf/keyboard/layouts/layout_KBDGRLND.py +1 -0
  315. aardwolf/keyboard/layouts/layout_KBDGTHC.py +1 -0
  316. aardwolf/keyboard/layouts/layout_KBDHAU.py +1 -0
  317. aardwolf/keyboard/layouts/layout_KBDHAW.py +1 -0
  318. aardwolf/keyboard/layouts/layout_KBDHE.py +1 -0
  319. aardwolf/keyboard/layouts/layout_KBDHE220.py +1 -0
  320. aardwolf/keyboard/layouts/layout_KBDHE319.py +1 -0
  321. aardwolf/keyboard/layouts/layout_KBDHEB.py +1 -0
  322. aardwolf/keyboard/layouts/layout_KBDHELA2.py +1 -0
  323. aardwolf/keyboard/layouts/layout_KBDHELA3.py +1 -0
  324. aardwolf/keyboard/layouts/layout_KBDHEPT.py +1 -0
  325. aardwolf/keyboard/layouts/layout_KBDHU.py +1 -0
  326. aardwolf/keyboard/layouts/layout_KBDHU1.py +1 -0
  327. aardwolf/keyboard/layouts/layout_KBDIBO.py +1 -0
  328. aardwolf/keyboard/layouts/layout_KBDIC.py +1 -0
  329. aardwolf/keyboard/layouts/layout_KBDINASA.py +1 -0
  330. aardwolf/keyboard/layouts/layout_KBDINBE2.py +1 -0
  331. aardwolf/keyboard/layouts/layout_KBDINDEV.py +1 -0
  332. aardwolf/keyboard/layouts/layout_KBDINEN.py +1 -0
  333. aardwolf/keyboard/layouts/layout_KBDINGUJ.py +1 -0
  334. aardwolf/keyboard/layouts/layout_KBDINHIN.py +1 -0
  335. aardwolf/keyboard/layouts/layout_KBDINKAN.py +1 -0
  336. aardwolf/keyboard/layouts/layout_KBDINMAR.py +1 -0
  337. aardwolf/keyboard/layouts/layout_KBDINORI.py +1 -0
  338. aardwolf/keyboard/layouts/layout_KBDINPUN.py +1 -0
  339. aardwolf/keyboard/layouts/layout_KBDINTAM.py +1 -0
  340. aardwolf/keyboard/layouts/layout_KBDINTEL.py +1 -0
  341. aardwolf/keyboard/layouts/layout_KBDINUK2.py +1 -0
  342. aardwolf/keyboard/layouts/layout_KBDIR.py +1 -0
  343. aardwolf/keyboard/layouts/layout_KBDIT.py +1 -0
  344. aardwolf/keyboard/layouts/layout_KBDIT142.py +1 -0
  345. aardwolf/keyboard/layouts/layout_KBDIULAT.py +1 -0
  346. aardwolf/keyboard/layouts/layout_KBDJAV.py +1 -0
  347. aardwolf/keyboard/layouts/layout_KBDJPN.py +1 -0
  348. aardwolf/keyboard/layouts/layout_KBDKAZ.py +1 -0
  349. aardwolf/keyboard/layouts/layout_KBDKHMR.py +1 -0
  350. aardwolf/keyboard/layouts/layout_KBDKNI.py +1 -0
  351. aardwolf/keyboard/layouts/layout_KBDKOR.py +1 -0
  352. aardwolf/keyboard/layouts/layout_KBDKURD.py +1 -0
  353. aardwolf/keyboard/layouts/layout_KBDKYR.py +1 -0
  354. aardwolf/keyboard/layouts/layout_KBDLA.py +1 -0
  355. aardwolf/keyboard/layouts/layout_KBDLAO.py +1 -0
  356. aardwolf/keyboard/layouts/layout_KBDLT.py +1 -0
  357. aardwolf/keyboard/layouts/layout_KBDLT1.py +1 -0
  358. aardwolf/keyboard/layouts/layout_KBDLT2.py +1 -0
  359. aardwolf/keyboard/layouts/layout_KBDLV.py +1 -0
  360. aardwolf/keyboard/layouts/layout_KBDLV1.py +1 -0
  361. aardwolf/keyboard/layouts/layout_KBDLVST.py +1 -0
  362. aardwolf/keyboard/layouts/layout_KBDMAC.py +1 -0
  363. aardwolf/keyboard/layouts/layout_KBDMACST.py +1 -0
  364. aardwolf/keyboard/layouts/layout_KBDMON.py +1 -0
  365. aardwolf/keyboard/layouts/layout_KBDMONMO.py +1 -0
  366. aardwolf/keyboard/layouts/layout_KBDMONST.py +1 -0
  367. aardwolf/keyboard/layouts/layout_KBDMYAN.py +1 -0
  368. aardwolf/keyboard/layouts/layout_KBDNE.py +1 -0
  369. aardwolf/keyboard/layouts/layout_KBDNO.py +1 -0
  370. aardwolf/keyboard/layouts/layout_KBDNSO.py +1 -0
  371. aardwolf/keyboard/layouts/layout_KBDNTL.py +1 -0
  372. aardwolf/keyboard/layouts/layout_KBDOGHAM.py +1 -0
  373. aardwolf/keyboard/layouts/layout_KBDOLCH.py +1 -0
  374. aardwolf/keyboard/layouts/layout_KBDOLDIT.py +1 -0
  375. aardwolf/keyboard/layouts/layout_KBDOSA.py +1 -0
  376. aardwolf/keyboard/layouts/layout_KBDOSM.py +1 -0
  377. aardwolf/keyboard/layouts/layout_KBDPL.py +1 -0
  378. aardwolf/keyboard/layouts/layout_KBDPL1.py +1 -0
  379. aardwolf/keyboard/layouts/layout_KBDPO.py +1 -0
  380. aardwolf/keyboard/layouts/layout_KBDRO.py +1 -0
  381. aardwolf/keyboard/layouts/layout_KBDROPR.py +1 -0
  382. aardwolf/keyboard/layouts/layout_KBDROST.py +1 -0
  383. aardwolf/keyboard/layouts/layout_KBDRU.py +1 -0
  384. aardwolf/keyboard/layouts/layout_KBDRU1.py +1 -0
  385. aardwolf/keyboard/layouts/layout_KBDRUM.py +1 -0
  386. aardwolf/keyboard/layouts/layout_KBDSF.py +1 -0
  387. aardwolf/keyboard/layouts/layout_KBDSG.py +1 -0
  388. aardwolf/keyboard/layouts/layout_KBDSL.py +1 -0
  389. aardwolf/keyboard/layouts/layout_KBDSL1.py +1 -0
  390. aardwolf/keyboard/layouts/layout_KBDSN1.py +1 -0
  391. aardwolf/keyboard/layouts/layout_KBDSORA.py +1 -0
  392. aardwolf/keyboard/layouts/layout_KBDSOREX.py +1 -0
  393. aardwolf/keyboard/layouts/layout_KBDSORS1.py +1 -0
  394. aardwolf/keyboard/layouts/layout_KBDSORST.py +1 -0
  395. aardwolf/keyboard/layouts/layout_KBDSP.py +1 -0
  396. aardwolf/keyboard/layouts/layout_KBDSW.py +1 -0
  397. aardwolf/keyboard/layouts/layout_KBDSW09.py +1 -0
  398. aardwolf/keyboard/layouts/layout_KBDSYR1.py +1 -0
  399. aardwolf/keyboard/layouts/layout_KBDSYR2.py +1 -0
  400. aardwolf/keyboard/layouts/layout_KBDTAILE.py +1 -0
  401. aardwolf/keyboard/layouts/layout_KBDTAJIK.py +1 -0
  402. aardwolf/keyboard/layouts/layout_KBDTAM99.py +1 -0
  403. aardwolf/keyboard/layouts/layout_KBDTAT.py +1 -0
  404. aardwolf/keyboard/layouts/layout_KBDTH0.py +1 -0
  405. aardwolf/keyboard/layouts/layout_KBDTH1.py +1 -0
  406. aardwolf/keyboard/layouts/layout_KBDTH2.py +1 -0
  407. aardwolf/keyboard/layouts/layout_KBDTH3.py +1 -0
  408. aardwolf/keyboard/layouts/layout_KBDTIFI.py +1 -0
  409. aardwolf/keyboard/layouts/layout_KBDTIFI2.py +1 -0
  410. aardwolf/keyboard/layouts/layout_KBDTIPRC.py +1 -0
  411. aardwolf/keyboard/layouts/layout_KBDTIPRD.py +1 -0
  412. aardwolf/keyboard/layouts/layout_KBDTT102.py +1 -0
  413. aardwolf/keyboard/layouts/layout_KBDTUF.py +1 -0
  414. aardwolf/keyboard/layouts/layout_KBDTUQ.py +1 -0
  415. aardwolf/keyboard/layouts/layout_KBDTURME.py +1 -0
  416. aardwolf/keyboard/layouts/layout_KBDTZM.py +1 -0
  417. aardwolf/keyboard/layouts/layout_KBDUGHR.py +1 -0
  418. aardwolf/keyboard/layouts/layout_KBDUGHR1.py +1 -0
  419. aardwolf/keyboard/layouts/layout_KBDUK.py +1 -0
  420. aardwolf/keyboard/layouts/layout_KBDUR.py +1 -0
  421. aardwolf/keyboard/layouts/layout_KBDUR1.py +1 -0
  422. aardwolf/keyboard/layouts/layout_KBDURDU.py +1 -0
  423. aardwolf/keyboard/layouts/layout_KBDUS.py +1 -0
  424. aardwolf/keyboard/layouts/layout_KBDUSA.py +1 -0
  425. aardwolf/keyboard/layouts/layout_KBDUSL.py +1 -0
  426. aardwolf/keyboard/layouts/layout_KBDUSR.py +1 -0
  427. aardwolf/keyboard/layouts/layout_KBDUSX.py +1 -0
  428. aardwolf/keyboard/layouts/layout_KBDUZB.py +1 -0
  429. aardwolf/keyboard/layouts/layout_KBDVNTC.py +1 -0
  430. aardwolf/keyboard/layouts/layout_KBDWOL.py +1 -0
  431. aardwolf/keyboard/layouts/layout_KBDYAK.py +1 -0
  432. aardwolf/keyboard/layouts/layout_KBDYBA.py +1 -0
  433. aardwolf/keyboard/layouts/layout_KBDYCC.py +1 -0
  434. aardwolf/keyboard/layouts/layout_KBDYCL.py +1 -0
  435. aardwolf/keyboard/layouts/layout_kbd101.py +1 -0
  436. aardwolf/keyboard/layouts/layout_kbd101a.py +1 -0
  437. aardwolf/keyboard/layouts/layout_kbd101b.py +1 -0
  438. aardwolf/keyboard/layouts/layout_kbd101c.py +1 -0
  439. aardwolf/keyboard/layouts/layout_kbd103.py +1 -0
  440. aardwolf/keyboard/layouts/layout_kbd106.py +1 -0
  441. aardwolf/keyboard/layouts/layout_kbd106n.py +1 -0
  442. aardwolf/keyboard/layouts/layout_kbdarmph.py +1 -0
  443. aardwolf/keyboard/layouts/layout_kbdarmty.py +1 -0
  444. aardwolf/keyboard/layouts/layout_kbdax2.py +1 -0
  445. aardwolf/keyboard/layouts/layout_kbdbhc.py +1 -0
  446. aardwolf/keyboard/layouts/layout_kbdfar.py +1 -0
  447. aardwolf/keyboard/layouts/layout_kbdfi1.py +1 -0
  448. aardwolf/keyboard/layouts/layout_kbdgeoer.py +1 -0
  449. aardwolf/keyboard/layouts/layout_kbdgeome.py +1 -0
  450. aardwolf/keyboard/layouts/layout_kbdgeooa.py +1 -0
  451. aardwolf/keyboard/layouts/layout_kbdgeoqw.py +1 -0
  452. aardwolf/keyboard/layouts/layout_kbdhebl3.py +1 -0
  453. aardwolf/keyboard/layouts/layout_kbdibm02.py +1 -0
  454. aardwolf/keyboard/layouts/layout_kbdinbe1.py +1 -0
  455. aardwolf/keyboard/layouts/layout_kbdinben.py +1 -0
  456. aardwolf/keyboard/layouts/layout_kbdinmal.py +1 -0
  457. aardwolf/keyboard/layouts/layout_kbdlisub.py +1 -0
  458. aardwolf/keyboard/layouts/layout_kbdlisus.py +1 -0
  459. aardwolf/keyboard/layouts/layout_kbdlk41a.py +1 -0
  460. aardwolf/keyboard/layouts/layout_kbdmaori.py +1 -0
  461. aardwolf/keyboard/layouts/layout_kbdmlt47.py +1 -0
  462. aardwolf/keyboard/layouts/layout_kbdmlt48.py +1 -0
  463. aardwolf/keyboard/layouts/layout_kbdne.py +1 -0
  464. aardwolf/keyboard/layouts/layout_kbdnec.py +1 -0
  465. aardwolf/keyboard/layouts/layout_kbdnec95.py +1 -0
  466. aardwolf/keyboard/layouts/layout_kbdnecat.py +1 -0
  467. aardwolf/keyboard/layouts/layout_kbdnecnt.py +1 -0
  468. aardwolf/keyboard/layouts/layout_kbdnepr.py +1 -0
  469. aardwolf/keyboard/layouts/layout_kbdnko.py +1 -0
  470. aardwolf/keyboard/layouts/layout_kbdno1.py +1 -0
  471. aardwolf/keyboard/layouts/layout_kbdpash.py +1 -0
  472. aardwolf/keyboard/layouts/layout_kbdphags.py +1 -0
  473. aardwolf/keyboard/layouts/layout_kbdsmsfi.py +1 -0
  474. aardwolf/keyboard/layouts/layout_kbdsmsno.py +1 -0
  475. aardwolf/keyboard/layouts/layout_kbdukx.py +1 -0
  476. aardwolf/keyboard/webparser.py +256 -0
  477. aardwolf/network/__init__.py +0 -0
  478. aardwolf/network/tpkt.py +116 -0
  479. aardwolf/network/x224.py +60 -0
  480. aardwolf/protocol/T124/GCCPDU.asn +1181 -0
  481. aardwolf/protocol/T124/GCCPDU.py +1183 -0
  482. aardwolf/protocol/T124/__init__.py +0 -0
  483. aardwolf/protocol/T124/userdata/__init__.py +128 -0
  484. aardwolf/protocol/T124/userdata/clientclusterdata.py +47 -0
  485. aardwolf/protocol/T124/userdata/clientcoredata.py +192 -0
  486. aardwolf/protocol/T124/userdata/clientmessagechanneldata.py +42 -0
  487. aardwolf/protocol/T124/userdata/clientmonitorextendeddata.py +93 -0
  488. aardwolf/protocol/T124/userdata/clientmultitransportchanneldata.py +42 -0
  489. aardwolf/protocol/T124/userdata/clientnetworkdata.py +84 -0
  490. aardwolf/protocol/T124/userdata/clientsecuritydata.py +45 -0
  491. aardwolf/protocol/T124/userdata/constants.py +112 -0
  492. aardwolf/protocol/T124/userdata/monitordefinition.py +87 -0
  493. aardwolf/protocol/T124/userdata/servercoredata.py +58 -0
  494. aardwolf/protocol/T124/userdata/servermessagechannel.py +41 -0
  495. aardwolf/protocol/T124/userdata/servermultitransportchanneldata.py +41 -0
  496. aardwolf/protocol/T124/userdata/servernetworkdata.py +55 -0
  497. aardwolf/protocol/T124/userdata/serversecuritydata.py +221 -0
  498. aardwolf/protocol/T125/MCSPDU.ver.2.asn +582 -0
  499. aardwolf/protocol/T125/MCSPDU.ver.3.asn +750 -0
  500. aardwolf/protocol/T125/MCSPDU_ver_2.py +584 -0
  501. aardwolf/protocol/T125/__init__.py +0 -0
  502. aardwolf/protocol/T125/extendedinfopacket.py +235 -0
  503. aardwolf/protocol/T125/infopacket.py +122 -0
  504. aardwolf/protocol/T125/securityexchangepdu.py +37 -0
  505. aardwolf/protocol/T128/__init__.py +0 -0
  506. aardwolf/protocol/T128/clientconfirmactivepdu.py +66 -0
  507. aardwolf/protocol/T128/controlpdu.py +48 -0
  508. aardwolf/protocol/T128/fontlistpdu.py +45 -0
  509. aardwolf/protocol/T128/fontmappdu.py +45 -0
  510. aardwolf/protocol/T128/inputeventpdu.py +49 -0
  511. aardwolf/protocol/T128/persistentbitmapcachepdu.py +103 -0
  512. aardwolf/protocol/T128/security.py +130 -0
  513. aardwolf/protocol/T128/serverdemandactivepdu.py +67 -0
  514. aardwolf/protocol/T128/seterrorinfopdu.py +172 -0
  515. aardwolf/protocol/T128/share.py +140 -0
  516. aardwolf/protocol/T128/synchronizepdu.py +40 -0
  517. aardwolf/protocol/__init__.py +0 -0
  518. aardwolf/protocol/channelpdu.py +60 -0
  519. aardwolf/protocol/fastpath/__init__.py +214 -0
  520. aardwolf/protocol/fastpath/bitmap.py +155 -0
  521. aardwolf/protocol/fastpath/order.py +0 -0
  522. aardwolf/protocol/fastpath/palette.py +81 -0
  523. aardwolf/protocol/fastpath/pointer.py +244 -0
  524. aardwolf/protocol/fastpath/surface.py +299 -0
  525. aardwolf/protocol/pdu/__init__.py +0 -0
  526. aardwolf/protocol/pdu/capabilities/__init__.py +153 -0
  527. aardwolf/protocol/pdu/capabilities/bitmamachachehostsupp.py +35 -0
  528. aardwolf/protocol/pdu/capabilities/bitmap.py +77 -0
  529. aardwolf/protocol/pdu/capabilities/bitmapcache.py +49 -0
  530. aardwolf/protocol/pdu/capabilities/bitmapcache2.py +96 -0
  531. aardwolf/protocol/pdu/capabilities/bitmapcodecs.py +34 -0
  532. aardwolf/protocol/pdu/capabilities/brush.py +37 -0
  533. aardwolf/protocol/pdu/capabilities/colortablecache.py +36 -0
  534. aardwolf/protocol/pdu/capabilities/compdesk.py +36 -0
  535. aardwolf/protocol/pdu/capabilities/control.py +42 -0
  536. aardwolf/protocol/pdu/capabilities/font.py +35 -0
  537. aardwolf/protocol/pdu/capabilities/frameack.py +32 -0
  538. aardwolf/protocol/pdu/capabilities/gdiplus.py +0 -0
  539. aardwolf/protocol/pdu/capabilities/general.py +94 -0
  540. aardwolf/protocol/pdu/capabilities/glyph.py +47 -0
  541. aardwolf/protocol/pdu/capabilities/input.py +68 -0
  542. aardwolf/protocol/pdu/capabilities/largepointer.py +37 -0
  543. aardwolf/protocol/pdu/capabilities/multifragmentupdate.py +32 -0
  544. aardwolf/protocol/pdu/capabilities/ninegrid.py +43 -0
  545. aardwolf/protocol/pdu/capabilities/offscreen.py +38 -0
  546. aardwolf/protocol/pdu/capabilities/order.py +134 -0
  547. aardwolf/protocol/pdu/capabilities/pointer.py +39 -0
  548. aardwolf/protocol/pdu/capabilities/remoteprograms.py +42 -0
  549. aardwolf/protocol/pdu/capabilities/share.py +36 -0
  550. aardwolf/protocol/pdu/capabilities/sound.py +39 -0
  551. aardwolf/protocol/pdu/capabilities/surface.py +40 -0
  552. aardwolf/protocol/pdu/capabilities/virtualchannel.py +45 -0
  553. aardwolf/protocol/pdu/capabilities/windowactivation.py +42 -0
  554. aardwolf/protocol/pdu/capabilities/windowlist.py +43 -0
  555. aardwolf/protocol/pdu/input/__init__.py +83 -0
  556. aardwolf/protocol/pdu/input/keyboard.py +49 -0
  557. aardwolf/protocol/pdu/input/mouse.py +50 -0
  558. aardwolf/protocol/pdu/input/mousex.py +43 -0
  559. aardwolf/protocol/pdu/input/sync.py +41 -0
  560. aardwolf/protocol/pdu/input/unicode.py +39 -0
  561. aardwolf/protocol/pdu/input/unused.py +35 -0
  562. aardwolf/protocol/tpkt.py +39 -0
  563. aardwolf/protocol/vnc/__init__.py +0 -0
  564. aardwolf/protocol/vnc/keyboard.py +82 -0
  565. aardwolf/protocol/x224/__init__.py +17 -0
  566. aardwolf/protocol/x224/client/__init__.py +0 -0
  567. aardwolf/protocol/x224/client/connectionrequest.py +147 -0
  568. aardwolf/protocol/x224/constants.py +134 -0
  569. aardwolf/protocol/x224/data.py +43 -0
  570. aardwolf/protocol/x224/server/__init__.py +0 -0
  571. aardwolf/protocol/x224/server/connectionconfirm.py +134 -0
  572. aardwolf/transport/__init__.py +0 -0
  573. aardwolf/transport/tcpstream.py +158 -0
  574. aardwolf/utils/__init__.py +0 -0
  575. aardwolf/utils/apq.py +63 -0
  576. aardwolf/utils/ducky/__init__.py +407 -0
  577. aardwolf/utils/qt.py +51 -0
  578. aardwolf/utils/rectconvert.py +14 -0
  579. aardwolf/utils/rlers/Cargo.toml +23 -0
  580. aardwolf/utils/rlers/__init__.py +0 -0
  581. aardwolf/utils/rlers/pyproject.toml +12 -0
  582. aardwolf/utils/rlers/src/rle.rs +729 -0
  583. aardwolf/utils/univeraljson.py +22 -0
  584. aardwolf/vncconnection.py +844 -0
  585. aardwolf-0.2.7.dist-info/LICENSE +21 -0
  586. aardwolf-0.2.7.dist-info/METADATA +22 -0
  587. aardwolf-0.2.7.dist-info/RECORD +591 -0
  588. aardwolf-0.2.7.dist-info/WHEEL +5 -0
  589. aardwolf-0.2.7.dist-info/entry_points.txt +2 -0
  590. aardwolf-0.2.7.dist-info/top_level.txt +1 -0
  591. librlers.cpython-39-arm-linux-gnueabihf.so +0 -0
aardwolf/__init__.py ADDED
@@ -0,0 +1,10 @@
1
+ import logging
2
+
3
+ logger = logging.getLogger(__name__)
4
+ handler = logging.StreamHandler()
5
+ formatter = logging.Formatter(
6
+ '%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
7
+ handler.setFormatter(formatter)
8
+ logger.addHandler(handler)
9
+ logger.setLevel(logging.INFO)
10
+ logger.propagate = False
aardwolf/_version.py ADDED
@@ -0,0 +1,7 @@
1
+
2
+ __version__ = "0.2.7"
3
+ __banner__ = \
4
+ """
5
+ # aardwolf %s
6
+ # Author: Tamas Jos @skelsec (info@skelsecprojects.com)
7
+ """ % __version__
aardwolf/channels.py ADDED
@@ -0,0 +1,77 @@
1
+
2
+ import asyncio
3
+ import traceback
4
+
5
+ from aardwolf.protocol.T124.userdata.constants import ChannelOption
6
+
7
+ class Channel:
8
+ def __init__(self, name:str, options:ChannelOption = ChannelOption.INITIALIZED|ChannelOption.ENCRYPT_RDP):
9
+ self.name = name
10
+ self.options = options
11
+ self.channel_id = None
12
+ self.connection = None
13
+
14
+ def get_name(self):
15
+ return self.name
16
+
17
+ async def disconnect(self):
18
+ try:
19
+ _, err = await self.stop()
20
+ if err is not None:
21
+ raise err
22
+ except:
23
+ pass
24
+
25
+ async def run(self, connection):
26
+ try:
27
+ self.connection = connection
28
+ _, err = await self.start()
29
+ if err is not None:
30
+ raise err
31
+ return True, None
32
+ except Exception as e:
33
+ traceback.print_exc()
34
+ return None, e
35
+
36
+
37
+ async def start(self):
38
+ # Override this when implementing new channel type
39
+ try:
40
+ return True, None
41
+ except Exception as e:
42
+ return None, e
43
+
44
+ async def stop(self):
45
+ # Override this when implementing new channel type
46
+ try:
47
+ return True, None
48
+ except Exception as e:
49
+ return None, e
50
+
51
+ async def process_channel_data(self, data):
52
+ # This function will be called when channel data is recieved from the server
53
+ raise NotImplementedError()
54
+
55
+ async def process_user_data(self, data):
56
+ # This function will be called when the channel recieves a new user data
57
+ # Override this function to implement user data processing
58
+ raise NotImplementedError()
59
+
60
+ async def send_channel_data(self, dataobj, sec_hdr, datacontrol_hdr, sharecontrol_hdr, is_fastpath):
61
+ await self.connection.handle_out_data(dataobj, sec_hdr, datacontrol_hdr, sharecontrol_hdr, self.channel_id, is_fastpath)
62
+
63
+ async def send_user_data(self, msg):
64
+ await self.connection.ext_out_queue.put(msg)
65
+
66
+
67
+ class MCSChannel(Channel):
68
+ name = 'MCS'
69
+ def __init__(self, iosettings = None):
70
+ Channel.__init__(self, self.name, ChannelOption.INITIALIZED|ChannelOption.ENCRYPT_RDP)
71
+ self.out_queue = asyncio.Queue()
72
+
73
+
74
+ async def process_channel_data(self, data):
75
+ # This function will be called when channel data is recieved from the server
76
+ #print('Channel data in! "%s(%s)" <- %s' % (self.name, self.channel_id, data))
77
+ await self.out_queue.put((data, None))
File without changes
@@ -0,0 +1,259 @@
1
+ import os
2
+ from hashlib import md5, sha1
3
+ from arc4 import ARC4 as RC4
4
+
5
+ class RDPCryptoLayer:
6
+ def __init__(self, ServerRandom, keysize = 128, is_FIPS = False):
7
+ self.keysize = keysize
8
+ self.ClientRandom:bytes = os.urandom(32) #os.urandom(keysize//8)
9
+ self.ServerRandom:bytes = ServerRandom
10
+ self.PacketCount:int = 0
11
+ self.PacketCountServer:int = 0
12
+ self.PreMasterSecret:bytes = self.First192Bits(self.ClientRandom) + self.First192Bits(self.ServerRandom)
13
+ self.MasterSecret:bytes = None
14
+ self.SessionKeyBlob:bytes = None
15
+ self.MACKey128:bytes = None
16
+ self.InitialServerEncryptKey128:bytes = None
17
+ self.InitialServerDecryptKey128:bytes = None
18
+ self.InitialClientDecryptKey128:bytes = None
19
+ self.InitialClientEncryptKey128:bytes = None
20
+ self.CurrentClientDecryptKey128:bytes = None
21
+ self.CurrentClientEncryptKey128:bytes = None
22
+
23
+ self.MACKey40:bytes = None
24
+ self.InitialServerEncryptKey40:bytes = None
25
+ self.InitialServerDecryptKey40:bytes = None
26
+ self.InitialClientEncryptKey40:bytes = None
27
+ self.InitialClientDecryptKey40:bytes = None
28
+ self.CurrentClientDecryptKey40:bytes = None
29
+ self.CurrentClientEncryptKey40:bytes = None
30
+
31
+ self.MACKey56:bytes = None
32
+ self.InitialServerEncryptKey56:bytes = None
33
+ self.InitialServerDecryptKey56:bytes = None
34
+ self.InitialClientEncryptKey56:bytes = None
35
+ self.InitialClientDecryptKey56:bytes = None
36
+ self.CurrentClientDecryptKey56:bytes = None
37
+ self.CurrentClientEncryptKey56:bytes = None
38
+
39
+
40
+
41
+ self.client_crypto_enc = None
42
+ self.client_crypto_dec = None
43
+ self.server_crypto_enc = None
44
+ self.server_crypto_dec = None
45
+ self.current_mac = None
46
+ self.use_encrypted_mac = False #initial
47
+
48
+ self.setup()
49
+
50
+ def client_enc(self, data:bytes):
51
+ """Use this if you are a client and wanna send data to server"""
52
+ #print('PacketCount %s' % self.PacketCount)
53
+ if self.PacketCount != 0 and self.PacketCount % 4096 == 0:
54
+ #print('Updating keys!')
55
+ self.UpdateKeys(False)
56
+ self.PacketCount += 1
57
+ return self.client_crypto_enc.encrypt(data)
58
+
59
+ def client_dec(self, data:bytes):
60
+ """Use this if you are a client and just got data from the server"""
61
+ #print('PacketCountServer %s' % self.PacketCountServer)
62
+ if self.PacketCountServer != 0 and self.PacketCountServer % 4096 == 0:
63
+ #print('Updating keys!')
64
+ self.UpdateKeys(True)
65
+ self.PacketCountServer += 1
66
+ return self.client_crypto_dec.encrypt(data)
67
+
68
+ def server_enc(self, data:bytes):
69
+ return self.server_crypto_enc.encrypt(data)
70
+
71
+ def server_dec(self, data:bytes):
72
+ return self.server_crypto_dec.encrypt(data)
73
+
74
+ def calc_mac(self, data:bytes):
75
+ # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/7c61b54e-f6cd-4819-a59a-daf200f6bf94
76
+ Pad1 = b'\x36'*40 # repeated 40 times to give 320 bits
77
+ Pad2 = b'\x5C'*48 # repeated 48 times to give 384 bits
78
+
79
+ DataLength = len(data).to_bytes(4, byteorder='little', signed=False)
80
+
81
+ SHAComponent = sha1(self.current_mac + Pad1 + DataLength + data).digest()
82
+ return self.First64Bits(md5(self.current_mac + Pad2 + SHAComponent).digest())
83
+
84
+ def calc_salted_mac(self, data:bytes, is_server:bool = False):
85
+ # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/f390586a-3fdd-4a96-bbe0-a31575e92056
86
+ Pad1 = b'\x36'*40 # repeated 40 times to give 320 bits
87
+ Pad2 = b'\x5C'*48 # repeated 48 times to give 384 bits
88
+
89
+ DataLength = len(data).to_bytes(4, byteorder='little', signed=False)
90
+
91
+ if is_server is True:
92
+ EncryptionCount = (self.PacketCountServer-1).to_bytes(4, byteorder='little', signed=False)
93
+ else:
94
+ EncryptionCount = self.PacketCount.to_bytes(4, byteorder='little', signed=False)
95
+
96
+ SHAComponent = sha1(self.current_mac + Pad1 + DataLength + data + EncryptionCount).digest()
97
+ return self.First64Bits(md5(self.current_mac + Pad2 + SHAComponent).digest())
98
+
99
+
100
+ def setup(self):
101
+ self.MasterSecret = self.PreMasterHash(b'\x41') + self.PreMasterHash(b'\x42\x42') + self.PreMasterHash(b'\x43\x43\x43')
102
+ self.SessionKeyBlob = self.MasterHash(b'\x58') + self.MasterHash(b'\x59\x59') + self.MasterHash(b'\x5A\x5A\x5A')
103
+ self.MACKey128 = self.First128Bits(self.SessionKeyBlob)
104
+
105
+ self.InitialServerEncryptKey128 = self.FinalHash(self.Second128Bits(self.SessionKeyBlob))
106
+ self.InitialServerDecryptKey128 = self.FinalHash(self.Third128Bits(self.SessionKeyBlob))
107
+ self.InitialClientDecryptKey128 = self.FinalHash(self.Second128Bits(self.SessionKeyBlob))
108
+ self.InitialClientEncryptKey128 = self.FinalHash(self.Third128Bits(self.SessionKeyBlob))
109
+
110
+ self.MACKey40 = b'\xD1\x26\x9E' + self.Last40Bits(self.First64Bits(self.MACKey128))
111
+
112
+ self.InitialServerEncryptKey40 = b'\xD1\x26\x9E' + self.Last40Bits(self.First64Bits(self.InitialServerEncryptKey128))
113
+ self.InitialServerDecryptKey40 = b'\xD1\x26\x9E' + self.Last40Bits(self.First64Bits(self.InitialServerDecryptKey128))
114
+
115
+ self.InitialClientEncryptKey40 = b'\xD1\x26\x9E' + self.Last40Bits(self.First64Bits(self.InitialClientEncryptKey128))
116
+ self.InitialClientDecryptKey40 = b'\xD1\x26\x9E' + self.Last40Bits(self.First64Bits(self.InitialClientDecryptKey128))
117
+
118
+ self.MACKey56 = b'\xD1' + self.Last56Bits(self.First64Bits(self.MACKey128))
119
+
120
+ self.InitialServerEncryptKey56 = b'\xD1' + self.Last56Bits(self.First64Bits(self.InitialServerEncryptKey128))
121
+ self.InitialServerDecryptKey56 = b'\xD1' + self.Last56Bits(self.First64Bits(self.InitialServerDecryptKey128))
122
+
123
+ self.InitialClientEncryptKey56 = b'\xD1' + self.Last56Bits(self.First64Bits(self.InitialClientEncryptKey128))
124
+ self.InitialClientDecryptKey56 = b'\xD1' + self.Last56Bits(self.First64Bits(self.InitialClientDecryptKey128))
125
+
126
+ if self.keysize == 128:
127
+ self.current_mac = self.MACKey128
128
+ self.server_crypto_enc = RC4(self.InitialServerEncryptKey128)
129
+ self.server_crypto_dec = RC4(self.InitialServerDecryptKey128)
130
+ self.client_crypto_dec = RC4(self.InitialClientDecryptKey128)
131
+ self.client_crypto_enc = RC4(self.InitialClientEncryptKey128)
132
+
133
+ self.CurrentClientDecryptKey128 = self.InitialClientDecryptKey128
134
+ self.CurrentClientEncryptKey128 = self.InitialClientEncryptKey128
135
+
136
+ if self.keysize == 56:
137
+ self.current_mac = self.MACKey56
138
+ self.server_crypto_enc = RC4(self.InitialServerEncryptKey56)
139
+ self.server_crypto_dec = RC4(self.InitialServerDecryptKey56)
140
+ self.client_crypto_dec = RC4(self.InitialClientDecryptKey56)
141
+ self.client_crypto_enc = RC4(self.InitialClientEncryptKey56)
142
+
143
+ self.CurrentClientDecryptKey56 = self.InitialClientDecryptKey56
144
+ self.CurrentClientEncryptKey56 = self.InitialClientEncryptKey56
145
+
146
+
147
+ if self.keysize == 40:
148
+ self.current_mac = self.MACKey40
149
+ self.server_crypto_enc = RC4(self.InitialServerEncryptKey40)
150
+ self.server_crypto_dec = RC4(self.InitialServerDecryptKey40)
151
+ self.client_crypto_dec = RC4(self.InitialClientDecryptKey40)
152
+ self.client_crypto_enc = RC4(self.InitialClientEncryptKey40)
153
+
154
+ self.CurrentClientDecryptKey40 = self.InitialClientDecryptKey40
155
+ self.CurrentClientEncryptKey40 = self.InitialClientEncryptKey40
156
+
157
+
158
+
159
+ def UpdateKeys(self, is_server:bool = False):
160
+ # https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/a4551a30-db5c-437a-a170-a3934cf8770e
161
+ # The encryption and the decryption keys are updated after 4,096 packets have been sent or received.
162
+
163
+ Pad1 = b'\x36' * 40 #repeated 40 times to give 320 bits
164
+ Pad2 = b'\x5C' * 48 #repeated 48 times to give 384 bits
165
+
166
+ if self.keysize == 128:
167
+ if is_server is True:
168
+ InitialEncryptKey = self.InitialClientDecryptKey128
169
+ CurrentEncryptKey = self.CurrentClientDecryptKey128
170
+ else:
171
+ InitialEncryptKey = self.InitialClientEncryptKey128
172
+ CurrentEncryptKey = self.CurrentClientEncryptKey128
173
+
174
+ if self.keysize == 56:
175
+ if is_server is True:
176
+ InitialEncryptKey = self.First64Bits(self.InitialClientDecryptKey56)
177
+ CurrentEncryptKey = self.First64Bits(self.CurrentClientDecryptKey56)
178
+ else:
179
+ InitialEncryptKey = self.First64Bits(self.InitialClientEncryptKey56)
180
+ CurrentEncryptKey = self.First64Bits(self.CurrentClientEncryptKey56)
181
+
182
+ if self.keysize == 40:
183
+ if is_server is True:
184
+ InitialEncryptKey = self.First64Bits(self.InitialClientDecryptKey40)
185
+ CurrentEncryptKey = self.First64Bits(self.CurrentClientDecryptKey40)
186
+ else:
187
+ InitialEncryptKey = self.First64Bits(self.InitialClientEncryptKey40)
188
+ CurrentEncryptKey = self.First64Bits(self.CurrentClientEncryptKey40)
189
+
190
+ SHAComponent = sha1(InitialEncryptKey + Pad1 + CurrentEncryptKey).digest()
191
+ TempKey128 = md5(InitialEncryptKey + Pad2 + SHAComponent).digest()
192
+ TempKey64 = self.First64Bits(TempKey128)
193
+
194
+ if self.keysize == 128:
195
+ ctx = RC4(TempKey128)
196
+ if is_server is True:
197
+ self.CurrentClientDecryptKey128 = ctx.encrypt(TempKey128)
198
+ self.client_crypto_dec = RC4(self.CurrentClientDecryptKey128)
199
+ else:
200
+ self.CurrentClientEncryptKey128 = ctx.encrypt(TempKey128)
201
+ self.client_crypto_enc = RC4(self.CurrentClientEncryptKey128)
202
+ else:
203
+ ctx = RC4(TempKey64)
204
+ PreSaltKey = ctx.encrypt(TempKey64)
205
+ NewEncryptKey40 = 0xD1269E + self.Last40Bits(PreSaltKey)
206
+ NewEncryptKey56 = 0xD1 + self.Last56Bits(PreSaltKey)
207
+
208
+ if self.keysize == 56:
209
+ if is_server is True:
210
+ self.CurrentClientDecryptKey56 = ctx.encrypt(NewEncryptKey56)
211
+ self.client_crypto_dec = RC4(self.CurrentClientDecryptKey56)
212
+ else:
213
+ self.CurrentClientEncryptKey56 = ctx.encrypt(NewEncryptKey56)
214
+ self.client_crypto_enc = RC4(self.CurrentClientEncryptKey56)
215
+
216
+ if self.keysize == 40:
217
+ if is_server is True:
218
+ self.CurrentClientDecryptKey40 = ctx.encrypt(NewEncryptKey40)
219
+ self.client_crypto_dec = RC4(self.CurrentClientDecryptKey40)
220
+ else:
221
+ self.CurrentClientEncryptKey40 = ctx.encrypt(NewEncryptKey40)
222
+ self.client_crypto_enc = RC4(self.CurrentClientEncryptKey40)
223
+
224
+
225
+ def Last56Bits(self, x:bytes):
226
+ return x[-7:]
227
+
228
+ def First64Bits(self, x:bytes):
229
+ return x[:8]
230
+
231
+ def Last40Bits(self, x:bytes):
232
+ return x[-5:]
233
+
234
+ def Second128Bits(self, x:bytes):
235
+ return x[16:32]
236
+
237
+ def Third128Bits(self, x:bytes):
238
+ return x[32:48]
239
+
240
+ def First192Bits(self, x:bytes):
241
+ return x[:24]
242
+
243
+ def First128Bits(self, x:bytes):
244
+ return x[:16]
245
+
246
+ def SaltedHash(self, S:bytes, I:bytes):
247
+ return md5(S + sha1(I + S + self.ClientRandom + self.ServerRandom).digest()).digest()
248
+
249
+ def MasterHash(self, I:bytes):
250
+ return self.SaltedHash(self.MasterSecret, I)
251
+
252
+ def FinalHash(self, K:bytes):
253
+ return md5(K + self.ClientRandom + self.ServerRandom).digest()
254
+
255
+ def PreMasterHash(self, x:bytes):
256
+ return self.SaltedHash(self.PreMasterSecret, x)
257
+
258
+
259
+
@@ -0,0 +1,145 @@
1
+ import enum
2
+ from typing import List
3
+ from asysocks.unicomm.common.proxy import UniProxyProto, UniProxyTarget
4
+ from aardwolf.commons.iosettings import RDPIOSettings
5
+
6
+ from aardwolf.commons.target import RDPTarget, RDPConnectionDialect
7
+ from asyauth.common.credentials import UniCredential
8
+ from aardwolf.connection import RDPConnection
9
+ from aardwolf.vncconnection import VNCConnection
10
+ import ipaddress
11
+ import copy
12
+
13
+
14
+ class RDPConnectionFactory:
15
+ def __init__(self, iosettings=None, target:RDPTarget = None, credential:UniCredential = None, proxies:List[UniProxyTarget] = None):
16
+ self.credential = credential
17
+ self.target = target
18
+ self.proxies = proxies
19
+ self.iosettings = iosettings
20
+
21
+ def get_connection(self, iosettings):
22
+ tio = copy.deepcopy(iosettings)
23
+ credential = self.get_credential()
24
+ target = self.get_target()
25
+ if target.dialect is not None:
26
+ if target.dialect == RDPConnectionDialect.RDP:
27
+ return RDPConnection(target, credential, tio)
28
+ elif target.dialect == RDPConnectionDialect.VNC:
29
+ return VNCConnection(target, credential, tio)
30
+ else:
31
+ raise Exception('Unknown dialect %s' % target.dialect)
32
+ raise Exception('Either target or dialect must be defined first!')
33
+
34
+ def create_connection_newtarget(self, ip_or_hostname, iosettings):
35
+ tio = copy.deepcopy(iosettings)
36
+ credential = self.get_credential()
37
+
38
+ target = self.get_target()
39
+ try:
40
+ ipaddress.ip_address(ip_or_hostname)
41
+ target.ip = ip_or_hostname
42
+ target.hostname = None
43
+ except:
44
+ target.hostname = ip_or_hostname
45
+ target.ip = ip_or_hostname
46
+
47
+ if target.dialect == RDPConnectionDialect.RDP:
48
+ return RDPConnection(target, credential, tio)
49
+ elif target.dialect == RDPConnectionDialect.VNC:
50
+ return VNCConnection(target, credential, tio)
51
+ else:
52
+ raise Exception('Unknown dialect %s' % target.dialect)
53
+
54
+ def get_proxy(self) -> List[UniProxyTarget]:
55
+ return copy.deepcopy(self.target.proxies)
56
+
57
+ def get_target(self) -> RDPTarget:
58
+ return copy.deepcopy(self.target)
59
+
60
+ def get_credential(self) -> UniCredential:
61
+ return copy.deepcopy(self.credential)
62
+
63
+ def get_settings(self) -> RDPIOSettings:
64
+ return copy.deepcopy(self.iosettings)
65
+
66
+ @staticmethod
67
+ def from_url(connection_url, iosettings):
68
+ target = RDPTarget.from_url(connection_url)
69
+ credential = UniCredential.from_url(connection_url)
70
+ return RDPConnectionFactory(iosettings, target, credential)
71
+
72
+
73
+ def __str__(self):
74
+ t = '==== RDPConnectionFactory ====\r\n'
75
+ for k in self.__dict__:
76
+ val = self.__dict__[k]
77
+ if isinstance(val, enum.IntFlag):
78
+ val = val
79
+ elif isinstance(val, enum.Enum):
80
+ val = val.name
81
+
82
+ t += '%s: %s\r\n' % (k, str(val))
83
+
84
+ return t
85
+
86
+
87
+
88
+ if __name__ == '__main__':
89
+ url_tests = [
90
+ #'RDP://10.10.10.2',
91
+ #'RDP://10.10.10.2:9000',
92
+ #'RDP-tcp://10.10.10.2',
93
+ #'RDP-tcp://10.10.10.2:9000',
94
+ #'RDP-udp://10.10.10.2:138',
95
+ #'RDP+ntlm-password://domain\\user@10.10.10.2',
96
+ #'RDP-tcp+ntlm-password://domain\\user:password@10.10.10.2',
97
+ #'RDP-tcp+ntlm-password://domain\\user:password@10.10.10.2:10000',
98
+ #'RDP-tcp+ntlm-nt://domain\\user:alma@10.10.10.2',
99
+ #'RDP+ntlm-nt://domain\\user:alma@10.10.10.2',
100
+ #'RDP+ntlm-nt://domain\\user:alma@10.10.10.2',
101
+ #'RDP-tcp+kerberos-password://domain\\alma:password@10.10.10.10.2',
102
+ #'RDP-tcp+kerberos-aes://domain\\alma:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@10.10.10.10.2',
103
+ #'RDP-tcp+kerberos-aes://domain\\alma:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@10.10.10.10.2',
104
+ #'RDP-tcp+kerberos-nt://domain\\alma:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@10.10.10.10.2',
105
+ #'RDP-tcp+kerberos-rc4://domain\\alma:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@10.10.10.10.2',
106
+ #'RDP+sspi://10.10.10.10.2',
107
+ #'RDP+sspi-ntlm://10.10.10.10.2',
108
+ #'RDP+sspi-kerberos://10.10.10.10.2',
109
+ #'RDP+multiplexor://10.10.10.10.2',
110
+ #'RDP+multiplexor-ssl://10.10.10.10.2',
111
+ #'RDP+multiplexor-ssl-ntlm://10.10.10.10.2',
112
+ #'RDP+multiplexor-ssl-kerberos://10.10.10.10.2',
113
+ #'RDP://10.10.10.2/?timeout=10',
114
+ #'RDP://10.10.10.2/?timeout=10&dc=10.10.10.2',
115
+ #'RDP://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=socks5',
116
+ #'RDP://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=socks5&proxyserver=127.0.0.1',
117
+ #'RDP://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=socks5&proxyserver=127.0.0.1&proxyuser=admin&proxypass=alma',
118
+ #'RDP://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=socks5&proxyserver=127.0.0.1&proxyuser=admin&proxypass=alma&dc=10.10.10.2&dns=8.8.8.8',
119
+ #'RDP://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=socks5-ssl&proxyserver=127.0.0.1&proxyuser=admin&proxypass=alma&dc=10.10.10.2&dns=8.8.8.8',
120
+ #'RDP://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=multiplexor&proxyserver=127.0.0.1',
121
+ #'RDP://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=multiplexor&proxyserver=127.0.0.1&proxyagentid=alma',
122
+ #'RDP://10.10.10.2/?timeout=10&dc=10.10.10.2&proxytype=multiplexor&proxyserver=127.0.0.1&proxyagentid=alma&proxytimeout=111',
123
+ 'RDP://10.10.10.2/C$/test/tst111.dmp?timeout=10&dc=10.10.10.2&proxytype=multiplexor&proxyhost=127.0.0.1&proxyport=1&proxyagentid=alma&proxytimeout=111',
124
+
125
+ ]
126
+ for url in url_tests:
127
+ print('===========================================================================')
128
+ print(url)
129
+ try:
130
+ dec = RDPConnectionFactory.from_url(url)
131
+ creds = dec.get_credential()
132
+ target = dec.get_target()
133
+ RDPfile = dec.get_file()
134
+ print(RDPfile)
135
+ except Exception as e:
136
+ import traceback
137
+ traceback.print_exc()
138
+ print('ERROR! Reason: %s' % e)
139
+ input()
140
+ else:
141
+ print(str(creds))
142
+ print(str(target))
143
+ input()
144
+
145
+
@@ -0,0 +1,70 @@
1
+ from aardwolf.extensions.RDPECLIP.channel import RDPECLIPChannel
2
+ from aardwolf.protocol.x224.constants import SUPP_PROTOCOLS, NEG_FLAGS
3
+ from aardwolf.commons.queuedata.constants import VIDEO_FORMAT
4
+ from aardwolf.protocol.T125.extendedinfopacket import PERF
5
+ from aardwolf.extensions.RDPEDYC.channel import RDPEDYCChannel
6
+
7
+ from aardwolf.extensions.RDPEDYC.vchannels.echo import VchannelECHO
8
+ #from aardwolf.extensions.RDPEDYC.vchannels.test import VchannelTEST
9
+
10
+ class RDPIOSettings:
11
+ def __init__(self):
12
+ # RDP only settings
13
+ # Which channels should be enabled
14
+ self.channels = [RDPECLIPChannel, RDPEDYCChannel]
15
+ self.vchannels = {
16
+ 'ECHO' : VchannelECHO(),
17
+ #'DATATEST1' : VchannelTEST(),
18
+ }
19
+ # Authentication protocols supported
20
+ self.supported_protocols = None # supported_protocols if None: it will be determined automatically. otherwise select one or more from these SUPP_PROTOCOLS.RDP | SUPP_PROTOCOLS.SSL |SUPP_PROTOCOLS.HYBRID_EX
21
+
22
+ # Video settings used by both RDP and VNC
23
+ self.video_width = 1024
24
+ self.video_height = 768
25
+ self.video_out_format = VIDEO_FORMAT.QT5 # the recatngle image format which will be sent via the queue
26
+
27
+ # Video settings used only by RDP
28
+ # minimum supported BPP
29
+ self.video_bpp_min = 16
30
+ # maximum supported BPP
31
+ self.video_bpp_max = 16 #max supported bpp
32
+ # all supported BPPs
33
+ self.video_bpp_supported = [15, 16, 24, 32]
34
+
35
+ #Performance booster flags
36
+ self.performance_flags = PERF.DISABLE_WALLPAPER | PERF.DISABLE_THEMING | PERF.DISABLE_CURSORSETTINGS | PERF.DISABLE_MENUANIMATIONS | PERF.DISABLE_FULLWINDOWDRAG
37
+
38
+ # Keyboard settings
39
+ # Keyborad settings used by both RDP and VNC
40
+ # clinet_keyboard is used by VNC where the keyboard state must be virtualized client-side
41
+ self.client_keyboard = 'enus'
42
+
43
+ # Keyboard setting used only by RDP
44
+ # TODO: this should be cleaned up
45
+ self.keyboard_layout = 1033
46
+ self.keyboard_type = 4
47
+ self.keyboard_subtype = 0
48
+ self.keyboard_functionkey = 12
49
+
50
+ # Clipboard settings
51
+
52
+ # pyperclip is currently the only somewhat working cross-platform clipboard manager
53
+ # disabling it means that clipboard messages will only be dispatched via the external queue
54
+ # but the client's clipboard will not be updated
55
+ self.clipboard_use_pyperclip = True
56
+
57
+ # store all incloing clipboard data recieved from server. Text only
58
+ # set it to true to have a file created, or to a string with a file path
59
+ #
60
+ self.clipboard_store_data = None
61
+
62
+ # determines how often the client polls for desktop changes
63
+ self.vnc_fps = 10
64
+
65
+ # determines what type of encoding the client supports.
66
+ # Feel free to change the order of these but not the value.
67
+ # Each value corresponds to an encoding type and only these three anre implemented currently.
68
+ # The order signifies the preference to the server but the server can decide to ignore it
69
+ self.vnc_encodings = [2, 1, 0]
70
+
@@ -0,0 +1,56 @@
1
+
2
+ from aardwolf.commons.connection.url import RDPConnectionURL
3
+ from aardwolf.commons.connection.credential import RDPCredentialTypes
4
+
5
+ RDP_CONNECTION_PARAM_MANDATORY = ['domain','user','password','auth_type', 'timeout', 'protocol']
6
+
7
+
8
+ class RDPConnectionParams:
9
+ def __init__(self):
10
+ pass
11
+
12
+ @staticmethod
13
+ def extend_parser(parser):
14
+ group = parser.add_argument_group('Parameter based connection')
15
+ group.add_argument('-d', '--domain', default='.', help='Domainname')
16
+ group.add_argument('-u', '--user', help='Username')
17
+ group.add_argument('-p', '--password', help='Password (or other secret for authentication)')
18
+ group.add_argument('-a', '--auth-type', choices=[e.value for e in RDPCredentialTypes], default='ntlm-password', help='authentication type')
19
+ group.add_argument('-t', '--timeout', type=int, default=5, help='Connection timeout')
20
+ group.add_argument('--protocol', choices=['RDP', 'RDP2', 'RDP3'], default='RDP2', help='RDP protocol version')
21
+ group.add_argument('--dc', help='DC ip for kerberos')
22
+
23
+ @staticmethod
24
+ def parse_args(args):
25
+ for p in RDP_CONNECTION_PARAM_MANDATORY:
26
+ if hasattr(args, p) is False:
27
+ raise Exception('The parameter "%s" is mandatory for parameter based connection setup!' % p)
28
+ if getattr(args, p) is None:
29
+ raise Exception('The parameter "%s" cannot be empty!' % p)
30
+
31
+ url_template = '{protocol}+{auth_type}://{domainname}\\{username}:{password}@{host}/'
32
+ params = {
33
+ 'protocol' : args.protocol,
34
+ 'auth_type' : args.auth_type,
35
+ 'domainname': args.domain,
36
+ 'username' : args.user,
37
+ 'password' : args.password,
38
+ 'host' : args.host if hasattr(args, 'host') else None,
39
+ }
40
+
41
+ url = url_template.format(**params)
42
+ print(url)
43
+ return url
44
+
45
+
46
+ if __name__ == '__main__':
47
+ import argparse
48
+ parser = argparse.ArgumentParser(prog='TEST')
49
+
50
+ RDPConnectionParams.extend_parser(parser)
51
+
52
+ print(parser)
53
+
54
+ args = parser.parse_args()
55
+
56
+ RDPConnectionParams.parse_args(args)
@@ -0,0 +1,19 @@
1
+ import enum
2
+
3
+ class RDPDATATYPE(enum.Enum):
4
+ VIDEO = "VIDEO"
5
+ KEYSCAN = 'KEYSCAN'
6
+ KEYUNICODE = 'KEYUNICODE'
7
+ MOUSE = 'MOUSE'
8
+ CLIPBOARD_READY = 'CLIPBOARD_READY'
9
+ CLIPBOARD_DATA_TXT = 'CLIPBOARD_DATA_TXT'
10
+ CLIPBOARD_CONSUMED = 'CLIPBOARD_CONSUMED'
11
+ CLIPBOARD_NEW_DATA_AVAILABLE = 'CLIPBOARD_NEW_DATA_AVAILABLE'
12
+ BEEP = 'BEEP'
13
+
14
+ from aardwolf.commons.queuedata.video import RDP_VIDEO
15
+ from aardwolf.commons.queuedata.keyboard import RDP_KEYBOARD_SCANCODE, RDP_KEYBOARD_UNICODE
16
+ from aardwolf.commons.queuedata.mouse import RDP_MOUSE
17
+ from aardwolf.commons.queuedata.clipboard import RDP_CLIPBOARD_READY, RDP_CLIPBOARD_DATA_TXT, RDP_CLIPBOARD_CONSUMED, RDP_CLIPBOARD_NEW_DATA_AVAILABLE
18
+ from aardwolf.commons.queuedata.beep import RDP_BEEP
19
+
@@ -0,0 +1,21 @@
1
+ import enum
2
+ from aardwolf.commons.queuedata import RDPDATATYPE
3
+
4
+ class RDP_BEEP:
5
+ """
6
+ This object will be dispatched on the external queue
7
+ when the server sends a Beep or Bell notification
8
+ """
9
+ def __init__(self):
10
+ self.type = RDPDATATYPE.BEEP
11
+ def __repr__(self):
12
+ t = '==== RDP_BEEP ====\r\n'
13
+ for k in self.__dict__:
14
+ if isinstance(self.__dict__[k], enum.IntFlag):
15
+ value = self.__dict__[k]
16
+ elif isinstance(self.__dict__[k], enum.Enum):
17
+ value = self.__dict__[k].name
18
+ else:
19
+ value = self.__dict__[k]
20
+ t += '%s: %s\r\n' % (k, value)
21
+ return t