Я пытаюсь удалить файл Dotnet, который был запутан Eazfuscator.NET в руководстве.Просто для удовольствия и для изучения.
Насколько я знаю, файлы Dotnet могут быть декомпилированы декомпиляторами.Итак, я подумал, что могу открыть файл и экспортировать его в файл проекта и скомпилировать его.Но это не так.Поскольку имена переменных, функций, пространств имен находятся за пределами отображаемой области (например, более 0x80).
В то время я думал, что экспорт в проектную функцию будет работать нормально, если я исправлю невоспроизводимые имена.Поэтому я фиксирую все имена в таблице метаданных.Но все же это не работает.
Важно ли поле Имя каждой таблицы метаданных в структуре файла Dotnet?
Если это так, есть ливажное правило именования?
Пожалуйста, помогите мне.
Вот мой частичный код и идея.Мой код написан на python3 и наследует pefile.
- Путешествуйте по таблице метаданных и находите отображаемые строки
def arrange_cor20_Strings_index(self):
metadataRootOffset = self.get_offset_from_rva(self.COR20_HEADER.METADATA.VirtualAddress)
# { Original offset ( Index 0 contains an index for a new string ) :
# Arranged offset ( -1 means undisplayable)
# }
strings = {}
for streamHeader in self.COR20_HEADER.STREAM_HEADERS:
streamName = streamHeader.Name.decode()
if streamName == "#Strings":
streamOffset = metadataRootOffset + streamHeader.Offset
rawStream = self.__data__[streamOffset:streamOffset + streamHeader.Size]
if len(rawStream) > 0:
string = []
stringIndex = 0
arrangedIndex = 0
for index in range(len(rawStream)):
if rawStream[index] == 0:
# strings[stringIndex] = "".join([chr(c) for c in string])
if self.isDisplayable(string) == True:
strings[stringIndex] = arrangedIndex
arrangedIndex = arrangedIndex + len(string) + 1
else:
strings[stringIndex] = -1
string = []
stringIndex = index + 1
continue
string.append(rawStream[index])
strings[0] = arrangedIndex
break
return strings
Сохранять отображаемые строки и удалять неотображаемые
def arrange_cor20_Strings_strings(self):
for originIndex in self.dictArrangedIndex.keys():
if originIndex == 0:
self.dictArrangedStrings[originIndex] = []
continue
if self.dictArrangedIndex[originIndex] != -1:
self.dictArrangedStrings[self.dictArrangedIndex[originIndex]] =\
self.COR20_HEADER.STREAMS["#Strings"][originIndex]
Исправить не отображаемые строки в таблице метаданных
...
def fix_cor20_Strings_metadata_Module(self, metadata):
strForm = "M%d"
index = self.rearrange_cor20_Strings_heap(metadata.Name, strForm)
metadata.Name = index
return metadata
def fix_cor20_Strings_metadata_TypeRef(self, metadata):
strForm = "TRN%d"
index = self.rearrange_cor20_Strings_heap(metadata.TypeName, strForm)
metadata.TypeName = index
strForm = "TRNS%d"
index = self.rearrange_cor20_Strings_heap(metadata.TypeNamespace, strForm)
metadata.TypeNamespace = index
return metadata
...
def fix_cor20_Strings_metadata(self, metadata):
fixedMetadata = {}
#print(metadata)
if metadata.name == self.__IMAGE_COR20_METADATA_MODULE_format__[0]: # 0
fixedMetadata = self.fix_cor20_Strings_metadata_Module(metadata)
elif metadata.name == self.__IMAGE_COR20_METADATA_TYPEREF_format__[0]: # 1
fixedMetadata = self.fix_cor20_Strings_metadata_TypeRef(metadata)
elif metadata.name == self.__IMAGE_COR20_METADATA_TYPEDEF_format__[0]: # 2
fixedMetadata = self.fix_cor20_Strings_metadata_TypeDef(metadata)
...
...
# { metadata.name :
# fixed count
# }
dictFixedCnt = {}
# { Original offset ( Index 0 contains an index for a new string ) :
# Arranged offset ( -1 means undisplayable)
# }
dictArrangedIndex = {}
# { String offset :
# String
# }
dictArrangedStrings = {}
def fix_cor20_Strings(self):
self.dictArrangedIndex = self.arrange_cor20_Strings_index()
self.arrange_cor20_Strings_strings()
streamName = "#~"
#print(self.COR20_HEADER.STREAMS[streamName])
for tagIndex in range(len(self.COR20_HEADER.STREAMS[streamName].Tags)):
metadataTag = self.COR20_HEADER.STREAMS[streamName].Tags[tagIndex]
for metadataRow in range(self.COR20_HEADER.STREAMS[streamName].Rows[tagIndex]):
metadata = self.COR20_HEADER.STREAMS[streamName].Metadatas[metadataTag][metadataRow]
fixedMetadata = self.fix_cor20_Strings_metadata(metadata)
self.COR20_HEADER.STREAMS["#Strings"] = self.dictArrangedStrings