code.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. """
  2. Hello Chris!
  3. Happy merry holiday Christmas time. Emma and I wanted to get you a
  4. mouse wiggler so we ended up getting you the deluxe version. Your wiggler
  5. comes tricked out with (seriously):
  6. + 120MHz CPU
  7. + 4 KB L1 Cache
  8. + a true random number generator
  9. + elliptic curve cryptography hardware support (also RSA and DSA)
  10. + Direct Memory Access Conroller (zero copy writes)
  11. + USB host and device peripheral support in hardware
  12. + USART, I2C, SPI, LIN, and RS458 busses
  13. + proximity sense / capacitive touch peripherals
  14. + a bunch of GPIO, timers, DAC, comparators, temp sensor, everything
  15. + built-in RAM, seems underwhelming, but not to be scoffed at: 192 KB
  16. + built-in flash storage (again not a lot, but low power): 512 KB
  17. It is actually a break-out-board for an ARM system-on-a-chip, the
  18. [ATSAMD51 Cortex M4](https://www.microchip.com/en-us/product/atsamd51g19a).
  19. It is packaged by Adafruit on their ItsyBitsy M4 Express board. The reason
  20. we picked this package is that it comes with an approachable interactive
  21. developer environment. Adafruit added an external 2 MB (it is on-board) flash
  22. memory chip to write programs to. You can copy files to the board using a
  23. generic file manager.
  24. The firmware that is flashed into the SoC has a built-in Python interpreter.
  25. It is not Python3, so you will not be able to use any of the NumPy,
  26. psycopg2, or other common Python3 compatible libraries. The interpreter
  27. supports something called CircuitPython. You can write code in Python, save
  28. the code to the flash-drive, then it will automatically begin executing your
  29. code in hardware. This is somewhat a dream for programming. Usually one
  30. does not get this level of support. I am jealous.
  31. Anyways, aside from the limitation of the lack of Python3 libraries, this is
  32. still a powerful IDE. And as far as mouse-wigglers, it is ultra-overkill.
  33. We want you to reprogram it. If you do, let us know, share your code with
  34. us we really hope that you like it. Now you can write custom mouse wigglers
  35. keyboard injectors in case MS-Teams changes "busy" criteria. You may also
  36. find it useful in pen-testing as you can type whatever commands you want from
  37. the keyboard.
  38. Kyle + Emma
  39. """
  40. import time
  41. import usb_hid
  42. from adafruit_hid.mouse import Mouse
  43. """
  44. Hmmm, I wonder what this could be? Maybe you should shake it to find out what
  45. it is? It seems to be nicely wrapped. You can see a red ribbon with a
  46. beautifully tied bow. Did it just move?
  47. """
  48. aGift = \
  49. b'\x7F' b'\x7F' b'\x84' b'\x7E' b'\x84' b'\x80' b'\x83' b'\x7F' b'\x83' \
  50. b'\x81' b'\x83' b'\x80' b'\x83' b'\x81' b'\x83' b'\x82' b'\x82' b'\x82' \
  51. b'\x82' b'\x82' b'\x82' b'\x82' b'\x82' b'\x83' b'\x81' b'\x83' b'\x82' \
  52. b'\x83' b'\x83' b'\x88' b'\x82' b'\x88' b'\x81' b'\x88' b'\x80' b'\x89' \
  53. b'\x80' b'\x89' b'\x7E' b'\x88' b'\x7E' b'\x87' b'\x7E' b'\x83' b'\x7E' \
  54. b'\x83' b'\x7D' b'\x83' b'\x7D' b'\x82' b'\x7D' b'\x82' b'\x7D' b'\x82' \
  55. b'\x7D' b'\x81' b'\x7C' b'\x81' b'\x7D' b'\x81' b'\x7C' b'\x80' b'\x7C' \
  56. b'\x81' b'\x7C' b'\x7F' b'\x7C' b'\x80' b'\x7C' b'\x7F' b'\x78' b'\x80' \
  57. b'\x78' b'\x7E' b'\x78' b'\x7D' b'\x77' b'\x7D' b'\x78' b'\x7C' b'\x77' \
  58. b'\x7B' b'\x78' b'\x7B' b'\x77' b'\x7B' b'\x78' b'\x7A' b'\x77' b'\x7A' \
  59. b'\x78' b'\x7A' b'\x7B' b'\x7B' b'\x7C' b'\x7B' b'\x7C' b'\x7B' b'\x7C' \
  60. b'\x7A' b'\x7C' b'\x7A' b'\x7E' b'\x7A' b'\x7D' b'\x7A' b'\x7E' b'\x7A' \
  61. b'\x7F' b'\x7A' b'\x7F' b'\x7A' b'\x80' b'\x7B' b'\x80' b'\x7C' b'\x81' \
  62. b'\x7C' b'\x82' b'\x7C' b'\x80' b'\x7E' b'\x81' b'\x7F' b'\x81' b'\x7E' \
  63. b'\x81' b'\x7F' b'\x81' b'\x7F' b'\x81' b'\x80' b'\x81' b'\x7F' b'\x80' \
  64. b'\x81' b'\x81' b'\x80' b'\x80' b'\x82' b'\x80' b'\x83' b'\x81' b'\x83' \
  65. b'\x80' b'\x85' b'\x7F' b'\x87' b'\x80' b'\x87' b'\x7F' b'\x8A' b'\x7F' \
  66. b'\x8B' b'\x7F' b'\x8D' b'\x7E' b'\x90' b'\x7C' b'\x75' b'\x7C' b'\x78' \
  67. b'\x7D' b'\x7B' b'\x7E' b'\x7C' b'\x7D' b'\x7D' b'\x7D' b'\x7D' b'\x7D' \
  68. b'\x7D' b'\x7D' b'\x7E' b'\x7D' b'\x7E' b'\x7D' b'\x7F' b'\x7D' b'\x7F' \
  69. b'\x7D' b'\x80' b'\x7D' b'\x80' b'\x7D' b'\x80' b'\x7E' b'\x81' b'\x7E' \
  70. b'\x80' b'\x7D' b'\x84' b'\x7D' b'\x89' b'\x7D' b'\x83' b'\x7E' b'\x83' \
  71. b'\x7E' b'\x81' b'\x7E' b'\x80' b'\x7D' b'\x80' b'\x7E' b'\x7F' b'\x7C' \
  72. b'\x7F' b'\x7C' b'\x7E' b'\x7C' b'\x7D' b'\x7D' b'\x7D' b'\x7D' b'\x7C' \
  73. b'\x7E' b'\x7C' b'\x7E' b'\x7C' b'\x7F' b'\x7B' b'\x7E' b'\x7C' b'\x7F' \
  74. b'\x7C' b'\x80' b'\x7B' b'\x7F' b'\x7D' b'\x80' b'\x7C' b'\x80' b'\x7D' \
  75. b'\x81' b'\x7D' b'\x80' b'\x7E' b'\x78' b'\x83' b'\x7B' b'\x80' b'\x7B' \
  76. b'\x80' b'\x7A' b'\x7F' b'\x7A' b'\x7F' b'\x7A' b'\x7D' b'\x79' b'\x7D' \
  77. b'\x80' b'\x87' b'\x80' b'\x84' b'\x80' b'\x83' b'\x7F' b'\x83' b'\x7E' \
  78. b'\x83' b'\x7E' b'\x82' b'\x7E' b'\x80' b'\x7E' b'\x80' b'\x7D' b'\x80' \
  79. b'\x7D' b'\x80' b'\x7C' b'\x7F' b'\x7D' b'\x7E' b'\x7C' b'\x7E' b'\x7C' \
  80. b'\x7E' b'\x7C' b'\x7E' b'\x7C' b'\x7C' b'\x7C' b'\x7D' b'\x7C' b'\x7C' \
  81. b'\x7D' b'\x7C' b'\x7C' b'\x7B' b'\x7D' b'\x7C' b'\x7D' b'\x7A' b'\x7D' \
  82. b'\x7B' b'\x7E' b'\x7A' b'\x80' b'\x86' b'\x81' b'\x86' b'\x7F' b'\x82' \
  83. b'\x7F' b'\x83' b'\x7F' b'\x82' b'\x7E' b'\x81' b'\x7E' b'\x81' b'\x7E' \
  84. b'\x81' b'\x7D' b'\x80' b'\x7C' b'\x7F' b'\x7C' b'\x7F' b'\x7B' b'\x7E' \
  85. b'\x7A' b'\x7C' b'\x79' b'\x7C' b'\x7D' b'\x7D' b'\x7D' b'\x7D' b'\x7B' \
  86. b'\x77' b'\x7B' b'\x77' b'\x7B' b'\x78' b'\x7A' b'\x88' b'\x7C' b'\x87' \
  87. b'\x7D' b'\x85' b'\x7D' b'\x84' b'\x7E' b'\x83' b'\x7F' b'\x82' b'\x80' \
  88. b'\x81' b'\x80' b'\x81' b'\x81' b'\x7F' b'\x82' b'\x7F' b'\x82' b'\x7F' \
  89. b'\x82' b'\x7E' b'\x86' b'\x7C' b'\x86' b'\x7A' b'\x79' b'\x83' b'\x79' \
  90. b'\x81' b'\x79' b'\x82' b'\x78' b'\x80' b'\x78' b'\x80' b'\x78' b'\x7F' \
  91. b'\x78' b'\x7F' b'\x78' b'\x7E' b'\x77' b'\x7E' b'\x78' b'\x7E' b'\x77' \
  92. b'\x7C' b'\x77' b'\x7D' b'\x77' b'\x7C' b'\x77' b'\x7B' b'\x77' b'\x7B' \
  93. b'\x76' b'\x7B' b'\x6F' b'\x76' b'\x6E' b'\x75' b'\x6E' b'\x73' b'\x6E' \
  94. b'\x73' b'\x6E' b'\x72' b'\x6F' b'\x71' b'\x6F' b'\x71' b'\x6F' b'\x71'
  95. # CircuitPython already enumerates HID mouse, get a handle for it
  96. mouse = Mouse(usb_hid.devices)
  97. autoClick = False
  98. delay = 0.5
  99. # turn off the delay if auto-click is enabled
  100. if autoClick:
  101. delay = 0
  102. while True:
  103. # wiggle the mouse
  104. for i in range(len(aGift) / 2):
  105. mouse.move(x=-(aGift[2*i] - 127), y=aGift[2*i+1] - 127)
  106. # reset mouse position, delay makes it easier to manually click the mouse
  107. time.sleep(delay)
  108. if autoClick: mouse.release(mouse.LEFT_BUTTON)
  109. mouse.move(x=-211,y=26)
  110. time.sleep(delay)
  111. if autoClick: mouse.click(mouse.LEFT_BUTTON)