2021年3月15日月曜日

GOTとPLT

CTFのpwn問やると避けて通れないこの用語、やっとちょっとわかったので忘れる前のメモ書きです。

動的リンクと遅延リンク

まず、この2つの用語を理解するためには、動的リンクと遅延リンクの概念を理解する必要があります。

プログラムのコードを書いた後、そのプログラムは機械語に翻訳が行う(コンパイルする)必要があるのは前説明した通りなのですが、その後リンクという作業を行う必要があります。

このリンクというのは、プログラムの実行に必要な変数や関数をつなぎ合わせる作業です。わかりやすい例だとprintf()を使うにはlibcとつなぎ合わせる必要があるということです。

で、このリンク作業を実行ファイルを作るときに全部やって実行ファイルですべて完結するのが静的リンク、実行時に別ファイル(共有ライブラリ)にある関数とつなぎ合わせてあげるのが動的リンクです。

その動的リンクの中で、関数が呼び出されてからリンクを行うのが遅延リンクです。(ちなみに遅延リンク無効の動的リンク、Full RELROは実行時に全てリンクを行います)

GOTとPLT

前節で説明した技術を実現するために使われるのがPLTとGOTです。(Winは違うのを使ってるらしいけど知らんし興味が薄いのでノーコメントで)

GOT(Global Offset Table)

動的リンクを実現するための技術です。ELFファイルだと.got、.plt.got(遅延リンク有効時のみ)がこれに相当します。

リンクが必要な関数をここに切り離してまとめ、テキスト領域(機械語で書かれている、プログラム本体に相当する領域)はここを参照して関数実行するようにしておき、動的リンカは実行はじめにここを関数本体へのポインタに書き換えてあげることで動的リンクが実現されています。

PLT(Procedure Linkage Table)

遅延リンクを実現するための技術です。ELFファイルだと.pltがこれに相当します。

動作としては、関数呼び出しをここ経由にしておき、PLTはGOTを参照して関数を実行します。

最初GOTにはPLTのリンクを行う処理のアドレスを書いておきます。

初めて関数が呼び出されると、GOTはPLTのリンクを行う処理を指しているため、リンクが行われ、その後リンクによって解決した関数本体へのポインタをGOTに書き込みます。 PLTはリンク処理までもっていき、実際のリンク処理は動的リンカが行います。

それ以降はPLTを呼び出すとGOTには関数へのポインタが入っているため、関数本体がすぐに実行されます。(参考:[1])

.plt.got←どっちだよ

実行ファイルを覗くと.got以外に「.plt.got」というセクションがあります。これどっちの名前もついているため、ずっとどっちだよって言ってました。

正解は「PLTが書き換えるためのGOT領域」でした。

じゃあ遅延リンク有効なら.gotセクション要らなくねってなったんですけど、こっちは動的リンカがプログラム実行時に書き換える用のセクションとしての役割があるらしく、簡単なプログラムを書いて確認したところ、__libc_start_mainが.gotセクションにありました。

.plt.gotはその仕様上、書き込みをしなければならないため、遅延リンク有効の場合はどうあがいてもGOT Overritenの脅威がある(という自分での認識)。

遅延リンク無効の場合

遅延リンク無効でも.pltセクションは健在です←なんで?

.plt.gotは使用されず、動的リンカが.gotのポインタを最初に書き換えて、関数呼び出し時は.plt→.got→関数となります。

また、.gotは書き込み不可となっているため、GOTを書き換えてすきな関数を実行するのができません。

参考サイト[2]だけでなく実際に自分でも調べてみましたが、GCC 9.3.0でも同じ動作でした。Clangだと変わったりするのかなぁ

参考

[1] https://blog.tiqwab.com/2020/09/12/shared-library.html

[2] http://inaz2.hatenablog.com/entry/2014/04/30/173618

リンカ・ローダ実践開発テクニック(境井弘亮著 CQ出版社)



2021年3月6日土曜日

負のオンゲキ

みなさま、ごきげんよう。みれんくです。

突然ですが、あなたはセガが出している音ゲー「オンゲキ」をご存知でしょうか?

