公開されているメタモルフィック コード サンプルは、いくつかの要因によって制限されています。
1) 専門知識:メタモルフィック コーディングは、コンピューター プログラミングにおける非常に高度な技術です。サンプリングに適した一貫性のあるクリーンなメタモルフィック コードをコーディングできるプログラマーの数は非常に少ないです。
2) 金銭的インセンティブ:メタモルフィック コーディングは、商用アプリケーションでの使用が制限されています。このため、メタモルフィック コードを作成するのに十分なスキルを持っているプログラマーの多くは、メタモルフィック コーディング技術を作成/学習するための専門的な露出/インセンティブを持っていません。
3) 正当性:メタモルフィック コーディングには、強力なウイルスの作成に大きな用途があります。したがって、変成コードを作成した責任ある専門家は、サンプルを自由に配布する倫理的な問題を抱えることになります。逆に、メタモーフィック コードを作成するのに十分な能力を持つハッカーは、能力に基づいて容疑者の非常に短いリストに含まれるため、攻撃の 1 つが明らかになったとしても、彼のスキルを宣伝するインセンティブはありません。
4) 機密性:最後に、おそらく最も現実的な理由として、メタモルフィック コードを見つけるのが非常に難しいのは、メタモルフィック プログラミングの能力を示し、サイバー犯罪で当局に逮捕されていないプログラマは、政府のセキュリティ機関に採用される可能性が高いためです。 、民間のセキュリティ会社、またはウイルス対策会社であり、プログラマーのその後の研究/知識は、競争力を維持するための秘密保持契約の対象となります。
なぜC/C++
例だけ?
ポリ/メタモルフィック プログラミングのコード例のみを見つけることに言及C/C++
し、ハードウェアに近い言語のみがポリ/メタモルフィックになる可能性があると推測しました。これは、ポリ/メタモルフィック コードの最も厳密な定義に当てはまります。解釈された言語は、ポリ/メタモーフィックな動作を持つことができますが、実行するために静的にコンパイルされたインタープリターに依存しているため、「実行時の署名」の大部分は変更できません。コンパイルされた低レベル言語だけが、高度に変更可能な「ランタイム シグネチャ」を持つための計算上の柔軟性を提供します。
これは、私が書いた「ポリモーフィック」な PHP コードです。PHP はインタープリター言語であり、コンパイル済み言語ではないため、真のポリモーフィズムは不可能です。
PHP コード:
<?php
// Programs functional Execution Section
system("echo Hello World!!\\n");
// mutable malicious payload goes here (if you were devious)
// Programs Polymorphic Engine Section
recombinate();
?>
<?php
function recombinate() {
$file = __FILE__; //assigns file path to $file using magic constant
$contents = file_get_contents($file); //gets file contents as string
$fileLines = explode("\n", $contents); //splits into file lines as string array
$varLine = $fileLines[2]; //extracts third file line as string
$charArr = str_split($varLine); //splits third line into char array
$augStr = augmentStr($charArr); //recursively augments char array
$newLine = implode("",$augStr); //rebuilds char array into string
$fileLines[2] = $newLine; //inserts string back into array
$newContents = implode("\n",$fileLines); //rebuilds array into single string
file_put_contents($file,$newContents); //writes out augmented file
sleep(1); //let the CPU rest
$pid = pcntl_fork(); //forks process
if($pid) { //if in parent:
exit(0); //exit parent process
} //WARNING: creates 'Zombie' child process
else { //else in child process
system("nohup php -f " .$file . " 2> /dev/null"); //executes augmented file
exit(0); //exits exit child process
}
}
function augmentStr($inArr) {
if (mt_rand(0,6) < 5) { //determines mutability
/*$startIndex & $endIndex define mutable parts of file line as Xs
* system("echo XXXXX ... XXXXX\\n");
* 01234567890123 -7654321
*/
$startIndex = 13;
$endIndex = count($inArr)-7;
$targetIndex = mt_rand($startIndex,$endIndex); //choose mutable index
$inArr[$targetIndex] = getSafeChar(mt_rand(0,62)); //mutate index
$inArr = augmentStr($inArr); //recurse
}
return $inArr;
}
function getSafeChar($inNum) { //cannot use escaped characters
$outChar; //must be a standard PHP char
if ($inNum >= 0 && $inNum <= 9 ) { $outChar = chr($inNum + 48); }
else if ($inNum >= 10 && $inNum <= 35) { $outChar = chr($inNum + 55); }
else if ($inNum >= 36 && $inNum <= 61) { $outChar = chr($inNum + 61); }
else if ($inNum == 62) { $outChar = " "; }
else { $outChar = " "; }
return $outChar;
}
?>
警告:ゾンビ プロセスを作成します。コードを実行する前にゾンビ プロセスを強制終了する方法を知っています。
情報検索テクニック:
この記事には、ウィキペディアよりも具体的な情報が含まれています。ただし、この記事には実際のソース コードは含まれていません。サンプル ソース コードが見つかる可能性はほとんどありませんが、私のアドバイスが必要な場合は、独自の変成コードを作成するための十分な学術文書を見つけることができるかもしれません。これを開始することを検討してください(グーグル学者):
学術論文/論文を読むときは、ドキュメントの最後にあるソースを必ず確認してください。これらのソースにも貴重な情報が含まれている可能性があります。
知識の探求に幸運を!