2010-08-05 2 views
8

고객 일련 번호가 내 하드 코드 번호와 일치하는지 확인하는 방법을 쓰고 있습니다. 바람직하지 않은 코드를 손에 넣을 수 있도록 가능한 한 읽기 어렵게 만드는 방법이 있습니까?코드 줄을 읽기 어렵게 만들기

나는 자바에서 일하고있다. 이 홀수 일

+0

사람이 더 궁금해하게 만드는 것처럼 보입니다. – Radu

+0

http://en.wikipedia.org/wiki/Obfuscation#.22Eschew_obfuscation.212 – skaffman

+0

http : // ko.wikipedia.org/wiki/Kerckhoffs%27_principle – pmu

답변

19

어둠을 통한 보안은 항상 나쁜 생각입니다. 당신은 그것을 피할 필요가 없지만, 당신은 그것에 전적으로 의지해서는 안됩니다.

서비스 시작시 입력 한 키로 시리얼을 암호화하거나 ASCII가 아닌 16 진수 또는 16 진수로 시리얼을 지정하십시오.

6

의 비트가 만드는 경우 인스턴스 (의사 코드)

경우 들어

(X! = Y)의 오차를

건배 사과 코드 뛰어 반환 해킹 당하지 않도록 복잡한 코드가 도움이되지 않습니다!

0

릴리스 된 코드의 제어 구조가 뒤죽박죽입니까?

예를 들어 다른 변수의 코드에서 임의의 지점에있는 숫자를 입력하고 임의의 지점에서 x와 y를 같게 만드시겠습니까?

http://en.wikipedia.org/wiki/Spaghetti_code

0

코드를 복잡하게 만들지 않고 하드 코딩 된 일련 번호를 노출하지 않는 다른 방법을 구현할 수 있습니다.

암호화 된 바이트 배열로 고정 된 위치에 하드 코딩 된 번호를 저장해보십시오. 그렇게하면 읽을 수 없습니다. 비교를 위해 동일한 알고리즘으로 클라이언트 시리얼 코드를 암호화하고 비교합니다.

7

정상적인 방법은 해시를 사용하는 것입니다.

  1. 일련 번호의 해시를 만듭니다.
  2. 동일한 기능을 사용하여 클라이언트 직렬을 검증하려면 해시를 사용하십시오.
  3. 해시가 일치하는 경우 직렬 자체가 코드에 없더라도 올바른 것입니다.

정의에 따르면 해시에서 원래 코드를 추론하는 것은 거의 불가능합니다.

1

SHA1 또는 다른 단방향 암호화 (MD5는 안전하지는 않지만 꽤 좋음)를 시도 할 수 있습니다. 이 작업을 수행하지 마십시오

if (userPassword equals myHardCodedpassword) 

는이 작업을 수행 :

if (ENCRYPTED(userPassword) equals myhardcodedEncryptedpassword) 

그래서 코드 리더는 암호화 (매우 매우 매우 어려운 암호를 해독하기 위해) 값을 볼 수 있습니다.

+0

어쨌든, 의도하지 않은 해커가 바이트 코드를 'notequals'대신에 반대 평가 'equals'로 대체하는 것을 방지하기 위해 비교가 이루어지는 장소를 혼란스럽게 만들 수 있습니다 .- 어쨌든 더 어렵습니다). – helios

관련 문제