[HN Gopher] Writing a Polyglot Script
       ___________________________________________________________________
        
       Writing a Polyglot Script
        
       Author : BerislavLopac
       Score  : 60 points
       Date   : 2020-01-25 17:56 UTC (5 hours ago)
        
 (HTM) web link (nkanaev.github.io)
 (TXT) w3m dump (nkanaev.github.io)
        
       | vbrandl wrote:
       | In 2011 a PoC virus was described, that was a polyglot JS, VBS,
       | Batch and MatLab:
       | https://github.com/SPTHvx/SPTH/blob/master/articles/files/xs...
        
       | [deleted]
        
       | mathnmusic wrote:
       | What 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 wrote:
         | You can do this with GraalVM. Here's an example:
         | https://github.com/graalvm/graalvm-demos/tree/master/polyglo...
         | 
         | And here's a polyglot notebook example:
         | https://fniephaus.com/2019/px19-polyglot-notebooks.pdf
         | 
         | And finally, here's our GraalVM-powered Jupyter kernel:
         | https://github.com/hpi-swa/ipolyglot
        
       | clemParis wrote:
       | On 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/ [1]
       | https://www.alchemistowl.org/pocorgtfo/pocorgtfo19.pdf [2]
       | https://github.com/angea/pocorgtfo [3]
       | https://www.youtube.com/watch?v=W9WnnMJ0RKg
        
       | blowski wrote:
       | /*<?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/b1143f42883b3b0ee1237bc9bd0....
        
       | rcthompson wrote:
       | Not 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/2eb3705fb6ddab08ee...
       | 
       | And here's the Python version:
       | https://gist.github.com/DarwinAwardWinner/8a631d897d45f00552...
        
         | ErotemeObelus wrote:
         | Very clever. But this kind of behavior made habitual will get
         | you the reputation of a dirty hacker.
        
       | SeekingMeaning wrote:
       | Slightly 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.
        
       | roywiggins wrote:
       | Bonus points if someone makes it into a polyglot quine somehow
        
         | jrimbault wrote:
         | I always remember that https://github.com/mame/quine-relay
         | 
         | https://raw.githubusercontent.com/mame/quine-relay/master/QR...
        
         | SeekingMeaning wrote:
         | Behold 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 and
         | https://stackoverflow.com/a/2475931
        
       ___________________________________________________________________
       (page generated 2020-01-25 23:00 UTC)