execve-type memory-based function, possible?
Hi!
I've recently been toying with methods for copy-protection and other esoteric subjects, for academic and hobby purposes, and I haven't found much info on this subject.
I want to see if it's possible (from userspace) to load and execute an ELF-binary based on a memory-buffer, i.e. load, relocate, etcetera (then execute) a program that's stored in memory.
I can't find any readily available options, I've toyed a bit with shmem (to get an fd) and fexecve, but haven't gotten far. I've briefly looked at the execve-code in the kernel.
So I'm curious; does anyone have any experience or suggestions on this subject? Is it at all possible to do the operations via usermode? I've toyed with creating copy-protection-schemes and binary packers and such under Win32, where it's possible, but I have no experience on the subject under Linux (or found any documentation on anyone else doing so).
Any papers, links, source-file-references etcetera would be appreciated. :-)
Signature · 7 lines
Kindest regards / Med vennlig hilsen, Jørgen P. Tjernø <[email protected]> - To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 1 line · Jørgen P. Tjernø
[ .. a lot of stuff .. ]
It might've been a bit unclear, so here goes:
I'm thinking something like if you read the contents of the file "/bin/ls" into a buffer, and then want to execute that. Wouldn't that require that you allocate the memory, do relocation, set the correct memory page protection (to execute for code, etc), etcetera?
Signature · 7 lines
Kindest regards / Med vennlig hilsen, Jørgen P. Tjernø <[email protected]> - To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 9 lines · Jørgen P. Tjernø
Quoted 1 line · Jørgen P. Tjernø
[ .. a lot of stuff .. ]
It might've been a bit unclear, so here goes:
I'm thinking something like if you read the contents of the file "
/bin/ls" into a buffer, and then want to execute that. Wouldn't that require that you allocate the memory, do relocation, set the correct memory page protection (to execute for code, etc), etcetera?
Jørgen,
(now I got it) Looks like you'd want to implement some kind of userland exec. In this case the following archive will be useful:
http://www.graegert.com/code/ul_exec-v1.1.tar.gz. Although quite dated it illustrates basic concepts.
If you have questions about the code or the general approach, feel free to contact me privately.
\Steve
--
Steve Grägert <[email protected]>
Jabber xmpp://[email protected]
Internet http://eth0.graegert.com, http://blog.graegert.com
-
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html