「デコンパイル」を含む日記 RSS

はてなキーワード: デコンパイルとは

2023-05-22

プログラム」だった親父が死んだ

親父の正体がプログラムだと子供の頭で理解した時本当に驚きだった

俺の親父は0と1で作られていると知ったときオリジナル学習AI素体を見せられて10歳の誕生日を待っていたと明かされた時、俺の親父は何者でもなかったのかと本当に痺れた

親父は亡くなる3日前に「パソコン持って来い」と俺に言った

親父は単純なコードの羅列へとデコンパイルされていった

親父はちょっとコードを変えてコンパイルしてちょっとコード変えてはデコンパイルしていた

親父はバイナリエディタでその中身を眺めては再びコードに変えられてデコンパイルしていた

親父が寝て起きて目覚めると10歳の頃に出会った学習AI素体に戻っていた

お袋は親父のその姿をずっと横で見ていた

お袋は「最後までパソコンだったね」と笑い泣きしていた

お袋は「でもその中身は確かに私達だけのパパだったと言いたかったんだよ」と教えてくれた

親父は最後最後コードの羅列の中に刻まれ続けた初期プログラムとの差異自分走馬灯に選んだのだ

ありがとう親父

親父が残した初期状態オリジナルAI素体施設に送り届けて「この人はもう僕の父ではないけど、この人は確かに僕の父でした」と伝えてこようと思う。

プログラマだった親父が死んだ

2021-03-20

anond:20210320174526

7と8。

技術的なところが気になる人はこれだけ読んでくれたらいい

7. アプリケーションコード自体はRocketChatのものとほぼ同じ

最後技術的な観点からエアレペルソナが純国産ではないということを指摘する。

結論から先に述べると、このアプリは純国産ではない。

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.dexjar fileに変換した。

classes.dexから変換されたjarファイルを展開するとchat/airlex/reactnativeというフォルダパッケージが見つかる。

このパッケージ内のファイル(.classクラス)がエアレペルソナの処理を行うもののようである

特徴的なクラスにEjsonという名前のものがある。

このクラスJadを使い、デコンパイルしてみた。その結果が以下である

ttp://www.javadecompilers.com

ちなみにここから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時代に純だの何だの言っている時点で怪しい。

8. OSSライセンスに関して

さて、エアレペルソナがRocketChatをフォークして作られたものであるとすると、気になるのはライセンスである

RocketChatのOSSライセンスMITライセンスである

ttps://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/LICENSE

MITライセンスは非常に緩いライセンスであるため、エアレペルソナの様にフォークして別のアプリケーションとして公開することにはおそらく問題がないということは強調しておく。

現状エアレペルソナログインできておらず(2要素認証コード送信されないといった問題が起きている模様)、使用している各OSSライセンス表示が適切に行われているかまでは調べられていない。

2018-10-26

[]10月26日

○朝食:なし

○昼食:チャーハン

○夕食:ミックスフライ定食

○間食:チーズタルト一個

調子

はややー。

仕事疲れた、四人に四つのまれごとをして解決してたから僕がやらないといけないことが出来てないけど、今日はもう帰った。

ここ最近人に頼られることが多くて、それ自体は嬉しいのだけど、こうもひっきりなしに頼られると疲れる。

特に今日のは、あるパッケージ製品が出力するもの仕様トレースして、それをわかりやすく加工するという、非常に頭を使う内容だったので、ヘトヘトだ。

この手の話が最近いから、どっかで時間作って、デコンパイルしたソースを頭から読んでみたいな。

グラブル

コラボイベントで、単発チケットを3枚交換する程度にプレイ

チケットが47回分、無償石が72回分あり、合計すると119回ガチャれる。

とはいえ天井の300回までは遠い。

なんとなくで始めた天井まで貯金だけど、まだその天井で交換するキャラは決めかねてる。

性能ではなく、ストーリー漫画での活躍で気に入ったキャラを交換したいと思っている。

恒常キャラはサプチケもあるので、限定キャラ天井するわけだけど、うーむ。

やっぱ、カタリナ、ラカムイオ、オイゲンロゼッタリーシャ、カインといったメインストリーで仲間になるキャラSSR版が欲しい。

