3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

信GO!アプリの解析 (私の自由研究 2025)

3
Posted at

はじめに

SoftwareDesign 2025年7月号「万能IT技術研究所」の記事を読んで、高度化PICSの仕組みの調査を継続しています。

高度化PICSに対応した交差点マップ

高度化PICSに対応した交差点の情報は公開されており、Googleマップにピンを立てて表示しました。

信GO!アプリ

スマホアプリ「信GO!」を使用して歩行者用の信号状態を表示します。青信号延長や押しボタン信号(横断要求)も可能です。

Androidアプリ

iPhoneアプリ

米子駅前交差点

高度化PICSに対応した交差点はあまり存在しないため、JANOG56に出張した帰りの経路で初めて信GO!アプリの動作を確認しました。

交差点IDの収集

BLEアドバタイズデータに交差点IDの情報が含まれていることを知り、帰宅後に最寄りの交差点IDを集めました。

スクリーンショット 2025-08-14 22.09.41.png

BLEアドバタイズデータの記録

記事のサンプルコードを参考にしてBLEアドバタイズデータを記録しました。

スクリーンショット 2025-08-14 22.27.21.png

確かに、交差点毎にIDの値は異なっていました。

スクリーンショット 2025-08-14 22.32.25.png

BLEアドバタイズデータの再生

収集したBLEアドバタイズデータを使用してESP32(M5Stack AtomS3)で再現してみましたが、信GO!アプリは動作しませんでした。
BLEアドバタイズデータ(メッセージタイプ1)の中に位置情報(緯度、経度)が含まれていたので、現在地に偽装してみましたが、信GO!アプリの動作は変わりませんでした。

スクリーンショット 2025-08-14 22.39.06.png

信GO!アプリの解析

信GO!アプリの抽出

Androidアプリの信GO!アプリを解析します。

MacOSのBlueStacks Airを使用してAndroidアプリをインストールします。

スクリーンショット 2025-08-14 22.47.47.png

BlueStacks Airの設定を変更して、adbコマンドで接続できるようにします。

スクリーンショット 2025-08-14 22.48.09.png

MacOSにadbコマンドをインストールします。

brew install --cask android-platform-tools

adbコマンドを使用してBlueStacks Airから信GO!アプリを抽出します。

adb connect 127.0.0.1:5555

(アプリがインストールされるディレクトリは変わる可能性があります)
adb shell pm list packages -f | grep pics
package:/data/app/~~M0KbIrLiQlPJmln4fcBeEw==/jp.co.signal.pics-9sOpmEU9POkv3-2b69AA7w==/base.apk=jp.co.signal.pics

adb pull /data/app/~~M0KbIrLiQlPJmln4fcBeEw==/jp.co.signal.pics-9sOpmEU9POkv3-2b69AA7w==/base.apk

base.apkが信GO!アプリ本体です。

アプリの解析

apkファイルの解析方法はいくつかあります(最初にAndroid Studioを試しました)が、結果的にjadxを使用して解析できました。

jadxをインストールして、jadx-guiを起動します。

brew install jadx
jadx-gui

base.apkを読み込むと自動でデコンパイルされます。
「Source code」のjp.co.signal.picsの配下を探っていきます。
交差点情報を取得するURL(getRemoteServerBasePath())を確認できます。

1.jpg

アプリの動作確認

アプリの動作はiOSを使用しました。
iOSからmitmproxy経由で通信内容を確認します。

MacOSにmitmproxyをインストールして起動します。

pip install mitmproxy
mitmproxy

iPhoneの設定はこちらを参考にしました。

iPhoneで信GO!アプリを起動すると、サーバと通信するログが表示されます。
(ログ下部のwww.j-signal.jpとのPOST通信:2回)

2.jpg

1回目のPOST通信はUserIDの登録で、DeviceIDを入力してUserIDを取得しています。

3.jpg

4.jpg

2回目のPOST通信が交差点情報の取得で、UserIDを入力して交差点情報を取得しています。

