タグ付けされた質問 「obfuscation」

4
コードの難読化のケース?
コードを開発する人々にとっての実際の利益と、そのコードを実行するビジネスの観点から、難読化されたコードを書く主な理由は何ですか(問題のコードが実際に商用コードである場合)?難読化が悪い場合よりも良い場合を説明する文書化されたケース(ある場所でオンラインで入手可能)はありますか?たとえば、難読化が悪意のある第三者によるコードの取得を有意に遅らせることが証明されている有名な例はありますか?あなたの車の窓を丸めても人々がそれらを壊してステレオを盗むのを止めないように、コードを難読化することは正直な人々を正直に保つだけです。 ========= バックグラウンド: これは、このトピックに関する私の仮定に意図的に挑戦する試みです。 私は一般的にコードの難読化を使用することに反対していますが、何かが足りない場合は興味があります。JavaScriptのような場合、ミニフィケーションが物事をより速く、すべてロードするのに役立つ理由がわかります(そこには実際の機能上の利点があります)が、コードの難読化が障害となる目的で単一の理由を考え出すことはできないようですコード/アルゴリズムのセクションが何をするかを発見することは、実際にはどんな目的にも効果的です。 オープンソースが非常に人気があるので、質問は「コードを共有するのか、それともプロプライエタリのままにするのか?」商用コードに関しては、なぜすべてを共有できないのか、そして盗難と戦うための法律があなたの側にあるのは理解できます。 ところで、誰かが難読化されたコードを書いている理由は、「雇用保障」であるならば、私はすべてのプログラマを解雇でしょうが一貫してあることが判明し、意図的に難読化を使用して、自分の仕事を維持するために助ける唯一の目的と、彼らは合理的に、それはいくつかを持っていたことを示すことができない限り、ビジネス上の利益。それは非常に完全に反チーム的であり、ばかげており、見当違いのプラクティスを通じて仕事を続け、素晴らしいソフトウェアを書いているのでそれを維持することにもっと関心がある人を指します。 人々がふつう冗談を言っていることに気づいている間、私はこの特定のケースに言及するだけです。

12
仲間のプログラマーが最悪のプログラミング手法を使用した
言うのは奇妙に思えますが、職場の仲間のプログラマーは故意にいくつかの悪いプログラミング慣行を意図的に使用しました!説明します。まず、彼は知的な男であり、ほとんどの場合、彼はわかりやすいコードを書いていると言いましょう。 彼は、Javaで書かれたWebアプリケーションプロジェクトにライセンスを実装するよう求められました。Javaなので、本当に必要な場合は、おそらくjarファイルをハックして、内部に記述されたクラスとメソッドの名前を読み取ることができます。この問題に対する彼の解決策は、文字通り、新しいクラスを生成するのではなく、変数とメソッドをわかりにくい名前で不自然に呼び出し、すでに混雑しているクラス内にそれらを植え付けることでした。 彼の正当化は、ハッカーがライセンスチェックをバイパスするために特定のクラスを切り替えたい(したがって、製品の無料コピーを取得したい)場合、どの方法が明らかでない場合、それははるかに困難な時間になるだろうということでしたこれらの特定のタスクを実行します。彼がそれを行って初めて、私は彼に立ち向かったので、良いプログラミングの実践を維持しながら、何らかの難読化ライブラリを購入してそれを行うことができるかもしれないと示唆しました。彼は、その種のソリューションを検索する時間やリソースがなかったと主張しています。 ..私はジレンマに陥ります。Javaで難読化ライブラリを探して、彼の古いコードを修正します(彼のコードを改造するのは少し面倒かもしれません)か、それをそのままにしておきますか?

3
GPLでリリースされたソースコードは人間が読めるものでなければなりませんか?
で別の質問への応答、ポスターが示唆GPLの下で: ...空白を除去したバージョンではなく、人間が読める[コード]を提供する必要があります... 読みやすさは主観的なものであり、GPLによって明示的に要求される可能性は低いと思われます。それは...ですか?

2
リリースコードを難読化することの利点は何ですか?
私が念頭に置いている具体的な例は、現在アルファ版のゲームであるMinecraftに関係していますが、これは一般的な質問であり、ある程度の会話が必要だと思います。 MinecraftはJavaで記述されており、スタックトレースは通常次のようになります(実際の例)。 java.lang.NullPointerException at d.a(SourceFile:247) at gi.b(SourceFile:92) at bd.a(SourceFile:33) at bn.a(SourceFile:69) at bn.e(SourceFile:115) at bn.d(SourceFile:103) at net.minecraft.client.Minecraft.i(SourceFile:1007) at net.minecraft.client.Minecraft.run(SourceFile:596) at java.lang.Thread.run(Unknown Source) 明らかに、これらは開発者が作成するときに使用する実際のパッケージおよびメソッド名ではありません。彼はアルファ段階にあるので、特に誰かがバグ報告のためにそれを提供できる場合、開発者は自分のスタックトレースを理解できるようにする必要があるようです。現状では、ほとんど意味がありません。 より困難なバグ識別の欠点を克服するこのような彼のコードを難読化することにより、どのような利点を得ることができるでしょうか?

3
C ++アプリケーションコードを難読化することは重要ですか?
Javaの世界では、それが時々問題となるようですが、C ++はどうですか?異なる解決策はありますか? 誰かが特定のOSのC ++ライブラリを同じライブラリの異なるバージョンで置き換えることができるという事実について考えていましたが、私のコードが何をしているかを理解するためのデバッグシンボルでいっぱいです。標準または一般的なライブラリを使用するのは良いことですか? これは、Windowsの一部のdllライブラリがそのライブラリの「デバッグバージョン」に置き換えられた場合にも発生する可能性があります。静的コンパイルを優先する方が良いですか?商用アプリケーションでは、アプリのコアとしてすべてを静的にコンパイルし、ほとんどの場合、dll(一般に動的ライブラリ)を使用して、海賊版対策ソリューションなどのサードパーティのテクノロジーを提供しています(多くのゲームでこれを確認しています) )、GUIライブラリ(Qtのような)、OSライブラリなど 静的コンパイルは、Javaの世界における難読化と同等ですか?より良い意味で、それはあなたのコードを保護するための最良で最も手頃なソリューションですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.