Re:Zip Files All the Way Down (2010)
by Animats on Thursday May 11, 2017 @04:03PM
(#14319032)
That approach has been used for some exploits. You can create an LZ encoding which inefficiently encodes using a small set of characters, such as ASCII letters only. This will get through some mail filters that are trying to stop binary files by looking at byte value statistics.
Re:Zip Files All the Way Down (2010)
by bkase on Friday May 12, 2017 @04:18AM
(#14322245)
Another interesting problem slightly more interesting than a quine is writing an auto-cannibal machine (this was a homework assignment in my semester of 15-251 at CMU):
Write a function `ACM : (String -> a) -> a` aka a function that takes a string consumer as input (such as flip_upper_and_lower_cases: String -> String, or word-count String -> Int) and outputs the result of applying this transform to it's own source code.
For example if the contents of the ACM file were: `ACM(f) = print f("foo")` (note that this is clearly not a correct answer in any language)
`ACM(flip_upper_and_lower_cases)` invoked from another file should yield: 'acm(F) = PRINT F("FOO")'
(please don't post a solution publicly just in case they're still using this as homework)
Re:Zip Files All the Way Down (2010)
by derefr on Thursday May 11, 2017 @09:14PM
(#14320768)
Makes sense; the way runtimes use archives as pseudo-loop-mounted-filesystems only requires one level of dereference. A zip file inside that zip file would just be left alone.
A bit different from a "smart" archive tool, or a virus-scanner, which tend to want to recursively unpack things until they run out of archives.
Re:Zip Files All the Way Down (2010)
by mst on Thursday May 11, 2017 @10:51PM
(#14321077)
Though back when I worked ISP operations our AV setup was quite nicely screwed over by a simple zip-that-unpacks-a-giant-file - since when it reached 2Gb the AV process would crash without cleaning up and eventually we ran out of unpacking space and couldn't process anything else either (but until then kept processing at about 75% normal speed because the bomb went back into queue for a bit after that).
Duct taped it by doing roughly 'rm /tmp/av_system//' in cron once a minute to keep things up while we tracked the offending email down and malleted it out of existence.
AV vendor intentionally not mentioned since >15 years later I'm sure their code is mostly different and mostly not maintained by the same people.
Write a function `ACM : (String -> a) -> a` aka a function that takes a string consumer as input (such as flip_upper_and_lower_cases: String -> String, or word-count String -> Int) and outputs the result of applying this transform to it's own source code.
For example if the contents of the ACM file were: `ACM(f) = print f("foo")` (note that this is clearly not a correct answer in any language)
`ACM(flip_upper_and_lower_cases)` invoked from another file should yield: 'acm(F) = PRINT F("FOO")'
(please don't post a solution publicly just in case they're still using this as homework)
A bit different from a "smart" archive tool, or a virus-scanner, which tend to want to recursively unpack things until they run out of archives.
Duct taped it by doing roughly 'rm /tmp/av_system//' in cron once a minute to keep things up while we tracked the offending email down and malleted it out of existence.
AV vendor intentionally not mentioned since >15 years later I'm sure their code is mostly different and mostly not maintained by the same people.