2010-12-29 10 views
2

私は少しJavaの自己検査プログラム(自己チェックサム)をしなければなりません。 は、ここに私のコードサンプルJavaの自己検査プログラム(自己チェックサム)

public class tamper { 
     public static int checksum_self() throws Exception { 
      File file = new File ("tamper.class"); 
      FileInputStream fr = new FileInputStream (file); 
      int result;     // Compute the checksum 
      return result; 
     } 
     public static boolean check1_for_tampering() throws Exception { 
      return checksum_self() != 0; // TO BE UPDATED! 
     } 
     public static int check2_for_tampering() throws Exception { 
      return checksum_self(); 
     } 
     public static void main (String args[]) throws Exception { 
      if (check1_for_tampering()) { 
      System.exit (-1); 
      } 
      float celsius = Integer.parseInt (args[0]); 
      float fahrenheit = 9 * celsius/5 + 32; 
      System.out.println (celsius + "C = " + fahrenheit + "F"); 
     } 
} 

私はその

DigestInputStream sha = new DigestInputStream(fr, MessageDigest.getInstance("SHA")); 
byte[] digest = sha.getMessageDigest(); 

for(..) 
{ 
result = result + digest[i] 
} 

ような何かをしようとしてきた。しかし、その後、私は本当にそれをチェックする方法がわかりません?

EDIT:あなたの答えのための

おかげ

アダム・ペインターとSpoonBenders @

は、当然のことながら、これは私の個人的な使用のためではありません。そして、私は文句を言わない任意のソフトウェアを保護するためにそれを使用.....

それは私が私のJavaのコースにしなければならない「exerciceを」だ...

+1

Javaメソッド名規格に注意してください。それはCまたはPHPではありません –

+0

これは個人的な関心ですか?コードを変更から守るために、この手法に頼ることはありません。 –

+1

純粋にクライアント側でコードが実行されている場合、保護するのは非常に困難です。一方、一部のソフトウェアは、インターネット接続が利用可能な場合にのみ意味を持ちます。そのようなソフトウェアは、**非常に**効果的に保護することは自明です。計算の一部をサーバー側(完全に制御するサーバー側)で実行するだけです。これを考えてみましょう。**誰も**有効なライセンスを取得せずに、実際の* World of Warcraft * economy/Blizzardサーバーで遊んでいます。誰も。 1つの海賊団がそれを回避することはできませんでした。 *それは、クライアント/サーバーの保護がどれほど強力であるかということです。 – SyntaxT3rr0r

答えて

0

はあなたのチェックサムを作成するための最初の必要性を確認します。おそらく直後のコンパイルでは、チェックサム作成モードでプログラムを実行する必要があります。このモードでは、チェックサムを作成してファイルまたは実行時にアクセスできる他の場所に保存します。

次に、実行時に、そのチェックサムをロードする必要があります。これが期待どおりの結果になります。次に、コードで行ったように "tamper.class"のチェックサムを実行し、期待される結果と一致することを確認します。

これはあなたがやろうとしていることですか?