示例#1
0
        /// <summary>
        /// kopiert die restlichen Bytes des Streams
        /// </summary>
        /// <returns></returns>
        public byte[] ToArray()
        {
            MemoryStream ms = new MemoryStream();

            BaseStream.CopyTo(ms);
            return(ms.ToArray());
        }
示例#2
0
        public virtual byte[] ToArray()
        {
            using (var stream = new MemoryStream())
            {
                BaseStream.CopyTo(stream);

                return(stream.ToArray());
            }
        }
示例#3
0
 public byte[] GetBytes()
 {
     using (var memoryStream = new MemoryStream())
     {
         memoryStream.GetBuffer();
         BaseStream.CopyTo(memoryStream);
         return(memoryStream.ToArray());
     }
 }
示例#4
0
        public void WriteAllBytes(string file)
        {
            var currentPos = BaseStream.Position;

            using (var fs = File.Create(file))
            {
                BaseStream.Seek(0, SeekOrigin.Begin);
                BaseStream.CopyTo(fs);
            }
            BaseStream.Seek(currentPos, SeekOrigin.Begin);
        }
示例#5
0
        private string CreateTempSoundFile()
        {
            string path = Path.GetTempFileName();

            using (var fs = File.Open(path, FileMode.Create))
            {
                BaseStream.CopyTo(fs);
            }

            return(path);
        }
        public MethodResponse(MethodRequest request) : base(new MemoryStream())
        {
            using (MemoryStream ms = new MemoryStream())
            {
                Write((byte)request.Version);
                Write((byte)ConfigurationManager.AuthenticationMethod);

                BaseStream.Position = 0;
                BaseStream.CopyTo(ms);
                Data = ms.ToArray();
            }
        }
示例#7
0
        public AuthenticationResponse(AuthenticationRequest request) : base(new MemoryStream())
        {
            using (MemoryStream ms = new MemoryStream())
            {
                Write((byte)request.Subnegotiation);
                Write((byte)(AccountManager.Authenticate(request) ? (byte)Result.Succeeded : (byte)Result.General_SOCKS_Server_Failure)); //Anything greater than 0 will be taken as Authentication fail by the client.

                BaseStream.Position = 0;
                BaseStream.CopyTo(ms);
                Data = ms.ToArray();

                Valid = (byte)Result.Succeeded == Data[1];
            }
        }
示例#8
0
        public DataResponse(Result result, AddressType addressType, byte[] adressBytes, byte[] portBytes) : base(new MemoryStream())
        {
            using (MemoryStream ms = new MemoryStream())
            {
                Write((byte)5);           //Version
                Write((byte)result);      //RequestResult
                Write((byte)0x00);        //Reserved byte, always 0x00
                Write((byte)addressType); //AddressType
                Write(adressBytes);       //AddressBytes 4 octets or 15.
                Write(portBytes);         //Port bytes in network format (reversed)

                //Copy the base stream out into our Data array.
                BaseStream.Position = 0;
                BaseStream.CopyTo(ms);
                Data = ms.ToArray();
            }
        }
示例#9
0
        /// <summary>
        /// Clones the reader for parallel reading at the given position
        /// </summary>
        /// <returns></returns>
        public IDjvuReader CloneReader(long position)
        {
            DjvuReader newReader = null;

            // TODO Get rid of not properly synchronized clones or synchronize readers

            // Do a deep clone with new BaseStream
            if (_Location != null)
            {
                newReader = new DjvuReader(_Location);
            }
            else
            {
                MemoryStream stream = new MemoryStream((int)BaseStream.Length);
                BaseStream.CopyTo(stream);
                newReader = new DjvuReader(stream);
            }
            newReader.Position = position;
            return(newReader);
        }
示例#10
0
 public new void Dispose()
 {
     if (prev != null)
     {
         Flush();
         BaseStream.Flush();
         BaseStream.Position = 0;
         prev.Flush();
         prev.BaseStream.Flush();
         BaseStream.CopyTo(prev.BaseStream);
         prev.next = null;
         prev      = null;
     }
     if (next != null)
     {
         next.prev = null;
         next      = null;
     }
     base.Dispose();
 }
示例#11
0
 public override void CopyTo(Stream destination, int bufferSize)
 {
     BaseStream.CopyTo(destination, bufferSize);
 }
