How was I going to get those nostalgic screenshots I wanted?After thinking about it for a while and almost abandoning my efforts, it occurred to me that perhaps I could install a proxy on my host machine (running macOS) which could terminate the HTTPS connection with the hosts (such as https://www.
org or whatever) and pass back the results, unencrypted, to the virtual machine.
It took me quite a bit of tinkering to get it to work (basically because I wasn’t sure exactly what needed to be done, plus I’m unfamiliar with the tooling), but eventually I managed to make Charles Proxy (Charles is free to try) do what I wanted.
You could probably also get something like Squid Web Proxy to do the same job.
Given how counter-intuitive I found the process, I thought it worth sharing here.
For posterity, if nothing else.
The first thing I wanted was to actually have my VirtualBox traffic go through Charles.
I started up Charles, and went into my Windows ’95 settings.
In Control Panel, there’s an “Internet” section, where you can configure a web proxy, like so:The proxy settings inside my Windows ’95 virtual machine.
I knew that I had to set the port to 8888 because the Charles documentation says so, and I knew to use the IP address 10.
2 because that’s my virtual machine’s so-called gateway to the internet — it’s talking about my Mac.
Yours might be different, find it with the winipcfg tool (Start → Run… → winipcfg) in the “Default Gateway” field.
Finding the IP address of the host machine, where the Charles Proxy is running.
After configuring all that stuff, we could start seeing things happening in Charles!.Refreshing a Google search results page gave us the following breakdown of traffic:Woo, Charles can see what the Windows ’95 virtual machine is doing!However, now we have to tackle the issue where most sites, if you hit their http://www.
com endpoint, will come right back with a response saying something like:HTTP/1.
0 301 Moved PermanentlyLocation: https://www.
which is telling you to go to the SSL version.
That just causes the error we saw before in IE4, where it can’t make head or tail of the secure request.
What if we could request plain old http:// URLs via Charles, and have Charles turn them into https:// requests transparently?.It turns out that’s possible, and easy — “Map Remote” is a built-in feature of Charles!Here’s the rule I made to map all secure requests to insecure ones (access this window via the “Tools → Map Remote…” menu).
I’ll spare you the trial-and-error process it took me to get to this — in retrospect — elegant rule.
Setting up Map Remote with all the fields except protocol left blank will match all requests.
That’s awesome, and it appears to work!.Here’s the Wikipedia page on proxy servers:Old-school Wikipedia article on proxy servers?Great!.There’s one issue though: none of the links work.
In Google search results page, all the links point to the https versions of sites, so browsing isn’t a very pleasing experience at all.
Since we’re now proxying plain-text requests and responses, how about we simply re-write URLs before the Windows ’95 browser ever sees them?.It turns out that Charles has another handy feature, aptly named Rewrite which will do exactly what we need.
Here’s the rule I set up:First, add a “Body” rules which rewrites the text “https” to “http” inside Responses only.
You’ll see I also made a URL rule which rewrites requested URLs that end in “.
css” to invalid URLs.
This was a bit of a hack, but I figured since modern CSS was hardly supported anyway I might as well save the effort downloading it and making the websites’ layout even worse.
And there you go!.Internet Explorer thinks it’s communicating over plain-text HTTP, but actually it’s connecting to Charles Proxy on my laptop, which is then making the HTTPS encrypted connection to the outside world!.Something seems not-quite-right with Host: headers, so probably my Charles config could use some tweaking.
com web property?Heaps more vintage sites on http://www.
com!Some sites still live on today as little time capsules.
(oh and Netscape Navigator 3 also works — sometimes!)Yeah, I still wouldn’t vote for you, 22 years later.
There you have it.
A fun weekend project to make a few screenshots.
I’ll add that this setup isn’t 100% reliable: oftentimes I’ll have to massage the Host: headers myself, or turn rewriting off for certain pages that are http-only (since my setup assumes HTTPS works everywhere, which turns out not to be true).
But at the very least I hope this tickled your nostalgia itch, and perhaps even motivated you to dive in and try something similar if you’re bored one evening.
Note: this is a Man-in-the-Middle attack — don’t do this to anyone except yourself and for educational purposes, because it’s mean and/or illegal and/or you’re compromising security.
This demonstration is only provided for your amusement and to gawk at a few ancient screenshots.
Stay safe out there and don’t hack people!Footnotes¹ Supposedly because modern processors are too fast, one sometimes gets a dreaded While initializing device IOS: Windows Protection Error message on startup.
I’ve linked directly to the ZIP archive containing the modern-CPU-patch, because I found it really hard to remember where/how I found it.
However, it looks like it’s on a host that’s liable to go down, so here are some more sources:Archive.
org link to forum thread with announcement and download link(original: https://msfn.
org link to the ZIP archive at original download location (original: FIX95CPU_V3_FINAL.
ZIP)See also this helpful StackOverflow/SuperUser post about a similar problem, linking to the same resources.
² Apparently Internet Explorer 6 was at peak popularity around 2002, and only lost its majority around 2007.
Even then, it remained in use in some businesses — what a long run for an awful browser!.[my dubious source].. More details