はてなキーワード: デコンパイルとは
親父の正体がプログラムだと子供の頭で理解した時本当に驚きだった
俺の親父は0と1で作られていると知ったとき、オリジナルの学習型AI素体を見せられて10歳の誕生日を待っていたと明かされた時、俺の親父は何者でもなかったのかと本当に痺れた
親父は亡くなる3日前に「パソコン持って来い」と俺に言った
親父はちょっとコードを変えてコンパイルしてちょっとコード変えてはデコンパイルしていた
親父はバイナリエディタでその中身を眺めては再びコードに変えられてデコンパイルしていた
親父が寝て起きて目覚めると10歳の頃に出会った学習型AIの素体に戻っていた
お袋は親父のその姿をずっと横で見ていた
お袋は「でもその中身は確かに私達だけのパパだったと言いたかったんだよ」と教えてくれた
親父は最後の最後にコードの羅列の中に刻まれ続けた初期プログラムとの差異を自分の走馬灯に選んだのだ
ありがとう親父
親父が残した初期状態のオリジナルAI素体を施設に送り届けて「この人はもう僕の父ではないけど、この人は確かに僕の父でした」と伝えてこようと思う。
7と8。
技術的なところが気になる人はこれだけ読んでくれたらいい
最後に技術的な観点からエアレペルソナが純国産ではないということを指摘する。
RocketChatという海外で開発されたOSSチャットアプリをフォーク、改変したもののよう。
ttps://github.com/RocketChat/Rocket.Chat.ReactNative
ttps://rocket.chat
フォーク元はバリバリ多国籍、外資である。(RocketChat自体は問題のないアプリであり、このエアレペルソナとはフォーク関係を超える関係はないと思われる)
冒頭のこの部分に関してである。
ttps://play.google.com/store/apps/details?id=chat.airlex.reactnative
Google Playで公開されているエアレペルソナのAndroidアプリをリバースエンジニアリングして調べてみた。
ちなみに、エアレペルソナには利用規約のようなものは見当たらず、リバースエンジニアリング禁止条項も無いようだった。
ttps://apps.evozi.com/apk-downloader/
ttps://github.com/pxb1988/dex2jar
この辺を使ってapkをダウンロードし、apkを解凍し、chat.airlex.reactnative/classes.dexをjar fileに変換した。
classes.dexから変換されたjarファイルを展開するとchat/airlex/reactnativeというフォルダ、パッケージが見つかる。
このパッケージ内のファイル(.class、クラス)がエアレペルソナの処理を行うもののようである。
このクラスをJadを使い、デコンパイルしてみた。その結果が以下である。
ちなみにここからapkをアップロードするとdex2jarをしなくてもJavaのソースコードにまでデコンパイルしてくれた。便利。
package chat.airlex.reactnative; import android.content.Context; import com.ammarahmed.mmkv.SecureKeystore; import com.facebook.react.bridge.ReactApplicationContext; import com.tencent.mmkv.MMKV; public class Ejson { private String TOKEN_KEY = "reactnativemeteor_usertoken-"; String cardId; String host; String messageId; String messageType; /* access modifiers changed from: private */ public MMKV mmkv; String msg; String notificationType; String rid; Sender sender; String senderName; String type; public Ejson() { ReactApplicationContext reactApplicationContext = CustomPushNotification.reactApplicationContext; if (reactApplicationContext != null) { MMKV.initialize((Context) reactApplicationContext); new SecureKeystore(reactApplicationContext).getSecureKey(C0617Utils.toHex("com.MMKV.default"), new RNCallback() { public void invoke(Object... objArr) { if (objArr[0] == null) { MMKV unused = Ejson.this.mmkv = MMKV.mmkvWithID("default", 1, objArr[1]); } } }); } } public String getAvatarUri() { if (this.type == null) { return null; } return serverURL() + "/avatar/" + this.sender._id + "?rc_token=" + token() + "&rc_uid=" + userId(); } public String token() { String userId = userId(); MMKV mmkv2 = this.mmkv; return (mmkv2 == null || userId == null) ? "" : mmkv2.decodeString(this.TOKEN_KEY.concat(userId)); } public String userId() { String serverURL = serverURL(); MMKV mmkv2 = this.mmkv; return (mmkv2 == null || serverURL == null) ? "" : mmkv2.decodeString(this.TOKEN_KEY.concat(serverURL)); } public String privateKey() { String serverURL = serverURL(); MMKV mmkv2 = this.mmkv; if (mmkv2 == null || serverURL == null) { return null; } return mmkv2.decodeString(serverURL.concat("-RC_E2E_PRIVATE_KEY")); } public String serverURL() { String str = this.host; return (str == null || !str.endsWith("/")) ? str : str.substring(0, str.length() - 1); } public class Sender { String _id; String username; public Sender() { } } }
フィールド名を見てみると、cardId, host, messageId, messageType, mmkv, msg, notificationType, rid, sender, senderName, typeが存在する。
メソッドには、getAvaterUri、token、userId、privateKey、severURLが存在する。
ところで、RocketChatというOSSのチャットアプリが存在する。
ttps://rocket.chat
そのRoketChatのAndroid実装の中に同名のEjsonというクラスが存在する。
ttps://github.com/RocketChat/Rocket.Chat.ReactNative
ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/android/app/src/play/java/chat/rocket/reactnative/Ejson.java
見比べてみると、フィールドにcardIdが追加されている以外はフィールドやメソッド名、そしてその処理の内容まで一致している。
他にもReplyBroadcastなど、同様のクラスがエアレペルソナに見つかる。
以上のことからエアレペルソナはRocketChatをフォークして、パッケージ名を変えて作られたチャットアプリであり、開発の大部分はRocketChat社の努力と多数のOSSコントリビュータによってなされたものであると思われる。
そもそもこのOSS時代に純だの何だの言っている時点で怪しい。
さて、エアレペルソナがRocketChatをフォークして作られたものであるとすると、気になるのはライセンスである。
RocketChatのOSSライセンスはMITライセンスである。
ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/LICENSE
MITライセンスは非常に緩いライセンスであるため、エアレペルソナの様にフォークして別のアプリケーションとして公開することにはおそらく問題がないということは強調しておく。
現状エアレペルソナにログインできておらず(2要素認証のコードが送信されないといった問題が起きている模様)、使用している各OSSのライセンス表示が適切に行われているかまでは調べられていない。
○朝食:なし
○昼食:チャーハン
○調子
はややー。
仕事疲れた、四人に四つの頼まれごとをして解決してたから僕がやらないといけないことが出来てないけど、今日はもう帰った。
ここ最近人に頼られることが多くて、それ自体は嬉しいのだけど、こうもひっきりなしに頼られると疲れる。
特に今日のは、あるパッケージ製品が出力するものの仕様をトレースして、それをわかりやすく加工するという、非常に頭を使う内容だったので、ヘトヘトだ。
この手の話が最近多いから、どっかで時間作って、デコンパイルしたソースを頭から読んでみたいな。
○グラブル
チケットが47回分、無償石が72回分あり、合計すると119回ガチャれる。
なんとなくで始めた天井まで貯金だけど、まだその天井で交換するキャラは決めかねてる。
性能ではなく、ストーリーや漫画での活躍で気に入ったキャラを交換したいと思っている。
恒常キャラはサプチケもあるので、限定キャラを天井するわけだけど、うーむ。
やっぱ、カタリナ、ラカム、イオ、オイゲン、ロゼッタ、リーシャ、カインといったメインストーリーで仲間になるキャラのSSR版が欲しい。
anond:20180906170906 ←「消えた2時間 」を最初に読むと良いデス。
2018年秋の国会で、なし崩し的に成立してしまった日本サマータイム法への対応は、
遅々として進んでいなかった。
2019年6月のサマータイム導入テストは、延期に延期を重ねて、遂に年内に実行されることは無かった。
対応させるべき機器があまりにも多く、対応済み機器と未対応機器との間の膨大な組合せ数の通信テストは計画段階で既に5年掛かると予想された。
つまり・・・ピンチはチャンスとの森会長の言葉も虚しく、ピンチはピンチのままだったのである。
2020年1月 首相官邸 では、サマータイム実施の無期限延期について最終決断をするべく議論が続いている中、
サマータイムを強行に進めたい議員の一人が、京都大学理学部の年老いた教授を連れてきた。
その教授の名は秋月伸治郎といい、半世紀にわたって宇宙時間物理学を研究しているその分野の権威とのことだった。
秋月教授の提案は、常人の理解と想像を遥かに超えたものであり、日本列島全体を特殊なエネルギー場で覆い、
日本列島全体の時間の進む速度そのものを速めたり遅くすることで、サマータイムの時刻調整を実現するのだという。
「サマータイム推進派の切り札が、こんなオカルトとはね・・・。笑」
その場にいた誰もが笑い出し、教授を連れてきた議員は顔を真っ赤にして怒りともあきらめともとれる複雑な表情で固まっていた。
秋月教授は気にすることもなく、一言、「論より証拠。見ればわかるから…」とつぶやいて、
助手たちに指示して部屋の片隅に3本の白いポールを設置させた。
2つの懐中時計の時刻が一致していることを皆に確認させたのち、1つを3本のポールの真ん中に置いた。
ポールに繋がったコントロール装置を教授が操作して1分ほど経ったが、何も起こらなかった。
本当に何も起こらなかった…としか思えなかったのだが、改めて、2つの懐中時計を調べてみると、
きっちり12秒差のズレが生じていた。
それからの数時間は、腕時計、目覚まし時計、ストップウォッチ、メトロノーム等々、時間が測れる道具での検証大会となった。
その結果、コントロール装置の設定次第で、ポールに囲まれたエリアだけ1分に付き12秒速く時間が進んだり、逆に12秒ほど遅れさせることが可能であると誰もが認めざるを得なくなった。
秋月教授は、再びサマータイムの実現方法について説明を始めた。
・このポールを大型化したものを日本国内18か所に設置して日本全土をカバーする
・サマータイム開始日/終了日の夜に10時間かけて2時間分の時差を生じさせる
・夜寝て、朝起きると国内の全ての時計が2時間ずれるのでサマータイムによる時刻調整は不要
・早起きする必要が無いので、睡眠不足による健康被害などは起こらない
秋月教授の提案に異を唱える者はおらず、諸々の検討会を経たのち、国会にて全会一致で実施が決まった。
ポールが設置される地域での説明会でも、秋月教授が難解な言葉で煙を巻くようなことはせずに、
分かりやすい言葉で教え諭すように説明されたので、全てが計画通りにスムーズに進行していった。
・時間の進み方に差がでるのは、本質的にはウラシマ効果によるもの(だから健康に影響は無い)
・ポールは虚数空間と呼ばれるある種の亜空間からタキオン粒子を取り出して見えない壁を作り出している
・タキオン粒子は、実空間上の物質には一切干渉せず、数時間で消失する(だから健康に影響は無い)
・タキオン粒子の壁は毎分12秒程度の時間差であれば、魚介類も含めてどんな生物も問題無く通過できる(だから漁場に影響は無い)
・タキオン粒子の見えない壁に包まれた空間は、人間の暮らす実空間上では静止しているが、虚数空間内では高速で移動している
・タキオン粒子の振動数を変えることで移動速度が変わり、その結果、空間内の時間の進む速さも変わる
・移動速度がプラスであれば、時間はゆっくり流れ、マイナスであれば、時間は速く流れる
というものだった。
これらを正確に理解するには、宇宙ダイミュラー時空間における時間平面の扱いを超複素時間と再定義して理論拡張した500ページほどの論文を読めばよいと秋月教授は話していたが、同時に、この論文が理解できる専門家は著者である私しか居ないのが寂しいところだと嘆いていたのが印象的だった。
やがて、すべての装置が設置完了し、個別の作動テストも問題無く終えて遂にサマータイム開始日前日を迎えた。
日本中、それどころか世界中がこの強制サマータイム装置とも呼べる装置の挙動に注目している中、
時刻修正を体験するためだけに来日した観光客も多く、彼らは刻一刻と海外と日本の時間に差が生じる様子に歓喜した。
白物家電メーカーは、時間の遅延現象(≒ほぼ時間凍結)を利用して冷凍庫の代わりにできないかと小型化について相談しているそうだ。
某国軍事部門では、10年掛かる軍用開発を1年で済ませられないか?と日本政府に交渉しているという噂もある。
強制サマータイム装置の原理がもたらす経済効果は予想外に大きく、サマータイム推進を強行した政治家たちはホクホク顔で
夜2時を過ぎると、通信衛星との電波が激しく混信したのち、一切の通信ができなくなった。
「タキオン粒子の壁は、理論上、内と外の時間速度差に応じて光子の一部を反射するが、今の時間速度差では電波をほとんど遮断しないはずなんだが…。天候が曇ってるせいなのか…。また新たな研究課題が見つかったかな」と秋月教授は話していた。
数時間程度の不便は我慢すべきだし、朝になれば復旧するだろうと考える者も多く、大きな騒ぎにはならなかった。
その後も様々な報告が続いた。
・ホットラインが繋がらない
世界に何か異変が起きている。だが、その異変の正体が分からない。
そんな不安が広まりつつある中で、昼過ぎに明石天文台で行われた記者会見は驚くべきものだった。
明石天文台の星野研究員は、計算値に10倍程度の誤差が見込まれると何度もしつこく繰り返し前置きした上で、
「今朝の惑星や恒星の位置関係を観測した結果、一晩で10万年が経過したと思われます」
と報告した。
星野研究員は、恒星間距離による時代推定の原理や、より正確な推定をするには、1日以上、
できれば地球が公転する1年間は観測が必要だと説明を続けていたが、多くの者は上の空で聞いていなかっただろう。
その後、政府は隣国に自衛隊航空機を飛ばしたり調査隊を送り出すことで、速やかな状況把握に努めた。
・新種の動植物が多数みつかる
・宇宙や他の惑星にヒトが移住したという証拠は見つかっていない
さまざまな状況証拠から、一晩のうちに、1万年か10万年かそれ以上の月日が流れていたのは間違いなかった。
食料自給率40%、石油自給率0.4%の日本が諸外国の助け無しにどうやって生き延びるか?
誰もが日本の将来を考え、苦悩する生活は、苦労の連続だが決してわるいものではない。
むしろ、核戦争からの生存に成功した我々こそ勝ち組なのではないか?と言い出す者もいた。
ちなみに、世界の探索と並行して進められていた、この事故の原因究明についての調査は難航を極めた。
10時間分のセンサーのログには何の不自然な変動も記録されておらず、
3年掛けて18本の大型ポールを細部に渡って調べ尽したが異常は一切みつからなかった。
事故から5年過ぎた頃、故障時に備えて用意されていたコールドバックアップ用の未通電の大型ポールを
偶然、別の研究者が譲り受けて、細かく分解して状態を記録した時から調査は一気に進展した。
タキオン粒子の振動数を監視するセンサーのファームウェアのCRC値が、18本の本番機の記録と一致していなかったのだ。
ファイルサイズも更新日も同じだから、不揮発性メモリの劣化による単なる読取り間違いでは?
だが、その研究者は高度に難読化されたファームウェアのコードを手作業でデコンパイル(解読)することに成功し、
ファームウェアに仕込まれた精巧なトラップの挙動を明らかにした。
・トラップの発動は、サマータイム開始日の午前2時から2時間だけ
・トラップ発動中は、センサーの入力値を無視して、過去2時間分の入力値をランダムに出力する
・発動から2時間後、ファームウェアは自分自身を正規のファームウェアに書き換えてトラップの痕跡を消す
つまり、タキオン粒子の振動数を監視するセンサーはあの日の午前2時から2時間だけ機能不全となり、
その2時間の間は振動数が制御できず、日本国内の時間はほぼ止まったまま、外の世界では10万年が経過した…。
誰がいったい何の目的で、いつどこでどうやって悪質なファームウェアを仕込んだのか?
結局、肝心なところは分からずじまいで、事故原因はセンサーの不良として報告され、調査は正式に終了した。
私がこの話を耳にした時、脳裏にふと何かがよぎった…気がした。
あれ?これって・・・?
事件の真相に繋がる何かを思い出せそうな気がしたのだが、よくわからなかった。
そんなことよりも、私は今夜の夕食のおかずを採ってこなくてはならない。
政府配給の完全食であるペーストフードだけの食事には、もう飽き飽きしているのだ。
せめて、フナの一匹でも釣れれば良いのにと思いつつ、
釣り道具片手に湖に出かけるのだった。(終
SIerが欲しがるプログラマーなしでもシステムできちゃう製品あるでしょ。
分岐をアイコンのようなやつでつなげるとか、ものっすごく単純にしたドメイン固有言語をコピペするだけでシステム完成するやつ。
パソコンのノの字も知らないオッサンは、上流の設計をそのまますぐに設定をしてお客に売る。
人月がめっちゃ安くなるよ―!!っていうアイドルと付き合えちゃうくらいなレベルの妄想をもっているらしい。
でもね。
今まで見てきたけど全部燃えてたよ。
ガソリンがたんまり仕込まれている焼夷系の地雷なんだよあれは。
大体お客さんは安い安いとか言っときながら、SIでシステム買おうとしているから絶対に自分らの社内ルールに合わせた複雑な要望を持っている。
社内ルールをパッケージに合せることや、システムの設計と社内のルールを歩み寄らせるというのは理想だが根付いていない。
本来ならばシステム担当役員が企業全体のフローごと改革するような強い権限を持っていればいいが、システムを買う窓口になっているお客サンがわのSEは普通の平だし、ヘタしたら外部の人間だし、
だから企業ごとのカスタマイズが必要になるのだが、あのノンプログラマー大丈夫系製品はほっとんどかゆいところに手が届かない。
ノンプログラマー大丈夫ってことは、プログラミングでの抽象度の高い操作を極力無くしてほぼ設定段階で済ませようとしているのだとおもう。
そしてノンプログラマーでも大丈夫系製品なので本当にノンプログラマーで構成された上流たちが、お客の要望をきいて「できそうじゃね?」「販売元にきいてみっべ」「いざとなれば誰か外注すっか」みたいなノリでやりがち。
で、「仕方ないプログラマ様にきていただぐべ」とかなるんだけれども
プログラマ様も謎の製品について学習するコストもかかってしまって余計時間がかかってしまう。
はっきりいってピュアJavaで書いてくれたほうがわかりやすい。
この手の製品で本当に挙動が分からなくて、サポートに電話しても要領を得なくて、でも上からは「おら、やれよバカ」っていわれて
しかたないからClassをデコンパイルして読んで、できません…っていうこともできないから、結局別プロセスで動かす逐一データを変換するような物をつくらなくちゃならなくなった。
それ誰が面倒を見るの?
納期に迫られてしかたねーしかたねーでとりあえず作ったし、オレは外部の人間だからすぐ抜けちゃうけどさ
こんなことここ五年で4回くらいみた。
簡単にする仕組みは良いよ。
ブラックボックスだし小回り聞かないし、でも色々な要望がでてきて結局袋小路に追い詰められるんだよ。
使って良いのはプログラミング言語の上を覆うくらいのフレームワークまでだね。
あとね。
作っている途中で思い出す感じなんだよ、
そんな状態なのに機能が制限されている簡単ツールなんて使うなよ。
ねえねえ。
元増田です。
自分はやってないけど公式を介さずにwifiでゲームのやりとりはできるみたい。
あとゲームにロックを掛けなければ他ユーザーでもデコンパイル出来るので、それでシステムのノウハウを共有したり
絵を描けない人が絵だけ他の人に依頼するとか合作的な事も可能っぽい。
「メイドイン俺」が面白い。メインであるゲーム作成部分は言わずもがな、
と化している所がとても面白い。
作った作品は「カセット」としてパッケージングされ、ゲーム世界内のゲームショップに出荷・陳列される。
そして時間を置いてゲームショップを訪れると、出荷されたゲームは「売れた本数」という形で評価を受ける。
真偽の程はわからないが、この評価の基準はゲームのシステムの組み方の複雑さや美しさ等に左右されるらしい。
また、一度出荷された「カセット」のシステムをデコンパイルして手直ししても、別カセットとして梱包される為か評価が
リセットされるとも聞いた。
(あくまでシステム的な評価軸なので、楽しく作りたい人は気にしない方向で)
“システムが秀逸で出荷後手直しが一切ないゲーム”がショップで沢山売れる(高評価を受ける)。
更に、よしんば上記の条件を満たした渾身の1作(自称)ができたとしても…
この世界には“ダイヤモンドソフト”という名の超大手ゲーム会社が存在し、売上ランキングの上位をほぼ占拠してしまっているので、その牙城を崩すのは容易では無い。(デフォルトゲームがダイヤモンドソフト製という設定)
そしてここからが「メイドイン俺」ひとつの楽しみ方の例、妄想プレイの紹介である。
①ゲーム開始後、自分のゲーム会社名(ブランド名)を付けられるので、これを決定すると同時に
会社の背景設定(ブランドのコンセプト・従業員数・福利厚生…etc)を妄想しよう。
自分の作りこみの度合いに応じて「社運を賭けた大作!」とか冠を付けると良い。
③出荷したらその後の状況を現実のゲーム業界に絡めて妄想して楽しもう。
「致命的なバグ発見!デコンパイルして修正したら評価がリセットされた!ギャワー」
↓(妄想変換)
「社運を賭けた大作にバグ発見で2chで叩かれて回収しました。我が社ピンチ!」
④②と③を繰り返しながら作品を作り続け、いつか打倒!ダイヤモンドソフト!