示例#12
0
 /// <summary>
 /// Writes the patch to a stream.
 /// </summary>
 /// <param name="stream">The stream to write the file to.</param>
 public virtual void Save(Stream stream)
 {
     BaseStream.Position = 0;
     BaseStream.CopyTo(stream);
 }
示例#13
0
 void IPacket.WriteToStream(IPacketCodec content)
 {
     BaseStream.CopyTo(content.BaseStream);
 }
示例#14
0
        public Elf(Stream stream, float version, long maxMetadataUsages) : base(stream, version, maxMetadataUsages)
        {
            is32Bit                  = true;
            elf_header               = new Elf32_Ehdr();
            elf_header.ei_mag        = ReadUInt32();
            elf_header.ei_class      = ReadByte();
            elf_header.ei_data       = ReadByte();
            elf_header.ei_version    = ReadByte();
            elf_header.ei_osabi      = ReadByte();
            elf_header.ei_abiversion = ReadByte();
            elf_header.ei_pad        = ReadBytes(7);
            elf_header.e_type        = ReadUInt16();
            elf_header.e_machine     = ReadUInt16();
            if (elf_header.e_machine != 0x28 && elf_header.e_machine != 0x3)
            {
                throw new Exception("ERROR: Unsupported machines.");
            }
            elf_header.e_version   = ReadUInt32();
            elf_header.e_entry     = ReadUInt32();
            elf_header.e_phoff     = ReadUInt32();
            elf_header.e_shoff     = ReadUInt32();
            elf_header.e_flags     = ReadUInt32();
            elf_header.e_ehsize    = ReadUInt16();
            elf_header.e_phentsize = ReadUInt16();
            elf_header.e_phnum     = ReadUInt16();
            elf_header.e_shentsize = ReadUInt16();
            elf_header.e_shnum     = ReadUInt16();
            elf_header.e_shtrndx   = ReadUInt16();
            program_table          = ReadClassArray <Elf32_Phdr>(elf_header.e_phoff, elf_header.e_phnum);
            if (!GetSectionWithName())
            {
                Console.WriteLine("Detected this may be a dump file. If not, it must be protected.");
                isDumped = true;
                Console.WriteLine("Input dump address:");
                var dumpAddr = Convert.ToUInt32(Console.ReadLine(), 16);
                foreach (var phdr in program_table)
                {
                    phdr.p_offset = phdr.p_vaddr;
                    phdr.p_filesz = phdr.p_memsz;
                    phdr.p_vaddr += dumpAddr;
                }
            }
            var pt_dynamic = program_table.First(x => x.p_type == 2u);

            dynamic_table = ReadClassArray <Elf32_Dyn>(pt_dynamic.p_offset, pt_dynamic.p_filesz / 8u);

            #region 判断并解密so

            var s_text   = sectionWithName[".text"];
            var s_rodata = sectionWithName[".rodata"];
            //统计 .text 段字节数
            int[] bytecnt = new int[256];

            Position = s_text.sh_offset;
            byte[] text_bytes = ReadBytes((int)s_text.sh_size);
            foreach (var b in text_bytes)
            {
                bytecnt[b]++;
            }
            byte xorbyte = (byte)Array.IndexOf(bytecnt, bytecnt.Max());
            //解密
            if (xorbyte != 0x00)
            {
                //解密text段
                for (int i = 0; i < text_bytes.Length; i++)
                {
                    text_bytes[i] ^= xorbyte;
                }
                Position = s_text.sh_offset;
                BaseStream.Write(text_bytes, 0, text_bytes.Length);
                //解密rodata段
                Position = s_rodata.sh_offset;
                byte[] rodata_bytes = ReadBytes((int)s_rodata.sh_size);
                for (int i = 0; i < rodata_bytes.Length; i++)
                {
                    rodata_bytes[i] ^= xorbyte;
                }
                Position = s_rodata.sh_offset;
                BaseStream.Write(rodata_bytes, 0, rodata_bytes.Length);
                //保存文件
                FileStream fileStream = new FileStream("libil2cpp.fixed.so", FileMode.Create);
                Position = 0;
                BaseStream.CopyTo(fileStream);
                fileStream.Close();
            }
            #endregion


            if (!isDumped)
            {
                RelocationProcessing();
            }
        }
示例#15
0
 /// <summary>
 /// kopiert die restlichen Bytes des Streams
 /// </summary>
 /// <param name="stream"></param>
 public void CopyTo(Stream stream)
 {
     BaseStream.Seek(0, SeekOrigin.Begin);
     BaseStream.CopyTo(stream);
 }