簡単に言うと「シューティング+音ゲー」です。ノーツに合わせてボタンを押すのと、レバーを操作することがあるゲームです。 

斬新な音ゲーですし、キャラもかわいいので気になったらやってみてください。

いかがでしたか?以下からはぼくのことなので、オンゲキ知らなかった人や興味ない人は戻るボタンを押してくださいね。

 

オンゲキが出来ん

ずっと言ってるけど、成長を感じないんすよね。

オンゲキの技術指標として、レーティングシステムというものがあります。諸悪の根源なんすけど。

そのシステムにおいて、自分は銀レート(13.00)到達が2020/7/28(Lv48)、金レート(14.00)が2020/9/22(Lv64くらい)、現在(2021/3/6)MAX14.36(Lv95)です。次の目標がプラチナレート(14.50)なんですけど…

あがらん、あがらんくてもいいけどできん

周りの人間が虹レ(15.00)目前だったり、後発でやって先にプラレ取られるのもそこそこクるものがありますが、単純に楽曲ができないのが一番キています。

まあ、出来具合を知るのにレーティングシステムは有効だと思っているので、自分が今のところどんなものかを知るためにオンゲキプレミアム契約してOngekiScoreLogで見てみました。

誰でも見れるみたいなのでここから見てみてください。

リーセント低くね???

本当に伸びていないのをひしひしと感じております。ていうか落ちてね?

ボルテはちょっと伸びている(VW金枠麗華→XG金枠魔騎士、VW無枠魔騎士)ので、いったんこっちも本腰を入れようというのが今回の内容です。

こうすればいいのではという考察中心です。結果は追記で書くかもしれないです。

 

なにが悪いのか

人生、分析してバグを潰すのが重要だと思っているのでまず何が悪いのかを考えてみます。

そのいち:オンゲキに本気"マジ"でなかった

それはそう。今までボルテのほうに割き気味だったのであっちで成果が出てこっちででないのは当たり前だと思う。

これの解決法はオンゲキ重点的にやるだけなのでこれで終わりです。

そのに:精度が悪すぎる

ボルテで難曲クリアを目標にやっていたため、精度度外視で押すことと、ほかを捨てて取るべきものを取るというスタンスでやっていたためそれがとても出ているように感じています。

オンゲキのスコアシステムはみなさんご存知の通りBREAK10=HIT2.5=MISS1という、最高判定以外に厳しめになっています。

また、オンゲキは基本、自機のHPが残っている限り曲が終了することがありません。一見良さそうに見えるシステムですが、逆に言えば「音ゲー」をするなら「スコア」を見るしか無くなるんです。

ということは精度を取らないとどうしようもないです。どうしようね。

精度対策

  1. 精度に意識するようにする
  2. Lv12前半を鳥+取る、場合によってはレベル下げる(下げても11まで)

あたりなのかな…時間はかかるけど…

そのさん:認識出来てない

これはボルテにも言えることですけど、認識が弱いです。

ボルテならび赤のCD叩かせるとことか寿司赤の直角+BTのハイハイ言うところとか何を押すかは理解してるけど、リズムがわからないってのがあります。

オンゲキは結構そういうのが12後半から出始めるし該当曲量があるので、本当に厳しい。

また、オンゲキは右左どっちでもノーツが処理できるので、どっちでやるかを判別しないといけないですけど、それも出来てないですね。

対策

  1. オンゲキをやめる
  2. 曲数積む(Lv12~)
  3. ハイスピ変える
  4. 目押し

1は経済的にも精神的にも楽になれると思う。おんなじ境遇の方いたらおすすめします。

が、それは「人生つらぽよ→じゃあ人生やめれば?」と同義なのでぼくはやりません。

2は正攻法な気がしています。12でも開いてない紫が結構あるのでそこを開けるかな…

3が迷っています。基本は10.5(僕的にはちょい遅め)なんですけど、密を避ける為に上げるってのも手なんだろうけど、オンゲキでそれやるとレバーと壁が死ぬのでわからなくなっています。

目線変えるのはちょっと試してみますけど、おうちボルテでやったら微妙だった(レーンの性質上)のでわからん…

