「WX04SH PDX mode」をAutomateItとLlamaからOn/Off指定して呼び出せるようにしてみた

WX04SH用のテストアプリを作ってみてはいたものの、私にはあまり利用イメージが具体的になってませんでした。てっきり「PDX受信用メールアプリを手動で起動した場合に自動タスク処理ソフトでデータ通信(PHS)を制御する」ものかと思ってました。

そんな中先日fetuinさんにTwitter上で以下のようなコメント頂きました。

On/Off指定で起動は難しい事でないので対応します。PHSのみのOn/Offは id:goriponsoft さんのアプリで対応済みみたいですので、「PHS data switch」は放置し「WX04SH PDX mode」だけ対応しましょう。
2つめの内容から利用イメージも

メーラーの新着チェックを15分等に設定」+「AutomateIt等を使って画面オフ時だけPHS回線化」=「画面オフの間PDXメールの新着を自動チェック!」

という形で固まりました。

「WX04SH PDX mode」の変更点は下記の通りです。

  • パッケージ名の変更。(旧アプリと別物として認識されます。旧アプリは先にアンインストール推奨です *1
  • アプリ本体で内部的にOn専用、Off専用のプログラムを搭載。(後述しますがLlamaはこれを直接呼び出せます) *2
  • 本体のOn専用、Off専用の機能を呼び出すアプリを別途作成。(AutomateItユーザーはこちらを推奨)
  • On専用、Off専用で呼び出す場合はバイブレーションを無しにした。(( その気になればAutomateItLlama側でバイブ動作を同時に指定出来るっぽいので ))

インストールは
http://www.casraq.com/WX04SHPDXMode_2nd.apk (本体)
http://www.casraq.com/WX04SHPDXModeOn.apk (On用、要本体)
http://www.casraq.com/WX04SHPDXModeOff.apk (Off用、要本体)
の3つを入れればOKです。全部入れるとアイコンが3つになります。

Llamaユーザーである」かつ「On/Off専用アイコンは手動で使わない」という方であれば、インストールするのは本体だけでも大丈夫です。

おまけ(Llamaユーザーが本体アプリだけ入れて使う用)

Llamaの場合Androidインテントを直接呼び出せますので、本体内のActivityを指定してやればOn/Off指定も自由自在です。

手動でAndroidインテントの内容を下記の様にしてやれば呼び出し可能です。もしかしたらTaskerも同様の処理が出来るかも…。

PDX modeに(on)したい時

パッケージ名: com.casraq.android.wx04shpdxmode
クラス名: com.casraq.android.wx04shpdxmode.OnActivity

PDX modeを解除(off)したい時

パッケージ名: com.casraq.android.wx04shpdxmode
クラス名: com.casraq.android.wx04shpdxmode.OffActivity

fetuinさんの利用イメージをベースにした設定をエクスポートしてみましたので、SocialLlama機能の使える方はそれでインポートしてみると楽かもしれません。*3

イベント名: 画面オンで通常回線に

条件(すべて整ったら):
画面オン/オフ: 画面オン

動作:
Androidインテント >
サンプル: com.casraq.android.wx04shpdxmode

イベント:
画面オンなら - Androidインテント「com.casraq.android.wx04shpdxmode」を送ります。


SocialLlama: http://llama.location.profiles/%E7%94%BB%E9%9D%A2%E3%82%AA%E3%83%B3%E3%81%A7%E9%80%9A%E5%B8%B8%E5%9B%9E%E7%B7%9A%E3%81%AB/%E7%94%BB%E9%9D%A2%E3%82%AA%E3%83%B3%E3%81%A7%E9%80%9A%E5%B8%B8%E5%9B%9E%E7%B7%9A%E3%81%AB%7C0-1-0-0-0-0-0-0-1-0--0-%7C%3A%7Csf%7C1%7Cai%7Ccom.casraq.android.wx04shpdxmode%7CFgAAAGEAbgBkAHIAbwBpAGQALgBjAG8AbgB0AGUAbgB0AC4ASQBuAHQAZQBuAHQAAAAAAP%2F%2F%2F%2F8AAAAA%2F%2F%2F%2F%2FwAAAAD%2F%2F%2F%2F%2FIAAAAGMAbwBtAC4AYwBhAHMAcgBhAHEALgBhAG4AZAByAG8AaQBkAC4AdwB4ADAANABzAGgAcABkAHgAbQBvAGQAZQAAAAAALAAAAGMAbwBtAC4AYwBhAHMAcgBhAHEALgBhAG4AZAByAG8AaQBkAC4AdwB4ADAANABzAGgAcABkAHgAbQBvAGQAZQAuAE8AZgBmAEEAYwB0AGkAdgBpAHQAeQAAAAAAAAAAAAAAAAAAAAAA%2F%2F%2F%2F%2Fw%3D%3D%7C0%7C

イベント名: 画面オフが続くとPHS回線に

条件(すべて整ったら):
画面オン/オフ: 画面オフ

動作:
単発イベントを待機 >
イベント名: 待機中イベント:画面オフが続くとPHS回線に
待ち時間: 5 分

条件:
画面オン/オフ: 画面オフ

動作:
Androidインテント >
サンプル: com.casraq.android.wx04shpdxmode

イベント:
画面オフなら - 5分待って「待機中イベント:画面オフが続くとPHS回線に 」イベント実行


SocialLlama: http://llama.location.profiles/%E7%94%BB%E9%9D%A2%E3%82%AA%E3%83%95%E3%81%8C%E7%B6%9A%E3%81%8F%E3%81%A8PHS%E5%9B%9E%E7%B7%9A%E3%81%AB+/%E7%94%BB%E9%9D%A2%E3%82%AA%E3%83%95%E3%81%8C%E7%B6%9A%E3%81%8F%E3%81%A8PHS%E5%9B%9E%E7%B7%9A%E3%81%AB+%7C0-1-0-0-0-0-0-0-1-0--0-%7C%3A%7Csf%7C0%7Cqe%7C%E5%BE%85%E6%A9%9F%E4%B8%AD%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%EF%BC%9A%E7%94%BB%E9%9D%A2%E3%82%AA%E3%83%95%E3%81%8C%E7%B6%9A%E3%81%8F%E3%81%A8PHS%E5%9B%9E%E7%B7%9A%E3%81%AB+%5Cp0%5Cd1%5Cd0%5Cd0%5Cd0%5Cd0%5Cd0%5Cd0%5Cd1%5Cd0%5Cd%5Cd0%5Cd%5Cp%3A%5Cpsf%5Cp0%5Cpai%5Cpcom.casraq.android.wx04shpdxmode%5CpFgAAAGEAbgBkAHIAbwBpAGQALgBjAG8AbgB0AGUAbgB0AC4ASQBuAHQAZQBuAHQAAAAAAP%2F%2F%2F%2F8AAAAA%2F%2F%2F%2F%2FwAAAAD%2F%2F%2F%2F%2FIAAAAGMAbwBtAC4AYwBhAHMAcgBhAHEALgBhAG4AZAByAG8AaQBkAC4AdwB4ADAANABzAGgAcABkAHgAbQBvAGQAZQAAAAAAKwAAAGMAbwBtAC4AYwBhAHMAcgBhAHEALgBhAG4AZAByAG8AaQBkAC4AdwB4ADAANABzAGgAcABkAHgAbQBvAGQAZQAuAE8AbgBBAGMAdABpAHYAaQB0AHkAAAAAAAAAAAAAAAAAAAD%2F%2F%2F%2F%2F%5Cp0%5Cp%7C5%7C

*1: そのまま入れると同じ起動アイコンが2つ出来てしまいます。

*2: ていうかAutomateItが賢ければこれに起動アイコン付けてやるだけで1パッケージに3アイコン搭載でシンプルに配布出来たんですが…。

*3: 何故か私の環境では http://llama.location.profiles/〜 にLlamaが反応してくれなかった…。Intent filter はきちんと登録されてるっぽいんですけどねー。

WX04SHテストアプリ第三弾を三種類

WX04SH PDX mode

PDXメールの送受信用の設定(Wi-Fi:off, データ通信(PHS):on, データ通信:on)に一括設定する。もう一度起動すれば起動前の状態に戻る。起動中は通知アイコンが出て、通知の詳細表示をタップしても解除可能。画面無し。
http://www.casraq.com/WX04SHPDXMode.apk
新しいバージョンをこちらのエントリ内からダウンロードしてください。(WX04SHPDXMode_2nd.apk+α)
id:goriponsoft さんが実機での画面キャプチャをアップしてくださいました! ありがとうございます!!

PHS data switch

「データ通信(PHS)」のOn/Offを起動する度に切り替える。「データ通信」や「Wi-Fi」の設定にはノータッチ。画面無し。
http://www.casraq.com/PHSDataSwitch.apk

WX04SH mode select

Wi-FiPHS、3Gの組み合わせ6通りを手動切替。見れば分かる簡単操作です。
http://www.casraq.com/WX04SHModeSelect.apk



使ってみてどれが使いたいなと思ったか教えて下さい。AutomateItを使ってないのでWX04SHユーザーにとってどんな使い方が理想的かがイメージ出来てません。もちろんきちんと動作するかの報告もお願いします。
「WX04SH PDX mode」については画面キャプチャ(通知アイコンが画面に出た状態、通知情報の詳細を開いた状態)をどこかにあげてくれると嬉しいです。手持ちの実機じゃWX04SHらしいキャプチャが取れないので……。

ソースは動作OKの報告あがったらアップ予定です……が、ConnectivityManagerのメソッド(またはConnectivityManager#mService経由でIConnectivityManager内の同名メソッド)を

setMobileDataEnabled → setPhsDataEnabled
getMobileDataEnabled → getPhsDataEnabled

に名前を変えて呼び出すだけで「データ通信(PHS)」のチェックを自由に付け外し可能、という単純なお話です。
私のはあんまり綺麗なソースでもないので、待つの面倒だったら上記クラス・メソッドをググってみてくださいね。
それでは人柱の皆様よろしくお願いします〜。

WX04SHのPHSデータ通信がアプリでOn/Offできるかの調査(人柱募集)その2

前回のエントリを公開したところ、さっそく人柱さんから情報をコメントして頂きました。ご協力ありがとうございます。

コメントして頂いた方は、useWill.com管理人のfetuinさんでした。ご協力感謝いたします♪
useWill.comの方でも新たにエントリ作って取り上げてくれてますね。(^_^;) *1

AQUOS PHONE es(WX04SH)でPHSデータ通信をアプリから制御するためのユーザーサイドの動きが始まった
http://kamo.pos.to/dpoke/c/UW8/UW8820.html

頂いた情報をもとに、「データ通信(PHS)」のOn/Off設定と、状態取得するテストアプリを作ってみました。
http://www.casraq.com/WX04SH_Test2.apk

画面にボタンが4つあります。上から順に説明していきますね。
1番目の「Refresh」を押すと、最新の状態を再取得します。 *2
2〜4番目のボタンは上から「Wi-Fi」「3G」「PHS」の状態表示&切り替えボタンとなっています。「On」と「Off」は言葉通り、「Not Support」はAPI呼び出しが出来ない状態となっています。
一番下のテキストボックスにはデバッグ用の情報を出力します。
上記キャプチャーはエミュレーターの為、もちろん「PHS」の機能は動作しません。

今回のアプリで確認して頂きたい事は以下の3点になります。

  • PHSのボタンが「Not Support」になっているかどうか。
  • PHSのボタンが有効な場合、きちんとOn/Offが出来るかどうか。
  • テストアプリ実行中、WX04SHのOS設定画面などでPHSのOn/Offを変更した場合、アプリに戻って「Refresh」を押すと正しく情報を取得出来るかどうか?

ご協力頂ける方は端末のバックアップ等をきちんと行い、WX04SHが内部から爆発しW-SIMと小型QWERTYキーのパーツが大量に飛び出してきてもイエデンワで119に通報出来る様に準備を整えてからアプリの実行をお願いします。(^_^)

*1: 私は確かにユーザーサイドだけどWX04SHユーザーに非ずという謎状態w

*2: 自動更新は面倒なのでやってません。(^_^;)

WX04SHのPHSデータ通信がアプリでOn/Offできるかの調査(人柱募集)

WX04KもWX10KもWX04SHも全部見送ってる私ですが、ちょっとWX04SHのある事が気になっています。
PHSデータ通信の使えるWX04SHでは「pdxメールを送受信出来るのはPHSデータ通信のみ」という現行仕様だそうです。*1

また全ての設定がOnだった場合『Wi-Fi >> PHS >> 3G』という接続優先順位になっているそうです。

その為「Wi-Fiまたは3Gの高速回線をデフォルト利用」しつつ「pdxメールを利用する」を両立させるには、「pdxメール送受信時だけWi-FiをOffしPHSデータ通信をON」「pdxメールを終了した時はWi-FiをOn、PHSデータ通信をOff」に設定する必要があるみたいですね。*2

ですが「手動で毎回設定をするのは非常に面倒くさい!」という声があがっていて、それで自動処理化してしまいたいという話が↓で行われてたんですね。

AQUOS PHONE es(WX04SH)でpdx/willcom.comメアドを送受信しつつ、3G/Wifiの高速回線も便利に使用する方法
http://kamo.pos.to/dpoke/c/UW8/UW8812.html

一応AutomateItというアプリでそれに近い事が出来そうという話にまでこぎ着けたそうなんですが、残念ながら「PHSデータ通信のOn/Off切替するアプリ(for WX04SH)」が無い為完全には目的を達せられていないみたいです。

3Gのモバイルデータ通信であれば以下の非公開APIでOn/Offを設定&取得できるようです。*3

ConnectivityManager#setMobileDataEnabled(boolean);

ConnectivityManager#getMobileDataEnabled();

本来のAndroidシステムにPHSの実装は埋め込まれてなかった筈ですので、おそらく同様のクラス/メソッドをSHARPさんが作っていると思われます。
たぶんメソッド名をPHSっぽい感じで命名して、単純に同じクラスへ追加しているのではないかと私は予想します。(素人考え)

という訳で、「クラスがConnectivityManagerのまま」「メソッドの新規追加」しているかどうかを調査するコードが以下になります。(というかリンク先をほぼ流用しただけ)

package com.example.connectivitymanagermethodlist;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import android.net.ConnectivityManager;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EditText editText1 = (EditText)findViewById(R.id.editText1);
        editText1.setText(getMethods());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public String getMethods() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

        Class<?> clazz = null;
        try {
            clazz = Class.forName(cm.getClass().getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
        try {
            Method[] available_methods = clazz.getDeclaredMethods();
            StringBuilder sb = new StringBuilder();
            for (Method m : available_methods) {
                sb.append(m.getName());
                sb.append("\n");
            }
            return sb.toString();
        } catch (SecurityException e) {
            e.printStackTrace();
        }
        return null;
    }

}

コンパイルしたAPKもhttp://www.casraq.com/ConnectivityManagerMethodList.apkサーバーにアップしましたので、誰かWX04SH実機をもっている人が実行結果をコメント欄までコピペしに来て頂けると嬉しいです。(^_^)
もし本当に情報が寄せられたなら、そのまま調子に乗ってPHSデータ接続切替アプリを作成するつもりです。
ただし

  • 開発速度が遅いので他の人が先に完成させる可能性が高い。
  • ConnectivityManagerとは別クラスに機能を作っていた場合には手詰まりになる。
  • 参考にしている3G通信の方ももともと非公開APIなので、PHSデータ通信の方もOSの対応で(既にor将来的に)APIを利用出来ない可能性がある。

という懸念材料もたっぷりですので、協力して頂ける場合はその点ご了承くださいませ。m(_ _)m

*1:将来的に「Wi-Fiや3Gからもpdxメール送受信可能にする予定(時期は未定?)」らしいですが、現状ではPHSデータ通信状態に上手く切り替える必要があるみたいですね。

*2: もちろん速度を犠牲にPHSデータ通信のみをOnにすれば切替する手間はありませんが。

*3:私も今回観覧車さん経由で教えてもらいました。

APK signature checkerがsecroidでHIGHと判定される件について

ひっそりと公開済みのAPK signature checkerですが、secroidさんの判定でリスクがHIGHと表示される状態になっています。
http://secroid.jp/d/d/a/0/com.casraq.android.apksignaturechecker.html

私もsecroidさんの利用は是非推奨したいです。しかし当アプリの判定を見た人が不安/不信に思うままではいけないので、当エントリでこの事について補足説明をしておこうかと思います。

ではインストールされているアプリの一覧の「取得」と「送信」それぞれについて解説してきます。

インストールされているアプリの一覧の『取得』

起動時/再読込時に以下の処理を行っています
PackageManager pm = this.context.getPackageManager();
List<PackageInfo> pkgs = pm.getInstalledPackages(PackageManager.GET_SIGNATURES | PackageManager.GET_META_DATA);

アプリ一覧を取得しないと当アプリの目的とする機能が全く果たせませんので、取得自体はやらせてください。(^_^;)
「アプリ本来の機能に全く無関係な情報を勝手にぶっこ抜いてる」訳ではありませんよ〜♪

インストールされているアプリの一覧の『送信』

★画面遷移時の情報受け渡し

最初の画面で取得した「インストールされているアプリの一覧」情報は、色々加工したりしなかったりした後、同アプリ内の各画面へデータを受け渡ししています。画面遷移としては次の2パターンがあります。

画面遷移パターン1

最初の画面(MainActivity)
↓リストをロングタップして[同一署名グループ呼び出し]
グループ詳細表示画面(GroupDetailActivity)

画面遷移パターン2

最初の画面(MainActivity)
↓メニューの[グループ毎に表示]
グループ一覧画面(GroupListActivity)
↓リストをロングタップして[グループ詳細表示]
グループ情報詳細画面(GroupDetailActivity)

どちらも最初の画面から見ると「インストールされているアプリの一覧を送信」する形とも言えなくはないですが、送信先アプリ内部に限定されていますのでご安心ください。

★[text]表示中に[共有]ボタンを押下すると…

各画面のメニューから[text]機能を呼び出し、タブ区切りテキストを表示中に[共有]ボタンを押すと以下の処理を実行しています。

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, editText1.getText().toString());
startActivity(intent);

「editText1.getText().toString()」が表示中のタブ区切りテキストデータとなります。
上記の実行結果から、端末上のIntent.ACTION_SEND("text/plain")に対応したアプリの選択画面が呼び出されます。その中で選択したアプリに表示中のテキストデータを渡します。この点について「(別アプリ宛に)インストールされているアプリの一覧の送信」をしているとも言えます。
ただし決して自動送信してる訳ではなく、ユーザー自身が[共有]ボタンを押下しない限り別アプリへ「インストールされているアプリの一覧」情報を送信しません。
私個人としては対応アプリとしてJota Text Editor等をお勧めします。

また残念ながらAndroid OSの仕様で、Intent.ACTION_SEND("text/plain")に対応したアプリが1件しかインストールされていない場合、[共有]ボタンを押した直後対応アプリの選択ダイアログは表示されず、即座に該当アプリへ情報を送信する事になります。
もしその1件がメール自動送信やSNS等への自動投稿アプリ、または悪意あるアプリ等であった場合、意図せぬ情報漏洩に繋がる事もありえますのでその点はご注意ください。

おまけ

secroidさんの解析で、(インストールされているアプリの一覧やSDカードの内容の)送信先を具体的にチェックする事は可能らしいのですが、その送信先が「明らかに開発用サーバ」になってたりする場合があるらしく、全てを一律に公開するのが難しいそうです。「送信先:」といった形で空欄のものが多いのはそう言った理由からなんですね。現時点では広告用サーバーとして判明しているもの等が「送信先:airpush」という感じで表示されるそうです。
またAPPREVIEWのインタビューによると、インストールされているアプリの情報については

実際の社会事情を参考にして権限を評価に反映したりもします。端末内のアプリ情報を取得する権限については、本来であればMIDDLEでもいい場合もありますが、ユーザーの方の反応を受けてHIGHに格上げしたこともあります。

http://app-review.jp/news/80017

といった経緯があったそうです。
……つまり▲ppL●gSDK・a●p.t▼・カ●■グ等が無断収集してたとばっちり…? (^_^;)

DecoyZip(仮題)とは

開発予定のもので出てくるDecoyZip(仮題)の解説です。

暗号化zipファイルを盗まれた場合、時間さえあれば総当りでパスワードを解読されてしまします。
仮に全ての有効なパスワードを試行するのにかかる時間がTならば、必要な時間は最大でもTだけで済みます。(当たり前)
それを無理やりT以上の時間にしてしまおうというのが、DecoyZip(仮題)の考え方です。
要は「一緒に囮の暗号化zipをx-1個追いとけば、平均してT*x/2の時間かけさせれるよね多分」というお話です。

囮のファイルには設定できる最長のパスワードをセットしておきます。*1
元々秘密情報を保存していたファイルを仮に"yamada_hanako.zip"とするならば、同じフォルダに

"yamada_tarou.zip"
"yamada_kaoru.zip"
"yamada_takuya.zip"
"yamada_tetsuya.zip"
"yamada_ai.zip"
"yamada_aiko.zip"
"yamada_kame.zip"
"yamada_jirou.zip"
"yamada_sakuya.zip"
"yamada_nekotarou.zip"
"yamada_kitarou.zip"
"yamada_arisu.zip"
"yamada_hiroki.zip"
"yamada_kouzou.zip"
"yamada_mogera.zip"
〜略〜
"gotou_maki.zip"
"gotou_mai.zip"

というような囮ファイルを大量に置いておくのです。
このようにしておけば、仮にUSBメモリ等に保存していたものを紛失した場合に、やや運次第にはなるものの生きてる間にパスワード解析されるのを免れるかもしれません。*2

勿論容量を各zipを似通ったサイズにするとか、沢山の名前を用意するとか、各zip内に入ってるファイル名を上手く隠蔽する*3とか、タイムスタンプをどんな状態にすべきか*4とか、OSのアクセス履歴*5の隠蔽方法とか、実ディスク容量をどう減らすか*6など、いくつか気をつける点があります。
手動で同じ事は可能ですが、その辺を自動化させるツールを作ろうと思ったのがDecoyZip(仮題)です。

実はこれ、以前途中まで製作してたんですよね。
手っ取り早く7-zipコマンドラインで呼び出すモノを.NET系言語で作ってたのですが、以前のPCクラッシュで製作途中のモノが消えてしまいました……。
優先度は今の所低いですが、難易度も低いので気が向いたら再度製作してみようと思います。

*1:もちろん"ZZZZZZ...ZZZ"みたいなパスワードでは辞書攻撃の類に脆弱なので設定しません。

*2:勿論本命の"yamada_hanako.zip"にも十分な強度のパスワードを設定しないといけません。"abc"といった脆弱なパスワードにしていたら、解析する側に「とりあえず3文字まで総当りする設定で、全ファイルを順番に解析」とされただけであっさり解析完了してしまいます。

*3:仮に"yamada_hanako.zip"にだけ"passwordmemo.txt"が入っていたら、そのファイルに専念して解析される危険があります。

*4:"yamada_hanako.zip"だけ更新日時が新しく、他が全部同じタイムスタンプだったら囮がどれか丸分かりですね。

*5:「最近使ったファイル」の情報等に"yamada_hanako.zip"だけ残ってたらバレバレです。

*6:全部が小容量でもクラスタギャップの総合計が大変な事になる事もあります。フォルダ直下に置いてあればエクスプローラー等で表示するのにも時間がかかるでしょう。

ManifestViewerが便利

Android端末上でAndroidManifest.xmlを閲覧できるManifestViewerってアプリが便利でした。

ManifestViewer
https://play.google.com/store/apps/details?id=jp.susatthi.ManifestViewer&hl=ja

タオ本asin:4844331345Androidのソース見ながら勉強するにはもってこいなソフトです。
単純に「一覧されたパッケージ名からプリインストールアプリが何処製かチェックする」だけでも面白かったです。