Jak zawsze tworzyć identyczne bajtowo .exe przy odbudowie aplikacji C #?

Najpierw podam trochę tła, dlaczego zadaję to pytanie:

Obecnie pracuję w ściśle regulowanej branży i dlatego nasz kodeks jest dość dokładnie sprawdzany przez oficjalne zakłady testowe. Te domy testowe oczekują, że będą w stanie zbudować kod i wygenerować plik .exe lub .dll, który jest DOKŁADNIE taki sam za każdym razem (oczywiście bez zmiany kodu!). Sprawdzają MD5 i SHA1 plików wykonywalnych, które tworzą, aby to zapewnić.

Do tego momentu głównie kodowałem w C ++, gdzie (po kilku zmianach ustawień projektu) udało mi się uzyskać projekty, które byłyby odbudowywane konsekwentnie do tego samego MD5 / SHA1. Używam teraz C # w projekcie i mam duże trudności z dopasowaniem MD5 po przebudowie. Zdaję sobie sprawę, że w nagłówku PE pliku znajdują się „znaczniki czasu” i zostały one wyczyszczone na 0. Wiem również, że istnieje identyfikator GUID dla pliku .exe, który ponownie został wyczyszczony do 00 00 00 ... itd. Jednak pliki nadal się nie zgadzają.

Używam CFF Explorer do przeglądania i edytowania nagłówka PE, aby usunąć znaczniki czasu i daty. Po użyciu binarnego narzędzia do porównywania istnieją tylko 2 bloki bajtów w pliku .exe, które są różne (oba bardzo małe).

Pojawi się jeden z niespójnych blokówwłaśnie przed jakimś kodem binarnym, który w ASCII wyszczególnia ścieżkę*Project*\obj\Release\xxx.pdb plik.

EDYTOWAĆ: Jest to teraz znane jako GUID pliku * .pdb, jednak nadal nie wiem, czy mogę go zmodyfikować bez powodowania błędów !?

Drugi blok pojawia się w środku tego, co wygląda na nazwy funkcji, tj. (typowa sekcja)AssemblyName.GetName.Version.get_Version.System.IO.Ports.SerialPort.Parity.Byte.<PrivateImplementationDetails>{

następnie inny blok kodu:

4A134ACE-D6A0-461B-A47C-3A4232D90816

śledzony przez:

"} .ValueType .__ StaticArrayInitTypeSize = 7. $ method0x60000ab-1.RuntimeFieldHandle.InitializeArray` ... etc ..

Wszelkie pomysły i sugestie byłyby mile widziane!

questionAnswers(6)

yourAnswerToTheQuestion