2013-04-01 4 views
0

우리는 내부 목적으로 vb.net을 사용하여 프로젝트를 개발 한 후 난독 화했습니다. 아래에 설명 된대로 오류가 발생하고 있습니다.난독 화 중 오류

"을 (를) 찾을 수 없습니다 public 멤버 'VAR1'유형에 'E'."

코드 : 호출 프로 시저에서 매개 변수 'FRM'에 전달됩니다 (frmMain 수라는 이름의)

Public Sub get_constants_from_DbList(ByRef frm As Object, ByRef sDbname As String) 

    For Each Row As DataRow In CommonObj.DSCommonProc.Tables("dblist").Rows 
      If StrComp(Row("DbName").ToString, sDbname, CompareMethod.Text) = 0 Then 
      prg_id = Row("PrgId").ToString 
      frm.Var1= Row("ChangesDbName").ToString 
      frm.Var2 = Row("LoadTableName").ToString 
      frm.Var3 = Row("ServerName").ToString 
      Exit Sub 
     End If 
    Next 

End Sub 

양식 이 서브 루틴에 Var1 등은 해당 형식의 공용 변수입니다. 우리가 시도

난처 도구입니다 -

  1. SmartAssembly 6

  2. 난처 EXE없이

(비주얼 스튜디오 2012와 함께왔다)

  • 선제 Dotfuscator 및 분석 CE가 작동 벌금.

    변수 'Var1'을 서브 루틴에 할당하는 동안 오류가 발생합니다. 코드 줄이 아래와 같이 수정되면 난독 화 된 exe가 정상적으로 작동합니다.

    FrmMain.Var1 = 행 ("ChangesDbName"). ToString

    우리는 난독 늦게 & 작은 샘플 프로젝트에서 코드의 유사한 유형을 시도 구속력없는 생각했다. 그러나 그것은 어떤 오류도 없었습니다. 이 작은 코드를 첨부했습니다. 그러나 그 규모 때문에 우리는 독창적 인 프로젝트를 업로드 할 수 없습니다.

    어떻게 오류를 추적 할 수 있습니까?

    당신은 반사/동적/후기 바인딩으로 난처을 사용하지 마십시오 내 샘플 애플리케이션의 소스 코드 here

  • +0

    내부 응용 프로그램입니다. 그리고 소스 코드를 게시했습니다. 어떤 점이 그것을 알아 듣지 못하게 남겨 둡니까 ??? –

    +0

    이것은 오류 –

    +0

    eazfuscator를 가져 오는 샘플 코드입니다.net은 동일한 오류를 발생시킵니다. (난독 화되었을 때) – Rob

    답변

    1

    을 찾을 수 있습니다. 이런 문제에 봉착 할 것입니다.

    obfuscator는 모든 개인 & 내부 식별자를 난독 화하지만 런타임에 이름으로 바인딩한다는 것을 알 수 없습니다.

    Option Strict의 전원을 켜고 오류를 해결 (즉, 그것의 실제 유형에 인수 FRM의 유형을 변경)

    0

    난독이 당황하는 "안전"이 무엇인지 결정하기 위해 정적 분석에 의존하고 있습니다. 지연 바인딩과 리플렉션을 믹스에 도입하면 이름을 바꾸는 것이 안전하지 않은 것을 감지하는 것이 매우 어려워집니다. 대부분의 난독 화 프로그램은 응용 프로그램의 특정 요소를 난독 화에서 제외하여이 문제를 해결할 수있는 기능을 제공합니다.

    저는 실제로 VB.Net을 잘 모릅니다. 그러나 늦은 바인딩을하는 방식은 난독 화가가 감지 할 수없는 것으로 보입니다. 따라서이 속성의 이름을 바꿀 필요가 없습니다. Dotfuscator에서 적어도 이것은 쉬워야합니다. 또한 모든 클래스의 모든 공용 멤버를 자동으로 제외하는 "라이브러리 모드"를 활성화 할 수 있어야합니다.