[img]http://i.imgur.com/M50RhpZ.png[/img]
Welcome to the Facepunch Obfuscation Challenge!
Here, the goal is to write a program that will complete a simple task, in a way that no one can understand. Sound simple? Give it a try!
[b]Rules[/b]
• You must use an actual programming language. That means:
[img]http://i.imgur.com/1yYlmXB.png[/img]• It must have real, public documentation
[img]http://i.imgur.com/1yYlmXB.png[/img]• It must be publicly available for download.
[img]http://i.imgur.com/1yYlmXB.png[/img]• It must be used for things other than joke projects (no, sorry, no brainfuck, malbolge, or piet).
• It must not do mean things that aren't directly related to the goal (i.e. malware).
• It must work on one or more of the big three OSes.
• You must release the [b]code[/b], not a compiled executable (this is about obfuscation, not binary reverse engineering).
[b]Details[/b]
There are two rounds:
• Coding round - now until the end of Sunday, May 18th (GMT)
• Analysis round - end of coding round until the end of Sunday, May 25th (GMT)
In the coding round, you must write your program to solve the problem. When you're done, PM them to me. I'll post everyone's code at the start of the analysis round. To get credit for analyzing someone's code, you must completely document how it works and de-obfuscate it (with comments, please), and then PM it to me.
[b]Scoring[/b]
The scoring is a bit complex, but it makes sense in the end. First, there are three scoring categories:
• Coding
• Analysis
• Overall
There will be three winners, but the overall winner is the real winner of the competition.
[i]Coding[/i]
You automatically get 100 points in the coding category for writing your program and submitting it on time.
Any time a contestant successfully analyzes your code, you lose 10 points.
The winner is the person with the most points at the end of the competition.
[i]Analysis[/i]
You gain 10 points for every person's code you analyze and submit by the end of the analysis round.
The winner is the person with the most points at the end of the competition.
[i]Overall[/i]
You gain 20 points for writing your code, and 10 points for every successful analysis.
However, you lose 5 points every time someone successfully analyzes your code.
You also gain 10 points if you submit complete documentation with your code that shows how it works (I'll post it all at the end of the competition for ~learning~).
That way, to get the most points, you must submit code with documentation, analyze everyone else's, and have your own code remain unanalyzed.
The winner is the person with the most points at the end of the competition. I'll buy you or someone of your choice a title of whatever you want.
[b]Participants[/b]
I will be participating, but I won't be scoring myself (that is, I can't win). I'll submit an entry, and you can gain points for analyzing it, but I won't be able to analyze anyone else's, or reduce your score by doing so.
- supersnail11
[b]The Challenge[/b]
You will be provided a random large integer, via stdin.
If the number is prime, print "prime". Otherwise, print "not prime"
Example:
[code]$ echo 11 | prime
prime
$ echo 122 | prime
not prime[/code]
Go forth and code!
Hopefully I'll get some time for this later on this week, looks like fun.
Oh, this isn't in the rules, but I think it's a no brainer: your code has to work to actually get credit :v:
I assume we can't encrypt the program to a string and store that(and its key) in another file that compiles and runs it.
Seems a bit unfair.
[QUOTE=supersnail11;44785808]• It must work on any platform (compiler quirks are fair game, though, as long as that quirk works on every platform).
[/QUOTE]
Can this be relaxed? I don't want to have to bake in extra OS stuff.
[QUOTE=benjojo;44786079]Can this be relaxed? I don't want to have to bake in extra OS stuff.[/QUOTE]
Alright, how about "it must work on one or more of the big three OSes"
I don't want to see any of you try to submit something written for PalmOS.
One could always write a VM for palmOS and write their code in palmos
[QUOTE=reevezy67;44786026]I assume we can't encrypt the program to a string and store that(and its key) in another file that compiles and runs it.
Seems a bit unfair.[/QUOTE]
Don't do that, unless you include an interpreter (i.e. write an x86 interpreter into your application).
[editline]11th May 2014[/editline]
[QUOTE=Map in a box;44786277]One could always write a VM for palmOS and write their code in palmos[/QUOTE]
Like this.
Is it unfair to use outside libraries that have their source code publicly avalible?
Like assembling java classes with java ASM and loading it into the VM? (Too bad that most likely
does not fall into the 'real' code category)
[QUOTE=supersnail11;44786247]Alright, how about "it must work on any of the big three OSes"
[/QUOTE]
Why not 1 major OS? Why does it have to cross compile?
Why don't we actually implement the program as an operating system itself? Solves the OS issues, doesn't it? :v:
[QUOTE=MDave;44786325]Is it unfair to use outside libraries that have their source code publicly avalible?
Like assembling java classes with java ASM and loading it into the VM? (Too bad that most likely
does not fall into the 'real' code category)[/QUOTE]
You can use whatever libraries you want, as long as the code is open source (though keep in mind that might make analyzing your code easier).
Basically, here's what I define as breaking the compiled code rule: if the code is precompiled and you're using a built-in interpreter for it (ex. you compile the java classes beforehand and load them via a built in method), then you can't do it. If the code is compiled at runtime (ex. eval), or you write the interpreter yourself (ex. PalmOS VM), you're fine.
[editline]11th May 2014[/editline]
[QUOTE=benjojo;44786336]Why not 1 major OS? Why does it have to cross compile?[/QUOTE]
That's what I meant.
[editline]11th May 2014[/editline]
Changed it to "should work on one or more of the big three OSes"
[QUOTE=cartman300;44786340]Why don't we actually implement the program as an operating system itself? Solves the OS issues, doesn't it? :v:[/QUOTE]
Then we'll fight over what architecture.
I'm in.
I've written my one. Once OP gets unbanned I'll send it.
What is the largest integer you have to support?
[url=http://pastebin.com/6b0RB69V]I'm in, of course.[/url]
[QUOTE=Map in a box;44789889][URL="http://pastebin.com/6b0RB69V"]I'm in, of course.[/URL][/QUOTE]
You are missing an end
Blame pastebin. I made that awhile ago and it just didn't paste right.
[QUOTE=Jookia;44788182]I've written my one. Once OP gets unbanned I'll send it.[/QUOTE]
I'm back from the dead.
I love the idea of this, please make it a regular thing!
Assuming I can come up with an interesting idea, then I'm in.
I'm in for sure.
Welp, submitted something. We'll see how this goes I guess. Good luck to everyone else that's entering
I'll give $5 to whoever codes in APL.
Where do we send out submissions
[QUOTE=benjojo;44804763]Where do we send out submissions[/QUOTE]
PM to me.
Is the obfuscation about the code or the technique of finding if a number is prime?
[QUOTE=dingusnin;44809870]Is the obfuscation about the code or the technique of finding if a number is prime?[/QUOTE]
As long as no one can deobfuscate it, it doesn't matter which one you make complicated.
If only i didn't have exams and shit due this week I'd take part :/
an attempt was made
[code]#include <stdio.h>
int/**/main(
){int/**/BF=BUFSIZ
;char /**/buf
[BF]; ;;char
ns/* */[BF]
;int p = 0; /* */ fgets(
buf, /* */ sizeof
buf, stdin );for (int i
=00; i<BF;i
++){if(buf[i]>'0'-1&&buf[i]<=0
+'9'){ns[p]=buf[i];p++;}}int/*
*/num=0;char*np ="not ";
for(int c=00; ns[c]
>'\0'; c++
)num= num
*10+ns [c]-
'0';if(num>2&&num
%2>0){for(
int/**/ i=2;i* i<=num
;i ++ ){ if (1
&& num%i+ 0==0){
printf( np ); break
;; }; ;;
}; ;; ;}
else{printf(np);}printf("prime\n");return 0;}[/code]
Sorry, you need to Log In to post a reply to this thread.