3

自己破壊的な 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 を起動して、それを起動したアプリケーションを終了できますか)?

4

1 に答える 1