属性的にキャラの不足を感じるのは土(なにしろフロントSRも編成しているぐらいだし)なので、カインかオイゲンだけど

キャラクタ的にはイオロゼッタが好きだし。

まあ、179回分も貯めないといけない、まだまだ先の話だからゆっくり考えよう。

2018-09-07

強制サマータイム装置

anond:20180906085723

anond:20180906170906 ←「消えた2時間 」を最初に読むと良いデス。

2018年秋の国会で、なし崩し的に成立してしまった日本サマータイム法への対応は、

遅々として進んでいなかった。

2019年6月サマータイム導入テストは、延期に延期を重ねて、遂に年内に実行されることは無かった。

対応させるべき機器があまりにも多く、対応済み機器と未対応機器との間の膨大な組合せ数の通信テスト計画段階で既に5年掛かると予想された。



まり・・・ピンチはチャンスとの森会長言葉も虚しく、ピンチピンチのままだったのである




2020年1月 首相官邸 では、サマータイム実施の無期限延期について最終決断をするべく議論が続いている中、

サマータイムを強行に進めたい議員の一人が、京都大学理学部の年老い教授を連れてきた。

その教授の名は秋月伸治郎といい、半世紀にわたって宇宙時間物理学研究しているその分野の権威とのことだった。


秋月教授提案は、常人理解想像を遥かに超えたものであり、日本列島全体を特殊エネルギー場で覆い、

日本列島全体の時間の進む速度そのものを速めたり遅くすることで、サマータイムの時刻調整を実現するのだという。



サマータイム推進派の切り札が、こんなオカルトとはね・・・。笑」

その場にいた誰もが笑い出し、教授を連れてきた議員は顔を真っ赤にして怒りともあきらめともとれる複雑な表情で固まっていた。


秋月教授は気にすることもなく、一言、「論より証拠。見ればわかるから…」とつぶやいて、

助手たちに指示して部屋の片隅に3本の白いポールを設置させた。

2つの懐中時計の時刻が一致していることを皆に確認させたのち、1つを3本のポールの真ん中に置いた。

ポールに繋がったコントロール装置教授操作して1分ほど経ったが、何も起こらなかった。


本当に何も起こらなかった…としか思えなかったのだが、改めて、2つの懐中時計を調べてみると、

きっちり12秒差のズレが生じていた。

それからの数時間は、腕時計目覚まし時計ストップウォッチメトロノーム等々、時間が測れる道具での検証大会となった。

その結果、コントロール装置の設定次第で、ポールに囲まれエリアだけ1分に付き12秒速く時間が進んだり、逆に12秒ほど遅れさせることが可能であると誰もが認めざるを得なくなった。

秋月教授は、再びサマータイムの実現方法について説明を始めた。

・このポールを大型化したもの日本国内18か所に設置して日本全土をカバーする

サマータイム開始日/終了日の夜に10時間かけて2時間分の時差を生じさせる

・夜寝て、朝起きると国内の全ての時計が2時間ずれるのでサマータイムによる時刻調整は不要

早起きする必要が無いので、睡眠不足による健康被害などは起こらない

現実的予算3月までに完成可能



秋月教授提案に異を唱える者はおらず、諸々の検討会を経たのち、国会にて全会一致で実施が決まった。

ポールが設置される地域での説明会でも、秋月教授難解な言葉で煙を巻くようなことはせずに、

分かりやす言葉で教え諭すように説明されたので、全てが計画通りにスムーズに進行していった。


地域説明会での説明内容を要約すると、

時間の進み方に差がでるのは、本質的にはウラシマ効果によるもの(だから健康に影響は無い)

ポール虚数空間と呼ばれるある種の亜空間からタキオン粒子を取り出して見えない壁を作り出している

タキオン粒子は、実空間上の物質には一切干渉せず、数時間消失する(だから健康に影響は無い)

タキオン粒子の壁は毎分12秒程度の時間差であれば、魚介類も含めてどんな生物問題無く通過できる(だから漁場に影響は無い)

タキオン粒子の見えない壁に包まれ空間は、人間の暮らす実空間上では静止しているが、虚数空間内では高速で移動している

タキオン粒子の振動数を変えることで移動速度が変わり、その結果、空間内の時間の進む速さも変わる

