5 ms·
Writing a Polyglot Script
- deleted 7y ago[deleted]
- SeekingMeaning 7y agoSlightly modified so that it runs either a Ruby file or a Python one: (0 and eval(IO.read("ruby.rb"))) or eval(compile(open("python.py").read(), "", "exec")) Granted, this doesn’t close the Python file, which is delayed until garbage collection or program termination.
- coolreader18 7y agoYou could also do `__import__("/abs/path/to/python.py")` (I think, I'm not completely sure on the rules for passing paths to `__import__`)
- roywiggins 7y agoBonus points if someone makes it into a polyglot quine somehow
- jrimbault 7y agoI always remember that https://github.com/mame/quine-relay https://github.com/mame/quine-relay https://raw.githubusercontent.com/mame/quine-relay/master/QR.rb https://raw.githubusercontent.com/mame/quine-relay/master/QR...
- SeekingMeaning 7y agoBehold my masterpiece p='"%s"';r="'%s'";_='p=%s;r=%s;_=%s;print(_%%((0and[r%%p,p%%r,r%%_])or(tuple([r%%p,p%%r,r%%_]))))';print(_%((0and[r%p,p%r,r%_])or(tuple([r%p,p%r,r%_])))) with inspiration from https://stackoverflow.com/q/6223285 https://stackoverflow.com/q/6223285 and https://stackoverflow.com/a/2475931 https://stackoverflow.com/a/2475931
- anonsivalley652 7y agoAlmost since doesn't quite work in Ruby: Evaluating: p='"%s"';r="'%s'";_='p=%s;r=%s;_=%s;print(_%%((0and[r%%p,p%%r,r%%_])or(tuple([r%%p,p%%r,r%%_]))))';print(_%((0and[r%p,p%r,r%_])or(tuple([r%p,p%r,r%_])))) becomes: p='"%s"';r="'%s'";_='p=%s;r=%s;_=%s;print(_%%((0and[r%%p,p%%r,r%%_])or(tuple([r%%p,p%%r,r%%_]))))'%_])))) Too many '%'s in some places
- SeekingMeaning 7y agoWait, it doesn’t? What’s your setup?
- rcthompson 7y agoNot exactly a polyglot script, but a while back I had to work on a cluster whose job management system always ran everything as shell scripts. Or rather, it had to be run as a shell script in order to set the right cluster options. I wanted to submit an R script, so what did I do? I wrote a file that was both a bash script and an R script. When run as an R script, it does what I want it to do. When run as a bash script, it runs itself as an R script (after setting the cluster options). Problem "solved". Here is is, if anyone's interested: https://gist.github.com/DarwinAwardWinner/2eb3705fb6ddab08ee47 https://gist.github.com/DarwinAwardWinner/2eb3705fb6ddab08ee... And here's the Python version: https://gist.github.com/DarwinAwardWinner/8a631d897d45f005528a https://gist.github.com/DarwinAwardWinner/8a631d897d45f00552...
- ErotemeObelus 7y agoVery clever. But this kind of behavior made habitual will get you the reputation of a dirty hacker.
- fwip 7y agoWouldn't it have been easier to submit: #!/bin/bash Rscript myscript.R
- shakna 7y agoThey may have only been able to submit the single file to the system. (In which case I would have generated the Rscript to a tmpfile, but maybe that wasn't allowed either.)
- rcthompson 7y agoNo, I totally could have written a separate R script that was then run by the bash script. I just wanted to have it all in one file, and I thought it was a fun challenge figuring out how to do it.
- niedzielski 7y agoI've been collected hacks for a couple languages and tools here: https://git.io/shebang https://git.io/shebang
- blowski 7y ago/*<?php //*/public class PhpJava { public static void main(String[] args) { System.out.printf("/*%s", //\u000A\u002F\u002A class PhpJava { static function main() { echo(//\u000A\u002A\u002F "Hello World!"); }} //\u000A\u002F\u002A PhpJava::main(); //\u000A\u002A\u002F It's both valid PHP and Java. Not mine, stolen from https://gist.github.com/forairan/b1143f42883b3b0ee1237bc9bd0b7b2c https://gist.github.com/forairan/b1143f42883b3b0ee1237bc9bd0....
- vbrandl 7y agoIn 2011 a PoC virus was described, that was a polyglot JS, VBS, Batch and MatLab: https://github.com/SPTHvx/SPTH/blob/master/articles/files/xscript.txt#L397 https://github.com/SPTHvx/SPTH/blob/master/articles/files/xs...
- mathnmusic 7y agoWhat I would like to see is a way to use multiple languages within the same script, to use the different abilities of different languages. For eg: Query a database via Ruby using ActiveRecord, then do some number crunching in Python using numPy or Pandas, and finally plot some statistical charts using R. Jupyter's multiple language kernels come close to this, but not quite.
- fniephaus 7y agoYou can do this with GraalVM. Here's an example: https://github.com/graalvm/graalvm-demos/tree/master/polyglot-javascript-java-r https://github.com/graalvm/graalvm-demos/tree/master/polyglo... And here's a polyglot notebook example: https://fniephaus.com/2019/px19-polyglot-notebooks.pdf https://fniephaus.com/2019/px19-polyglot-notebooks.pdf And finally, here's our GraalVM-powered Jupyter kernel: https://github.com/hpi-swa/ipolyglot https://github.com/hpi-swa/ipolyglot
- clemParis 7y agoOn a similar topic, PoC||GTFO [0] features files that are valid with multiple file formats. Issue 19 [1], for instance, "is valid as a PDF document, a ZIP archive, and a HTMLpage. It is also available as a Windows PE executable, a PNG image and an MP4 video" (see "technical note"). They are made by Ange Albertini [2] who has a great talk [3] on how he does this kind of things [0] https://www.alchemistowl.org/pocorgtfo/ https://www.alchemistowl.org/pocorgtfo/ [1] https://www.alchemistowl.org/pocorgtfo/pocorgtfo19.pdf https://www.alchemistowl.org/pocorgtfo/pocorgtfo19.pdf [2] https://github.com/angea/pocorgtfo https://github.com/angea/pocorgtfo [3] https://www.youtube.com/watch?v=W9WnnMJ0RKg https://www.youtube.com/watch?v=W9WnnMJ0RKg
- deleted 7y ago[deleted]