6 ms·
Yes, I’ve tried it. For example, this was my winning entry from a year ago [0]. The LLM only performs trivial obfuscation, not advanced transformations. For ex
by s-macke 3mo ago
Yes, I’ve tried it. For example, this was my winning entry from a year ago [0].
The LLM only performs trivial obfuscation, not advanced transformations.
For example:
if (x == 1 || x == 2) { ...
can be transformed into:
if (!(2+x*x-3*x)) { ...
An LLM will do this if you explicitly ask it to, but not on its own.
[0] https://github.com/ioccc-src/winner/blob/master/2024/macke/prog.c https://github.com/ioccc-src/winner/blob/master/2024/macke/p...
- nsoonhui 3mo agoBut then we all know that LLM has come a long way since one year ago. Are you sure they still can't do it?
- lifthrasiir 3mo agoJust two months ago I tried to write a short K code with Claude Opus 4.6, only to find that while it had sufficient knowledge about K vocabularies it didn't try to make good use of them. K is, while slightly obscure and obfuscated, a real programming language and certainly better known than obfuscated programming. I don't have high hope for IOCCC-grade obfuscation.
- tromp 3mo agoOne of the main instruments of obfuscation (and the way to get more out of the size constraints) is making the code as short as possible, so in that example you'd prefer if (!(x/2-1)) { ... EDIT: Oops, confused the original with x==2 || x==3. Instead, we can use !(x-1>>1), which precedence rules parse as !((x-1)>>1).
- alienbaby 3mo agoIt's pretty easy to see what that does though, even if it is shorter. Wouldn't the other approach be more obfuscated?
- extrano84 3mo agoI checked this in an online C-compiler and it is not equivalent to x==1 | x==2. this statement is equivalent to x==2 | x==3. For example, x=3, 3/2 = 1 then 1-1 = 0 so that !(0) is 1 or true. Also for x=1, 1/2 = 0 then 0-1 = -1 and !(-1) = 0 or false. I agree with your point in general though about size constraints.
- Mankaninen 3mo agoextrano84 already found some errors but also 0 will fail and if x is int (instead of unsigned int) all negative numbers will also fail (but so will the original s-macke obfuscation as well).
- fooker 3mo agoNot sure what you mean by advanced transformations but I got these versions from ChatGPT without explicit instructions. if(x-1<2&&x)... if((1<<x)&6)... if(x<3&x)... if(3%x&&x<3)... if(!((x-1)*(x-2))) if(!(x^1|x^2))... if(!(x*x-3*x+2))
- listeria 3mo ago(1) fails for negative numbers (2) fails for (x % 32 in [1, 2]) due to UB (3) fails for x == 2 (4) crashes for x == 0 (5) is the same polynomial, only factorized (6) always returns 0 (7) is the same polynomail reordered But this works for any value of x: x<2==2-x or for something shorter: x<3&x>0 but that's not bery obfuscated