C Brain Teaser


 
Thread Tools Search this Thread
Top Forums Programming C Brain Teaser
# 29  
Old 05-11-2007
Well then blowtorch could open the executable for writing and truncate it to zero bytes. That would not be "storing data".
# 30  
Old 05-11-2007
Quote:
Originally Posted by Perderabo
Well then blowtorch could open the executable for writing and truncate it to zero bytes. That would not be "storing data".
Yes, truncating sounds as valid as the unlink/rm file solution. But a lot depends on how you parse the challenge. You could parse the challenge to mean that any file access is forbidden. But if that is the case, I don't think it is solvable.
# 31  
Old 05-11-2007
Quote:
Originally Posted by kahuna
Yes, truncating sounds as valid as the unlink/rm file solution. But a lot depends on how you parse the challenge. You could parse the challenge to mean that any file access is forbidden. But if that is the case, I don't think it is solvable.
If your going to play word games like that, then you could also parse it it such that:
main() { printf("hello, world\n"); }
is a solution. The program only gives the output once and then it never does anything else. And as requested you must compile the program first. I see no verbage about preventing a rerun of the program. Smilie
# 32  
Old 05-11-2007
Quote:
Originally Posted by Perderabo
Well then blowtorch could open the executable for writing and truncate it to zero bytes. That would not be "storing data".
Oh yeah, I tried this. It dies with a bus error and a dumped core. This shouldn't be happening. If Solaris is going to open a running executable for writing, then it should be able to truncate it as well. If it has to be consistent, it should either allow me to carry out any write related operation, or it should prevent me from performing any write related operation.

-Edit
I just tested this on FreeBSD (I use m-net.arbornet.org for this), and the unlink shown by Vino works, but my attempt to open the file for writing doesn't.
# 33  
Old 05-12-2007
There are some other approaches to this. A smart perl script could call time() to get the current time. Then it would output a c program that would refuse to run after the next two seconds pass. That should be enough time to compile and run it once. After the output, the c prgram would sleep for 2 seconds to ensure that a second run is impossible. The perl script could also obtain the pid of the current login shell. The C program would refuse to run if the login shell has a different pid. The C program would output the string, sleep a few seconds, then kill the login shell. For added security these approaches could be combined.
# 34  
Old 05-12-2007
Quote:
Originally Posted by Perderabo
There are some other approaches to this. ...
A very creative approach. Excellent! And without touching any files!
# 35  
Old 08-03-2008
There's a more complex way of doing it.

We could open (argv[0], O_RDONLY), then unlink(argv[0]), and then re-open open(argv[0], O_RDWR).

Like that, you could read the content of your program before it was unlinked ('cause the kernel still holds the reference upon unlink() if the file is open by any process) and write a new content after it was unlinked.

Now, from here you could go to very funny stuff like changing the ELF format on-the-fly (something like changing the .comment section) and then have something on your file that says "if the .comment section has a certain sha1 hash that matches whatever, the program should run, otherwise it won't run". Be aware that someone could strip the comment section very easily lol.

Another way would also be very funny like creating an assembly program that just makes your program exit, then, extracting the hex opcodes (machine-language) of that program using something like objdump and injecting those opcodes on your other program's main function. Of course you would have to know the right offset to mmap() to, etc. With this, you could actually alter the way that your program feeds back after the first execution, because you could also inject write()'s, etc. (a lot more work would be needed)
Login or Register to Ask a Question

Previous Thread | Next Thread

6 More Discussions You Might Find Interesting

1. What is on Your Mind?

Cyber Dystopia Teaser (720 HD)

Working on a new cybersecurity, dystopian world series and made a short 2 min teaser today. Cyber Dystopia (720 HD) https://www.youtube.com/watch?v=g9Ca07J_YC8 If anyone has any ideas for the story, please write out some story lines in the comments and join the production team! (1 Reply)
Discussion started by: Neo
1 Replies

2. Shell Programming and Scripting

sed regexp teaser

G'day, Here's a teaser for a sed guru, which I surely am not one, as even my basic sed skills are rusted from years of not practising ... lol Ok ... we have a string of digits such as: 632413741610252847552619172459483022433027602515212950543016701812771409213148672112 we want it split... (9 Replies)
Discussion started by: naderra
9 Replies

3. What is on Your Mind?

The Human Brain project

A global group of scientists are spending the next ten years and a billion dollars to try and develop a computer simulation of the brain: https://www.humanbrainproject.eu/ I always found it fascinating that the brain can understand itself. This almost sounds like in a few years the computer... (0 Replies)
Discussion started by: figaro
0 Replies

4. Programming

Brain Teaser Extended

Hi Gurus, To the Brain Teaser, if I add another condition, say the executable should not be altered, how the program should be altered? (no perl please, purely C). I forgot to mention this condition my staff had mentioned. ( forgot then and got now :D ) The program executed the first time... (4 Replies)
Discussion started by: vrk1219
4 Replies

5. Shell Programming and Scripting

This might be a programming teaser!

Hi gurus, I have done my best to be as precisely as possible with this. Besides giving the format of file a and file b and the result file I have also given the algorithm as I have figured out. I will try to do this and I hope that some of you could help me to solve this or better yet... (1 Reply)
Discussion started by: ljankok
1 Replies

6. Shell Programming and Scripting

Brain Bench Certification

Hi, Can anybody provide me Pointers to Practice tests or any Material to prepare for Brainbench certification in Unix Shell Scripting? Also how good is this Certification for UNIX programmers. Is it worth it? I'm planning to take this certification in 2 weeks. Kindly let me know all the pros... (0 Replies)
Discussion started by: pavan_emani
0 Replies
Login or Register to Ask a Question