├── README.md ├── SuperFunkyChat_build.zip ├── canape_1.4.zip ├── projects ├── 0x_basic_parser.canape ├── 0x_basic_parser_checksum.canape ├── 0x_fuzzing_client.canape ├── 0x_xor_encryption_state.canape ├── fuzzing_script.py └── xor_layer.py └── slides.pdf /README.md: -------------------------------------------------------------------------------- 1 | 44con_2014 2 | ========== 3 | 4 | Materials for 44con 2014 CANAPE Workshop 5 | -------------------------------------------------------------------------------- /SuperFunkyChat_build.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tyranid/44con_2014/1f4c52e9d686d293c50cd31292b6f039c8c7a406/SuperFunkyChat_build.zip -------------------------------------------------------------------------------- /canape_1.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tyranid/44con_2014/1f4c52e9d686d293c50cd31292b6f039c8c7a406/canape_1.4.zip -------------------------------------------------------------------------------- /projects/0x_basic_parser.canape: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tyranid/44con_2014/1f4c52e9d686d293c50cd31292b6f039c8c7a406/projects/0x_basic_parser.canape -------------------------------------------------------------------------------- /projects/0x_basic_parser_checksum.canape: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tyranid/44con_2014/1f4c52e9d686d293c50cd31292b6f039c8c7a406/projects/0x_basic_parser_checksum.canape -------------------------------------------------------------------------------- /projects/0x_fuzzing_client.canape: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tyranid/44con_2014/1f4c52e9d686d293c50cd31292b6f039c8c7a406/projects/0x_fuzzing_client.canape -------------------------------------------------------------------------------- /projects/0x_xor_encryption_state.canape: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tyranid/44con_2014/1f4c52e9d686d293c50cd31292b6f039c8c7a406/projects/0x_xor_encryption_state.canape -------------------------------------------------------------------------------- /projects/fuzzing_script.py: -------------------------------------------------------------------------------- 1 | # This pulls in the canape library namespaces 2 | import CANAPE.Nodes 3 | import CANAPE.DataFrames 4 | 5 | # Simple pipeline node 6 | class PipelineNode(CANAPE.Nodes.BaseDynamicPipelineNode): 7 | 8 | # Called when a new frame has arrived 9 | def OnInput(self, frame): 10 | cmd = self.Graph.IncrementGlobalCounter("CurrentCommand", 1) 11 | 12 | self.LogInfo("Current Command {0}", cmd) 13 | 14 | # XPATH Method 15 | #cmdval = frame.SelectSingleNode("/Command") 16 | #cmdval.Value = cmd 17 | 18 | # Dynamic Method 19 | frame.DynamicRoot.Command.Value = cmd 20 | 21 | self.WriteOutput(frame) 22 | -------------------------------------------------------------------------------- /projects/xor_layer.py: -------------------------------------------------------------------------------- 1 | # This pulls in the canape library namespaces 2 | import CANAPE.Nodes 3 | import CANAPE.DataFrames 4 | import CANAPE.Net.Layers; 5 | 6 | def XorFrame(frame, xorValue): 7 | data = frame.ToArray() 8 | for i in range(len(data)): 9 | data[i] = data[i] ^ xorValue 10 | 11 | return CANAPE.DataFrames.DataFrame(data) 12 | 13 | # Simple example script to implement a layer which xor's bytes with a known value 14 | class XorNetworkLayer(CANAPE.Net.Layers.DynamicNetworkLayer): 15 | 16 | def GetXor(self): 17 | xorkey = self.Meta.GetMeta('XorKey') 18 | self.Logger.LogInfo("XORKEY: {0}", xorkey) 19 | return xorkey 20 | 21 | # This function is a generator, yield each frame you want 22 | def ReadClientFrames(self, client): 23 | self.Logger.LogInfo("Starting to read client frames") 24 | frame = client.Read() 25 | while frame is not None: 26 | yield XorFrame(frame, self.GetXor()) 27 | frame = client.Read() 28 | 29 | # This function is a generator, yield each frame you want 30 | def ReadServerFrames(self, server): 31 | self.Logger.LogInfo("Starting to read server frames") 32 | frame = server.Read() 33 | while frame is not None: 34 | yield XorFrame(frame, self.GetXor()) 35 | frame = server.Read() 36 | 37 | def WriteClientFrame(self, client, frame): 38 | client.Write(XorFrame(frame, self.GetXor())) 39 | 40 | def WriteServerFrame(self, server, frame): 41 | server.Write(XorFrame(frame, self.GetXor())) -------------------------------------------------------------------------------- /slides.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tyranid/44con_2014/1f4c52e9d686d293c50cd31292b6f039c8c7a406/slides.pdf --------------------------------------------------------------------------------