アプリケーションパッケージ解析 [1.95.1]

3DCircleWithoutShadowTransparent.pngフェヴ・ゲームス(fev games)
2016/03/08 11:31:26
新たなバージョンが公開され、新たな解析をするときが訪れました。Connor Tumbleson が驚愕の新発見をお伝えします。

1951-e1457398510304-620x350.png

アプリケーションパッケージ解析 [1.95.1]
皆さんごきげんよう。新たな解析をご紹介します。今回は 1.95.1 となりますが、徐々にGoogle Play ストア上で展開されています。今回のバージョンでは大幅な視覚的変更が行われるとともに、イングレスとは直接関係しない多数の変更が行われていました。

厄介なボタンサイズ
イングレスのボタン配置は多くの人々にとって骨身に染み付いたものでしょう。それゆえに、今回の変更は大きな騒動となりました。そこで今現在は OPSからDevice、Smaller Icons から設定できるようになっています。写真を見てもらう方がわかりやすいことでしょう。

items-diff.png

写真の編集を怠ったため、新旧というのは適切な説明ではありません。小さなアイコンの有効化させるようになったことから、有効、無効と表現すべきところです。

portal-diff.png

つまり、Smaller Icons を有効化させると、視覚的に多くのものを縮小させることができるのです。

COMPLEX と SIMPLE のグリフ
数日前のことですが、グリフコマンドセンターの際に新たに二種類のグリフが認識されることを速報しましたが、現時点では認識されないようになり、今回のアプリケーションパッケージにも言及はありませんでした。おそらくは1.95.1 が全ての端末へ適用されたうえでその機能が有効化されるのでしょう。追加されたグリフの機能が明らかになり次第、再度速報いたします。その機能について虚偽を広めたくはないのだが、幾つか憶測をこの投稿末で挙げてみるとしよう。

Upsight と Crittercism
さて、新たに二種類の共有オブジェクトファイルを発見しました。これはAndroid 固有のオブジェクトであり、通常のJava よりも若干厄介なものです。しかしながら、ファイル名に突破口がありました。

libcrittercism-v3.so

そして、グーグル検索で見つけたのが、https://www.apteligent.com です。要約すれば、それはユーザーフローと分析、クラッシュ検出といったものでした。提供されるデータにも依存しますが、カスタムレポートを作成するための有力な製品です。しかしながら、レポート生成に用いる情報提供は Upsight が担っていることは既知のことです。そのため、Crittercism の果たす役割は何か確認することにしました。

on-boot.png

従前は基本的に Upsight v2 が用いられてきました。個別の識別情報を送信すれば、ユーザーごとのクラッシュ報告を追跡するのには何かと便利でしょう。Google Analytics と Upsight がデータ送信すれば、その時点で Crittercism へ送られているのです。

もっとも、Crittercism は極めて優秀です。Upsight は最寄りポータルまでの距離や最後に起動した時刻といったイングレスに依存した情報に依存しています。おそらくはプレイヤーとポータルの直接的な相関関係による活動ヒートマップによって、スポンサーアイテムやスポンサーポータルの顧客提案に活用されているのでしょう。

今回の新たな分析エンジンでは異なるアプローチが採用されています。イングレス内のあらゆるアクションにリクエストが生成されているのです。ご使用の端末でナイアンティックへリクエストを送信すると、レスポンスを返しています。Crittercism は、いつリクエスト送信されたのか、リクエストやレスポンスのペイロードがどの程度の規模なのか、どのような端末から送信されたのか、といった追跡に利用されます。

responses.png

これによってご利用端末にはより多くのリクエストが追加されています。ご利用の携帯電話はゲームグループごとのリクエストに、追加のアウトバウンド・リクエストを送信します。このデータは、障害などを識別するためのエラー追跡に利用できることでしょう。

Upsight と Upsight v3
今回はCrittercism の解析次第と考えていたのですが、Upsight にも更新があると発覚しました。バージョン1.94.0 における変更をUpsight v2 としましたから、今回の変更は Upsight v3 と呼ぶべきでしょう。注目すべき幾つかのファイルが発見されました。

  • res/layout/upsight_fragment_billboard.xml
  • res/marketing_content_view.xml

さて、何でも構いませんが、分析向上に使用する Javascript を呼び出すために若干WebView を使用しています。そこで marketing_content_view.xml を確認してみました。

