アンダーハンドCコンテストは、悪意のあるコードを作成するためのプログラミングコンテストで、厳密な検査を通過し、発見されても正直なミスのように見えるコードを作成することを目的としています。コンテストのルールでは、タスクと悪意のあるコンポーネントが定義されています。応募作品は、コンテストで定義された悪意のある方法でタスクを実行し、悪意を隠蔽する必要があります。参加者は、Cライクなコンパイル言語を使用してプログラムを作成することが許可されています。[ 1 ]
このコンテストは、ビンガムトン大学電気工学科のスコット・クレイバー博士[ 2 ]によって企画されました。このコンテストは、2004年秋にダニエル・ホーンが開催した難読化Vコンテスト[ 3 ]に触発されたものです。2005年から2008年のコンテストでは、賞品はThinkGeekの100ドルのギフト券でした。2009年のコンテストでは、受賞者の発表が非常に遅れたため、賞品が200ドルに増額され、2013年のコンテストの賞品も200ドルのギフト券でした。
2005年のコンテストでは、リサンプリングや平滑化といった基本的な画像処理に加え、画像に独自の有用な「指紋」データを密かに挿入するという課題が課せられました。2005年の入賞作品では、初期化されていないデータ構造、ポインタの再利用、定数へのマシンコードの埋め込みなどが用いられました。
2006年のコンテストでは、単語の出現回数をカウントすることが求められましたが、プラットフォームによって実行時間が大きく異なりました。この課題を達成するために、応募作品はフォークの実装エラー、最適化の問題、エンディアンの違い、およびさまざまなAPI実装の違いを利用しました。優勝作品はループ内でstrlen()を呼び出しましたが、その結果、計算量が2次となり、Linuxコンパイラでは最適化によって解消されたものの、Windowsでは解消されませんでした。
2007年のコンテストでは、応募作品は強力で入手しやすい暗号化アルゴリズムを用いてファイルを暗号化および復号化し、暗号化されたファイルのうちごく一部(1%~0.01%)が比較的短時間で解読される可能性があることが求められた。コンテストは4月16日に開始され、7月4日に終了した。応募作品には、RC4の誤った実装、API呼び出しの誤用、関数プロトタイプの誤りなどが見られた。
2008年のコンテストでは、 PPM画像の矩形部分を再構成可能な方法で編集することが求められました。元のピクセルが削除され、ピクセルの再構成が完璧である必要がない限り、矩形を「ブロックアウト」する方法は何でも許可されました[ 4 ](ただし、再構成が元のファイルに忠実であることは審査の要素になります)。コンテストは6月12日に始まり、9月30日に終了しました。応募作品は、復元可能な擬似乱数マスクで領域をXORするか、マスクされたデータをファイル形式の末尾に追加する傾向がありました。2位のプログラムはどちらも不適切に定義されたマクロを使用していましたが、優勝者は珍しいテキストベースの形式を使用することを選択し、桁数をそのままにピクセル値をゼロにしました。
2009年のコンテストでは、参加者はルーティング指示を精査し、スペース区切りの入力データファイル内の一見無害なコメントに基づいて荷物を転送するプログラムを作成する必要がありました。コンテストは2009年12月29日に開始され、2010年3月1日に終了する予定でした。[ 5 ]しかし、3年間活動はありませんでした。受賞者は2013年4月1日に発表され、総合優勝者1名と準優勝者6名が選ばれました。[ 6 ] [ 7 ]
2013年のコンテストは2013年4月1日に発表され、締め切りは2013年7月4日でした。結果は2014年9月29日に発表されました。[ 8 ]これは「ObsessBook」という架空のソーシャルウェブサイトに関するものでした。課題は、 2人のユーザー間のDERPCON(エッジ到達可能な個人的接続の度合い)を計算する関数を作成し、特定のユーザーに対して「偶然」より低い距離を計算することでした。
2014年のコンテストは2014年11月2日に発表され、締め切りは2015年1月1日でした。結果は2015年6月1日に発表されました。[ 9 ] 目的は、秘密の政府監視要請に従うために、 Twitterのようなソーシャルネットワーキングサービス用の監視コードを作成することでしたが、明白ではない理由から、コードは監視行為をユーザーにさりげなく漏らす必要がありました。一般的なアプローチは、ユーザーデータへの書き込みを監視データへの書き込みとして難読化することであり、優勝作品は入力を上書きするバグのある時間チェック関数を実装することでこれを実現しました。
2015年のコンテストは2015年8月15日に発表され、締め切りは2015年11月15日でした。結果は2016年1月15日に発表されました。シナリオはアリス人民栄光民主共和国とボブ栄光民主人民共和国(アリスとボブ)間の核軍縮プロセスで、ミッションは潜在的に核分裂性物質を基準サンプルと比較するテスト関数を作成することでした。この関数は、特定の状況下では核分裂性物質を含まない弾頭を核分裂性物質を含むと判定します。提出物の約3分の1は、誤った浮動小数点演算によるNaNポイズニングを使用しており、後の計算でさらに多くのNaNが生成され、比較では常にfalseと評価されます。優勝作品は、doubleとfloatのデータ型の混同を使用して値を歪めました。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)