Win32 executable packing

I would like to know if it is possible to code an exe-packer for win32 PE-files. What I mean is a packer like PKLite or XPack for DOS which compress an executable and when starting the packed program it is unpacked into memory and started.
I know there are some problems, e.g. Win32 takes a lot of resources out of the exe like icons and so on. But is it possible to only compress the real code and leave the rest as it is? What else do I have to pay attention to? Is there maybe already a packer?
LVL 1
tierAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

davmarcCommented:
In the old days I used exe-packers for DOS programs too - LZEXE, PKLite, WWPack, Diet.
Under Windows 3.1 I couldn't find any porting of those useful utilities, but I had bought Symantec C++ 7.x too and it had a nice linker feature that did mostly the same thing.

I made several researches on the Internet but I couldn't find anything similar for Win32. It is probably caused by the complexity implied by writing such an advanced loader for PE files, and by the absence of a strong demand for such a feature.

The best pointers I can give you are the following:
- "Portable Executables File Manipulation", MSDN (under Windows Base Services - Executables);
- "The Portable Executable File Format from Top to Bottom" by R. Kath, MSDN technical articles
- Knowledge Base article Q100636

If you are going to write one yourself, I wish you much luck. I'm sure that if you'll succeed, many developers will be glad to evaluate your product - me included.

Davide Marcato.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
vinniewCommented:
In the old days, DM?  When you were what, 3?  You're only 15, right?

hahaha.  I started when I was 8.  It pays the bills now....


As for the question:
1. MS used packing in their original Word product.  They also had that feature in VC 1.52
2. If you just want to compress resources, like strings, etc., you can find a simple thing to do that on SimTel.net.  It's a library.  I don't recall the name...
0
davmarcCommented:
Hahaha! I expected such an answer sooner or later :-)

Yes, I am 15...I used those programs in the old good days, they were indeed good but not so old ;-)
I started programming when I was 6 on C=64, hey I'll be programming for 10 years in a month! :)

As for the question:
1 - The original Word, as well as VC 1.5x, run under Windows 3.1, while the real problem is Win32 and its associated PEs.
2 - Compressing resources is useful to prevent users from modifying them, but it generally doesn't save much space (unless you have a lot of resources and few code).

Davide Marcato.
0
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

tierAuthor Commented:
So you are sure that it is possible to write such a program but it won't be easy?
0
tierAuthor Commented:
Davmarc, could you tell me the exact URLs for the PE docs you mentioned?
I think for 100 points this would be fair...
0
davmarcCommented:
I looked for it in the MSDN Library CD coming with VC++ 5.0, but I assume you don't have it since you ask me for URLs.

Here they are (reported by hand):
 http://premium.microsoft.com/msdn/library/sdkdoc/imgehlp1_9832.htm
 http://premium.microsoft.com/msdn/library/techart/F365/F36B/D37D/SABE3.htm

http://www.microsoft.com/kb/articles/q100/6/36.htm

To access the first two you must be a registered MSDN Online user. If you are not yet, do it immediately: it is free and gives access to a lot of up-to-date techical documentation.

Davide Marcato.
0
tierAuthor Commented:
Once again:
You are sure that it is possible?

0
davmarcCommented:
To be fair I cannot answer that I am 100% sure since I've never done it nor I've seen anyone doing it, but I am reasonably sure that actually it *is* possible...say 95% sure.
Not an easy task, but possible.

I hope the docs I pointed out will help you. A great source of info about the internal structure of Windows 95 is Matt Pietrek's book "Windows 95 System Programming Secrets" (well his articles are great as well), it might help you for the most hard parts.

Davide Marcato.
0
davmarcCommented:
A new pointer that might help you, tier.
KB article Q127904 "How to Modify Executable Code in Memory".

Davide Marcato.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Development

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.