POST https://www.j-signal.jp/PicsApi/api/GetIntersectionDefinitions HTTP/2.0
accept: */*
content-type: application/json; charaset=utf-8
accept-encoding: gzip, deflate, br
user-agent: PICS/20310 CFNetwork/3826.500.111.2.2 Darwin/24.4.0
content-length: 62
accept-language: ja

{
  "UserId" : "8000A8A4",
  "LastUpdate" : "00010101091859"
}
HTTP/2.0 200 
cache-control: no-cache
pragma: no-cache
content-type: application/json; charset=utf-8
expires: -1
server: Microsoft-IIS/10.0
x-aspnet-version: 4.0.30319
x-powered-by: ASP.NET
date: Thu, 14 Aug 2025 03:10:36 GMT
content-length: 349750

{"Intersections":[{"IntersectionId":"FF0000F9","Latitude":35.675837,"Longitude":139.751291,"Radius":20.0,"GenerationNumber":0,"Name":"デモ交差点","Kana":"でもこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/FF/FF0000F9.html","StartDate":"20200301","EndDate":"20991231","DemoFlg":1,"PedestrianSignals":[{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"FF0000FA","Latitude":36.000000,"Longitude":139.000000,"Radius":1.0,"GenerationNumber":0,"Name":"恒温槽交差点","Kana":"こうおんそうこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/FF/FF0000FA.html","StartDate":"20200301","EndDate":"20991231","DemoFlg":1,"PedestrianSignals":[{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"FF0000FB","Latitude":36.055503,"Longitude":139.651688,"Radius":1.0,"GenerationNumber":0,"Name":"立会エリア交差点","Kana":"たちあいえりあこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/FF/FF0000FB.html","StartDate":"20200301","EndDate":"20991231","DemoFlg":1,"PedestrianSignals":[{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"FF0000FD","Latitude":36.054640,"Longitude":139.652658,"Radius":10.0,"GenerationNumber":0,"Name":"S棟展示室交差点","Kana":"えすとうてんじしつこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/FF/FF0000FD.html","StartDate":"20200301","EndDate":"20991231","DemoFlg":1,"PedestrianSignals":[{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"00B94D8D","Latitude":35.666354,"Longitude":140.164458,"Radius":28.0,"GenerationNumber":1,"Name":"四街道消防署前交差点","Kana":"よつかいどうしょうぼうしょまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/12/00B94D8D.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"四街道
駅・県立盲学校方向","Kana":"よつかいどうえきけんりつもうがっこうほうこう"},{"Name":"中央公園・四街道小学校方向","Kana":"ちゅうおうこうえんよつかいどうしょうがっこうほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB181","Latitude":34.972395,"Longitude":138.387644,"Radius":17.0,"GenerationNumber":1,"Name":"静岡駅前交差点","Kana":"しずおかえきまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB181.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"静岡駅前・中央郵便局間南北方向","Kana":"しずおかえきまえ・ちゅうおうゆうびんきょくかんなんぼくほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB182","Latitude":34.971808,"Longitude":138.386611,"Radius":30.0,"GenerationNumber":1,"Name":"静岡中央郵便局前交差点","Kana":"しずおかちゅうおうゆうびんきょくまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB182.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"静岡駅前・中央郵便局間南北方向","Kana":"しずおかえきまえ・ちゅうおうゆうびんきょくかんな
んぼくほうこう"},{"Name":"紺屋町・黒金町間東西方向","Kana":"こうやまち・くろがねちょうかんとうざいほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB183","Latitude":34.974836,"Longitude":138.385639,"Radius":27.0,"GenerationNumber":1,"Name":"江川町交差点","Kana":"えがわちょうこう
さてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB183.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"","Kana":""},{"Name":"南北方向","Kana":"なんぼくほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB184","Latitude":34.976041,"Longitude":138.382513,"Radius":33.0,"GenerationNumber":1,"Name":"県庁前交差点","Kana":"けんちょうまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB184.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"東西方向","Kana":"とうざいほうこう"},{"Name":"南北方向","Kana":"なんぼくほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB186","Latitude":34.979620,"Longitude":138.387656,"Radius":34.0,"GenerationNumber":1,"Name":"水落交番西交差点","Kana":"みずおちこうばんにしこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB186.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"南北方向","Kana":"なんぼくほうこう"},{"Name":"","Kana":""},{"Name":"東西方向","Kana":"とうざいほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB188","Latitude":34.976871,"Longitude":138.380450,"Radius":24.0,"GenerationNumber":1,"Name":"日
赤前交差点","Kana":"にっせきまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB188.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"東西方向","Kana":"とうざいほうこう"},{"Name":"南北方向","Kana":"なんぼくほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB18A","Latitude":34.977476,"Longitude":138.386963,"Radius":24.0,"GenerationNumber":1,"Name":"鷹匠2丁目交差点","Kana":"たかじょうにちょうめこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB18A.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"南北方向","Kana":"なんぼくほうこう"},{"Name":"東西方向","Kana":"とうざいほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]},{"IntersectionId":"014FB18B","Latitude":35.120153,"Longitude":138.919258,"Radius":25.0,"GenerationNumber":1,"Name":"大社前交差点","Kana":"たいしゃまえこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/22/014FB18B.html","StartDate":"20200424","EndDate":"20991231","DemoFlg":0,"PedestrianSignals":[{"Name":"東西方向","Kana":"とうざいほうこう"},
(省略)

交差点情報に位置情報も含まれており、BLEアドバタイズデータの位置情報を偽装しても信GO!アプリの動作が変わらない理由がわかりました。

さいごに

交差点情報の取得方法が分かり、交差点IDの情報もすべて取得できたので、交差点ID集めの旅はこれで終了です。
交差点の画像データ(のURL)や「安全運転中央研修所デモ用交差点」などのデモ用の情報も含まれていました。
FF0000F8.jpg

{"IntersectionId":"FF0000F8","Latitude":36.387334,"Longitude":140.592120,"Radius":15.0,"GenerationNumber":1,"Name":"安全運転中央研修所デモ用交差点","Kana":"あんぜんうんてんちゅうおうけんしゅうじょでもようこうさてん","URL":"https://www.j-signal.jp/PicsApi/data/map/FF/FF0000F8.html","StartDate":"20250313","EndDate":"20250331","DemoFlg":0,"PedestrianSignals":[{"Name":"トラフ体験方向","Kana":"とらふたいけんほうこう"},{"Name":"アイナビ体験方向","Kana":"あいなびたいけんほうこう"},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""},{"Name":"","Kana":""}]}

IoT技術(BLE)が社会実装されている良い事例勉強となりました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?