三日坊主ブログ

三日坊主ブログ

あきたらやめます

どの家庭にもある「あのアイテム」を使ってiPhoneスクリーンタイムパスコードを乱数化する

はじめに

どうも。私があのせつおです。

突然ですが、僕はTwitter中毒なので一日の空き時間をほぼTwitterで費やしてしまいます。

あまりにも嫌なのでTwitterを見る時間を減らしたいのですが、皆さんどうやって対策していますか?

周りの人に聞いてみると。。。。

  • 通勤時間しか極力見ないようにする
  • アプリを消してそもそも見ないようにする

等々が有りました。

  • ルール化 → そんなの出来るなら最初からやってる
  • アプリを消す→ブラウザで見ちゃう

というゴミっぷりなので何をやっても無駄だなって思ってました。

ある日、かのRoland氏のYoutubeの動画を見てみると・・・

https://youtu.be/T7rSPnyXWWA?t=475

  • 3~15時はスマホ自体にロックをかけている
  • パスワードは店長しか知らない

という徹底ぶり。

その時、せつおに電流走る。

こ、これや~~

ちなみに僕の周りの人間はみんなゴミです。

パスワードを人に設定してもらおうとしても多分嘘つかれたり忘れられたりすると思うので、極力自分の力で頑張ろうと思います。

先日、iPhone SEを購入したのもあって、今回はiPhoneのスクリーンタイムパスコードを自分が知らない値に設定することを目指します。

f:id:sky2564:20200623221113p:plain
この画面、無限に突破してきました。

ぱっと頭を巡らせたところ

  • 何らかの方法で4桁の乱数を生成
  • それを直接iPhoneに打ち込む
  • 万が一に備えて乱数はバックアップをとる

といった方法ができたら良いな、となりますね。 この用途なら、どの家庭にもあるアレが火を吹きます。

そう。。。

ESP32

f:id:sky2564:20200623211927j:plain
持ってないとか遅れてますよ。

こいつのBluetoothを使ってiPhoneに接続し、仮想キーボード化します。

Pythonで乱数を作って、それをSerialで渡す方式が簡単そうなのでそれを目指します。

準備

まずはライブラリを拾ってきます。 ZIPで落としたなら解凍してC:\Users\xxxx\Documents\Arduino\librariesに置きましょう。

github.com

ArduinoIDEで見れていればOKです。

f:id:sky2564:20200623215105p:plain
BLE Keyboardっぽいのが表示されていればOK

実装

まずはサンプルコードを試しましょう。

/**
 * This example turns the ESP32 into a Bluetooth LE keyboard that writes the words, presses Enter, presses a media key and then Ctrl+Alt+Delete
 */
#include <BleKeyboard.h>

BleKeyboard bleKeyboard;

void setup()
{
  Serial.begin(115200);
  Serial.println("Starting BLE work!");
  bleKeyboard.begin();
}

void loop()
{
    if(bleKeyboard.isConnected())
    {
        Serial.println("Sending 'Hello world'...");
        bleKeyboard.print("Hello world");

        delay(1000);

        Serial.println("Sending Enter key...");
        bleKeyboard.write(KEY_RETURN);

        bleKeyboard.releaseAll();
    }
    Serial.println("Waiting 5 seconds...");
    delay(5000);
}

正常に書き込みが終わったら、iPhoneBluetooth画面からペアリングしましょう。 f:id:sky2564:20200623211959p:plainf:id:sky2564:20200623212010p:plain

ペアリングができたらノートアプリを開きます。ソフトキーボードが表示されていなければOKです。

Hello worldと入力されるはずです。

f:id:sky2564:20200623212023p:plain
接続切るまで無限に入力されます。

サンプルの動作が確認できたので、あとは乱数生成してその値を打ち込んでもらいます。

なんか面倒だったので1000~9999の間の乱数にします。

Arduino


/* This example turns the ESP32 into a Bluetooth LE keyboard that writes the words, presses Enter, presses a media key and then Ctrl+Alt+Delete */
#include <BleKeyboard.h>

BleKeyboard bleKeyboard;
String str_screen_time_pass = String(1000);
int incomingByte[2]={0,0};
int out_num;
void setup()
{
  Serial.begin(115200);
  Serial.println("Starting BLE work!");
  bleKeyboard.begin();
}

void loop()
{
  if(bleKeyboard.isConnected())
  {
    /* serial を受信したときだけ送信 */
    /* 1000 ~ 9999 を2byteで送ってStringに変換する */

    if (Serial.available() >= 2)
    { 
      incomingByte[0] = Serial.read(); // 受信データを読み込む
      incomingByte[1] = Serial.read();

      out_num = incomingByte[1]*256 +incomingByte[0];

      str_screen_time_pass = String(out_num,DEC);

      Serial.print("I received: "); // 受信データを送りかえす
      Serial.println(str_screen_time_pass);

      bleKeyboard.print(str_screen_time_pass);

      delay(1000);

      
      bleKeyboard.write(KEY_RETURN);

      bleKeyboard.releaseAll();
    }
  }
  
  delay(5000);
}

PC側

import random
import serial
import time
import pandas as pd

if __name__ == "__main__":
    # 1000~9999の乱数を生成
    random_num = random.randrange(1000,9999)

    # serial
    ser = serial.Serial("COM3", baudrate = 115200,timeout = 1)

    # serialを書き込む
    time.sleep(10)
    ser.write((random_num).to_bytes(2, byteorder="little"))
    time.sleep(10)
    ser.write((random_num).to_bytes(2, byteorder="little"))

    ser.close()
        
        # バックアップしておく
    pd.DataFrame([random_num]).to_csv("screen_time_pass.csv")

あとは以下の手順でスクリーンタイムパスコードを乱数化できます。

  • Bluetoothペアリング解除
  • ESP32に書き込み
  • iPhoneでスクリーンタイムパスコードの設定画面まで行く
  • 古いパスワードがある場合、解除しておく
  • Bluetoothペアリング
  • Python実行

生成されたCSVはGoogleDriveにでも放り込んでおきましょう。 f:id:sky2564:20200623211827p:plain

これでTwitterから開放されます。僕は一日30分設定にしているので、それですむわけですね。

どうしても我慢できなくなったらGoogleDriveを覗きに行きましょう。

さいごに

最近は携帯二台持ちなので多分2台目でTwitter見ると思います。

一体だれ向けの記事なんだろう・・・・

また書きます。

参考 https://neocat.hatenablog.com/entry/2019/09/28/151947