See the question and my original answer on StackOverflow

You're missing the transformation from byte[] to string, but you'll have to define what's the encoding. This may work:

public static string getTrack1(string track1, int len)
{
  IntPtr track1Ptr = UnsafeNativeMethods.Decrypt(track1, len);
  Byte[] track1b = new Byte[200];
  Marshal.Copy(track1Ptr, track1b, 0, track1b.Length);
   return Encoding.Default.GetString(track1b);
}

But it would be better to do this;

public static string getTrack1(string track1, int len)
{
  IntPtr track1Ptr = UnsafeNativeMethods.Decrypt(track1, len);
  return Marshal.PtrToStringAnsi(track1Ptr);
}

If the encoding is Ansi (=Default)