2012-08-14 2 views
0

나는 고객이 단어와 같은 탁월한 문서에 배치 된 비밀번호를 복구하는 데 도움이되는 프로그램을 만들고 있습니다. 이 프로그램은 잘 작동하지만 무료 제품을 다운로드 할 수있는 비슷한 제품보다 훨씬 느립니다. 내가 무료로 다운로드 할 수있는 많은 프로그램이 완전히 안전하지 않고 내가 갖고 싶은 제어 장치가 부족하다고 생각하기 때문에 자신의 프로그램을 사용하고 싶습니다.비밀번호 분쇄를위한 최적의 루프

기타 ... 내 프로그램이 왜 그렇게 느린 지 알아내는 데 도움이 필요합니다. 나는 간단한 3 글자 암호 "TFX"로 Excel 문서를 만들었습니다. 다운로드 한 프로그램은 '이동'을 클릭 한 후 마우스 버튼을 놓을 수있는 최대한 빨리 비밀번호를 찾습니다. 내 프로그램에는 10 분이 걸립니다. 다음은 3 자 루프입니다.

private string ThreeCharPass(string file, Microsoft.Office.Interop.Excel.Application exApp, char[] combarr) 
    { 
     for (int three = 0; three < combarr.Length; three++) 
     { 
      for (int two = 0; two < combarr.Length; two++) 
      { 
       for (int one = 0; one < combarr.Length; one++) 
       { 
        try 
        { 
         string pass = combarr[three].ToString() + combarr[two].ToString() + combarr[one].ToString(); 
         exApp.Workbooks.Open(file, false, true, Type.Missing, pass, Type.Missing, true, Type.Missing, Type.Missing, false, false, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
         return pass; 
        } 
        catch 
        { 
        } 
       } 
      } 
     } 
     return string.Empty; 
    } 

'combarr'은 암호의 가능한 모든 문자를 포함하는 문자 배열입니다. 사용자가 선택한 옵션을 기반으로 프로그램의 앞 부분에서 생성됩니다. 나는 암호 조합을 생성하기 위해 어레이를 반복하는 방식으로 문제가 발생한다고 생각한다.이 3 문자 암호 방법으로 다른 '전문'프로그램이 초를 소비하는 곳에서 5 분 이상을 소비하기 때문이다. 모든 의견을 크게 주시면 감사하겠습니다!

+11

클라이언트가 잠재적으로 개인 데이터를 무력화하도록 돕는 프로그램을 만들고 있습니까? –

+1

필자가 생각하기에, 독점적 인 시스템은 암호 저장 방법/암호화 알고리즘에 대한 지식을 바탕으로 접근 방식을 기반으로하고 있으며, 필연적으로 훨씬 느린 무차별 대입 방식을 사용합니다. –

+0

숫자 정리를 수행하기 위해 매우 높은 추상화 (Exel interop, IO 파일 처리, 예외 처리)를 사용하고 있습니다. 이것은 잘못된 접근법입니다. – Gleno

답변

5

코드에서 수행 할 수있는 몇 가지 사소한 최적화가 있지만 가장 큰 원인은 exApp.Workbooks.Open 호출입니다. 전화가 매우 느린 것 같지만 프로파일 러를 사용하여 테스트 할 수 있습니다.

다른 도구는 실제 문서 구조 (DOC, DOCX 형식)를 읽고 Word가 알아낼 수있는 것과 정확히 같은 방식으로 암호가 올바른지 알아냅니다. 정확한 세부 사항을 모르지만 Word에서 암호가 정확하다는 것을 알 수있는 방법이있을 가능성이 큽니다. 예를 들어, 올바르게 해독 될 때 예상 값을 갖는 고유 한 문자열 일 수 있습니다. 또는 합계 체크섬. 형식의 사양을 알고 있으면 값 비싼 interop 호출을 절약하면서 직접 테스트를 수행 할 수 있습니다.

This page에는 많은 Microsoft Office 형식에 대한 자세한 정보가 있습니다. 이러한 사양의 일부를 구현하는 것은 많은 작업이지만 확실한 속도를 낼 것입니다. interop 호출을 제거한 후에 만보다 효율적인 루프, 멀티 스레딩 및 기타 전략을 살펴볼 수 있습니다.

Office 형식은 독점적이므로 모든 정보가 사용 가능하고 완전하며 최신이거나 신뢰할 수있는 것은 아닙니다.

+0

나 한테 고마워. 고마워. 어떤 아이디어가 어떻게/어디에서이 유형의 스펙을 찾을 수 있습니까? 나는 그것이 어딘가에서 이용할 수 있다고 상상할 것이다. 이를 위해 많은 다운로드 프로그램이 있습니다. – DarkShadow

+0

필자는 대답에 Microsoft Office 사양 목록 링크를 추가했습니다. – Virtlink

+0

감사합니다. 나는 그것을 통해 살펴보고 내가 올리는 내용을 게시 할 것입니다. – DarkShadow

0

완전히 잘못된 접근 방식입니다. 당신이 특정 암호 길이를 알고가 (소수의 사용자가 진정으로 임의의 암호를 선택)/랜덤 안전한지, 당신은 가능성이 사전 공격 및/또는 무지개 테이블과 더 잘 할 거라고하지 않는 한

  1. 멀티 스레딩
  2. Excel과 같이 일반적인 것으로, 암호 길이와 Excel에서 실제로 파일을 해독/잠금 해제하는 방법을 결정하기 위해 알고리즘/약점에 대한 알려진 정보를 먼저 찾습니다.
  3. API를 직접 사용하여 비밀번호를 테스트하면 속도가 느려질 수 있습니다. 특정 위치에서 알려진 가치를 찾아 그 가치를 연구하는 것이 더 낫습니다. # 3으로 Excel에서 파일의 암호를 해독/잠금 해제하는 방법을 결정할 수있는 경우 Excel 메서드를 호출 할 때 interop 오버 헤드만큼 빠르게 실행되도록 자신의 코드에서이를 복제 할 수 있습니다.

실제로이 작업을 수행해야합니까?

+0

루프가 깨지는 것은 자체 스레드에 있습니다. 다른 스레드를 만들려면 여러 스레드에서 동일한 파일에 액세스하려고 충돌이 발생할 것이라고 생각합니다. 특정 길이를 알 수 없으며 암호는 거의 안전하지 않지만 다운로드 한 도구의 사전 기능을 사용했으며 암호를 복구하는 행운을 얻지 못했습니다. 레인보우 테이블은 아이디어이지만이 인스턴스에서 실제로 얼마나 빠르지는 알 수 없습니다. 나는 이것을하지 않아도 좋겠지 만 불행히도 잊혀진 암호가 현실이며 데이터를 다시 만드는 데 비용이 많이 든다. – DarkShadow

1

.docx 문서의 경우 훨씬 쉬운 방법이 있습니다.

  1. 이 당신이 폴더 "단어"
  2. 가 여기에 이제 폴더를 닫습니다 "Settings.XML의"
  3. 을 삭제를 찾을 파일로 이동이 .zip으로 확장자 이름 바꾸기 파일의 이름을 다시 .docx로 바꿉니다.

완료되었습니다. Excel 용 http://www.nextofwindows.com/how-to-remove-password-from-protected-word-file-in-word-2007-and-2010

에서 발견

  • 이 폴더를 찾아 파일에 이동이 매우 유사한 방법이지만 그것은 .zip으로 확장자 이름 바꾸기 조금 더 많은 작업

    1. 을 포함한다 "xl"및 그 아래의 "worksheets"폴더
    2. sheet1.xml (sheet2.xml 등)과 같은 파일이 하나 이상 있어야합니다. 이 파일들 중 하나의 내부에는 XML 태그가 있습니다 : < sheetProtection password = ... />. 전체 XML 태그를 삭제하십시오.
    3. 이제 매크로 사용 가능 통합 문서 인 경우 폴더를 닫고 파일 이름을 .xlsx 또는 .xlsm으로 바꿉니다.

    은 .. 또한 다음과 같은 방법은 나를 위해 잘 작동

    http://blog.bitcollectors.com/adam/2011/10/how-to-unprotect-a-password-protected-xlsx-file/http://www.instructables.com/id/VBA-Code-To-Unlock-A-Locked-Excel-Sheet/

    행운을 발견!