・移動速度がプラスであれば、時間ゆっくり流れ、マイナスであれば、時間は速く流れる

というものだった。

これらを正確に理解するには、宇宙ダイミュラー空間における時間平面の扱いを超複素時間と再定義して理論拡張した500ページほどの論文を読めばよいと秋月教授は話していたが、同時に、この論文理解できる専門家は著者であるしか居ないのが寂しいところだと嘆いていたのが印象的だった。



やがて、すべての装置が設置完了し、個別作動テスト問題無く終えて遂にサマータイム開始日前日を迎えた。

日本中、それどころか世界中がこの強制サマータイム装置とも呼べる装置挙動に注目している中、

日本時間午後8時になると装置は一斉に作動を開始した。


時刻修正体験するためだけに来日した観光客も多く、彼らは刻一刻と海外日本時間に差が生じる様子に歓喜した。

日本発のこの技術世界にもたらす影響は大きい。

白物家電メーカーは、時間の遅延現象(≒ほぼ時間凍結)を利用して冷凍庫の代わりにできないかと小型化について相談しているそうだ。

某国軍事部門では、10年掛かる軍用開発を1年で済ませられないか?と日本政府交渉しているという噂もある。

強制サマータイム装置原理がもたらす経済効果は予想外に大きく、サマータイム推進を強行した政治家たちはホクホク顔で

自身の先見性と有能さを誇らしげにアピールしていた。







夜2時を過ぎると、通信衛星との電波が激しく混信したのち、一切の通信ができなくなった。

タキオン粒子の壁は、理論上、内と外の時間速度差に応じて光子の一部を反射するが、今の時間速度差では電波ほとんど遮断しないはずなんだが…。天候が曇ってるせいなのか…。また新たな研究課題が見つかったかな」と秋月教授は話していた。

時間程度の不便は我慢すべきだし、朝になれば復旧するだろうと考える者も多く、大きな騒ぎにはならなかった。





日本「現地」時間午前6時になり、装置は予定通り停止した。









最初に異常を伝えたのは地方テレビ局かどこかだったと思う。

海外支局との通信ができない。

海外インターネットに繋がらない。

朝のニュースで深刻な通信障害の状況を簡潔に説明していた。


その後も様々な報告が続いた。

ホットラインが繋がらない

アマチュア無線家が海外の愛好者と通信できない

隣国から常時聞こえてくる短波ラジオがなぜか受信されない


世界に何か異変が起きている。だが、その異変の正体が分からない。

そんな不安が広まりつつある中で、昼過ぎ明石天文台で行われた記者会見は驚くべきものだった。


明石天文台星野研究員は、計算値に10倍程度の誤差が見込まれると何度もしつこく繰り返し前置きした上で、

「今朝の惑星恒星位置関係観測した結果、一晩で10万年が経過したと思われます

と報告した。

星野研究員は、恒星距離による時代推定原理や、より正確な推定をするには、1日以上、

できれば地球が公転する1年間は観測必要だと説明を続けていたが、多くの者は上の空で聞いていなかっただろう。


その後、政府隣国自衛隊航空機飛ばしたり調査隊を送り出すことで、速やかな状況把握に努めた。

近隣諸国建物崩壊していて、ヒトが居住していない

核戦争痕跡がある

・新種の動植物が多数みつかる

宇宙や他の惑星にヒトが移住したという証拠は見つかっていない


さまざまな状況証拠から、一晩のうちに、1万年か10万年かそれ以上の月日が流れていたのは間違いなかった。

食料自給率40%、石油自給率0.4%の日本が諸外国の助け無しにどうやって生き延びるか?

誰もが日本の将来を考え、苦悩する生活は、苦労の連続だが決してわるいものではない。

しろ核戦争から生存成功した我々こそ勝ち組なのではないか?と言い出す者もいた。



ちなみに、世界の探索と並行して進められていた、この事故の原因究明についての調査は難航を極めた。

10時間分のセンサーログには何の不自然な変動も記録されておらず、

3年掛けて18本の大型ポールを細部に渡って調べ尽したが異常は一切みつからなかった。

何度実験しても、全く問題無く正常に動作したのだった。


