#author("2023-12-28T11:23:17+09:00","","")
#author("2023-12-28T13:55:25+09:00","","")
*目次 [#ha2596fe]
#contents

* チャレンジパッドNEOのスペック [#z1b16dfb]
''2020/11/20: 技適データベースに製品版NEOの型番とみられるものを発見したためリークに追記しました''
''2020/12/18: 実機で確認したスペック情報を一部公開しました''
''2020/12/26: 改造に関する情報を追加しました。''

*画像 [#h5d50d61]
|&ref(89456f2a-4bf4-49c5-b0c1-543c0ed7a693.png,nolink,465x319);|&ref(https://chu.benesse.co.jp/tablet/spec/_assets/201116_26053_tablet_spec_pic_01_pc.png,nolink,465x319);|

*スペックデータ [#l0862f93]
|各部|情報|備考|
|SoC|MTK8168a|予想通り|
|OS|Android 9||
|型番|TAB-A05-BD|DはDevelopのDだと思われていたがBDのまま発売となった|
|最新ビルド番号|01.11.000|WebViewの変更|
|カーネルバージョン|4.14.87+&br;#1 Wed Nov 4 09:09:54 JST 2020||
|セキュリティパッチ|2020-04-05||
|ストレージ|16GB|チャレパ3と変わらず。|
|液晶サイズ|10.1インチ(1920×1200ドット)|解像度大幅UP!!フルHD以上の解像度!!|
|タッチパネル|静電容量方式タッチパネル|TAB-A03-BS以来の静電容量!滑らかなタッチや快適なズームイン、ズームアウト対応|
|マルチタップ|可|10点まで認識可能|
|ペン入力|電磁誘導方式|スマイルゼミに対抗してか、こちらも電磁誘導方式のペンを採用!!|
|スピーカー|モノラル|音に期待してはいけません。|
|Wi-Fi|IEEE802.11a/b/g/n/ac , 2.4/5Ghz対応|ネットめちゃつよい|
|SD|SD,SDHC対応|SDXCに関しては情報なし。|
|カメラ|メイン、サブともに500万画素|カメラはチャレンジパッド3と同じでゴミ。|
|USB|MiniUSB|あの古臭いUSB端子はまだ健在みたいです。はよTypeCになれ。|
|厚さ|約15.3mm|TAB-A03-BSとおんなじくらい。|
|サイズ|高さ約187mm×幅約267mm|変わらない。。?|
|重さ|約650g|軽くなってる。|
|付属品|カバー、タッチペン、ACアダプタ|タッチペンいいなぁ|
|詳しくは|https://chu.benesse.co.jp/kaiin/lp/tablet_neo/index.html|[[魚拓>https://web.archive.org/web/20201107113715/https://chu.benesse.co.jp/kaiin/lp/tablet_neo/index.html]]|

**対策情報 [#n547018a]
-チャレンジパッド3に比べ、改造対策がビビるほど大幅強化。開発者オプションを開くときにパスワードを聞かれるダイアログが出る場合、
そのパッドの改造は''現時点でほぼ不可能。(ブラウザを起動することさえもできない。)''
-開発者オプションのパスワードは設定アプリの改造によって実現されており、DchaStateが3以外である状態でかつ、COUNT_DCHA_COMPLETED_FILEが存在しIGNORE_DCHA_COMPLETED_FILEが存在しない場合のみにロックがかかるようになっている。
これらの確認にはmediatek-services.jar内のBenesseExtensionの機能checkPasswordが利用される。パスワードが有効であった場合、開発者オプションを邪魔しているViewが削除される。
-工場から出荷されて届いたばかりのものなら改造できる。しかし、一度学習環境でセットアップしてしまったら初期化しても改造ができなくなる。
-初期状態ならブラウザーの起動ができる。adbを使ってアプリをインストールすることができるが、セットアップアプリを開くと必要なデータ以外
全て消える。
-不具合だらけだったDchaServiceも修正。
-端末管理機能は復活。
-初期化方法が変わった。といってもこれは改造対策ではなく、ホームボタンも静電式になったことによりさわるだけで反応するため、システム復旧モードに
誤って入ることのないようにするためだと考えられる。

#region(詳細情報)
-以前からのdcha_stateに加え、新たに変更不可能な領域(Factoryパーティション)に保存されているファイルによって改造対策状態(開発者オプションの妨害の有効化などが行われた状態)にするかどうかを設定するようになった。(このファイルを以後DchaPastCompletedと呼ぶ)
-DchaPastCompletedの書き換えは権限が無いため不可能
-DchaPastCompletedが存在すると、「ブラウザ」アプリと「検索」アプリとadbが無効化される。
-DchaPastCompletedが存在するかつdcha_stateが3以外のとき、adbは監視されていて、有効化してもすぐに無効化される。
-DchaPastCompletedが存在すると、アプリからの提供元不明のアプリのインストールができなくなる。
(技術的には、今までは「提供元不明のアプリ」のスイッチを隠すだけだったのが、android.os.UserManagerのUserRestrictionによってさらに制限されるようになった。つまり、他のアプリやadbでも有効化できない。ただし、adbでインストールすることはできる。)
-https://developer.android.com/reference/android/os/UserManager
-dcha_stateが0より大きいとき、セーフモードが無効化される。
-dcha_stateが0のとき、com.android.traceurが無効化される。
-dcha_stateが0より大きいとき、セーフモードが無効化される。
-dcha_stateが0のとき、com.android.traceurが無効化される。
#endregion

**動作環境 [#y62f0502]
>⚠︎''G''   のマークがあるアプリはGooglePlay開発者サービスが無いと動作しません。

|GooglePlay|動作可能、インストール不可(android.permission.INSTALL_PACKAGESを付与できないため)詳しくは[[こちら>GooglePlay開発者サービスについて]] ''G''|
|GooglePlay開発者サービス|動作可能、使用可能 ''G''|
|Google Play services for Instant App|動作可能、使用不明|
|Googleアカウントマネージャー|動作可能、使用可能 ''G''|
|Googleサービスフレームワーク (5.1動作不可(rootが必要))|動作可能、使用可能  ''G''|
|Googleパートナーのセットアップ|動作可能、使用不明|
|GoogleBackupTranspot|動作可能、使用不可(android.permission.BACKUPを付与できないため)  ''G''|
|Googleカレンダーの同期|動作可能、使用可能|
|Googleの連絡先の同期|動作可能、使用可能|

* 主なシステムアプリ [#m19d4bb6]
-----
** FirmwareUpdate/オフラインアップデート [#v5915366]
タブレットOEMの三洋テクノロジーソリューションズ鳥取によって開発されたタブレットのファームウェアアップデータ。
タブレットのシステムアップデートをするアプリ。
/storage/external/にupdate.zipを配置すればアップデート出来るが、署名チェックが実行されるためベネッセが出したupdate.zipしかアップデートを実行できない。
#region(余談)
アップデート実行中に署名が違うファイルを検出した場合、「エラーです」とメッセージを出す。アップデートが強制中断される。
そのため、端末内に消えないゴミが残り、動作が非常に不安定になる。
この症状は初期化すれば直るが、そうするとNeoでは再改造が不可能なため、絶対にやってはいけない。
#endregion

** 中ゼミ アップデーター [#c89829d4]
チャレンジパッド本体をアップデートする。
ACCESS_SYSTEMによってシステム権限でアップデートファイルを/cacheにコピーし、リカバリーモードで再起動して、アップデートを行う。

** 中ゼミ アップデートサービス/UpdateService[#nd0ca4e0]
ファームウェアのダウンロードをサポートする。
ACCESS_SYSTEMによってアプリのサイレントインストールをして、アップデートを行う。並列ダウンロードしていない為アップデートは遅い。

** 中ゼミ 異物混入検知アプリ [#baf75c07]
タッチパネルにごみが挟まったら自動的に教えてくれるお役立ちアプリ。
NEOは静電式の為機能していない。

** 中ゼミ/ホームローディング [#p36940b3]
ホーム画面を起動するのにつかわれる。アップデートのチェックなどを行う。
また、ACCESS_SYSTEMによって、ユーザー数、端末の状態の確認、ナビゲーションバーの非表示、ADBの無効を行う。
端末が学習にそぐわない状態だった場合等にローディングでエラーになる。

** 中ゼミ 専用ブラウザー/DchaBrowser[#yea0267a]
チャレンジパッドのメインアプリケーション。中学講座はすべてブラウザにより表示されている。
小学講座はホームはアプリだが学習時はブラウザである。
アクセスできるページは、XMLファイルによって制御されている。
ホーム画面もHTML5で構成されている。
外部アプリを起動できる関数が備わっている。    (BenesseBrowser.transitionExpresslyApk)

** 中ゼミ タッチ 専用ブラウザー [#ec0f2fdf]
チャレンジパッドのメインアプリケーション。すべてブラウザにより表示されている。
なおこのアプリは中2,3講座のみ 中ゼミ 専用ブラウザーとは微妙にパケットサイズが異なっている
外部アプリを起動できる関数が備わっている。 (BenesseBrowser.transitionExpresslyApk)

** 中ゼミ ユーザー設定/DchaUserSetting [#a49a9105]
画面の明るさやwifiの設定、sdカードへコピー、接続テストなどの設定を提供する。
また、ユーザー数を確認する。作成するとエラーになる。
端末情報までいくとナビゲーションバーが表示される。オープンソースを開き、文字を選択しブラウザで開くを押すとブラウザで開くはずだがDchaStateによって管理されており、3(学習環境)だった場合、開かないようになっている。
また、ボリュームダウンボタンを押しながら、ユーザー設定のトップアクティビティを開くと、管理画面ボタンが出現し、
タップすると、パスワードを入力できる。
パスワードを入力するとAndroidの設定画面が開くが、
アップデートにより、パスワードが解析されないようSHA-256によって暗号化されたため解読は実質不可能になった。
文鎮パスワードは以前と同様であり暗号化されていない。この為設定を開くパスワードが暗号化されたのは改造対策だということがわかる。

**Androidシステム [#j93e0bb8]
AndroidOS本体
このアプリが存在していないとOSを起動できずブートループになる。
全てのAndroidにインストールされている。

**DchaService [#z86e56af]
ベネッセタブレットを管理するアプリ。
初期チャレンジパッドの物よりパワーアップしている。
独自パーミッション
-----
 jp.co.benesse.dcha.permission.ACCESS_SYSTEM|プロテクトレベル:dangerous
--------
 jp.co.benesse.dcha.permission.ACCESS_DATA|プロテクトレベル:signature
-------
 jp.co.benesse.dcha.permission.ACCESS_SERVER|プロテクトレベル:signature
-------
 jp.co.benesse.dcha.permission.ACCESS_ACOUNT|プロテクトレベル:signature
---------
 jp.co.benesse.dcha.permission.STOP_SERVICE|プロテクトレベル:signature
--------
が割り当てられる。
ACCESS_SYSTEM以外は保護されており、署名が一致していないと付与されない。

#region(ACCESS_SYSTEMに含まれている機能)
-cancelSetup
セットアップ中に変更した設定やインストールしたアプリをすべてなくし、もとに戻す。ただしDchaPastCompletedは削除されない。
-checkPadRooted
デバイスのRoot権限が取得されてないか確認
取得されているとtrue、でなければfalseを返す。
-clearDefaultPreferredApp
アプリのデフォルト設定をクリアする。Benesseの設定に変更される。
-copyFile
ファイルをコピーする。ファイルパスが確認されている。
成功するとtrue、でなければfalseを返す。
-copyUpdateImage
System権限でファイルをコピーする。/dataや/cacheにアクセスできる。ファイルパスが確認されている。
成功するとtrue、でなければfalseを返す。
-deleteFile
ファイルを削除する。ファイルパスが確認されている。
成功するとtrue、でなければfalseを返す。
-disableADB
設定のデバッグモードをオフにする。adbを使えなくする。開発者オプションまたはアプリから再度有効にできる。
-getForegroundPackageName
現在表示中のアクティビティのアプリのパッケージを取得する。
-getSetupStatus
DchaServiceのDigichalizedStatusの値を取得する。
-getUserCount
Androidの設定中のユーザー数を取得する。
-hideNavigationBar
ナビゲーションバーを表示するか設定する。
trueで非表示、falseで表示
-installApp
アプリをインストールする。ただし、Benesseの署名か確認される。
-isDeviceEncryptionEnabled
Androidが暗号化されているか調べる。
-rebootPad
チャレンジパッドを再起動するほかに、初期化したり、アップデートイメージを適用することができる。
-removeTask
タスクをすべて消去する。
-sdUnmount
SDカードをアンマウントし、取り外しを可能にする。
-setDefaultParam
学習環境用の設定をAndroidに適用し、すべてのサードパーティ製のアプリを消去する。
-setDefaultPreferredHomeApp
デフォルトのランチャーを設定する。
-setPermissionEnforced
android.permission.
READ_EXTERNAL_STORAGEの
権限を強制させるか設定するようだが、
使おうとしてもDchaServiceが死滅するためわからない。
-setSetupStatus
DchaServiceのDigichalizedStatusの値を設定する。
一度でも0ではない値を設定するとDchaPastCompletedが作成される。
もし作成されている状態で0以外の値にするとファイルの中の数値が一つずつ上がる。
-setSystemTime
Androidの時間を設定する。
-uninstallApp
アプリをアンインストールする。
-verifyUpdateImage
update.zipの署名をチェックする。

#endregion

**DchaUtilService [#d8c2e2a8]
DchaServiceにはないSystem権限の機能を提供する。
Androidシステムと署名が一致している為System権限で動作している。
ユーザーアプリなのに全てのAndroidの権限が付与される。
#region(含まれている機能)
-clearDefaultPreferredApp
アプリのデフォルト設定をクリアする。
-copyDirectory
ディレクトリをコピーする。コピー元、コピー先ともに外部ストレージ以下のものかのチェックがある。チェックに引っかかるとSecurityExceptionが投げられる。
-copyFile
ファイルをコピーする。コピー元、コピー先ともに外部ストレージ以下のものかのチェックがある。チェックに引っかかるとSecurityExceptionが投げられる。
-deleteFile
ファイルを削除する。消去用としているファイルが外部ストレージのものかパスチェックあり。
-getDisplaySize
Android標準のサービス(display.getRealSize(point);)から画面の解像度を取得する。おそらく強制的に解像度が変更されている場合、その解像度が返される。
-getLcdSize
android.os.BenesseExtensionの機能であるgetLcdSize()を使用して画面の解像度を取得する。おそらく強制的に解像度が変更されている場合も、Lcdの本当の解像度が返される。
-getUserCount
Androidの設定中のユーザー数を取得する。
-hideNavigationBar
ナビゲーションバーを表示するか設定する。
Settings.System.putInt(contentResolver, "hide_navigation_bar", [1:hidden or 0:shown]);が使われる。
-makeDir
ディレクトリを生成する。作成先が外部ストレージ以下のものかのチェックがある。チェックに引っかかるとSecurityExceptionが投げられる。
-sdUnmount
SDカードをアンマウントする。SDKバージョンが28未満の場合方法が変わっている。
-setDefaultPreferredHomeApp
デフォルトのランチャーを設定する。
-setForcedDisplaySize
android.os.BenesseExtensionの機能setForcedDisplaySize()を使用して解像度を設定する。
-listFiles
引数に指定されたパス内にあるファイルの絶対パスを配列で返す。参照しているパスが外部ストレージ以下にあるかのチェックがある。
-exsistsFile
引数に指定されたファイルのパスにあるファイルが実在するかを確認する。確認しようとしているファイルが外部ストレージ以下にあるかチェックが走る。
-getCanonicalExternalPath
渡されたパスの絶対パスを返す。渡されたファイルが外部ストレージ内にあり、SDKバージョンが28以上の場合、外部ストレージへのパスの部分が環境変数にあるものからDchaUtilServiceの関数getExternalStoragePath();で取得したものに変更される。
#endregion

**SetupWizard [#f1dc005f]
スタートボタンのアプリ。
&color(Red){起動前に内部ストレージにフォルダorファイルを置くとエラーになる};
•起動すると発生するアクションまとめ。
|全てのデータ、アプリが消去され、学習設定になる。&color(Red){(端末管理アプリ除く)};|
|システムUI以外の全アプリの通知がブロックされる|
|自動スリープの時間が10分に変更される|
|通知バーが開けなくなる|
|画面ロックが解除される|
|ナビゲーションバーが表示されなくなる|
|右上の時計表示が 例 20:00から●月●日午後8時00分に変更される|
|DchaStateが変更され、DchaPastCompletedが作成される。|
//質問を追加しないで下さい

トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS