自己破壊的な Cocoa アプリケーションを設計する方法を探しています。アイデアは、アプリケーションがレトロ エンジニアリング (常に数回の試行で行われる) であるかどうかを起動時に検出し、その場合は削除/破損することです。もちろん、熱心なハッカーは破壊プロセスを再ダウンロードしてレトロエンジニアリングすることができますが、それは本当に面倒で苦痛になります!
コードの整合性をチェックするには、実行可能ファイルのハッシュサムがうまくいくはずです。
破損プロセスに関しては、アプリケーションが実行中にバンドルを編集できないことは確かです。私には1つのアイデアがあります:
-破壊専用の「中間アプリケーション」を生成し、最初の . それはうまくいくでしょうか?
- 終了する前にシェル スクリプト (アプリケーションが終了するのを待つ) を生成しますか?
どんなアイデアでも大歓迎です!
編集:ココースターリンクに関して:
1. デバッグ シンボルの削除: 明示的なメソッド名がなくても、主に NSString 呼び出し (@"validated"、@"license") を探すことで、「検証」メソッドをトレースするのは非常に簡単です。
2.PT_DENY_ATTACH : とにかくアタッチする方法はありますが、ptrace() を中断し、戻り値を変更します (基本的なレトロ エンジニアリングのトレーニングでこれを見つけることができれば、誰でもできます)。
3.チェックサムをチェックし、それ以外の場合は終了します:それはまさに私が避けようとしている種類のものです:gdbを使用すると、[NSApplication shouldTerminate:])への呼び出しをトレースし、テスト(または有効なMD5文字列)を変更して渡すのは簡単ですそれ。要点は、gdb をリロードするだけでなく、ハッカーが gdb を再度ダウンロード/インストールする必要があるということです (したがって、プロセスに非常に時間がかかります)。
これを想像してください:
1.起動時に、mainApplication は次のようなシェル/bash スクリプトを作成します。
wait(decent time)
rm /*Dynamic Application Path*/Contents/MacOS/exe
以上:
sed -i 's/a/b/g' /*Dynamic Application Path*/Contents/MacOS/exe
//Will completly screw the code
2.チェックサムが失敗した場合は、スクリプトを起動し、アプリケーションを静かに終了します。私の質問は次のとおりです。NSTask はアプリケーションに依存しますか (NSTask を起動して、それを起動したアプリケーションを終了できますか)?