Visual Studio 2015 Update 3과 함께 Dotfuscator CE를 사용하여 .Net 어셈블리를 난독 화합니다. 공개 형식과 멤버는 기본적으로 난독 화되지 않습니다. 친구 클래스를 제외 목록에 추가하여 그 사람들이 난독 화되어서는 안된다는 것을 알고 싶습니다.난독 화 목록에서 제외 목록에 친구 클래스 추가
여기 내 DLL을 난처하게하는 데 사용하는 구성 파일 파일입니다.
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE dotfuscator SYSTEM "http://www.preemptive.com/dotfuscator/dtd/dotfuscator_v2.3.dtd">
<dotfuscator version="2.3">
<propertylist>
<property name="SourceDirectory" value="This Path Will Be Replaced By Visual Studio" />
<property name="SourceFile" value="This Filename Will Be Replaced By Visual Studio" />
</propertylist>
<global>
<option>quiet</option>
</global>
<input>
<asmlist>
<inputassembly refid="e4ca1ab5-26cb-4ab7-9621-87063f75a38f">
<option>honoroas</option>
<option>stripoa</option>
<option>library</option>
<option>transformxaml</option>
<file dir="${SourceDirectory}" name="${SourceFile}" />
</inputassembly>
</asmlist>
</input>
<output>
<file dir="${SourceDirectory}" />
</output>
<renaming>
<option>xmlserialization</option>
<mapping>
<mapoutput overwrite="true">
<file dir="${SourceDirectory}\Dotfuscated" name="Map.xml" />
</mapoutput>
</mapping>
<referencerulelist>
<referencerule rulekey="{6655B10A-FD58-462d-8D4F-5B1316DFF0FF}" />
<referencerule rulekey="{7D9C8B02-2383-420f-8740-A9760394C2C1}" />
<referencerule rulekey="{229FD6F8-5BCC-427b-8F72-A7A413ECDF1A}" />
<referencerule rulekey="{2B7E7C8C-A39A-4db8-9DFC-6AFD38509061}" />
<referencerule rulekey="{494EA3BA-B947-44B5-BEE8-A11CC85AAF9B}" />
<referencerule rulekey="{89769974-93E9-4e71-8D92-BE70E855ACFC}" />
<referencerule rulekey="{4D81E604-A545-4631-8B6D-C3735F793F80}" />
</referencerulelist>
</renaming>
<sos mergeruntime="true">
<option>version:v4</option>
<option>sendanalytics</option>
<option>dontsendtamper</option>
</sos>
<smartobfuscation>
<smartobfuscationreport verbosity="all" overwrite="false" />
</smartobfuscation>
</dotfuscator>
실제로 Friend 액세스 지정자가있는 Model 클래스가 있습니다. 예를 들어 PostAsJsonAsync 메소드를 통해 객체를 게시합니다. 요청 및 모델을 수신
Friend Class LoginModel
Public AccessKey As String
Public Password As String
End Class
API 방법 : 여기
Dim result As HttpResponseMessage = client.PostAsJsonAsync(APIEndPoints.LOGIN, _LoginModel).Result
는 친구 클래스입니다
API가 요청을 받아 LoginModel도 해당 필드가 null입니다
[HttpPost]
[Route("authenticate")]
public async Task<JsonResult> Authenticate([FromBody] LoginViewModel lvm)
// Here lvm.Accesskey is null
. 내 LoginModel을 public으로 만들면 작동합니다. 참고 : 이것은 DLL을 난처하게 할 때만 발생합니다. 그렇지 않으면 구현이 Friend 클래스에서도 작동합니다.
참고 : VB.Net에서는 프렌드 클래스가 일반적입니다. 어셈블리 내에서 액세스 할 때 공용 클래스처럼 작동하지만 어셈블리 외부에서는 private입니다.
자세한 내용은 @Joe 감사하지만 해결책이 작동하지 않았습니다. 자세한 내용을 제공하기 위해 제 질문을 업데이트하고 있습니다. 간단히 말해, 답변에 언급 된 제외 규칙은 친구 클래스가 난독 화되는 것을 제외하지 않았습니다. –
Idasm에서 난독 화 된 DLL을 보면 Friend 클래스의 공용 데이터 멤버가 a 및 b 이름으로 난독 화되었음을 알 수 있습니다. –
@AzazulHaq 귀하의 설명에 비추어 별도의 답변을 게시했습니다. –