2010-12-02 4 views
2

원래 Visual Basic 6로 작성된 프로그램 (나중에 Java로 다시 작성)에서 생성 된 데이터 파일을 읽으려고합니다. 따라서 자신의 도구를 사용하여 처리 할 수 ​​있습니다.RC4와 같은 난독 화를 어떻게 물리 칠 수 있습니까?

해당 프로그램은 미국 정부에서 만든 공개 소프트웨어입니다. 이를 금지하는 라이센스 계약은 없습니다. 프로그래머가 아마도 내년 버전에서 난독 화를 바꿀 것이기 때문에 프로그램의 이름이나 웹 사이트에 대한 링크를 말할 수는 없으며 리버스 엔지니어링 노력을 반복해야 할 것입니다.

기본 데이터 파일 형식은 텍스트 기반이며 난독 화는 하드 코딩 된 키가있는 일종의 스트림 암호입니다. XOR 데이터 파일을 함께 사용하여 일부 ASCII 데이터를 문자열 필드에 채우는 방법도 있지만 프로그램 내에서 전체 키 스트림을 포함시키지 않으려합니다.

.exe 파일을 통해 검색하면 RC4ini라는 서브 루틴 호출과 키 (나는 사용자 인터페이스의 아무 곳에 나 나타나지 않습니다)라고 여겨지는 문자열이 나타납니다. Planet Source Code에있는이 암호화 라이브러리의 소스 코드가 무엇인지 알았고, RC4의 작동 구현에 올바른 변경을가했습니다 (자바 스크립트에서는 주로 프로그래밍 언어이므로). 사용 해보았습니다.

파일의 모든 오프셋에서 암호화 된 데이터를 검색하려고 시도했지만 암호 해독에 성공하지 못했습니다. 왜 이런 일이 일어나는거야?

+4

퍼블릭 도메인 인 경우 링크를 삽입하지 않으시겠습니까? –

+0

@Igor Skochinsky : 매년 새로운 버전의 프로그램이 출시됩니다. 다음 릴리스는 2011 년 초에 시작될 예정이며 프로그램의 이름을 언급하면 ​​(따라서 웹 검색에 표시됨) 프로그램을 다시 뒤집어 야합니다. – PleaseStand

+2

자신의 알고리즘 구현을 보지 않고서도 실제 결과와 같은 결과를 얻지 못하는 이유에 대해 합리적인 답을 얻는 사람은 누구입니까? – caf

답변

0

Google을 사용하여 의심되는 암호화 키를 검색하면 개발자가 나중에 (심지어 같은 달에) 암호화 코드로 발견 한 문자열을 명확하게 식별하는 Java 코드를 오픈 소스로 제공한다는 것을 알았습니다. 이후 그는 svn:ignore에 넣은 별도의 클래스로 키를 리팩토링했습니다 (아직 변경하지 않았으므로 아직 확인하지 않았습니다).

내 암호 해독 프로그램이 플래닛 소스 코드 구현과 정확히 일치하지 않습니다. 여기 RC4의 PRGA의 Wikipedia's description이다

i := 0 
j := 0 
while GeneratingOutput: 
    i := (i + 1) mod 256 
    j := (j + S[i]) mod 256 
    swap values of S[i] and S[j] 
    K := S[(S[i] + S[j]) mod 256] 
    output K 
endwhile 

는 Visual Basic 및 자바 코드 모두 처음 두 줄을 생략 (I = 0, J = 0).

2

RC4를 사용하는 경우 몇 가지 옵션이 있습니다.

한 가지 옵션은 RC4를 호출하고 키 또는 일반 텍스트 메시지를 덤프 할 때를 찾는 것입니다. 이것은 Windbg 나 ollydbg와 같은 디버거를 사용하여 쉽게 할 수 있습니다. 근본적으로 그들은 암호 법을 위반하고 있으며,이 속성으로 인해 모든 DRM이 실패하게됩니다.

또 다른 공격은 두 개의 메시지에 동일한 키가 사용되면 한 메시지의 일반 텍스트를 알고있는 경우 PRNG 스트림을 표시하기 위해 해당 암호 텍스트와 함께 xor 할 수 있다는 것입니다. 이 PRNG 스트림은 알 수없는 메시지의 암호 텍스트와 XOR되어 해당 대응하는 일반 텍스트를 얻을 수 있습니다. 당연히 각 메시지마다 키가 다른 경우 (예 : IV 사용)이 공격은 작동하지 않습니다.

+0

@idealmachine 디버거를 사용하십시오. – rook