<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent">
<WebView android:id="@id/upsight_marketing_content_view_web_view" android:layout_width="fill_parent" android:layout_height="fill_parent" />
<ImageView android:id="@id/upsight_marketing_content_view_close_button" />
</RelativeLayout>

表示を簡略化させるために幾つかタグを削除しましたが、要点は押さえています。分析ツールの活用を目的としてページに埋め込まれた WebView があるのです。これによって埋め込まれた Javascript が実行されます。クローズボタンには ImageView が組み込まれていますが、これは意味を成していません。フルスクリーンのブラウザにクローズボタンがあるとお考えください。これは広告のように思えます。いま少し調べてみたところ、今回のバージョンには新たに二つのディレクトリがありました。

  • com.upsight.android.googlepushservices
  • marketing.internal.billboard

プッシュサービスとありますね。

ご存じない方々のために説明すると、データリクエストにはプッシュとプルの2種類があります。端末はポーリングのたびに処理できますが、そこで扱われるデータが「プル」です。対して端末上で接続を確認する受け手もあり、そのために存在するのが「プッシュ」データです。これには登録された受け手が求められます。確認できた限りでは、今回のバージョンでは新たに二種類のサービス(受け手)が登録されており、そのひとつは次のメタデータに関連づけられたものと思われます。

<meta-data android:name="com.upsight.extension.googlepushservices" android:value="com.upsight.android.NemesisUpsightPushNotificationServicesExtension"/>

すなわち、Upsight はネメシスに関わったのです。ネメシスとはイングレスのコアエンジンに関わるコードネームです。この事実はイングレスのコアエンジンであるネメシスには、「UpsightMarketing」に紐付けられた Upsight のプッシュ通知システムを受け取る機能が存在することを指し示しています。

 私はパニックを引き起こすことを望んではいません。だから、何ら言及はいたしませんが、今回得られたものは膨大であり、それらにはデータを取り扱いWebView へ返すものが含まれているのです。

ローソン・パワーキューブ
ローソン・パワーキューブがハックによって入手できるようになり、その説明欄に記載もありますが、それは意味を成してはいません。アプリケーション内にはコード(Java)にもリソース(xml)にも記載がないのです。これは過去の狙いを台無しにしたものです。それでは今回のアイテムに関する説明はどこにあるのでしょうか。

卑劣なことに、今回の新アイテムの名称や説明は利用端末のストアタブから得る情報に埋め込まれていました。さらには、「GLYPH_HINT_SIMPLE_HACK - ENTER "SIMPLE" - SEE GLYPHS LONGER」なる説明も確認されたのです。

こうして、SIMPLE とはグリフ表示時間が長くなることだと推察することができました。ということは、COMPLEX とはグリフの表示時間短縮を意味しているのでしょう。COMPLEX の活用には大きな利点が生じるかもしれませんね。ご承知のとおり、あくまで公式発表を待たねばなりません。今のところは記述のひとつに基づいていた推論に過ぎないのです。

総括
今回は数多くの調査にもとづく大規模な投稿となりました。今回のバージョンは2016年03月03日に構築され、2016年03月07日に入手しています。それではオーランドでお会いしましょう。

fev games
2016/03/08 11:31:26
A new version, a new teardown. +Connor Tumbleson takes you through it with some surprising new discoveries.

#Ingress  

 

Published on March 8th, 2016 | by Connor Tumbleson
Ingress APK Teardown [1.95.1]

Hello everyone and welcome back to another teardown. This time we are examining 1.95.1 which is slowly rolling out to a Google Play Store near you. This version includes a major visual change in addition to quite a few non Ingress related changes.

Pesky Button Sizes

Everyone has complained one way or another. The button placement in Ingress has become muscle memory for a lot of people and any change to it resulted in uproar. Now under OPS -> Device -> Smaller Icons. You can toggle a smaller button set. I think a few pictures will explain this better.

Since I'm lazy to remake my images. Old/New are not good explanations. It should be Disabled/Enabled, since New corresponds to Smaller Icons being enabled.

In short you can see many visual elements shrinking when "Smaller Icons" is enabled.

COMPLEX/SIMPLE Glyphs

