From 281c3e521e2310ccea6807a2126d330384ec9720 Mon Sep 17 00:00:00 2001 From: chrishoder Date: Fri, 15 Feb 2013 23:34:09 +0000 Subject: [PATCH] generalized the generation fuzzer to allow you to choose which ids you want to randomly inject also git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@1501 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- client/experiments.py | 81 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 8 deletions(-) diff --git a/client/experiments.py b/client/experiments.py index 44f89ec..76aa37a 100644 --- a/client/experiments.py +++ b/client/experiments.py @@ -179,7 +179,69 @@ class experiments(GoodFETMCPCANCommunication): # where low is the low end of values for the fuzz, high is the high end value # period is the time between sending packets in milliseconds, writesPerFuzz is the times the # same fuzzed packet will be injecetez. Fuzzes is the number of different packets to be injected - def generationFuzzer(self,freq, standardId, dbLimits, period, writesPerFuzz, Fuzzes): + def generationFuzzer(self,freq, standardIds, dbLimits, period, writesPerFuzz, Fuzzes): + print "Fuzzing on standard ID: %d" %standardId + self.client.serInit() + self.spitSetup(freq) + packet = [0,0,0,0,0,0,0,0,0,0,0,0] #empty template + #form a basic packet + +# #### split SID into different regs +# SIDlow = (standardIds[0] & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 +# SIDhigh = (standardIds[0] >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 +# +# packet = [SIDhigh, SIDlow, 0x00,0x00, # pad out EID regs +# 0x08, # bit 6 must be set to 0 for data frame (1 for RTR) +# # lower nibble is DLC +# packetTemp[0],packetTemp[1],packetTemp[2],packetTemp[3],packetTemp[4],packetTemp[5],packetTemp[6],packetTemp[7]] +# + + #get folder information (based on today's date) + now = datetime.datetime.now() + datestr = now.strftime("%Y%m%d") + path = self.DATALOCATION+"InjectedData/"+datestr+"_GenerationFuzzedPackets.csv" + filename = path + outfile = open(filename,'a'); + dataWriter = csv.writer(outfile,delimiter=','); + #dataWriter.writerow(['# Time Error Bytes 1-13']); + #dataWriter.writerow(['#' + description]) + + numIds = len(standardIDs) + fuzzNumber = 0; + while( fuzzNumber < Fuzzes): + id_new = standsardIDs[random.randint(0,numIds-1)] + #### split SID into different regs + SIDlow = (id_new & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 + SIDhigh = (id_new >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 + packet[0] = SIDhigh + packet[1] = SIDlow + + #generate a fuzzed packet + for i in range(0,8): # for each databyte, fuzz it + idx = "db%d"%i + limits = dbLimits[idx] + value = random.randint(limits[0],limits[1]) #generate pseudo-random integer value + packet[i+5] = value + + #put a rough time stamp on the data and get all the data bytes + row = [time.time(), standardId,8] + msg = "Injecting: " + for i in range(5,13): + row.append(packet[i]) + msg += " %d"%packet[i] + #print msg + dataWriter.writerow(row) + self.client.txpacket(packet) + #inject the packet repeatily + for i in range(1,writesPerFuzz): + self.client.MCPrts(TXB0=True) + time.sleep(period/1000) + fuzzNumber += 1 + print "Fuzzing Complete" + outfile.close() + + + def generationFuzzRandomID(self, freq, standardIDs, dbLimits, period, writesPerFuzz, Fuzzes): print "Fuzzing on standard ID: %d" %standardId self.client.serInit() self.spitSetup(freq) @@ -206,9 +268,16 @@ class experiments(GoodFETMCPCANCommunication): #dataWriter.writerow(['# Time Error Bytes 1-13']); #dataWriter.writerow(['#' + description]) - + numIds = len(standardIDs) fuzzNumber = 0; while( fuzzNumber < Fuzzes): + id_new = standsardIDs[random.randint(0,numIds-1)] + #### split SID into different regs + SIDlow = (id_new & 0x07) << 5; # get SID bits 2:0, rotate them to bits 7:5 + SIDhigh = (id_new >> 3) & 0xFF; # get SID bits 10:3, rotate them to bits 7:0 + packet[0] = SIDhigh + packet[1] = SIDlow + #generate a fuzzed packet for i in range(0,8): # for each databyte, fuzz it idx = "db%d"%i @@ -230,9 +299,5 @@ class experiments(GoodFETMCPCANCommunication): self.client.MCPrts(TXB0=True) time.sleep(period/1000) fuzzNumber += 1 - - outfile.close() - - - - + print "Fuzzing Complete" + outfile.close() \ No newline at end of file -- 2.20.1