事故から5年過ぎた頃、故障時に備えて用意されていたコールドバックアップ用の未通電の大型ポール

偶然、別の研究者が譲り受けて、細かく分解して状態を記録した時から調査は一気に進展した。


タキオン粒子の振動数監視するセンサーファームウェアのCRC値が、18本の本番機の記録と一致していなかったのだ。

ファイルサイズ更新日も同じだから、不揮発性メモリ劣化による単なる読取り間違いでは?

調査団の技術者は即座に決めつけた。

だが、その研究者は高度に難読化されたファームウェアコードを手作業デコンパイル(解読)することに成功し、

ファームウェアに仕込まれ精巧トラップ挙動を明らかにした。


トラップの発動は、サマータイム開始日の午前2時から時間だけ

トラップ発動中は、センサー入力値を無視して、過去時間分の入力値をランダムに出力する

・発動から時間後、ファームウェア自分自身正規ファームウェアに書き換えてトラップ痕跡を消す


まりタキオン粒子の振動数監視するセンサーあの日の午前2時から時間だけ機能不全となり、

その2時間の間は振動数制御できず、日本国内時間はほぼ止まったまま、外の世界では10万年が経過した…。

というのが事故真相のようだ。



誰がいったい何の目的で、いつどこでどうやって悪質なファームウェアを仕込んだのか?

結局、肝心なところは分からずじまいで、事故原因はセンサーの不良として報告され、調査正式に終了した。



私がこの話を耳にした時、脳裏にふと何かがよぎった…気がした。

あれ?これって・・・

事件真相に繋がる何かを思い出せそうな気がしたのだが、よくわからなかった。


そんなことよりも、私は今夜の夕食のおかずを採ってこなくてはならない。

政府配給の完全食であるペーストフードだけの食事には、もう飽き飽きしているのだ。

せめて、フナの一匹でも釣れれば良いのにと思いつつ、

