あなたがしようとしているのは、シリアル番号をアクティベーション キーにマップする関数を考え出すことです。関数の性質について詳しく知らなくても、これは非常に簡単なもの (数項のみの多項式) から非常に難しいもの (多数のブロック XOR、置換テーブル、複雑なキー スケジュールなどを含む多層関数) までさまざまです。 .)。
キー検証ルーチンにアクセスできる場合 (例: 逆アセンブル -ほとんどの場合、商用ソフトウェアの EULA に対して)、特定のアクティベーション キーが特定のシリアル番号に対して正しいかどうかを返すルーチンがあります。シリアル番号のアクティベーション キーを計算してこれを行った場合は、実質的に完了です。これが鍵の逆関数を計算することによって行われた場合、タスクは少し難しくなります。その関数を逆にして、鍵派生アルゴリズムを取得する必要がありますが、これはそれほど簡単ではない可能性があります。スキームが公開鍵暗号に依存しているためにいくつかの難しい数学的問題 (離散対数問題など) を解決しなければならなくなった場合、扱っている値がブルートフォースできるほど十分に小さいことを望んでいます。または、既知のアルゴリズム (Pollard の rho アルゴリズムなど) を計算可能な時間内に使用します。
いずれにせよ、逆アセンブルとデバッグに慣れる必要があり、デバッガー対策が講じられていないことを願っています。
そうしないと、問題はさらに難しくなります。経験に基づいた推測を行い、それらを試して (たとえば、多項式の当てはめを試みることによって)、最善の結果が得られることを期待する必要があります。入力と出力の任意のセットに適合する可能性のある関数は非常に多種多様であるため (数学的に数えることはできませんが、実際にはソース コードのサイズによって制限されます)、アルゴリズム自体に対して既知の平文攻撃を試みることは一般的に実行不可能です。