Hi,

me again :D.

For the obfuscated string problem, please download this samples:
http://simpledotnet.googlepages.com/testdll.zip

testdll.original.dll is original file, testdll.dll comes from:

   AssemblyDefinition ad = AssemblyFactory.GetAssembly(@"d:\
\testdll.original.dll");
   AssemblyFactory.SaveAssembly(ad, @"d:\\testdll.dll");

Please look into GetString() method, you can find the string is
changed.
And the return value of GetString is different.

This is not Cecil's fault.
The reason the obfuscated string is not standard unicode string.
Unicode.GetString() of .Net 2.0 ignore/remove some invalid characters.
So in Cecil, operand of instruction ldstr is wrong for this case.
(in UserStringsHeap.cs -> ReadStringAt)

The popular assembly browser, Reflector, has same problem.

As I mentioned at the first post, Unicode class of .Net 1.1 handle it
properly.
Is it possible to use .Net 1.1 logic for Cecil to decode unicode bytes
to string?

Regards
Wicky




--~--~---------~--~----~------------~-------~--~----~
--
mono-cecil
-~----------~----~----~----~------~----~------~--~---

Reply via email to