Reflector.FileDisassembler 를 사용 하여 DLL 역 컴 파일 하기
Reflector for.NET 다운로드 주소:http://www.aisto.com/roeder/dotnet/
Reflector.FileDisassembler.dll cs 파일 의 도구 다운로드 주소:http://www.denisbauer.com/Downloads/Reflector.FileDisassembler.zip
1.Reflector.FileDisassembler.zip 를 다운로드 하고 압축 을 풀 면 일부 파일 을 얻 을 수 있 습 니 다.그 중에서 Reflector.FileDisassembler.dll 은 이미 컴 파일 되 었 고 다른 것 은 원본 입 니 다.
2.Reflector 를 열 고 view 메뉴 의 add-ins 에 Reflector.FileDisassembler.dll 을 추가 합 니 다.
3.open dll,exe 또는 mcl 을 접미사 로 하 는 파일 은 당연히.net 을 지원 해 야 합 니 다.
4.역 컴 파일 할 dll(목록 에 표 시 됨)을 선택 하고 Tools->File Disassembler 를 선택 하 십시오.오른쪽 창 에 원본 코드 를 저장 할 위 치 를 설정 하 는 경로 가 나타 납 니 다.생 성 을 클릭 하면 됩 니 다!
그러나 FileDisassembler 를 사용 하여 CS 파일 로 컴 파일 하면 버그 가 있 습 니 다.변수,클래스,이름 공간 이 바 뀔 때 가 있 습 니 다.
다행히 FileDisassembler 가 발표 할 때 소스 코드 를 가지 고 있어 서 Reflect 를 생략 할 수 있 습 니 다.기계 가 생 성 한 임시 변수 이름 이 불쾌 해 보이 기 때 문 입 니 다.이 bug 를 복구 하 는 것 은 간단 합 니 다.Create File 방법 을 수정 하 는 동시에 GetUniqueFileName 방법 을 추 가 했 습 니 다.소스 코드 는 다음 과 같 습 니 다.
private StreamWriter CreateFile(string directory, string fileName)
{
directory = directory.Replace("", "_");
directory = directory.Replace(":", "_");
directory = directory.Replace("|", "_");
directory = directory.Replace("?", "_");
directory = directory.Replace("*", "_");
directory = Path.Combine(this.outputDirectory, directory);
ILanguage language = this.LanguageManager.ActiveLanguage;
string fileExtension = language.FileExtension;
fileName = fileName.Replace("", "_");
fileName = fileName.Replace(":", "_");
fileName = fileName.Replace("|", "_");
fileName = fileName.Replace("?", "_");
fileName = fileName.Replace("*", "_");
fileName = Path.Combine(directory, fileName);
fileName = Path.ChangeExtension(fileName, fileExtension);
fileName = GetUniqueFileName(fileName);
this.WriteLine(fileName);
directory = fileName.Substring(0, fileName.LastIndexOf('""'));
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
StreamWriter writer = new StreamWriter(fileName);
return writer;
}
private Hashtable fileNames = new Hashtable();
private string GetUniqueFileName(string fileName)
{
string strExtension = Path.GetExtension(fileName);
fileName = fileName.Replace(strExtension, "");
string _fileName = fileName.ToLower();
bool bFirstRename = true;
while(fileNames.Contains(_fileName))
{
string existFileName = (string)fileNames[_fileName];
string [] efnParts = existFileName.Split(new char[] { '""' });
string [] fnParts = fileName.Split(new char[] { '""' });
for (int i = 0; i < fnParts.Length; ++i)
{
if (efnParts[i] != fnParts[i])
{
if (bFirstRename)
{
fnParts[i] += '_';
bFirstRename = false;
}
fnParts[i] += 'x';
break;
}
}
fileName = string.Empty;
for (int i = 0; i < fnParts.Length; ++i)
{
fileName += '""' + fnParts[i];
}
fileName = fileName.Substring(1);
_fileName = fileName.ToLower();
}
fileNames[_fileName] = fileName;
return fileName + strExtension;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.