| 
					
				 | 
			
			
				@@ -70,7 +70,7 @@ proc ::putils::kill_spaces {text} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 proc ::putils::put_bot {target_botnetnick fromdata} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	# real maxlen for putbot is 400. but we have overhead. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	set maxmsglen 330 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	set maxmsglen 300 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	set calcmsglen [expr $maxmsglen + 1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -81,9 +81,10 @@ proc ::putils::put_bot {target_botnetnick fromdata} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		# prepare data ...! encode. send multiple data, if needed. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		# encode it, base64 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		set data [::base64::encode $fromdata] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		set data [::base64::encode -wrapchar "" $fromdata] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		putlog "base64: $data" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		::putils::filelog "scripts/cims/cims.log" "put_bot to $target_botnetnick: full base64 $data" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		# make a hash of $data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		set md5 [::md5::md5 -hex $data] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		putlog "md5: $md5" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -111,14 +112,15 @@ proc ::putils::put_bot {target_botnetnick fromdata} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #OTA= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		# cut data into pieces and send! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		for {set x 0} {$x < $count_parts} {incr x} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			puts "x is $x" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			putlog "part number is $x" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			# get the part 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			set part [string range $data 0 $maxmsglen] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			putlog "part is $part" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			# kill the part out of the original string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			set data [string replace $data 0 $maxmsglen ""] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			::putils::filelog "scripts/cims/cims.log" "put_bot to $target_botnetnick: $part" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			putbot $target_botnetnick [concat "rec_putils " $md5 " " [expr $x + 1] " " $count_parts " " $part] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -132,6 +134,23 @@ proc ::putils::put_bot {target_botnetnick fromdata} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Proc to generate a string of (given) characters 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Range defaults to "ABCDEF...wxyz' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+proc ::putils::randomRangeString {length {chars "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  set range [expr {[string length $chars]-1}] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  set txt "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for {set i 0} {$i < $length} {incr i} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     set pos [expr {int(rand()*$range)}] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     append txt [string range $chars $pos $pos] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return $txt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 proc ::putils::rec_bot {sender_botnetnick cmd rec_data} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	# cmd is "rec_putils" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	#putlog "inside rec_bot. we want to decode rec_data: $rec_data" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -169,6 +188,8 @@ proc ::putils::rec_bot {sender_botnetnick cmd rec_data} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	set kill_timer_id [utimer 2 "::putils::timer_cleanup"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	proc ::putils::timer_cleanup {} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		variable themessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		variable kill_coordinates 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		set themessage "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		set kill_coordinates "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -197,6 +218,8 @@ proc ::putils::rec_bot {sender_botnetnick cmd rec_data} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				# insert the element into the right place of the X-count-element list 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				lset base64 [expr $current_part - 1] $base64data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				#putlog "building base64: $base64" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				# save the coordinates for later deletion. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				#1*4 - 4 3 2 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				set kill_from [expr ($iteration * 4) - 4] 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -206,11 +229,12 @@ proc ::putils::rec_bot {sender_botnetnick cmd rec_data} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if {$my_count == $count} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					regsub -all " " ${base64} "" base64 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					#putlog "base64: $base64" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					#putlog "finished base64: $base64" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					set finish 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					# now delete this 4 from the $themessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					foreach {kill_from kill_to} $kill_coordinates { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						putlog "kill_from: $kill_from kill_to: $kill_to" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						#putlog "kill_from: $kill_from kill_to: $kill_to" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						for {set y $kill_from} {$y <= $kill_to} {incr y} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							lset themessage $y "X" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							#putlog "themessage: $themessage" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -224,16 +248,14 @@ proc ::putils::rec_bot {sender_botnetnick cmd rec_data} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if {$finish == 1} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		putlog "base64: $base64" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		#::putils::filelog "scripts/cims/cims.log" "rec_bot from $sender_botnetnick base64: $base64" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		# decode base64data ...  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		set original_data [::base64::decode $base64] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		#putlog "original_data1: $original_data" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		#set original_data [split $original_data] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		putlog "original_data2: $original_data" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		#putlog "original_data: $original_data" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		set md5 [::md5::md5 -hex $base64] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if {$md5 == $message_hash} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			putlog "alright md5" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			putlog "received decoded base64 message with correct md5" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			# start the targetted procedure with the received data. if available. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			set bindlist [split [join [binds bot]]] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			foreach {type o cmd cnt procedure} $bindlist { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -334,6 +356,19 @@ proc ::putils::read_f_array {file} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return [array get myinternalarray] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+proc ::putils::filelog {file txt} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	# write all to it 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	set timestamp [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	#open handle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	set fh [open "$file" "a"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	# put to handle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	puts $fh "$timestamp $txt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	# close handle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	close $fh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return 1 
			 |