エンジニアらしくポルポテストに合格してみる

## :star2:  ポルポテストとは？
- [何としてもこの炎は守らなくては……　24時間耐久する入団試験ゲーム「ポルポテスト」がリアルにキツい](http://nlab.itmedia.co.jp/nl/articles/1810/12/news136.html)

>ポルポテストは、11月25日から大阪文化館・天保山で開催される「荒木飛呂彦原画展 JOJO 冒険の波紋」を記念して実施されるスマホ用Webゲーム。同作に登場するギャング組織・パッショーネの幹部“ポルポ”がジョルノに課した、「24時間ライターの炎を消さなければ合格」という過酷な入団試験を再現したもので、実際に24時間スマートフォンを落ち着けておく必要があります。

<img src="http://image.itmedia.co.jp/nl/articles/1810/12/miya_1810polpotest04.jpg" />

>試験は端末を垂直に縦持ちしてスタート。ルールとしては、
>
一定角度以上傾けると失敗
スリープ画面になると失敗
ブラウザ上で「ポルポテスト」ページから別のページに移動したら失敗
「ポルポテスト」を開いているブラウザを閉じて、再度アクセスしても失敗
「ポルポテスト」を開いているブラウザアプリがバックグラウンドにいっても失敗
ブラウザページを更新しても失敗
通信が切れても失敗
サーバが落ちても失敗
受けたプッシュ通知から別の画面を開くと失敗
>　
など、条件はかなり厳しめで、事前にチャレンジする日の予定を調節したり、スマートフォンの設定を変えたりしないと難しそうです。

- 当時は多くの人がチャレンジしていたようですが、「スマホを２台持ってる人しか無理では？」というのが一般的な見解でした
- もう応募期間も過ぎているので、webエンジニアとして合格できる方法を解説してみようと思います

## :pencil: 何が必要？
- ~~スタンドは使えないので~~代わりにChromeDevTools（Chromeの検証モード）を使います
- Safariなどその他のブラウザ搭載のディベロッパーツールでもできるはず
- つまり、ちょっとフロントを触れる人なら誰でもできちゃいます
- せっかくなので、できるだけ細かく解説してみます

## :bangbang: 問題１:PCからだとテストが受けられない
- まずはPCのChromeから https://jojo-polpotest.com にアクセスしてみましょう
- 次のように「このコンテンツはスマートフォンでお楽しみください」と表示されてしまいます

![jojo-polpotest.com_pc.html(Laptop with HiDPI screen).png](https://qiita-image-store.s3.amazonaws.com/0/178077/3cdca573-4a61-2af6-4fa1-9cd666a4f628.png)

- ですが、「右クリック > 検証」などからChromeDevToolを開き、上のタブから適当にiPhoneなどスマホを選択し、画面を更新しなおせばスマホ用のページが表示されます

<img width="501" alt="スクリーンショット 2019-02-04 22.14.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/178077/b71cd3d0-a1ae-302d-17e6-3137f4c8af89.png">

- これで端末の角度など様々なルールを無視できちゃいます

## :thinking: Why?
- URLをよく見ると、PCの時は`https://jojo-polpotest.com/pc.html`に飛ばされていることに気づきます
- ChromeDevToolsの「Source」を選択し、`/js/script.js`を開いて`pc.html`を探してみましょう。

<img width="1680" alt="スクリーンショット 2019-02-04 22.19.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/178077/6622355f-e203-c31c-7662-2755f905ce39.png">

- 「command + F」などで検索してみると、12721行目あたりに次のようなコードが見つかりました


```js

var CheckDevice = function () {
  function CheckDevice() {
    // this.checkUaDevaice();

    var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
    (0, _classCallCheck3.default)(this, CheckDevice);
  }

  (0, _createClass3.default)(CheckDevice, [{
    key: "checkUaDevaice",
    value: function checkUaDevaice() {
      console.log();
      var _ua = function (u) {
        return {
          Tablet: u.indexOf("windows") != -1 && u.indexOf("touch") != -1 && u.indexOf("tablet pc") == -1 || u.indexOf("ipad") != -1 || u.indexOf("android") != -1 && u.indexOf("mobile") == -1 || u.indexOf("firefox") != -1 && u.indexOf("tablet") != -1 || u.indexOf("kindle") != -1 || u.indexOf("silk") != -1 || u.indexOf("playbook") != -1,
          Mobile: u.indexOf("windows") != -1 && u.indexOf("phone") != -1 || u.indexOf("iphone") != -1 || u.indexOf("ipod") != -1 || u.indexOf("android") != -1 && u.indexOf("mobile") != -1 || u.indexOf("firefox") != -1 && u.indexOf("mobile") != -1 || u.indexOf("blackberry") != -1
        };
      }(window.navigator.userAgent.toLowerCase());
      if (!_ua.Mobile && location.href.indexOf("pc.html") == -1) {
        location.href = "/pc.html";
      } else if (_ua.Mobile && location.href.indexOf("pc.html") !== -1) {
        location.href = "/";
      }
    }
  }]);
  return CheckDevice;
}();
```

- どうやらUA（UserAgent）でタブレット・モバイル端末とそれ以外をふるい分けて、PC用ページに飛ばしているようですね
- さらに、この`checkUaDevaice`で調べてみると12985行目あたりに次のような記述もありました

```js
// PCだったら飛ばす処理
var BASE_PATH = "/";
var url = "https://jojo-polpotest.com";
var device = new _CheckDevice2.default();
device.checkUaDevaice();
```
- というわけで、UAを偽装してしまえば簡単に突破できることが分かります
- ChromeDevToolは先ほどのように端末を切り替えることでUAも変更されるので、これで解決というわけです

## :bangbang: 問題2:期間を過ぎている
- スマホ用ページにはアクセスできましたが、「本キャンペーンは終了しました」と表示されてしまいます
- しかし、「elements」からこの要素を選択して削除してみると・・・

<img width="1680" alt="スクリーンショット 2019-02-04 22.39.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/178077/4a24b224-82fa-93fe-ec54-df13eed2e255.png">

<img width="515" alt="スクリーンショット 2019-02-04 22.41.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/178077/d70803e3-14da-1f9e-65d6-b26dde9cdbaf.png">

- 「次へ進む」ボタンが現れました！
- ただ残念ながら、このボタンはaタグではなくJavaScriptで動いているようです
- 仕方なく先ほどのコードの続きを読んでみると・・・

```js
//top
var startTop = function startTop() {

  (0, _jquery2.default)(".js-btnTab").on('click', function () {

    (0, _jquery2.default)(".contentTop").fadeTo(1000, 0);
    setTimeout(function () {
      location.href = BASE_PATH + "notice/";
    }, 1000);
  });
};
```
- トップページから`/notice/`に飛ぶリンクがあったようですね
- 試しに https://jojo-polpotest.com/notice/ にアクセスしてみると・・・

<img width="542" alt="スクリーンショット 2019-02-04 23.00.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/178077/3abec6da-4525-023a-c44a-f794c149de9b.png">

- 成功です！

## :bangbang: 問題3:ページが存在しない
- そのまま「試験を受ける」を選択して https://jojo-polpotest.com/story/ に進みますが、`404 NotFound` になってしまいます。流石にゲームのページは削除されてしまったようです
- もはやここまで・・・と思いつつも、他に見れるページがないか探してみます。すると

```js
(0, _jquery2.default)(function () {
  var ID_PAGE = (0, _jquery2.default)("body").attr("id");
  switch (ID_PAGE) {
    case "top":
      startTop();
      break;
    case "notice":
      startNotice();
      break;
    case "story":
      startStory();
      break;
    case "share":
      startSharePage();
      break;
    case "check":
      checkFlgClear('top');
      break;
    case "result":
      checkFlgClear(false);
      startFailure();
      break;
    case "clear":
      checkFlgClear(true);
      startClear();
      break;
    case "clear_c":
      checkFlgClear(true);
      startClearShare();
      break;
    case "contact":
      startContact();
      break;
    default:
  }
});
```
- bodyタグのidで処理を変えていて、さらにこのidはページのパスと対応しているようですね
- 試しに先ほど見れなかった`case "story":`の`startStory`を探してみると

```js
var startStory = function startStory() {
  var imgList = ['/images/story/story01.png', '/images/story/story02.png', '/images/story/story03.png', '/images/story/story04.png', '/images/story/story05.png', '/images/story/story06.png', '/images/story/story07.png', '/images/story/story08.png', '/images/story/story09.png', '/images/story/story10.png', '/images/story/story11.png', '/images/story/story12.png'],
      fadeinList = [],
      winHeight = (0, _jquery2.default)(window).height();

  (0, _jquery2.default)(".introArea li").each(function (index, elm) {
    fadeinList[index] = {
      top: (0, _jquery2.default)(elm).offset().top,
      flg: false,
      elm: elm
    };
  });
  var scrollEvent = function scrollEvent() {
    var ScrTop = (0, _jquery2.default)(document).scrollTop() + winHeight / 2;
    _jquery2.default.each(fadeinList, function (index, val) {
      if (val.top < ScrTop && val.flg == false) {
        (0, _jquery2.default)(val.elm).addClass("is-fadein");
        val.flg = true;
      }
    });
  };

  var readImage = new _ReadImage2.default({
    targetImageUrl: imgList,
    callback: function callback() {
      console.log("loaded");
      scrollEvent();
    }
  });
  (0, _jquery2.default)(window).scroll(function () {
    scrollEvent();
  });
};

...

var startSharePage = function startSharePage() {
  location.href = BASE_PATH;
};
```
- スクロールに応じて画像を表示させる処理があったようですね
- 画像のパスは生きているようで、https://jojo-polpotest.com/images/ にアクセスすると使用している画像の一覧が見えました
- また、`case "share":`で使われている`startSharePage` は、ただトップページに戻されるだけのようです
- そして`checkFlgClear`にはクリア判定処理っぽいものがありました

```js
var checkFlgClear = function checkFlgClear(check_flg) {
  var result = getStorageData();

  if (result.isClear !== check_flg || check_flg == "top") {
    if (check_flg == "top" && result.isClear) {
      (0, _jquery2.default)("body").addClass("is-jumpClear");
      jump();
    } else {
      jump();
    }
  }
  function jump() {
    if (result.isClear) {
      location.href = 'clear.html';
    } else {
      location.href = "result.html";
    }
  }
};

```

- ざっくり言うと、クリアの場合は`clear.html`、それ以外の場合は`result.html`に飛ばされるようですね
- しかし、試しに https://jojo-polpotest.com/result/ にアクセスしてみますが、一瞬表示されるもののトップページに飛ばされてしまいます

## :thinking: Why?

- 先ほどの`case "result":`の処理を部分を確認してみると、`startFailure`という関数を呼んでいることに気づきます

```js
// 失敗
var startFailure = function startFailure() {
  var result = getStorageData();
  (0, _jquery2.default)(".resultTimeN").text(result.resultTime);
  if (!result.resultTime) {
    location.href = BASE_PATH;
  }
  if (!result.Level || result.Level > 10) {
    location.href = BASE_PATH;
  }

...
```

- resultがif文の条件に当てはまるとトップページに戻されてしまうようですね
- `var result = getStorageData();`とあるので`getStorageData`を探してみると次のような記述がありました

```js
var getStorageData = function getStorageData() {
  return {
    'isClear': _store2.default.get('state'),
    'startTime': _store2.default.get('startTime'),
    'resultTime': _store2.default.get('resultTime'),
    'Level': _store2.default.get('Level'),
    'userName': _store2.default.get('userName')
  };
};
```

- localStorageからデータを取得しているようなので、localStorageにそれっぽい値を入れてみましょう
- 「Application　> Storage > Local Storage > `https://jojo-polpotest.com`」で確認&入力ができます

<img width="1680" alt="スクリーンショット 2019-02-05 00.06.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/178077/481b5f87-25b3-07e4-ae5a-c9b49ad09fa1.png">

- これでクリアしたことにできました！

<img width="520" alt="スクリーンショット 2019-02-05 00.08.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/178077/8e48b6f0-7144-a19b-2afe-de373ca578dc.png">

## :star: おまけ

- localStorageのstateをfalseにし、Levelを1~10の間で変えると失敗した時の画面を見れます

<img width="1680" alt="スクリーンショット 2019-02-05 00.12.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/178077/92761a3d-8881-208f-badf-9303157189e7.png">

```js
  var resultInfo = [{
    "level": 1,
    "name": "マンモーニだった頃のペッシ",
    "unique": "1edrgiheg2"
  }, {
    "level": 2,
    "name": "ナイフを顔面につき立てられてもケンカをやめなかった涙目のルカ",
    "unique": "2fa23ayzy4"
  }, {
    "level": 3,
    "name": "アバッキオに渡された紅茶が小便だと気付いた時のジョルノ",
    "unique": "3ycuykygx2"
  }, {
    "level": 4,
    "name": "敵を見失ったので道路中に火をつけるナランチャ",
    "unique": "4zgna35a8h"
  }, {
    "level": 5,
    "name": "鍵を守るため自らの手首を切り落とすアバッキオ",
    "unique": "5x5xgymkxi"
  }, {
    "level": 6,
    "name": "弾丸が自分に跳ね返ってくるとわかっていながら銃を撃ちまくるミスタ",
    "unique": "6ebhkzs8jg"
  }, {
    "level": 7,
    "name": "敵もろとも時速150kmの列車から飛び降りるブチャラティ",
    "unique": "7hwm8znu8s"
  }, {
    "level": 8,
    "name": "スタンドを発動させるため自ら殺されにいくカルネ（ノトーリアス・B・I・G）",
    "unique": "8npsw56di5"
  }, {
    "level": 9,
    "name": "命が尽きるまで攻撃をやめないプロシュート兄貴",
    "unique": "9drtkn4di9"
  }, {
    "level": 10,
    "name": "ボスのために自ら口封じを行うペリーコロさん",
    "unique": "08hdpxrger"
  }];
```

- また、応募条件であったクリア時のツイート内容もソースに書いてあったりします

```js
var startClearShare = function startClearShare() {
  var result = getStorageData();
  if (!result.userName) {
    location.href = BASE_PATH + "result/clear.html";
  }
  (0, _jquery2.default)(".userName").text(result.userName);
  (0, _jquery2.default)(".clearTimeTxt").text(result.resultTime);
  var shearLink = 'https://twitter.com/share?url=' + url + '/result/' + CLEAR_BASE + '.html&text=%E3%80%90%23%E3%83%9D%E3%83%AB%E3%83%9D%E3%83%86%E3%82%B9%E3%83%88%E3%82%AF%E3%83%AA%E3%82%A2%E3%80%91%E3%81%93%E3%82%8C%E3%81%A7%E8%A6%8B%E4%BA%8B%E3%83%91%E3%83%83%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%8D%E3%81%AE%E4%B8%80%E5%93%A1%E3%81%A0%E3%83%83%EF%BC%81%E6%97%A9%E9%80%9F%E3%80%81%E6%9C%80%E5%88%9D%E3%81%AE%E4%BB%BB%E5%8B%99%E3%80%8C%E5%AE%A3%E4%BC%9D%E3%80%8D%E3%82%92%E8%A1%8C%E3%81%86%E3%83%83%EF%BC%81%0D%0A%0D%0A%E3%80%8C%E8%8D%92%E6%9C%A8%E9%A3%9B%E5%91%82%E5%BD%A6%E5%8E%9F%E7%94%BB%E5%B1%95%E3%80%80JOJO%E3%80%80%E5%86%92%E9%99%BA%E3%81%AE%E6%B3%A2%E7%B4%8B%E3%80%8D%E3%80%88%E5%A4%A7%E9%98%AA%E4%BC%9A%E5%A0%B4%E3%80%89%0D%0A2018.11.25%EF%BC%88%E6%97%A5%EF%BC%89-%202019.1.14%EF%BC%88%E6%9C%88%EF%BC%89%0D%0A%EF%BC%A0%E5%A4%A7%E9%98%AA%E6%96%87%E5%8C%96%E9%A4%A8%E3%83%BB%E5%A4%A9%E4%BF%9D%E5%B1%B1%E3%81%AB%E3%81%A6%E9%96%8B%E5%82%AC%E3%83%83%EF%BC%81%E3%83%81%E3%82%B1%E3%83%83%E3%83%88%E7%B5%B6%E8%B3%9B%E7%99%BA%E5%A3%B2%E4%B8%AD%E3%82%A5%EF%BC%81%0D%0A%0D%0A%23%E3%82%B8%E3%83%A7%E3%82%B8%E3%83%A7%E5%B1%95';
  (0, _jquery2.default)("#btnTwClear").attr("href", shearLink);
  (0, _jquery2.default)(".clearArea").fadeTo(1000, 1);
};
```

```text:shearLinkのtextの文字コードを変換するとこんな感じ
【#ポルポテストクリア】これで見事パッショーネの一員だッ！早速、最初の任務「宣伝」を行うッ！

「荒木飛呂彦原画展 JOJO 冒険の波紋」〈大阪会場〉
2018.11.25（日）- 2019.1.14（月）
＠大阪文化館・天保山にて開催ッ！チケット絶賛発売中ゥ！

#ジョジョ展 https://jojo-polpotest.com/result/00wsu36mtn.html
```

- また、名前入力欄のNGワードがなかなか強烈でした（こういう苦労もあるんですね・・・）
- クライアントが集英社なので校正・校閲みたいな点には注意深かったのかもしれませんね

```js
var CheckName = function () {
  function CheckName() {
    var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
    (0, _classCallCheck3.default)(this, CheckName);

    this.NGWord = new Array();
    this.setNg();
  }

  (0, _createClass3.default)(CheckName, [{
    key: "check",
    value: function check(userName) {
      var error = true;
      console.log(userName.length);
      if (userName.length > 20) {
        error = "半角20文字以内に収めてください";
        return error;
      }

      if (userName == "") {
        error = "名前を入力してください";
        return error;
      }

      $.each(this.NGWord, function (index, val) {
        if (userName.indexOf(val) !== -1) {
          error = "使用不可な言葉が含まれています";
        }
      });
      return error;
    }
  }, {
    key: "setNg",
    value: function setNg() {
      this.NGWord = ["カルト教団", "ねずみ講", "マルチレベルマーケティング", "マルチ商法", "モルモン教", "ヤミ金", "公明党", "幸福の科学", "国民新党", "山口組", "自民党", "自由民主党", "社会民主党", "宗教", "談合", "世界基督教統一神霊協会", "創価学会", "大川隆法", "池田大作", "統一教会", "粉飾", "暴力団", "密教", "民主党", "裏金", "右翼", "左翼", "天皇", "皇后", "amway", "アムウェイ", "ビンラディン", "ナチス", "ヒトラー", "FUCK", "ヒットラー", "自衛隊", "憲法", "国会", "政治", "在日", "左翼", "デモ", "ロビー", "弾圧", "言論", "NHK", "北朝鮮", "KKK", "マフィア", "ギャング", "気ちがい", "気違い", "子無", "心障者", "精神異常", "精神障害", "朝鮮", "土人", "カタワ", "かたわ", "きちがい", "キチガイ", "らいびょう", "特殊学級", "任侠", "白痴", "非人", "浮浪者", "部落", "穢多", "乞食", "ルンペン", "よつ", "ぽっぽや", "雲助", "八百長", "坊主", "ぽんこつや", "ニコヨン", "百姓", "土方", "隠亡屋", "隠亡", "オンボ", "汚穢屋", "鮮人", "在日", "シナ", "支那", "チョン", "サンコクジン", "ロンパリ", "アル中", "ニート", "未亡人", "裏に本", "地方", "初老", "ブッシュマン", "インディアン", "めくら", "つんぼ", "おし", "どもり", "ちんば", "びっこ", "片手落ち", "かったい", "アカ", "おかま", "レズ", "ホモ", "チャンコロ", "ポコペン", "東亜", "アイヌ系", "合いの子", "青姦", "アカ", "明盲", "足切り", "足を洗う", "当て馬", "アメ公", "あらめん", "アル中", "按摩", "家柄", "躄", "伊勢乞食", "イタ公", "板前", "いちゃもん", "田舎", "犬殺し", "移民", "イモ", "インチキ", "インディアン嘘つかない", "淫売", "裏日本", "うんこ", "運ちゃん", "エスキモー", "穢多", "越後の米つき", "エチゼンクラゲ", "ＯＬ", "オールドミス", "オカマ", "沖仲仕", "唖", "落人部落", "落とし前", "溺れ死ぬ", "お巡り", "表日本", "親方", "おわい屋", "女子供", "女の腐ったような", "隠坊", "拡張員", "拡張団", "拡張団長", "家系", "過去帳", "ガサ", "かさっかき", "片足", "片親", "片手落ち", "片肺", "片目", "片端", "がちゃ目", "担ぎ屋", "かったい", "がっぷり四つ", "カッペ", "上方の贅六", "借り腹", "皮被り", "皮切り", "川向こう", "河原乞食", "看護婦", "姦通", "キ印", "キチ", "気違い", "気違い沙汰", "気違いに刃物", "ぎっちょ", "給仕", "灸を据える", "狂女", "狂人", "漁夫", "苦力", "屑屋", "愚鈍", "黒んぼ", "くわえ込む", "クンニ", "群盲象をなでる", "芸人", "ゲーセン", "下女", "血統", "毛唐", "下男", "健全なる精神は健全なる身体に宿る", "ゲンナマ", "強姦", "後進国", "興信所", "業病", "鉱夫", "工夫", "坑夫", "紅毛人", "黒人", "虚仮", "孤児院", "乞食", "小僧", "小使い", "小人", "ゴミ屋", "コロシ", "魚屋", "ザギン", "サツ", "サラ金", "サラブレッド", "三韓征伐", "三国人", "三助", "産婆", "色盲", "支那", "支那人", "支那蕎麦", "支那竹", "支那料理", "士農工商", "ジプシー", "自閉症児", "シマ", "地回り", "ジャップ", "ジャリ", "ジュー", "獣医", "周旋屋", "酋長", "嬢", "障害者", "将棋倒しになる", "情夫", "情婦", "女給", "植物人間", "女傑", "女工", "助産婦", "処女作", "処女峰", "女中", "職工", "しらっこ", "尻拭い", "心障児", "心障者", "新平民", "ズージャー", "すけこまし", "スチュワーデス", "滑り止め", "ずらかる", "スラム", "正妻", "精神異常", "精神分裂病", "精薄", "傴僂", "鮮人", "潜水夫", "千摺り", "線路工夫", "掃除婦", "掃除夫", "雑役夫", "育ちより氏", "第三国", "代書屋", "台湾政府", "台湾ハゲ", "タケノコ医者", "蛸部屋", "タタキ", "ダッチマン", "玉袋筋太郎", "垂れ流す", "知恵遅れ", "近目", "痴呆症", "チャリンコ", "チャンコロ", "中共", "朝鮮征伐", "朝鮮人参", "チョン", "跛", "釣り書き", "連れ子", "聾", "聾桟敷", "低開発国", "低脳", "低脳児", "デカ", "出稼ぎ", "丁稚", "出戻り", "天才と狂人は紙一重", "手ん棒", "土方", "特殊学級", "特殊学校", "特殊部落", "土建屋", "土工", "床屋", "土左衛門", "屠殺", "屠殺場", "屠殺人", "どさ回り", "土人", "共稼ぎ", "吃", "ドヤ街", "富山の三助", "トルコ嬢", "トルコ風呂", "どん百姓", "ナオン", "南鮮", "南部の鮭の鼻まがり", "ニガー", "ニグロ", "二号", "ニコヨン", "日本のチベット", "人足", "人非人", "人夫", "猫糞", "農夫", "脳膜炎", "ノビ", "ハーフ", "パーマ屋", "馬鹿チョンカメラ", "馬鹿でもチョンでも", "白痴", "パクる", "馬喰", "端女", "バタ屋", "発狂する", "馬丁", "パン助", "番太", "半島人", "飯場", "引かれ者", "跛", "非人", "ヒモ", "百姓", "日雇い", "貧農", "醜男", "不可触民", "不具", "父兄", "不治の病", "ブス", "ブタ箱", "ブツ", "踏切番", "ブラインドタッチ", "部落", "浮浪児", "浮浪者", "ペイ患", "ペイ中", "北鮮", "ポコペン", "保線工夫", "ポッポー屋", "保母", "ポリ公", "ぽん引き", "ほんぼし", "まえつき", "魔女っ子", "股に掛ける", "町医者", "マンコ", "満州", "未開人", "未開発国", "三つ口", "身分", "未亡人", "身元調査", "婿をとる", "娘を片付ける", "名門校", "妾", "盲縞", "盲判を押す", "盲蛇に怖じず", "盲滅法", "めっかち", "盲愛する", "蒙古症", "盲人", "盲目", "文盲", "ヤー様", "八百屋", "役不足", "やさぐれ", "ヤバい", "藪医者", "藪睨み", "ヤンキー", "ヤンキー", "郵便夫", "郵便屋", "養護", "養老院", "寄せ場", "ヨツ", "四つ足", "四つ辻", "嫁にやる", "寄目", "癩病", "ルンペン", "令嬢", "レントゲン技師", "老婆", "労務者", "露助", "ロンパリ", "動物愛護", "イルカ猟", "クジラ", "グリーンピース", "アムネスティ", "屠殺", "虐殺", "人質", "人さらい", "拉致", "北朝鮮", "年金", "男女雇用問題", "原発", "原子力", "東電", "女川", "石巻", "anal", "anus", "arse", "ass", "ballsack", "balls", "bastard", "bitch", "biatch", "bloody", "blowjob", "blow job", "bollock", "bollok", "boner", "boob", "bugger", "bum", "butt", "buttplug", "clitoris", "cock", "coon", "crap", "cunt", "damn", "dick", "dildo", "dyke", "fag", "feck", "fellate", "fellatio", "felching", "fuck", "f u c k", "fudgepacker", "fudge packer", "flange", "Goddamn", "God damn", "hell", "homo", "jerk", "jizz", "knobend", "knob end", "labia", "lmao", "lmfao", "muff", "nigger", "nigga", "omg", "penis", "piss", "poop", "prick", "pube", "pussy", "queer", "scrotum", "sex", "shit", "s hit", "sh1t", "slut", "smegma", "spunk", "tit", "tosser", "turd", "twat", "vagina", "wank", "whore", "wtf", "うざぃ", "ぅざぃ", "ゥザイ", "ゥざい", "ぅざィ", "ゥザィ", "ウザィ", "ぅぜぇ", "カス", "きもい", "キモス", "ゴミ野郎", "ダメ企業", "詐欺", "殺 す", "殺 せ", "殺し", "殺して", "殺す", "殺せ", "殺られる", "殺れ", "殺人", "死 ね", "死にきれ", "死にた", "死ね", "死んじ", "死んで", "死姦", "死体愛好", "氏ね", "氏んで", "失せろ", "逝って", "低脳", "犯さ", "犯し", "爆破", "犯さ", "犯し", "犯す", "犯せ", "犯そ", "犯罪", "シにたい", "かくせいざい", "drug", "アサルトライフル", "アヘン", "こかいん", "コカイン", "コロし", "ころし", "コろし", "コロス", "ころす", "コロす", "し ね", "シニタイ", "スミス&ウェッソン", "ドラック", "ドラッグ", "マジックマッシュルーム", "まりふぁな", "マリファナ", "悪事", "悪徳", "暗殺", "違法", "隠し撮", "隠撮", "援交", "援助", "汚職", "横領", "加害者", "覚せい剤", "覚醒剤", "詐欺", "殺人", "散弾銃", "紙巻", "事情聴取", "自殺", "手榴弾", "食人症", "人 殺", "人殺", "青酸", "窃盗", "大麻", "脱法", "懲戒免職", "懲役", "不法行為", "不法滞在者", "婦女暴行", "保釈金", "放火", "麻薬", "犯罪", "模造刀", "薬物", "容疑しゃ", "容疑者", "葉巻", "ナイフ", "テロ", "イスラム", "原理主義", "マシンガン", "宮崎勤", "fUCK", "angel倶楽部", "AVHビデオ", "avsite", "avあいどる", "avアイドル", "AVアルバイト", "AVオーディション", "AVおんな", "avギャル", "avぎゃる", "avコスモ", "avサンプル", "avさんぷる", "avストアー", "avタイトル", "avたいとる", "AVでる", "avでるぷろだくしょん", "AVバイト", "avビデオ", "AVモデル", "avリスト", "avりんく", "avリンク", "avれびゅー", "avレビュー", "AVロケ", "AV応募", "av監督", "av鑑賞", "AV求人", "av検索", "AV撮影", "av雑誌", "AV仕事", "AV出たい", "AV出る", "AV出演", "AV女の子", "AV女子", "AV女性", "av女優", "av嬢", "av情報", "av素人", "av男優", "av通販", "AV働く", "av動画", "av販売", "AV募集", "AV儲ける", "ERO画像", "exクラブ", "exくらぶ", "exさいとcats", "exサイトcats", "FUCK", "gスポット", "gすぽっと", "H2shotチャット", "H2ショット", "hrcほーむびでお", "Hあにめ", "Hアニメ", "Hイラスト", "Hゲーム", "Hコス", "Hこすぷれ", "Hコスプレ", "Hコミック", "Hサイト", "Hしたぃ", "Hして", "hして", "Hしよ", "Hチャット", "Hツーショット", "Hデジタルコミック", "hな", "Hな", "Hネタ", "Hの仕方", "Hビデオ", "Hまんが", "Hマンガ", "Hムービー", "Hライブチャット", "H系コミック", "H系まんが", "H系マンガ", "H系漫画", "H限定", "H写真", "H小説", "H体験", "H動画", "H本", "H漫画", "H絡み", "h話", "Mの女", "m女", "m性感", "m男", "rape", "S?E?X", "s&mvideo", "S○X", "SB", "Sex", "sex", "SEX", "SM ムチ", "SM 口枷", "SM 拘束具", "SM 糸", "SM 首輪", "SM 鞭", "SMアイテム", "SMアイマスク", "SMあにめ", "SMアニメ", "SMイラスト", "SMグッズ", "SMクラブ", "SMコスチューム", "SMコミック", "SMこみっく", "SMサークル", "SMシークレット", "SMスパンキング", "SMちゃっと", "SMチャット", "SMビデオ", "SMびでお", "SMプレイ", "SMプレー", "SMベルト", "SMマスク", "SMマンガ", "SMまんが", "SMむーびー", "SMムービー", "SMロウソク", "SMろうそく", "SMローソク", "SM画像", "SM革ボンテージ", "SM写真", "SM首輪", "SM小説", "SM小道具", "SM専門", "SM体験談", "SM中古びでお", "SM貞操帯", "SM動画", "SM道具", "SM漫画", "SM蝋燭", "SOD", "s女", "TELエッチ", "telえっち", "xxx", "アイテムアダルト", "アイドルAV", "あいどるAV", "アイドルおっぱい", "アイドルヌード", "アイマスクSM", "アソコ", "アダルト2ショット", "アダルトav", "あだるとav", "アダルトcd-rom", "あだるとcd-rom", "アダルトcdrom", "あだるとcdrom", "あだるとcg", "アダルトcg", "あだるとdvd", "アダルトdvd", "アダルトHなチャット", "アダルトsm", "アダルトアイテム", "アダルトアイドル", "アダルトアナ", "アダルトあな", "アダルトアニメ", "あだるとあにめ", "アダルトイス", "アダルトいす", "あだるとイラスト", "アダルトイラスト", "あだるとえんじぇる", "アダルトエンゼル", "あだるとオークション", "アダルトオークション", "アダルトオトコ", "アダルトおとこ", "あだるとオンライン", "アダルトオンライン", "アダルトお風呂", "アダルトカップ", "あだるとくしょん", "アダルトグッズ", "あだるとぐっず", "アダルトグッツ", "あだるとぐっつ", "アダルトゲーム", "あだるとげーむ", "あだるとけんさく", "アダルトケンサク", "アダルトこけし", "アダルトコス", "あだるとこみ", "アダルトコミ", "あだるとこんてんつ", "アダルトコンテンツ", "アダルトサーチ", "あだるとさーち", "アダルトサイト", "あだるとさいと", "アダルトサンプル", "アダルトショップ", "あだるとしょっぷ", "アダルトゼリー", "アダルトソウゴウ", "あだるとそうごう", "アダルトタウンページ", "あだるとたうんぺーじ", "アダルトダッチワイフ", "アダルトチャット", "アダルトツーショット", "アダルトデジタル", "アダルトトウロク", "あだるととうろく", "アダルトのぞき", "あだるとびでお", "アダルトビデオ", "アダルトフロ", "アダルトボイス", "あだるとぼいす", "アダルトホール", "アダルトマット", "アダルトマンガ", "アダルトまんが", "あだるとむーびー", "アダルトムービー", "アダルトムビ", "アダルトライブ", "アダルトランジェリ", "あだるとりんく", "アダルトリンク", "アダルトリング", "アダルトローション", "アダルト椅子", "アダルト映画", "アダルト映像", "アダルト下着", "アダルト掲示板", "あだると掲示板", "アダルト穴", "アダルト検索", "あだると検索", "アダルト告白", "あだると雑誌", "アダルト雑誌", "アダルト写真", "あだると写真", "アダルト女優", "あだると小説", "アダルト小説", "アダルト生ライブ", "アダルト専門", "あだると専門", "アダルト素人", "あだると総合", "アダルト総合", "アダルト体験談", "あだると体験談", "アダルト男", "アダルト店", "あだると登録", "アダルト登録", "アダルト道具", "アダルト入浴", "アダルト覗き", "あだると壁紙", "アダルト壁紙", "あだると漫画", "アダルト漫画", "アダルト無料", "ぁちョこ", "アナ ル", "あなアダルト", "アナエッチ", "アナえろ", "アナエロ", "あなオナ", "アナオナ", "アナラー", "アナル", "あなる", "アヌス", "アヌす", "あぬす", "アぬス", "アヘゴエ", "アルバイトAV", "アルバイトAVモデル", "イかせ", "イカセ", "いかせ", "いくつですか", "いくつな", "イケメン募", "いけめん募", "いじめ", "イスエッチ", "イチモツ", "イっちゃう", "イマラチオ", "イメージえっち", "イメージクラブ", "いめーじぷれい", "イメージプレー", "イメエチ", "ィメエチ", "イメェチ", "イメクラ", "ぃめぷ", "イメプ", "ィメプ", "いめぷ", "イラ交", "ヴぁーじん", "ヴぁぎな", "ヴぁじん", "ヴァジン", "ウリ専", "エ ロ", "エ ロ", "え ろ", "エ?ロ", "え?千", "エ□イ", "エ○同盟", "え☆ゆ", "エ〇アニメ", "え〇アニメ", "エ〇い", "ぇ〇ち", "ェ〇動", "エスエム", "えすえむ", "エスコートクラブ", "えすじゅりあ", "エチ", "ぇち", "えちな", "えっくすえっくす", "えっち2ショット", "エッチ2ショット", "えっちcg", "エッチcg", "エッチアイテム", "えっちあな", "エッチアナル", "えっちあにめ", "エッチアニメ", "ぇっちい", "えっちい", "えっちぃ", "エッチいす", "エッチイラスト", "えっちイラスト", "エッチうまい", "エッチおとこ", "エッチおんな", "えっちおんな", "エッチオンナ", "エッチお風呂", "えっちお風呂", "エッチカップ", "エッチカラダ", "えっちからだ", "えっちカラダ", "えっちグッズ", "エッチグッズ", "えっちけい", "エッチケイ", "えっちゲーム", "エッチゲーム", "えっちコス", "エッチコス", "えっちコミ", "えっちこみ", "エッチコミ", "えっちさいと", "エッチサイト", "エッチし", "エッチシ", "えっちし", "ぇっちし", "エッチする", "エッチスル", "エッチチャット", "えっちチャット", "えっちちゃっと", "エッチツーショット", "えっちツーショット", "エッチデジタル", "エッチナ", "エッチな", "えっちな", "えっちねた", "エッチネタ", "エッチビ", "えっちびでお", "えっちビデオ", "エッチページ", "えっちぺーじ", "エッチホール", "えっちぼん", "エッチボン", "えっちマンガ", "エッチマンガ", "エッチまんが", "えっちまんが", "えっちむーびー", "エッチムービー", "エッチライブチャット", "えっちライブチャット", "エッチランジェリー", "えっちランジェリー", "えっちローション", "エッチローション", "エッチ椅子", "エッチ下着", "えっち下着", "エッチ掲示板", "えっち掲示板", "エッチ系", "えっち系", "エッチ系コミ", "エッチ系マンガ", "エッチ系まんが", "エッチ系漫画", "エッチ穴", "エッチ写真", "えっち写真", "えっち出会", "エッチ出会", "エッチ女", "えっち女", "エッチ小説", "えっち小説", "えっち森", "エッチ森", "エッチ体験", "えっち体験", "エッチ大好き", "エッチ男", "えっち男", "エッチ透視", "えっち透視", "エッチ道具", "えっち道具", "エッチ入浴", "エッチ本", "えっち本", "えっち漫画", "エッチ漫画", "エッチ話", "えっち話", "エッッチ", "エネマシリング", "エプロンプレイ", "ェむ", "えむ こむ", "えむこむ", "エロ できる", "エロ2ショット", "エロCG", "えろCG", "エロアナ", "えろあな", "エロあな", "えろアニ", "エロアニ", "えろあに", "えろぃ", "えろい", "ぇろい", "えロい", "ェろい", "エロイ", "ぇろぃ", "エロい", "えろー", "えろおーる", "エロオス", "えろおとこ", "エロおとこ", "えろお風呂", "エロお風呂", "エろが", "えろグッズ", "エログッズ", "えろくりす", "エロゲー", "えろげー", "エロこす", "エロコス", "えろコス", "えろコミ", "エロコミ", "えろさいと", "エロサイト", "エロザク", "エロサミ", "えろさみ", "エロショウセツ", "エロずき", "えろチャット", "エロチャット", "エロっ", "えろっ", "ェろっ", "エロツーショットチャット", "えろてぃっく", "エロティック", "エロとーく", "えろトーク", "ェろとーく", "エロトーク", "えろとーく", "ェろトーク", "エロトクリトス", "エロトピア", "エロとも", "エロな", "えろばぃ", "エロバディ", "エロバナ", "えろビ", "えろび", "エロび", "えろぴあ", "エロプリクラ", "えろぷりくら", "えろふろ", "エロホン", "えろマンガ", "エロまんが", "えろまんが", "エロマンガ", "エロムービー", "エロメス", "エロライブチャット", "えろライブチャット", "えろランジェリー", "エロランジェリー", "エロリング", "エロローション", "エロ椅子", "えろ屋", "エロ屋", "えろ下着", "エロ下着", "えろ画", "エロ画", "えろ絵", "エロ絵", "エロ穴", "えろ写", "エロ写", "エロ女", "えろ小説", "エロ情報", "えろ情報", "えろ体験", "エロ体験", "えろ男", "エロ男", "えろ動", "えろ同", "えろ道具", "エロ道具", "エロ入浴", "えろ姫", "えろ萌", "エロ萌", "えろ本", "えろ漫", "エロ漫", "エロ無料", "ぇろ友", "えろ話", "エロ話", "ェろ話", "エンコ", "エンジョ", "えんじょ", "エ口", "ェ口", "エ口アニ", "お ーぱい", "オ、ナ", "ォ、ナ", "オ.ナ", "ォ.ナ", "オーディションAV", "オーディションビデオAV", "おかわりプレイ", "オスペ", "オス汁", "おちんちん", "オッパイ", "おっぱい", "オトコアソコ", "おとこエッチ", "オトコエッチ", "おとこえっち", "おとこえろ", "オトコエロ", "おとこエロ", "オトコクウ", "おとこヌキ", "おとなあそび", "オトナアソビ", "オトナチャット", "おとなチャット", "おとなのおもちゃ", "オトナのおもちゃ", "おとなのオモチャ", "オトナのオモチャ", "おとなの玩具", "オトナの玩具", "おとなライブチャット", "おとな生ライブチャット", "ォナ", "オナ", "おなっ", "オナッて", "ぉなに", "おなに", "おナニ", "ぉに---たん募", "おにーたん募", "オブテインフューチャー", "オブテインフュチャ", "オフ会", "おんなエッチ", "おんなえっち", "お何ー", "ぉ兄ちゃん", "お兄ちゃん集", "お兄ちゃン募", "お仕置きネット", "お嬢様募", "お触り", "お風呂アダルト", "お風呂えっち", "お風呂エッチ", "お風呂エロ", "カ〇シ募", "かくしどり", "カクシドリ", "かくし撮り", "かのじょ☆ぼしゅ", "カノジョ☆ぼしゅ", "かのじょ☆募", "カノジョ☆募", "カノジョぼしゅ", "かのじょぼしゅ", "カノジョ募", "かのじょ募", "がまん汁", "ガマン汁", "カレシ☆ぼしゅ", "かれし☆ぼしゅ", "かれし☆募", "カレシ☆募", "かれしぼしゅ", "カレシぼしゅ", "かれし募", "カレシ募", "かれぴ募", "かれぼしゅう", "カレ募", "きょにゅ", "きららかおり", "きんしんそうかん", "ク。ン。ニ", "くぐり椅子", "くすのき琴美", "ぐちょぐちょ", "グッズエッチ", "くりとりす", "クリトリス", "クンニ", "ゲイビデオ", "ケツマン", "ごうかん", "ゴウカン", "こけしアダルト", "こけしエロ", "コスH", "コスアダルト", "コスエッチ", "コスエロ", "コスチャット", "コスチュームSM", "コスチュームアダルト", "コスチュームエッチ", "コスチュームエロ", "コスチュームえろ", "コスチュームプレ", "こすぷれH", "コスプレH", "こすぷれアダルト", "コスプレアダルト", "コスプレエッチ", "コスプレえっち", "こすぷれエッチ", "こすぷれエロ", "コスプレえろ", "コスプレエロ", "こすぷれぱぶ", "コスプレパブ", "こすぷれびでお", "コスプレビデオ", "こすぷれまんが", "コスプレマンガ", "こすぷれむーびー", "コスプレムービー", "コスプレムビ", "コスプレ漫", "コミックH", "コミックアダルト", "コミックえっち", "コミックエッチ", "コミックエロ", "コミック成人", "ザーメン", "ざーめん", "シックスナイン", "シミパン", "ジュルジュル", "シリコンバイブ", "スカートの中", "スカトロ", "スタンガン", "ストッキングフェチ", "スパンキング", "ズリセン", "ズルむけ", "セ‐クス", "セ〇クス", "せきれい台", "セクース", "せくーす", "セクキャバ", "セクス", "セクハラプレイ", "セッ○ス", "セック○", "せックス", "セックス", "せっくす", "せッくすぅ", "セフ○", "セフレ", "せふれ", "ゼリーエッチ", "セリクラ", "せんずり", "ダッチワイフ", "だっちわいふ", "チンコ", "ちんちん", "チンピク", "チンボ", "ちんぽ", "つかもと友希", "デカチン", "デカマラ", "デジタルコミックアダルト", "デジタルコミックエロ", "デジタルコミック成人", "デブ専", "デリバリーヘルス", "デリヘル", "デリ嬢", "テレフォンクラブ", "テレホンH", "でんどうこけし", "デンドウコケシ", "ドエロ", "ヌキ穴", "ぬぽぬぽ", "ノゾキ", "のぞき", "バージン", "パーティーグッズアダルト", "パイズリ", "バイトAV", "パイパン", "バイブ", "ばいぶ", "ハシシ", "バック野郎", "ババ専", "ハマヘル", "ハミマン", "はめどり", "ハメ撮り", "はらだはるな", "パンストフェチ", "パンチら", "ぱんちら", "パンチラ", "ビーチク", "ビッチ", "ビデオAV", "ビデオH", "ビデオアダルト", "ビデオえっち", "ビデオエッチ", "ビデオエロ", "ビデオえろ", "ビデオチャット", "ひとりh", "ヒトリエッチ", "ひとりえっち", "ひとりエッチ", "ビニ本", "ひろせまなつ", "ピンクチェア", "ピンクパイナップル", "ピンコ立ち", "ファック", "ファッションヘルス", "ファッションマッサージ", "フェ ラ", "フェラ", "ふぇら", "ふたりエッチ", "ふた穴", "ブチャブチャ", "ブッ込ミ", "ぶらく", "ブラク", "ぶらちら", "ブラチラ", "ブラちら", "ぶりゅぶりゅ", "フリン", "ふりん", "フルあげ", "フル持って", "ふろエッチ", "ふろえっち", "フロエッチ", "ふろえろ", "ペットプレイ", "ペニス", "へろいん", "ヘロイン", "ペログリ", "ホールアダルト", "ホールエッチ", "ホールオナ", "ポゼッションプレイ", "ボックスサロン", "ホテヘル", "ホモビデオ", "ほもびでお", "ぽるの", "ポルノ", "マ ン コ", "ま ん こ", "ま ん〇", "マ○コ", "マ●コ", "ま★こ", "ま〇こ", "まーんこ", "マンゲ", "まンこ", "まんこ", "まンコ", "マンコ", "まんじる", "マンじる", "マン汁", "め ーる", "メス豚", "ヤ〇マン", "ヤらせ", "ヤラセロ", "やらせろ", "ヤリ〇ン", "ヤりたい", "ヤリチン", "ヤりま", "ヤリマン", "やりまん", "ヤリ友", "リスカ", "りすか", "りすカ", "りスカ", "リストカット", "レ〇プ", "レィプ", "れイプ", "れいぷ", "れィぷ", "レイプ", "レイフ。", "れひぷ", "ローター", "ロンパリ", "ろんぱり", "わたやたわた", "わたらたわた", "わやわ", "下の口", "強姦", "屍姦症", "屍好症", "射精", "手マソ", "首締", "獣姦", "処 女", "処女", "初h", "初H", "初エチ", "初えち", "初エッチ", "食人症", "人 殺", "人殺", "性交", "性病", "生写真", "体験中", "中だし", "性交", "性病", "生写真", "旦那募", "男の子募", "中に出", "中高生達募", "中出し", "中出し", "彼 氏ぼしゅ", "彼氏 募", "彼氏.募", "彼氏☆ぼしゅ", "彼氏☆募", "彼氏なって", "彼氏大大大大募", "彼氏大大大募", "彼氏大大募", "彼女 募", "彼女 募", "彼女!募", "彼女.募", "彼女↑募", "彼女☆ぼしゅ", "彼女☆募", "彼女大大大大募", "彼女大大大募", "彼女大大募", "無料エッチ", "明日ヒマ", "友達募", "裸の写", "乱交", "嗜尿症", "嗜糞症", "舐めて", "おまんこ", "おちんこ", "くんに", "肉便器", "膣", "オウム", "オウム真理教", "麻原彰晃", "キム・ジョンウン", "金正恩", "キム・ジョンイル", "金正日"];
    }
  }]);
  return CheckName;
}();
```

## :star2: まとめ
- 実はlocalStorageの値をいじって https://jojo-polpotest.com/result にアクセスするだけでポルポテストにクリアしたことになる（ちょっとパッショーネっぽい？）

## :speech_balloon: 感想
- 自分の場合はChromeDevToolsを使う習慣があった&真っ先にlocalStorageを覗きにいったので実はここまで見てなかった :innocent: 
- でも改めて他の人が作ったサービスをデバッグしてみる裏技を探してるみたいで面白かった
- ブラック・サバスに襲われても責任は負いません