私はC言語で書かれたと思われるDLLを逆コンパイルしたいのですが、どうすればいいですか?Cで書かれたDLLを逆コンパイルできますか?
答えて
短い回答:できません。
長い回答: C/C++のコンパイルプロセスは非常に損失です。コンパイラは、コードに対する高レベルと低レベルの最適化を大量に行い、生成されたアセンブリコードは元のコードに似ていないよりも頻繁に発生します。さらに、市場にはさまざまなコンパイラがあります(それぞれにはいくつかの異なるバージョンがあります)。それぞれが出力を少しずつ違ったものにしています。どちらのコンパイラが使用されているかを知らなくても、逆コンパイルの作業はもっと無駄になります。最高のところでは、ここではCコードの一部が認識されている部分的な逆コンパイルを行うことができるいくつかのツールについて聞いたことがありますが、まだそれを理解するためにはたくさんのアセンブリコードを読む必要があります。
これは、ソフトウェアのコピープロテクションがクラッキングするのが難しく、特別な組み立てスキルが必要な理由の1つです。
することはできますが、唯一、ある程度まで:
-
(DLLではなく、シンボルのインデックスを経由して内部に存在する関数を参照することができます)
- シンボルが除去されている可能性のあるコードを変更することができ
- 最適化
- いくつかの命令の組み合わせはC
- と私は忘れるかもしれないいくつかの他のものへの転換ではないかもしれません...
5.コンパイラは関数をインライン化することがあります。 –
可能ですが、非常に困難で、C、アセンブリ、そしてこのコードが動作するはずのオペレーティングシステムの複雑さに精通していても、膨大な時間を要します。
問題は、最適化によってコンパイルされたコードが人間にはほとんど認識されないことです。
さらに、逆アセンブラが情報を失うと、あいまいさがあります(同じ命令が異なる方法でコード化され、コードの残りが多くの逆アセンブラ(またはそのユーザ)が取り込まれない特定のコード化結果の逆アセンブルは不完全または不正確になります)。
自己変更コードも同様に問題を複雑にします。
this questionを参照してください。
自己修正コードはC64でヒップしました。現代のプロセッサは、コードが変更されたときにキャッシュやマルチスレッドに問題があります。私はC/C++コンパイラが自己修正コードを生成できるかどうかは分かりません(でもあなたは+1を取得します) – LittleFunnyMan
- 1. 私たちはC#dllをVB.NETに逆コンパイルできますか?
- 2. CまたはCで書かれたdllファイルをインポートする
- 3. DLLの逆コンパイル
- 4. PHPでCで書かれたdllを使用できますか?
- 5. dllファイルのコンパイルと逆コンパイル
- 6. JADC DLLの逆コンパイル
- 7. C#で書かれたdllにC#データ型パラメータを渡す?
- 8. スタンドアロンC++プログラムでC++で書かれたフェスティバルコードの一部をコンパイル
- 9. .Net - .Netで書かれたクラスライブラリ(DLL)は、CまたはC++で書かれたアプリケーションで使用できますか?
- 10. VS.netで作成した.dllファイルを逆コンパイルする方法
- 11. C#でMFC DLLを書き直しますか?
- 12. CHM(ヘルプ)ファイルをCまたはC++で逆コンパイルする
- 13. ASPのdllファイルを逆コンパイルする
- 14. exeまたはdllをアセンブリに逆コンパイルする方法
- 15. Visual C++で作成されたdllファイルはC#で使用できますか?
- 16. C DLLからC#DLLを呼び出すことはできますか?
- 17. C#逆コンパイル
- 18. C#AsyncStateMachine逆コンパイル
- 19. IOS :: NOCREATEエラーRHEL 5.0にC++で書かれたパッケージを、コンパイル、
- 20. .NETアセンブリからC(DLL)で書かれたTclパッケージをロードする
- 21. C++ .exeでDLLをコンパイルする方法
- 22. C#のDelphi 7でコンパイルされたDLLを使用
- 23. Visual Studio 2008でコンパイルしたC++ dllをVisual Studio 2005で使用できますか?
- 24. Reflectorでdllファイルを逆コンパイルすると、externキーワード
- 25. ほとんどのバージョンのWindowsでは、すぐに使えるC99で書かれたDLLをコンパイルします。
- 26. Androidアプリケーションフォームを逆コンパイルしてコードに記入できますか?
- 27. Cで選択したヘッダーコードをコンパイルできますか?
- 28. jarファイルを元のソースに戻すために逆コンパイルできますか?
- 29. kernel32.dllとuser32.dllのみに依存するC++プログラムをコンパイルしますか?
- 30. dllファイルとpdbファイルから独自のクラスを逆コンパイルします。Visual Studio
注:.NETとJavaはまったく異なる獣であり、そこでは逆コンパイルが可能です(逆コンパイラを混乱させる可能性のあるコード難読化器があります)。 –
C DLLが特定の '.jar'ファイルにアクセスしていることが分かっていれば、これらはDLLにハードコードされている必要があり、逆コンパイルになるでしょうか? –
難しいです。任意の "リソース"を.DLL/.EXEファイルに追加することは可能です。そのように格納されている場合は、逆コンパイルする必要はありません。リソースビューアのツールがあり、それを解凍できます。その後、Javaである.jarファイルを逆コンパイルすることができます。しかし、.dllファイルにファイルを埋め込む自作の方法もあります。もしそれらのファイルを使用するなら、あなたは不運です。たぶんあなたは、プログラムが実行されている間にこれらのファイルを取得することができ、それらは一時的なフォルダまたは何かに抽出される? –