web-dev-qa-db-ja.com

シリアルジェネレーター/クラックはどのように開発されていますか?

つまり、私はいつも、誰かがそこにある多くのシェアウェアプログラムでの合法的な使用の制約を破る/ごまかすためのアルゴリズムをどのように開発できるのか疑問に思っていました。

好奇心のためだけに。

29
Alex. S.

違法であることは別として、それは非常に複雑な仕事です。

理論的なレベルで言えば、一般的な方法は、プログラムを逆アセンブルしてクラックし、キーまたはシリアルコードがチェックされている場所を見つけようとすることです。

深刻な保護スキームは複数の場所で値をチェックし、後で使用するためにシリアルキーから重要な情報を取得するため、推測したときにプログラムがクラッシュするため、言うのは簡単です。

クラックを作成するには、チェックが行われるすべてのポイントを特定し、アセンブリコードを適切に変更する必要があります(多くの場合、条件付きジャンプを反転するか、コストをメモリ位置に格納します)。

Keygenを作成するには、アルゴリズムを理解し、まったく同じ計算を再実行するプログラムを作成する必要があります(シリアルに非常に単純なルールがあった古いバージョンのMS Officeを覚えています。数字の合計は、次の倍数である必要があります。 7なので、keygenを書くのはかなり簡単でした)。

どちらのアクティビティでも、アプリケーションの実行をデバッガーで追跡し、何が起こっているのかを把握する必要があります。また、オペレーティングシステムの低レベルAPIを知る必要があります。

一部の厳重に保護されたアプリケーションでは、ファイルを逆アセンブルできないようにコードが暗号化されています。メモリにロードされると復号化されますが、メモリ内デバッガが起動したことを検出すると、起動を拒否します。

本質的に、それは非常に深い知識、創意工夫、そして多くの時間を必要とするものです!ああ、それはほとんどの国で違法だと言いましたか?

詳細を知りたい場合は、Google for + ORC Cracking Tutorialsは非常に古く、おそらく今日では役に立たないでしょうが、それが何を意味するのかについての良いアイデアを提供します。

とにかく、これをすべて知る非常に良い理由は、独自の保護スキームを作成したい場合です。

28
Remo.D

悪意のあるユーザーは、逆アセンブラを使用してキーチェックコードを検索します。これを行う方法を知っていれば、これは比較的簡単です。

その後、キーチェックコードをCまたは別の言語に翻訳します(この手順はオプションです)。キーチェックのプロセスを逆にすると、キージェネレーターが得られます。

アセンブラーを知っている場合、これを行う方法を学ぶのにおよそ週末がかかります。私はほんの数年前にそれを行いました(しかし、何もリリースしませんでした。それは私のゲーム開発の仕事のための研究でした。難しいキーを書くには、人々がクラッキングにどのように取り組むかを理解する必要があります)。

15

Nilsの投稿は、キージェネレーターを扱っています。亀裂の場合、通常、分岐点を見つけてロジックを反転(または条件を削除)します。たとえば、ソフトウェアが登録されているかどうかをテストし、登録されている場合はゼロを返し、それに応じてジャンプします。 1バイトを変更することで、「ゼロに等しい場合にジャンプ(je)」を「ゼロに等しくない場合にジャンプ(jne)」に変更できます。または、コードのさまざまな部分に対して、実行したくないことを実行する操作を記述しないこともできます。

コンパイルされたプログラムは逆アセンブルでき、十分な時間があれば、決心した人々はバイナリパッチを開発できます。クラックは、プログラムの動作を変えるための単なるバイナリパッチです。

9
Daniel Papasian

まず、ほとんどのコピー防止スキームはそれほど高度ではありません。そのため、最近は多くの人が自分でロールバックしているのを目にすることはありません。

これを行うために使用されるいくつかの方法があります。デバッガーでコードをステップスルーできますが、これには通常、アセンブリに関する適切な知識が必要です。これを使用すると、プログラムのどこでコピー防止/ keygenメソッドが呼び出されているかを知ることができます。これで、 IDA Pro のような逆アセンブラを使用して、コードをより詳細に分析し、何が起こっているのか、そしてそれをバイパスする方法を理解しようとすることができます。私は以前、日付チェックにNOOP命令を挿入することで、期間限定のベータ版をクラックしました。

それは本当に、ソフトウェアの十分な理解とアセンブリの基本的な理解に帰着します。 Hak5 リバースエンジニアリングとクラッキングの基本の種類について、今シーズンの最初の2つのエピソードで2部構成のシリーズを行いました。それは本当に基本的ですが、おそらくまさにあなたが探しているものです。

4
foxxtrot

クラッカーになる可能性のある人は、プログラムを分解し、「コピー防止」ビットを探します。特に、シリアル番号が有効かどうかを判断するアルゴリズムを探します。そのコードから、機能のロックを解除するために必要なビットのパターンを確認し、それらのパターンで数値を作成するジェネレーターを作成することがよくあります。

もう1つの方法は、シリアル番号が有効な場合は「true」を返し、そうでない場合は「false」を返す関数を探し、関数が常に「true」を返すようにバイナリパッチを開発することです。

他のすべては、主にこれら2つのアイデアのバリエーションです。コピー防止は常に定義上壊れやすい-ある時点で実行可能コードになってしまうか、プロセッサがそれを実行できなかった。

3
Kirk Strauser

アルゴリズムを抽出して「Guesses」をスローし始め、肯定的な応答を探すことができるシリアル番号。コンピュータは強力で、通常、ヒットを吐き出すまでに少し時間がかかります。

ハッキングに関しては、以前はプログラムを高レベルでステップスルーして、プログラムが機能しなくなったポイントを探すことができました。次に、成功した最後の「呼び出し」に戻り、それにステップインしてから、繰り返します。当時、コピー防止機能は通常、ディスクに書き込み、その後の読み取りが成功したかどうかを確認していました(成功した場合、フロッピーの一部をレーザーで焼き付けて書き込みできなかったため、コピー防止機能は失敗しました)。

次に、適切な呼び出しを見つけて、その呼び出しからの正しい戻り値をハードコーディングするだけでした。

それはまだ似ていると確信していますが、彼らは電話の場所を隠すために多くの努力をしています。最後に試したのは、シングルステップで実行していたコードにコードをロードし続けたため、あきらめました。それ以降、コードはさらに複雑になっていると思います。

2
Bill K

所有者の名前がバイナリのどこかに(暗号化されて難読化されて)格納されている、またはバイナリ全体に分散されている、パーソナライズされたバイナリを配布するだけではないのはなぜだろうか。AFAIKApple is iTunesストアのミュージックファイルを使用してこれを実行しますが、ファイルから名前を削除するのは非常に簡単です。

1
Nils

それぞれのクラックは異なると思いますが、ほとんどの場合、誰かが問題のアプリケーションをトレースするデバッガーに多くの時間を費やしていると思います。

シリアルジェネレータは、シリアル番号の有効性をチェックするアルゴリズムを分析し、それをリバースエンジニアリングすることで、さらに一歩進んでいます。

0
mike511