Example #1
0
        /// <summary>
        /// Retrieve a file from the Apfell server and return the bytes of that file.
        /// </summary>
        /// <param name="file_id">ID of the file to pull down.</param>
        /// <param name="implant">Agent or implant that is retrieving this file.</param>
        /// <returns></returns>
        override public byte[] GetFile(string task_id, string file_id, int chunk_size)
        {
            List <byte> fileChunks = new List <byte>();

            try
            {
                Mythic.Structs.UploadFileRegistrationMessage fileReg;
                string      response;
                UploadReply reply;
                byte[]      data;
                int         i = 1;
                do
                {
                    fileReg = new UploadFileRegistrationMessage()
                    {
                        action     = "upload",
                        chunk_size = chunk_size,
                        file_id    = file_id,
                        full_path  = "",
                        chunk_num  = i
                    };
                    if (Send(task_id, JsonConvert.SerializeObject(fileReg)))
                    {
                        response = (string)Inbox.GetMessage(task_id);
                        reply    = JsonConvert.DeserializeObject <UploadReply>(response);
                        data     = System.Convert.FromBase64String(reply.chunk_data);
                        for (int j = 0; j < data.Length; j++)
                        {
                            fileChunks.Add(data[j]);
                        }
                        i++;
                    }
                    else
                    {
                        break;
                    }
                    //response = implant.Profile.Send(JsonConvert.SerializeObject(fileReg));
                    //reply = JsonConvert.DeserializeObject<UploadReply>(response);
                    //data = System.Convert.FromBase64String(reply.chunk_data);
                    //for(int j = 0; j < data.Length; j++)
                    //{
                    //    fileChunks.Add(data[j]);
                    //}
                    //i++;
                } while (i <= reply.total_chunks);
            }
            catch
            {
                return(null);
            }
            return(fileChunks.ToArray());
        }
Example #2
0
        override public byte[] GetFile(UploadFileRegistrationMessage fileReg, int chunk_size)
        {
            string      response;
            UploadReply reply;

            reply.total_chunks = 0;
            byte[]      data;
            List <byte> fileChunks = new List <byte>();
            int         i          = 1;

            // Set requisite attributes
            fileReg.action     = "upload";
            fileReg.chunk_size = chunk_size;
            //fileReg.chunk_num = i;
            if (fileReg.full_path != "" && fileReg.full_path != null && (fileReg.task_id == "" || fileReg.task_id == null))
            {
                throw new Exception("Full path given but no task_id set. Aborting.");
            }
            try
            {
                do
                {
                    fileReg.chunk_num = i;
                    if (Send(fileReg.task_id, JsonConvert.SerializeObject(fileReg)))
                    {
                        response = (string)Inbox.GetMessage(fileReg.task_id);
                        reply    = JsonConvert.DeserializeObject <UploadReply>(response);
                        data     = System.Convert.FromBase64String(reply.chunk_data);
                        for (int j = 0; j < data.Length; j++)
                        {
                            fileChunks.Add(data[j]);
                        }
                        i++;
                    }
                } while (i <= reply.total_chunks);
            } catch (Exception ex)
            {
                return(null);
            }
            return(fileChunks.ToArray());
        }