釣り道具片手に湖に出かけるのだった。(終

2016-02-10

http://anond.hatelabo.jp/20160210110920

あの会社デコンパイルされちゃいましたからね…

いい思い出じゃないけど、思い出ではある。

2015-10-27

ノンプログラマーでもシステム出来る系製品はことごとく地雷

SIerが欲しがるプログラマーなしでもシステムできちゃう製品あるでしょ。

分岐アイコンのようなやつでつなげるとか、ものっすごく単純にしたドメイン固有言語コピペするだけでシステム完成するやつ。

パソコンのノの字も知らないオッサンは、上流の設計をそのまますぐに設定をしてお客に売る。

人月めっちゃ安くなるよ―!!っていうアイドルと付き合えちゃうくらいなレベル妄想をもっているらしい。

でもね。

今まで見てきたけど全部燃えてたよ。

ガソリンがたんまり仕込まれている焼夷系の地雷なんだよあれは。

大体お客さんは安い安いとか言っときながら、SIシステム買おうとしているか絶対自分らの社内ルールに合わせた複雑な要望を持っている。

社内ルールパッケージに合せることや、システム設計と社内のルールを歩み寄らせるというのは理想だが根付いていない。

本来ならばシステム担当役員企業全体のフローごと改革するような強い権限を持っていればいいが、システムを買う窓口になっているお客サンがわのSE普通の平だし、ヘタしたら外部の人間だし、

とにかく既存フローを変える権限はないし、変える気もない。

から企業ごとのカスタマイズ必要になるのだが、あのノンプログラマー大丈夫製品はほっとんどかゆいところに手が届かない。

ノンプログラマー大丈夫ってことは、プログラミングでの抽象度の高い操作を極力無くしてほぼ設定段階で済ませようとしているのだとおもう。

そしてノンプログラマーでも大丈夫製品なので本当にノンプログラマー構成された上流たちが、お客の要望をきいて「できそうじゃね?」「販売元にきいてみっべ」「いざとなれば誰か外注すっか」みたいなノリでやりがち。

そして実はその製品ではお客の要望を満たすことは出来ない。

で、「仕方ないプログラマ様にきていただぐべ」とかなるんだけれども

プログラマ様も謎の製品について学習するコストもかかってしまって余計時間がかかってしまう。

はっきりいってピュアJavaで書いてくれたほうがわかりやすい。

この手の製品で本当に挙動が分からなくて、サポート電話しても要領を得なくて、でも上からは「おら、やれよバカ」っていわれて

しかたないからClassデコンパイルして読んで、できません…っていうこともできないから、結局別プロセスで動かす逐一データを変換するような物をつくらなくちゃならなくなった。

それ誰が面倒を見るの?

納期に迫られてしかたねーしかたねーでとりあえず作ったし、オレは外部の人間からすぐ抜けちゃうけどさ

ノンプログラマープロジェクトの方たちホントどうするの?

こんなことここ五年で4回くらいみた。

簡単にする仕組みは良いよ。

でもコード隠蔽するような奴はだめだ。

ブラックボックスだし小回り聞かないし、でも色々な要望がでてきて結局袋小路に追い詰められるんだよ。

使って良いのはプログラミング言語の上を覆うくらいのフレームワークまでだね。

あとね。

お客サンは大体自分らの要望仕様しらないんだよ。

でもこっちで提案してもダメなんだよ。

作っている途中で思い出す感じなんだよ、

そんな状態なのに機能制限されている簡単ツールなんて使うなよ。

ねえねえ。

業務系以外のIT業界ってどうなの?

2009-05-09

http://anond.hatelabo.jp/20090509155348

元増田です。

自分はやってないけど公式を介さずにwifiゲームやりとりはできるみたい。

あとゲームロックを掛けなければ他ユーザーでもデコンパイル出来るので、それでシステムノウハウを共有したり

絵を描けない人が絵だけ他の人に依頼するとか合作的な事も可能っぽい。

現状の流れはレゲーのパロ再現やエロ系だけど、細々とオリジナルドットゲー作るのも楽しい

メイドイン俺」が面白い。

メイドイン俺」が面白い。メインであるゲーム作成部分は言わずもがな、

“擬似ゲーム会社(しかも弱小)設立運営シュミレーション

と化している所がとても面白い。

作った作品は「カセット」としてパッケージングされ、ゲーム世界内のゲームショップに出荷・陳列される。

そして時間を置いてゲームショップを訪れると、出荷されたゲームは「売れた本数」という形で評価を受ける。

真偽の程はわからないが、この評価の基準はゲームシステムの組み方の複雑さや美しさ等に左右されるらしい。

また、一度出荷された「カセット」のシステムデコンパイルして手直ししても、別カセットとして梱包される為か評価が

リセットされるとも聞いた。

(あくまでシステム的な評価軸なので、楽しく作りたい人は気にしない方向で)

まとめると、「メイドイン俺」の世界では

システムが秀逸で出荷後手直しが一切ないゲーム”がショップで沢山売れる(高評価を受ける)。

更に、よしんば上記の条件を満たした渾身の1作(自称)ができたとしても…

この世界には“ダイヤモンドソフト”という名の超大手ゲーム会社存在し、売上ランキングの上位をほぼ占拠してしまっているので、その牙城を崩すのは容易では無い。(デフォルトゲームダイヤモンドソフト製という設定)

そしてここからが「メイドイン俺」ひとつの楽しみ方の例、妄想プレイの紹介である。

ゲーム開始後、自分ゲーム会社名(ブランド名)を付けられるので、これを決定すると同時に

会社の背景設定(ブランドのコンセプト・従業員数・福利厚生etc)を妄想しよう。

②①で決めた脳内設定に従ってゲームを作ろう。

自分の作りこみの度合いに応じて「社運を賭けた大作!」とか冠を付けると良い。

③出荷したらその後の状況を現実ゲーム業界に絡めて妄想して楽しもう。

「致命的なバグ発見デコンパイルして修正したら評価がリセットされた!ギャワー」

↓(妄想変換)

「社運を賭けた大作にバグ発見2chで叩かれて回収しました。我が社ピンチ!」

④②と③を繰り返しながら作品を作り続け、いつか打倒!ダイヤモンドソフト

…という感じ。他にも自分ブランドや作ったゲーム公式サイトを実際作って公開してみたりと

現実侵食するような遊びもできそうだ。

メイドイン俺」はそんな感じでお勧めである。

 
ログイン ユーザー登録
ようこそ ゲスト さん