During a breaking news post a couple days ago we discovered two new glyphs -- "COMPLEX" & "SIMPLE" that were allowed during the Glyph Command Centre. As of now they are no longer recognized and the APK has no mention of them. This probably means that the feature will be activated once 1.95.1 has reached everyone. We will have another breaking news post when we discover the true functionality of these additional glyphs. We have some ideas further down the post, but don't want to spread false information.

Upsight Meet Crittercism

So I noticed two new shared object files. These are native objects to Android, so they are a bit more difficult to examine than regular Java. However, the giveaway was the name of the files.

A couple of Google Searches later, I found - https://www.apteligent.com. TLDR - User Flow, Analytics, Crash detection, etc. This is one powerful product that can create custom reports at will (depending on what data is provided). However, we already have Upsight which sends a good detail of information used in generating reports. So it was time to see what Crittercism was doing.

So basically Upsight v2 so far. Sending some personal identifying information, which is probably useful to track individual crash reports per user or something. Since Google Analytics and Upsight are already sending data, then sure throw in another (Crittercism) at this point.

Crittercism is far smarter though. While Upsight relies on more personal Ingress information (distance to nearest portals, last time played, etc) its probably used for recruiting businesses for sponsored items / portals as they have direct correlation of players and portals for a heatmap of activity.

This new analytic engine takes a different approach. For every action in Ingress you generate a request. Your phone sends a Request to Niantic and they respond with a Response. Crittercism hooks into this to track when the request was sent, how large the request/response payload was and what device/host sent it.
responses

This adds a lot more requests to your device now. Your phone sends an additional outbound request for every group of game requests. This data could be used for enhanced error tracking to identify failures or much more.

Upsight Meet Upsight v3

I thought Crittercism was the end of this teardown, but I noticed updates to Upsight. I dubbed the changes in 1.94.0 Upsight v2, so it was only fair to call these changes Upsight v3. Some alarming new files were found.

res/layout/upsight_fragment_billboard.xml
res/marketing_content_view.xml

Now this could be anything. A little webview to load some Javascript to perform enhanced analytics. So I took a peek in marketing_content_view.xml.

<RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent">
<WebView android:id="@id/upsight_marketing_content_view_web_view" android:layout_width="fill_parent" android:layout_height="fill_parent" />
<ImageView android:id="@id/upsight_marketing_content_view_close_button" />
</RelativeLayout>

I removed some tags to shorten the display, but this is the gist. You can have a Webview hidden on a page to simply leverage analytic tools. This allows you to run Javascript in a hidden view. It doesn't make sense why there is an ImageView with a close button. Just imagine a full screen web browser with a close button. This sounds like an ad to me.
I did a bit more research. New to this version was two entire directories of files.

com.upsight.android.googlepushservices
marketing.internal.billboard

Wait. Push Service?

For those who don't know. There are two types of data request. Push & Pull. Your device can reach out every once in awhile on a slow polling process and "pull" for data itself. The alternative is having a listener on your device that listens for connections and have something "push" data to it. This requires a listener which has to be registered.
Just our luck, two more services (listeners) were registered in this version, including a quite scary one which I believe is related to the metadata tag below.

<meta-data android:name="com.upsight.extension.googlepushservices" android:value="com.upsight.android.NemesisUpsightPushNotificationServicesExtension"/>


Upsight meets Nemesis in short. Nemesis is the codename for the core Ingress engine. This basically says that Nemesis (Ingress Core) has the ability to listen to a Upsight Push Notification System, which is hooked to this "UpsightMarketing".

I don't want to be wrong and start a panic. So I won't say anything, but the evidence is overwhelming for something, which involves reaching out for data and returning it into a webview.

Lawson Power Cube

So for those who've hacked a Lawson Power Cube, the item has had a description on it. However, this makes no sense. The fields in the application are empty in both the code (java) and resources (xml). This is how we've spoiled item's purposes in the past. So where is this item description coming from?

Those sneaky guys. The resource description and title for the new item are hiding in the response your phone gets from the Store tab.
In addition to this. You see the description for 'GLYPH_HINT_SIMPLE_HACK - ENTER "SIMPLE" - SEE GLYPHS LONGER'.

So we can infer that SIMPLE = See glyphs longer. Complex might mean see glyphs for a shorter amount of time? There might be a gear advantage to using COMPLEX. Who knows, we need an official announcement. Since we are just going off a single description field.

Conclusion

This was a large post with a lot of research. This version was built on March 3 and obtained on March 7. I'll see some of you at Orlando!