速めでやるべきとか遅めでやるべきとかあれば教えてください… 

4もわからん…リズムがわからんなら来た瞬間に押せばええやん!って思ったけど、密度やハイスピに絡んでくるから…

そのよん:トリルができん

 

 

プレイ中無限に言ってる。

対策

  1. リズム取って毎日動かす
  2. 両手をつかう、運指を組む

1については、片手でやる場合に安定しないことが多いため、安定してやれるようにするためにするべきだと思うんだよね。ボルテのトリルも通ってるけどニアか通ってないかだから。

2はオンゲキ固有に近いです。両ボタンつかえることを生かす作戦です。低レべ曲をわざと両手でやるとかいいかも、でも精度も必要だから前に書いたやつと同時にやるのもどうなんだろうね…

 

まとめ

みれんくちゃんの今後にご期待ください

なんもわからん、とりあえず来週の月曜はオンゲキさせてくれ



2021年2月5日金曜日

キミへ贈るArduino

これはなに?

電子工作に使われる「Arduino」について知ってもらう記事です。初期投資も少なく手軽に行えるため、興味がわいたらぜひ初めてみてください。

もくじ

  1. Arduinoって何?
  2. Arduinoボードの種類
  3. Arduinoを使った開発

1.Arduinoって何?

ArduinoはArduinoマイコンボードArduino IDE(開発環境)の総称です。C言語ライクなArduino言語を使ってプログラミングを行います。ボードへの書き込みはArduinoボードとPCをUSBで繋ぎ、IDEの書き込みボタンを押すだけで完了です。専用機器を用意したり、回路を組んで流し込むなんてことは必要なくて敷居が低いです。

また、マイコンボードから開発環境まですべてオープンソースで公開されており、機能追加をしたり安価なパーツを使用して低コスト化を実現した互換ボードがあったりするのが特徴です。

説明からプログラム例まで超まとまっていたサイトがあるので詳しくはArduino のすすめを見てください。

2.Arduinoボードの種類

