Wide landscape photograph of rolling green hills under a soft overcast sky, with a narrow winding road leading toward distant mountains. Muted greens, pale blues, and earthy browns dominate the scene, conveying calm and open space.

Life in New Zealand, Unfiltered

A personal blog by Mardy — leaving Japan, chasing love, and building a life across the ocean.

Manually decoding obfuscated URL parameters at your desk

Ever clicked a "Continue" or "Proceed" button and landed somewhere unexpected? Internet users in Brisbane, Adelaide, and quiet coastal towns run into these little one-page mazes all the time — a single line of text, no headlines, no images, and an address bar stuffed with random characters. A bare-bones landing page like this one follows the same pattern, with one obfuscated link tucked behind a click prompt. Curious minds often want to know what really hides behind those characters, and with nothing more than a browser and some patience, anyone can crack them open by hand.

Base64 and hexadecimal are the two encodings you will bump into most often inside query strings. They are not encryption; they are simply alternative alphabets used to push binary data through URLs that cannot carry raw bytes. Recognising them is the first practical step. Once you can spot them, peeling the contents open becomes a quick exercise rather than a mystery. This walkthrough keeps things offline where possible and uses tools that ship with every Mac or Windows laptop sold locally.

The phrase "Click here to proceed" sits on thousands of landing pages that exist for one reason only: to disguise a destination. Some belong to affiliate networks, others to old marketing campaigns left running by a Surfers Paradise hotel group that never pulled the banner down, and a handful are simply relics nobody cleaned up. Before you trust one with a click, decoding the parameter manually tells you exactly where the link wants to send you.

Spotting Base64 and Hex strings in the address bar

Hex strings are usually the easiest to identify because they stick to the characters 0 through 9 and A through F. A typical hex-encoded value in a URL looks like 6c696e6b3d68747470733a2f2f and ends with an even number of characters. If you cut each pair and turn it into a printable ASCII code, you will often see plain English words appear in front of you. Anyone who has tinkered with packet captures on the NBN at home has probably seen hex dumps before — the same idea, only compressed.

Base64 strings have their own fingerprint. They are case-sensitive, use the alphabet A-Za-z0-9+/=, and frequently end with one or two equals signs used for padding. Inside a query string you might see something like aHR0cHM6Ly9leGFtcGxlLmNvbS9wYXJlbnQ=. A glance at the trailing = signs is usually all the hint you need. Base64 also runs longer than the original text, often around thirty-three percent longer, so a chunky parameter is almost always Base64 rather than hex.

If neither pattern fits, you are probably looking at URL-encoded text — the percent-encoding style where spaces become %20 and slashes become %2F. Mixed encodings are also common, especially on legacy sites run by local Australian businesses that bolted tracking scripts onto an existing CMS without thinking it through. Reading the encoding style correctly sets the path for every later step, including which tool you reach for first.

Decoding with a built-in browser console

No external software required. Press F12, click the Console tab, and you have a working JavaScript engine in front of you. To decode a Base64 string, type atob('yourStringHere') and hit enter. The browser returns the raw ASCII without sending anything across the network, which matters when you are poking around something hosted overseas from your flat in Newtown or Fitzroy.

For hex, the process is a touch longer. You can paste a small snippet straight into the same console:

let hex = '6c696e6b3d68747470733a2f2f';
let text = hex.match(/.{1,2}/g).map(b => String.fromCharCode(parseInt(b, 16))).join('');

This walks the string two characters at a time, treats each pair as a hex byte, and rebuilds the message. After running it, words like link=https:// appear because that is exactly what the bytes spell. Anyone who has built a small landing page in Geelong for a side hustle will recognise the format straight away.

A small habit worth keeping: copy the parameter only, never the whole URL, into the console. Some marketing platforms embed session tokens that flag your account if they are touched outside the proper domain. Re-encoding your result with btoa() or a manual hex pass also helps confirm the round trip is lossless, which is a cheap way of catching typos. Tradies running a repair business on the side have used this very trick to reverse-engineer competitor redirect chains without paying for a SaaS subscription. A deeper look at what one parameter reveals shows how much story fits inside a single parameter.

