「ポケフレ」解析
「カラオケまねきねこ」が提供している「おしゃべりクーポン」アプリ
「タクト」「コトハ」という2種類のキャラクターと喋るとクーポンがもらえる
いわゆるメッセンジャー(死語?)のUIで会話ができる、声に出して喋ってくれる
クイズ出したりニュース教えてくれたり音楽流してくれたりする
https://gyazo.com/dadb2d59ebdfc74cb6b6d8f7af50fb31
静的解析
APK展開
assets/
sharedassets(0|1).resource → で取り出し、BGMだった どこからかとってきたものかもしれない
data.unity3d
Live2D Animator Motion Data の文字
Unityわからん
res/xml/
code:network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">ec2-54-178-163-137.ap-northeast-1.compute.amazonaws.com</domain>
<domain includeSubdomains="true">ec2-52-198-154-199.ap-northeast-1.compute.amazonaws.com</domain>
<domain includeSubdomains="true">52.199.100.123</domain>
<domain includeSubdomains="true">52.192.153.31</domain>
</domain-config>
</network-security-config>
EC2インスタンスも含めると、IPが4つ転がっている(後述)
Unity, Live2D, Firebase, Crashlytics(Fabric) を使っている
動的解析
(Android) 発信権限とかとにかくいろいろ要求してくるのでこわい
通信
mitmproxyで適当に, Burpはダメだった
Androidはアプリがプロキシを通ってくれないのでアレ(どうすればいいんだ?)
iOSで検証
エンドポイント
POST https://api.kmvr.co.jp/api/login
https://gyazo.com/c0c37544b86c9103e5684aeef87efe75
https://gyazo.com/66d6dc08a8fd906da60893b6d1d2e195
POST https://t2s.kmvr.co.jp/api/speech
t2s = Text to Speech
リクエスト
https://gyazo.com/4da3d235b54aa2cf79843a8fc8d18231
https://gyazo.com/8373e3a8f56ef6e00920f13e1a35c71f
taichi, reinaって誰?
レスポンス
https://gyazo.com/ff83cdc2b034ed97b525f7229f0826fb
音声データが返ってくる
base64, フォーマット不明
POST https://api.kmvr.co.jp/api/talk
https://gyazo.com/a93e2fe6352e10b17e92f8cf0d7643a2
https://gyazo.com/2673a0c56bc7c70708b624d39f154451
https://gyazo.com/0b96bc6ff6966ffcbf4bece42c5780ff
文章と発音が異なる(こういうハックを見るのが好き)
S3の画像データ
初回起動時は会話で使用する「スタンプ」をダウンロードしてくる
https://api.kmvr.co.jp/api/login のレスポンスのassetUrlに注目
code:mitmproxy
"asset": {
"size": 69278,
"version": 2
},
"login": {
"news": false,
"timeCode": 3
},
ドメインがAWS S3のそれ
https://pocketfriends.s3.amazonaws.com/ を見に行くとリストが載っているので、置換してURLだけのリストにしてからwgetで取ってくる
https://gyazo.com/471471af29f5efb656f503647be9bdbf
クーポン画像、ゲーム中の背景(店舗・公園など)、スタンプの画像データが入っている
背景はどこかで撮影した写真をPhotoshopでフィルタを(数段階に分けて)かけている
「いらすとや」の犬とかもあった
exiftoolより
その中の一枚
https://pocketfriends.s3.amazonaws.com/uploads/background/imageUrl/223/school_kotoha.jpg
https://gyazo.com/88c6286b0596da18e2fb38d51f384da7
Googleで画像検索
https://gyazo.com/d35b3a4fcca185b344e70cc0464a3c64
なんかのを流用してる?フリー素材?
Text to Speech
Text to Speechサーバには端末側で指定した文字列を送っている
リクエストのデータから抜粋
code:json
{'userToken': 'o9IO8tqtYNMKb29IJgE07PLeSp8aJZehHyqqWmPIkNa5+TiK', 'version': 'iOS-1.1.4', 'data': {'text': 'なあに?', 'xvoice': 'reina_emo', 'xpreset': '{"reina_emo":2,0.9,1.2,0.8,150,370,800,"J:0.5,A:0.5,S:0.5"}'}} 'text'はそのまま喋る文章
'xvoice'はtaichi_emoまたはreina_emo→声の種類
声のオタク「この声知ってる、ボイロ(VOICEROID)じゃね?」
VOICEROIDかAITalkっぽい
'xpreset'はそのパラメータ、順に音量・話速・ピッチ・抑揚・「、」,「。」,改行時のポーズの長さ(ms)・感情(Joy, Anger, Sadness)
リクエストをinterceptして任意の言葉を喋らせることができる
code:speech.py
from mitmproxy import http
import json
def request(flow: http.HTTPFlow):
if flow.request.pretty_host == "t2s.kmvr.co.jp":
content = json.loads(flow.request.content)
print(content)
flow.request.content = str.encode(json.dumps(content))
$ mitmdump -s speech.py
楽しい
IPアドレスの調査
静的解析で見つけた4つのIP (AWS EC2はサブドメインの数字がそのままIPv4に対応している)
54.178.163.137
52.198.154.199
52.199.100.123
52.192.153.31
Censysで見てみる
https://gyazo.com/a5d74404d36c89e6d25b701448099f55
54.178.163.137→ TCP22, 3000(Rails), 3001(Rails)
52.198.154.199 → 3000, 3001, 3002 (successのみ, 疎通確認?)
52.199.100.123 → 22, 3306, 3000
52.192.153.31 → 22, 3000
TCP3000〜3002はすべてHTTP
「会話シミュレータ」
staging(52.192.153.31:3000), development(52.199.100.123:3000)バーションがある
キャラクターの記憶を操作できる
他に kmvr.co.jp でZoomEyeから検索をかけるとproduction環境のシミュレータが
https://gyazo.com/c4ad5a34ce6f7b22878e74724ecc429e
「エージェント」にタクト・コトハだけではなくて「NONO」という謎キャラがいる
運営主体
株式会社KMVR
「ポケフレ」のページにリダイレクトされる
適当にパスをいじるとRailsのエラーページが出る
アプリのパブリッシャー
株式会社モノゴコロ
アプリ中のIPアドレスに解決するドメインを持つ(RISKIQ)
https://gyazo.com/8331fc88135cead51de2e0b2ee5fe5aa
モノゴゴロとKMVRは本社所在地とその移動時期が同じ
https://gyazo.com/cdec39a0a34cddadce0b95e69d16ecc8
https://gyazo.com/8c1f06ef1b2cdab41a019508ea4f704d
https://gyazo.com/5719713354ba216d0d946001cf131298
南東にある「新井白石終焉の地」がそれはそれで気になる
コシダカホールディングス
「まねきねこ」の親玉
KMVR = Koshidaka Monogocoro VR ?