Arduino公式サイトのHARDWARE(https://www.arduino.cc/en/Main/Products)で現在流通しているArduinoを見ることができます。今回はUno、Nano、Leonardo、Micro、Megaに絞って軽く説明します。

 また、互換機について実体験に基づく注意点を書いておこうと思います。

2.1 Arduino Uno

最も標準的なArduinoボードです。マイコンはATmega328Pが使われています。

センサ入力等に使うアナログ入力ピンが6本(A0~A5)、電圧の高低について読み込み、書き出しが行えるデジタルピンが14本、そのうちの6本がPWM(Pulse Width Modulation)ピンです。

ちなみにPWMピンはServoライブラリを使うときに使用したりします。

また、どのボードでも言えることなのですが、アナログピンはデジタルピンとして使用することもできます。Unoの場合、アナログ入力を行わない場合は最大20本まで使用することができます。

2.2 Arduino Nano

Arduino Unoを小さくしたものです。後に説明するMicroより小さいです。マイコンはUno同様ATmega328Pが使われています。

各ピンはUno同様、アナログピンが8本(A0~A7) 、デジタルピンが14本、うち6本がPWMピンです。

ピンヘッダが実装されているため、ブレッドボードに直接差し込んで利用することができます。

2.3 Arduino Leonardo

Arduino UnoのマイコンをATmega32u4に変更したものです。このマイコンを積んでいるArduinoはHIDデバイスと認識させることが可能で、キーボードやマウスを作ることができます。UnoやNanoでもがんばればできるけど省略します。

アナログピンは12本(A0~A12、裏面に該当デジタルピンが記述されています。)、デジタルピンが14本あり、うちPWMピンが7本あります。複数用途があるピンがあるため、デジタルピンとして使用できるピンは最大20本です。

2.4 Arduino Micro

Arduino Leonardoを小型化したモデル。マイコンはLeonardoと同じくATmega32u4のため、これもマウスやキーボードを作ることができます。

各ピンもLeonardoと同じく、アナログピンが12本、デジタルピンが14本あり、うち7本がPWMピンです。アナログピンについては上記公式ページの「DOCUMENTATION」にある通りとなっています。こちらもデジタルピンは最大20本使用できます。

2.5 Arduino Mega 2560

 

いろいろデカいです。使われているマイコンはATMega2560です。メモリやフラッシュ(プログラムを書き込む場所)UnoやLeonardoに比べて大きいです。

アナログピンが16本、デジタルピンが54本、うち15本がPWMピンです。

2.6 互換機について注意点

1.で説明した通り、Arduinoはハードウェアまでオープンソースとなっているため、Amazonなんかでは互換機がたくさん発売されています。

基本、公式と使い勝手は変わらないのですが、経験上何回か躓いたことがあったので書いておきます。

2.6.1 USBで繋いだときに認識しない

Arduinoのプログラムを書き込むとき、シリアル通信を行って書き込むのですが、そのシリアル通信を行うチップが本家と異なる場合があり、繋いでも認識しない場合があります。

その場合、使用されているUSB-シリアルを確認してドライバを探し、インストールする必要があります。

認識後は本家同様に使用できます。

2.6.2 [重要]一部スペックが異なる場合がある。

めっちゃ大事です。

安いArduino互換機ではレギュレータ(入力電圧を変圧し、一定の電圧を出力するもの)が本家と違う場合があり、最大入力電圧が違う場合があります。

きちんと互換機のデータシートを見て使用してください。くれぐれも公式のデータシートを使わないことです。

ちなみにぼくはこのミスで部所有の互換Megaをひとつ壊しました。あーあ。

3. Arduinoを使った開発

基本的には2.で説明したボードを入手し、PCにArduino IDE(https://www.arduino.cc/en/software)を入れてプログラム書いて書き込んで終わり!って感じです。

…が、それで終わるのもあれなので、VSCode+プラグインを使用した環境を軽く書きます。Arduino IDEより書きやすいと思うので、ぜひ一度試してみてください。

3.1 Visual Studio Code(VSCode)

軽くてプラグインがいっぱいで便利なエディタです。(公式サイト)

Arduino以外にもCやPython、シェルスクリプト等を書くときにも使えますし、入れといて損はないと思います。

何か困ったことがあった時に情報が多いのも強みです。

3.2 プラグイン

この記事(https://qiita.com/narikei/items/847613a8f01a9e1527d7)が役に立ちます。

3.3 Arduino言語

翻訳したリファレンス(http://www.musashinodenpa.com/arduino/ref/)がとても参考になります。

基本、void setup()とvoid loop()で構成されます。setup()は起動時に一回のみ、loop()は起動後繰り返し実行されます。

また、Arduino言語ではプロトタイプ宣言が必要ありません。

あと、タブで記述ファイルを変更できます。機能ごとに分けてあげると使いまわしが効くでしょう。

まとめ

今回はArduinoを紹介しました。マイコンボードではこれだけではなく、ESP32とかSTM32とかあるんでぼくも使ってみたいねえ



2021年2月3日水曜日

キミへ贈るプログラミングのはじめ

これはなに? 

プログラミングというものを全く知らない方向けに、「プログラミングって何をするの?」「何が大事なの?」みたいなのを知ってもらうことを目的にした記事です。

ぼくの考えなどが多くありますが、このセカイの入り口となれば幸いです。また、興味がわいたらそこで終わらず、いろいろ調べて踏み出して欲しいです。

もくじ

  1. プログラミングって何するの?
  2. プログラミングに大事なのって何?
  3. 何をすればいいかな?

1.プログラミングって何するの?

簡単に言ってしまうと読んだ通りです。コンピュータへの命令であるプログラムを、CやPythonといったプログラミング言語を利用して作っていくことがプログラミングです。

…まあここで説明を終えてしまったらこの記事の意味無くなってしまうのでもう少し詳しく説明します。

  

1.1 プログラムって何?

言葉の意味としては「計画」が当てはまります。

今回の「プログラム」はコンピュータプログラムを指していて、コンピュータへの命令を記述したもの、となっています。

しかし、コンピュータには様々な種類があります。普段使っているような PCやスマートフォンはもちろん、電卓や洗濯機などの電子制御が行われている機器(組み込み機器とよく呼ばれます)もコンピュータといえます。

これより、一口にプログラムといっても、組み込み制御のようなハードウェアに近いものから、インターネットのサイトを構築するような人間に近いものまで多岐にわたっています。


1.2 プログラミング言語って?

コンピュータへの命令を人間が行いやすくするためのものです。

また、これで記述された指示書がソースコードと呼ばれています。プログラムの素です。

先ほど説明したプログラムが多様にあるように、プログラミング言語も用途にわけて豊富にあります。したがって、名前を知ってるとかで一つの言語を選んでやみくもに覚えるのではなく、やりたいことに合わせて言語を使い分けるのが大事だと思います。(これは声を大にして言いたい)

 

1.2.1[発展]コンパイラ型とインタプリタ型

難しい話なので飛ばしてもいいです。必要になったら見ればいいと思います。

プログラミング言語のひとつの分け方として、コンパイラ型とインタプリタ型があります。

まず、コンピュータは機械語を読んで動くのですが、人間にはとても取り扱いにくいため(できないことはない、すごい人はできるらしい)、いったん人間に近いプログラミング言語で指示を記述し、それをコンピュータの機械語に翻訳してあげています。

このときの翻訳の仕方で分類がされています。


コンパイラ型

ソースコードを読み込んで、すべて機械語に翻訳してあげるものです。この翻訳作業をコンパイルと言い、ソースコードを書いたり弄っても実行するにはコンパイルを行わなければなりません。

しかし、実行時にコンピュータは機械語を読むだけなので、とても処理が速いという特徴があります。

コンパイラ型で代表的な言語としては、C、C++、Go、Java、Kotlinなどが挙げられます。

(C、C++、Goは実物の機械語に翻訳されて、Java、Kotlinは仮想マシンの機械語に翻訳されるんすけど、詳しくは言いません、気になったら調べてみるといいかもね)

 

インタプリタ型

ソースコードを翻訳しながら実行するものです。コンパイルが必要ない分、ソースコードを変更するだけでプログラムが動きますが、実行と同時に翻訳するため処理が遅くなります。

インタプリタ型で代表的な言語としては、Python、Rubyなどが挙げられます。

 1.2.2 [発展]オブジェクト指向

[執筆予定]

2.プログラミングに大事なのって何?

1を読んでいただけたらプログラミングというものが何となくはわかったと思います。

では、そんなプログラミングには何が大事だと思いますか?自分は

  • やりたいものを見つける
  • 処理を組み立てられるようになる

だと思っています。 

やりたいことを見つける

1で説明した通り、プログラミングといってもいろんな種類があります。そのため、自分がやりたいことがない場合、苦痛でしかないと思います。

プログラミングは手段であり、道具です。目的ではありません。ぜひやりたいことを見つけてください。

処理を組み立てられるようになる

どんなプログラムも、「順次」「分岐」「反復」の動作で構成されています。これを理解し、やりたいこと・実装したいものを組み立てられるようになるのが大事だと思います。

最初はメモ帳や裏紙にフローチャートを書いて、慣れてきたら頭でやればいいと思います。

また、処理はできるだけ細かく考えることも大事です。反復動作の際の1ステップが予期しない動作を行ってしまうことはよくあることです。一度書いてうまくいかないときなどに諦めず、じっくり細かく考えることを意識するのがいいと思います。

3.何をすればいいかな?

まずは2.で説明した「やりたいことを見つける」「処理を組み立てられるようになる」をどうにかしておきましょう。その後はやりたいことの言語を作りながら学べばいいと思います。

最初は一から作ろうとせず、他人が書いたプログラムを読んで動作や言語の書き方を学び、少し書き換えて自分好みの動作をさせたりするのが有効かもしれません。ぼくもそうなので…

以下からはやりたいこと別に言語や道具のヒントを書いておきます。しかし、自分もすべてに精通しているわけではないですし、まだまだ未熟だと思っていますので、この記事を鵜呑みにするのではなく、自分でも調べてみてやっていってください。

ロボット等、実際にモノを動かしたい!

Arduinoを購入し、C言語ライクなArduino言語で開発を行うのが楽だと思います。情報もライブラリも豊富なので入門としてはとても優秀だと思います。後日記事を書く予定です。

また、IoTのようなものが作りたい場合、Raspberry Piというものがあります。これを利用しPython言語でプログラミングを行うことで軽いものは作れます。

ゲームを作りたい!

Unityを導入してC#言語でいろいろやればいいらしい(やったことはない)

スマホアプリを作りたい!

デバイスによって使用する言語やソフトが違います。

Androidスマホ向けであればAndroid Studioを導入し、JavaかKotlin言語で開発することができます。

iOS向けはやってないのでわかりませんが、Macが必要でSwift言語を使用するはずです。現時点でぼくはやっていませんしやる気もないので調べてください。

クロスプラットフォーム(様々なデバイスに対応させる)であればXamarinやFlutter、React Nativeなどのフレームワーク(開発基盤)があります。これもやってないので詳しくは調べてください。

PCソフトを作りたい!

コマンドを打って操作を行うCUI(Command User Interfaceの略です)ソフトであれば、C言語が手っ取り早いと思います。より多機能にしたい場合はC++言語が便利だと思われます。C++ヤバイって聞くけど舐めるくらいならCに毛が生えたくらいなので恐れなくてもいいかも…ただ怖い人がいっぱいいるのも事実なのでノーコメントで…

画面操作するタイプ(GUI: Graphical UI)でWindowsであれば.NETという便利なものがあります。(これもやってないから調べてね)

クロスプラットフォームで開発したい場合はJavaやKotlinなどがあります。Pythonもクロスプラットフォームで動き、大体なんでもできます。

Webページを作りたい!

見た目の中身にはHTMLとCSSというものが使われています。作り方はわかんないです…ぜったい便利なものがあると思いますがあんまり興味ないので…

あとがき

書いていて自分の未熟さをとても感じました。この記事を読んで少しでも興味を持った方、一緒に精進しませんか?



2020年11月5日木曜日

香港版Xperia 5 Ⅱ(XQ-AS72)でau VoLTEを使うユメ

 夢なので実践等は自己責任で行ってください。

 

みなさんごきげんよう!みれんくです。

題意の通り、先日香港版Xperia 5 Ⅱにおいてau VoLTEを有効化することができた夢を見たので共有します。この手法においてauと楽天モバイルは動作確認できました。SBとdcmでも使える気はしますが確認手段がないのでなんとも言えません…

追記2(2021/5/15):国内版1 Ⅱのmodemを焼くことでVoLTE化できるそうです(https://mirenote.blogspot.com/2020/11/Xperia5ii-VoLTE.html?showComment=1620481446893#c8631811460278459309)

これにより、Bootloader UnlockせずともVoLTE化できそうですが、記事はこのまま残しておきます。1 Ⅱのmodem焼きで動かない場合にお試しください。

追記(2020/12/31):docomoでの動作確認をしました


 

もくじ

  1. 概要

  2. よういするもの

  3. modemの編集

  4. Bootloader Unlockとroot化

  5. まとめ

 

1.概要

通信に関するものはmodemパーティションにあるのですが、通常の香港版では中国向けにカスタマイズされているらしく、そのままだとauではIMS登録ができずデータ通信しかできません。

そこでau版5ⅡのmodemをデュアルSIM機用に少し改変したものを焼いてあげる、というのがこの記事の手法です。どこぞやの流出ソフトは使用しませんので比較的クリーンな手法となっております。

2.よういするもの

  • 香港版Xperia 5 Ⅱ
  • 使用しているROM(ここではCustomized HK)のbootファイル
  • SOG02のmodemファイル 
  • adb,fastbootが使えるPC 

3.modemの編集 

modemファイルをUnSINにかけると、FATなイメージが出力されます。このイメージ内の

 images/modem_pr/mcfg/configs/mcfg_hw/oem_hw.txt

を編集します。このファイルを開くとSOG02のイメージの場合

 mcfg_hw/generic/common/SDX55/PDX206_K1/mcfg_hw.mbn

となっていると思います。これを

 mcfg_hw/generic/common/SDX55/PDX206_J2/mcfg_hw.mbn

と変更してあげます。Linuxマシンであればloopマウントで直接編集可能…なはずなのですが、自分が行うとIOエラーを吐いてうまくいきませんでした。したがって、バイナリエディタを使用し、上記の文字を直接置換しました。 バイナリエディタを使用する際は、mbn_hw.txtの方にある文字列を置換しないように注意してください。こちらのファイルは上記以外のmbnファイルも記載されているため、置換場所はわかりやすいと思います。

4.Bootloader Unlockとroot化

Bootloader UnlockはSony公式ページからUnlockコードをもらってくる必要があるのですが、執筆時(2020/11/5)現在、デバイスリストに5 Ⅱが存在しません。

しかし、Xperia 1 Ⅱを選択しIMEIを入れてあげることで使用可能なUnlockコードが出力されます。じゃあデバイスリスト作るなよ…

その後、これに従って作業を行えばBootloader Unlockは完了です。あとは用意しておいたbootイメージをMagisk Managerでパッチ当ててfastbootで焼いて終わりです。これ読むくらいならわかると思うので書きません。

rootが取れたら、あとは3.で用意した改変済みmodemを

 /dev/block/by-name/modem_a

 /dev/block/by-name/modem_b

にddで焼いてあげて工事完了です…

5.まとめ

 いかがでしたか?動作したら幸いです!

 

mcfg_hwの中身について補足ですが、ディレクトリ名の命名規則が

<コードネーム>_<キャリアor国一文字><SIMスロット数>

となっている感じがします。元の香港版はPDX206_C2となっております。J2=日本向けデュアルSIM向け設定では…?と思い上記の操作を無事動きました。ということは日本向けデュアルSIM機がそのうち出てもおかしくないねえ……

 



2020年4月28日火曜日

おそとにでれないのでボルテコンを買ったらめっちゃ待った話

yoi


こんにちは、最近SOUND VOLTEX(以下ボルテ)にハマっているみれんくです。
流行病のおかげで大学が伸び、家でボルテしてあんまり外に出ないようにしよう!という考えよりSVSE5を購入しました。
しかし、時期が時期で通常の配送より大幅に遅れて届いたため、今到着待ちの方や購入を検討している方向けにぼくの配送スケジュールをまとめようと思います。(ぼくは毎日追跡ページ更新してTwitterでほかの購入者の様子見たりしてたので絶対需要ある) 

最終的な追跡結果

日本郵便の追跡(リンク)


中国邮政速递物流の追跡(リンク)

中国発のものなので中国の方で追跡した方が国を出たかどうかが詳しく知れるかなと思っていましたが、結局ほぼ変わりありませんでした。何なら国際交換局発の時刻を打ち間違ってる気がするんですけど…
今注文してる方は日本郵便の追跡で十分だと思われます。 
 

3/30 - 注文

自分はGAMO2で購入しました。オプションはつまみをコーパルセットにし、ほかはデフォルトです。\28800。

4/1 - 発送完了メールが届く


友達とゲーセン行ってオンゲキやってたら届きました。この調子なら二週間位で来るんじゃないかとこのころは思ってました…

4/8 - 中国→日本のEMS便が一週間に1本ということを知る


ちょっと不安になったけど来週来るって信じてた

4/17 - 同時期注文の方が届き始める

つらかったです、ですがこの時期に届いたツイートを見ると全員4/8(水)に中国(鄭州)を出ていること、中国→日本便が一週間1本だという情報より来週の22日を待つことに…

4/22 - 追跡、動かず

4/17の時点で中国発の便に乗ると追跡が動くのを確認していた(国際交換局から発送のステータスが新たに出る)ので期待していたのですが、全く変わらずでした。
過去には一か月半待ったという方もいらっしゃったのでこの時はもうあきらめてました。

4/24 - 日本着!!!!!!

22日で更新されてないだけで、実際は動いてるかも…という淡い期待から毎日更新してましたが、急に「国際交換局に到着」のステータスが現れました。うれしかったです(KONAMI)

4/26 - 到着

この日はバイトで受け取りができそうになかったので、わざわざ郵便局に行って受け取ってきたのですが、箱が馬鹿でかいので車持ち以外はおすすめしません。

まとめ - いつかはくる!

ゲーセンも閉まり、中国来の郵便物は来ないでさんざんですが、頑張ってこの時期を乗り越えていきましょう…!
あと余談ですが、デフォルトで遊んでたらおとなりさんに怒られたので、静音化はしようね!自分はボタンにゴム手袋2重張り、ボタンの爪部分にゴム手袋1枚、バネに油、中身をバスタオルで詰める、台の下にタオルを敷くことでなんとか許しを得ました。
それではすてきなボルテライフをお過ごしください…


2019年7月15日月曜日

チャレンジパッド2を任意のイメージで起動させる方法(root化もあるよ!)

はじめに

この記事で発生したいかなる損害も、私は一切の責任を負いません。

全て自己責任の上で行ってください。

 書いたからな!ヨシ!

概要

チャレンジパッド2(以下CPad2)のUARTを使い、U-Bootの起動コマンドを変えてMagiskが入ったramdiskで起動させroot化出来ました。その詳細な情報を書いていきます。UARTのパターン以外はCPad2以外の要素なので、更なる情報が欲しい場合は適宜調べてください。


もくじ

  1. CPad2のUARTについて
  2. Magiskのramdisk作成
  3. U-Bootからの起動

1. CPad2のUARTについて

 CTab(40TL04)やCPad(40S404)と同様なパターンが基板上に存在します。以下の画像の青線がTX、橙線がRXとなっています。またボーレートは115200、電圧レベルは1.8Vです。自分は3.3Vのシリアルアダプタでレベル変換モジュールを使って接続しています。はんだ付けの下手さは放っておいてください。つながりゃいいんだよ
 接続後、起動時に何らかの入力をシリアルから入れ続けるとU-Bootのコンソールに入ることができます。

2. Magiskのramdisk作成

 Magiskのramdisk作成ですが、自分のCPad2上で行ってみたら裏で「Killed」とログが測れており、うまくいきませんでした。従ってほかのスマホにMagiskManagerを入れ、CPad2のboot.imgにパッチを当てる方法を取りました。CPad2のboot.imgはここのupdate.zipを展開して取得できます。

パッチの当て方

 1. MagiskManagerを起動し上の「インストール」を選択



 2. 表示されたダイアログの「インストール」を選択後、「Select and Patch a File」を選択し、CPad2のboot.imgを選択 



その後、パッチされたboot.imgをmkbootimgを使い展開して終了です。

3. U-Bootからの起動

 標準状態のCPad2ではbootcmd=mrvlbootとなっています。すべての環境変数はこのようになっており、mrvlbootのソースはこれです。CPad2のmrvlbootではkernel、ramdiskのロード時にRSAのチェックが入るようになっているのでそれらを直接書き換えても動作はしません。しかし、mrvlbootの実態はソースを読むとわかる通り、実行コマンドの文字列を生成してそれを実行するものとなっています。そのため実行コマンドを自分で組み立てれば自由自在です。
 自分はSDカードにFAT16の第一パーティションを作り、その中に2.で作成したramdiskをramdisk.imgとして置き、bootcmdをこれに変更しました。bootcmdのような環境変数の確認はprintenv、変更はeditenv <編集したい環境変数>、保存はsaveenv(これは直接eMMCに書き込むので十分注意して行ってください)で行えます。

 2022/02/28 追記

mrvlbootで行っていることのメモを共有しておきます。

https://gist.github.com/Mirenk/7cb24e7fe1c162caa8f20f32a49771ca

mrvlbootではhandle_dtbが宣言されていますが、実際にCPad向けにコンパイルした際はこちらが実装となります。BR向けでは3.でのコマンドで問題なく動いてしまうのですが、BSでは画面が映らなくなってしまいます。したがって、メモのコマンドを行わなければなりません。BRだった場合もメモに沿うことをおすすめします。