Verifying with Python and comparing the encodings

When the parameter grows past a couple of hundred characters, manual decoding turns into a slog. A short Python script handles it cleanly. On macOS, open Terminal; on Windows, PowerShell does the same job. Drop in the following lines:

import base64, binascii
print(base64.b64decode('aHR0cHM6Ly9leGFtcGxlLmNvbS9wYXJlbnQ='))
print(binascii.unhexlify('6c696e6b3d68747470733a2f2f').decode())

Both lines return the human-readable destination inside double quotes. Python handles the equals-sign padding, raises an exception if the alphabet looks wrong, and offers a fast route to checking dozens of parameters pulled from a single spreadsheet.

Online decoders also work, though privacy-aware users prefer to stay local. If you do use a web tool, paste only the parameter and never include cookies, referrers, or session IDs. For ongoing research, archiving tools help you re-run the same query days later and catch silent changes — a habit explored in archiving redirect pages. The point of going manual is control: nothing phones home, nothing logs your IP, and nothing taints the result with browser extensions running in the background.

A common gotcha with Base64 is URL-safe encoding, which swaps + and / for - and _. Most browsers and Python expect the standard alphabet by default. If your decode returns gibberish, try replacing the two characters before retrying. The fix is small but the time savings are real when you are working through a list of forty or fifty suspicious links collected from a Melbourne-based forum thread. Before reaching for any of these encodings, it pays to compare them side by side so you know what to expect.

Encoding Character set Length vs original Manual decoding effort
Base64 (standard) A–Z, a–z, 0–9, +, /, = ~133% of original One atob() call or short Python line
Base64 (URL-safe) A–Z, a–z, 0–9, -, _, = ~133% of original Swap -_ for +/ then decode
Hexadecimal 0–9, A–F (even length) 200% of original Pair-split, parse each byte
Percent-encoded printable ASCII plus %HH Same as original Replace each %HH with the byte

Reading the decoded payload honestly

Once the string opens up, the contents usually fall into one of three buckets. The first is a plain URL — https://example.com/parent — meaning the obfuscated parameter is nothing more than a tidy way of hiding a destination from casual readers. The second is a JSON blob carrying metadata: campaign IDs, source codes, product SKUs, sometimes timestamps in Unix epoch format. The third is a redirect ID pointing at a server-side resolver that fills in the blanks after the click.

Reading the payload with fresh eyes reveals whether the link is benign or suspicious. A redirect ID attached to an unfamiliar domain is a strong hint to step away. A clean URL wrapped in Base64 is usually just a marketer being over-clever, the sort of pattern used by a Carlton café promoting a slow-trade lunch deal. There is more nuance behind a single parameter than most readers expect, and this cookie-tracking behaviour often goes unnoticed even on a textless page.

If the decoded value is itself a tracking token, you have basically found the smoking gun. The parameter proves the page is collecting telemetry even though the visible body is empty. Marketers in Adelaide, Perth, and Hobart rely on this exact technique to match anonymous clicks back to known customers. Seeing it from the outside, however, raises fair questions about transparency and user consent.

Staying safe while you tinker

Sandbox the work. Use a separate browser profile with no logged-in sessions, no saved cards, and no extensions. A clean virtual machine is even better. This protects your everyday cookie set from accidentally picking up whatever the redirect chain serves up.

Never click the original link during testing. You already have the decoded target, so type it into the address bar manually if you absolutely must visit it. Better still, run it through a service that captures the destination safely and serves you a screenshot, the way a digital forensics analyst in a Sydney SOC would. Keep notes of every parameter, the decoding method, and the revealed destination; the paper trail pays off the next time you encounter something similar.

Finally, share what you find. A short post on a community forum, a comment on an industry subreddit, or a brief write-up for a hobby blog all help neighbours avoid the same trap. The patience needed to crack open a single string by hand is the same patience that builds a healthy, sceptical web culture.

Try it tonight. Open one of those bare-bones pages in a fresh tab, pull up the developer console, paste the parameter, and decode it yourself. Once the process clicks, every mysterious link you meet from now on will feel less like a closed door and more like a riddle you already know the trick to.