SECCON workshop 参加レポ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/7ba1b6d5-9af5-1219-c381-1dd6c45fac51.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/dc654e64-e0f7-ed58-ed2a-d2dd1b616b06.png)

[日本Androidの会秋葉原支部ロボット部 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/akbrobot) 23日目です。

というわけで今週の土日に秋葉原で行われていた [SECCON](https://www.seccon.jp/2019/akihabara/) のワークショップに参加してきたのでそのレポートを簡単にまとめたいと思います。

### 1日目 8pinマイコンのプログラミング

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/5597a025-b492-24bc-8fc2-e3b7fd85ff56.png)


1日目のワークショップでは8pinマイコンのプログラミングに参加しました。
Attiny85を利用したプログラミングを行うということで、参加者にブレットボード、ジャンパ線、LED、抵抗、Aruduino nano、Attiny85が袋詰めされたセットが配られました。

ワークショップではAruduino nanoを書き込み機として利用するため、Aruduino IDEを開いてファイル > スケッチ例から Arduino ISP を開いて Arduino nano に書き込みました。
この時、プロセッサで "ATmega328P (Old Bootloader)" を指定することで上手く書き込みに成功しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/9526079a-36ac-4b45-261b-0c4826f83080.png)


Arduino nano を書き込み機にしたら、↑の写真のように回路を組んで、Attiny85にLチカのスケッチを書き込みます。

```c++

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(3, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(3, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);                       // wait for a second
  digitalWrite(3, LOW);    // turn the LED off by making the voltage LOW
  delay(100);
  
}
```

書き込み装置を Arduino as ISP にセットしてスケッチをuploadします。
正常に書き込みが完了するとLEDが点滅します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/401e1076-f07e-9097-f4f0-6b4b50b91ce0.png)

SECCONらしく？ということでインラインアセンブラでLチカするスケッチも書きました。
いつものAruduinoのスケッチとは異なり、loop()の関数が空っぽなのが新鮮でした。
アセンブラについてはAVRのリファレンスを読むと、各命令が何を意味しているのかがわかりました。

[AVR命令一式手引書](https://avr.jp/user/DS/PDF/AVRinst.pdf)

```c
#define ASM(x) asm volatile(x "\n\t")

void setup() {
  // put your setup code here, to run once:
  ASM("ldi  r16, 0b00001000");
  ASM("out  0x17, r16");
  ASM("ldi  r19, 1");
  ASM("ldi  r20, 1");
  task();

}

void loop() {
  // put your main code here, to run repeatedly:

}

void task() {
  ASM("task1:");
  //LEDを点灯
  ASM(" ldi r16, 0b00001000");
  ASM(" out 0x18, r16");
  //待つ
  ASM(" rcall delay0");
  //LEDを消す
  ASM(" ldi r16, 0b00000000");
  ASM(" out 0x18, r16");
  //待つ
  ASM(" rcall delay0");
  ASM(" rjmp task1");

  ASM("delay0:");
  ASM(" ldi r17, 0");

  ASM("delay1:");
  ASM(" ldi r18, 0");
  ASM("delay2:");
  ASM(" dec r18");
  ASM(" brne delay2");
  ASM(" dec r11");
  ASM(" brne delay1");
  ASM(" ret");
  
}
```

### 2日目 LANパケットを聴いてみよう

タイトルからして意味がわからないやつです。:stuck_out_tongue_winking_eye:
これは行くっきゃない！と当日行ってみると、セットが配布されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/bf211482-f508-c57d-394f-f6add65bc868.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/94397265-8a69-6698-cbe2-14741e843249.png)

セットにはオペアンプ、ブレットボード、イヤホンなどが入っていました。

http://akizukidenshi.com/catalog/g/gI-09216/


オペアンプを中心に↑のような回路を作成して、片方を電源に、もう片方はLANケーブルの真ん中あたりで銅線をむき出しにしたものにクリップケーブルで接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146663/dc904335-ee43-b5f3-3550-782eb8e522e6.png)

オペアンプでLANの電気信号を増幅させて、それを耳で聞いてみようということですね！

自分のPCととなりの方のPCをLANケーブルでつないでPingを飛ばしあってみると確かに音というか「ブッブッブッ....」連続する音が聞こえた気がします！:heart_eyes:

これでパケットを聴くこと出来るようになりました。
色々なパケットを聞き分けて楽しんでみたいと思います。

### 最後に
他人のパケットを無断盗聴すると犯罪に問われる場合があります。
あくまでもこのワークショップはパケットを盗聴することを教唆するものではありませんとのことを講師の方も仰られておりましたので、皆様くれぐれもお気を付けください。

SECCONのスタッフの方々、参加したみなさん、お疲れ様でした。