2010-12-29 2 views
2

작은 자바 자체 검사 프로그램 (자체 체크섬)을 수행해야합니다. 여기 내 코드 샘플은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] 
} 

하지만 난 정말를 확인하는 방법을 모른다?

편집 : 답변

아담 Paynter @

및 SpoonBenders

에 대한

덕분에 당연히 이건 내 개인적인 사용을위한 것이 아닙니다. 그리고 늘 소프트웨어를 보호하기 위해 그것을 사용 .....

그것은 내가 내 자바 코스해야 할에 "exercice을"의 ...

+1

Java 메소드 이름 표준을주의하십시오. 그것은 C 또는 PHP가 아니 –

+0

개인 관심입니까? 수정에서 코드를 보호하기 위해이 기술을 사용하지 않을 것입니다. –

+1

코드가 클라이언트 측에서만 실행 중이라면 보호하기가 매우 어렵습니다. 다른 한편으로, 일부 소프트웨어는 인터넷 연결이 가능한 경우에만 의미가 있습니다. 이러한 소프트웨어는 ** 매우 ** 효과적으로 ** 보호하기 쉽습니다. 계산을 서버 측 (서버 측에서 완벽하게 제어)에서 수행하면됩니다. ** 아무도 유효한 라이센스가없는 실제 World of Warcraft * economy/Blizzard 서버에서 놀고 있습니다. 아무도. 단 하나의 해적 그룹 만이 그 문제를 해결할 수 없었습니다. * 그게 * 얼마나 강력한 클라이언트/서버 보호가 될 수 있습니다. – SyntaxT3rr0r

답변

0

당신에게 검사를 만드는 첫 번째 필요성을 확인하십시오. 컴파일 직후에 컴파일 할 때 체크섬 생성 모드에서 프로그램을 실행해야합니다.이 모드는 파일이나 다른 곳에서 런타임에 액세스 할 수있는 체크섬을 만들고 저장할 것입니다.

그런 다음 런타임에 예상 한 결과가 될 체크섬을로드해야합니다. 그런 다음 코드에서 수행 한 것처럼 "tamper.class"에 체크섬을 수행하고 예상 결과와 일치하는지 확인하십시오.

당신이하려는 일이 이것입니까?