We use essential cookies to run this site. Analytics & marketing cookies load only with your consent — see our Cookie Policy and Privacy Policy.

Cybersecurity blog

Thick Client Penetration Testing: Methodology, Tools & Common Findings

PCI SSC Qualified Security Assessor — CYBERSIGMA CONSULTING SERVICES LLP

QSA Authorised
CEMEA · Asia Pacific · USA

Share

Thick Client Penetration Testing: Methodology, Tools & Common Findings

Thick client applications are the most under-tested software in most enterprises, and the reason is simple: the people doing security testing learned on web apps, and a desktop application does not behave like a browser tab. The traffic is not always HTTP. The trust boundary is on the user's own machine. Secrets end up in binaries and config files. A tester who brings only web skills to a thick client will find the login screen and little else — while the real risks sit in the parts a browser-trained eye never looks at.

Thick clients are everywhere that matters: trading terminals, core-banking front-ends, ERP and healthcare systems, SCADA HMIs, dealer and branch applications. This guide covers what makes thick-client testing different, the attack surface a real test has to cover, and how the methodology diverges from the web testing most teams default to.

What a thick client is — and why it breaks web assumptions

A thick client (or fat client) does meaningful processing on the user's machine rather than in the browser — a compiled desktop application (.NET, Java, C/C++, Electron) that talks to back-end servers and databases. That architecture breaks three assumptions web testing relies on. First, the client is on hostile ground: it runs on a machine the attacker may fully control, so any trust placed in the client is misplaced. Second, the transport is not guaranteed to be HTTP — it may be a proprietary TCP protocol, a database connection, or RPC, which a web proxy will not see. Third, the binary itself is an asset the attacker holds: it can be decompiled, patched, and run under a debugger. None of those are true for a server-rendered web app, which is why the test has to be built differently.

The attack surface a real test has to cover

  • The binary: decompilation and reverse engineering to recover logic, find hardcoded secrets (API keys, connection strings, encryption keys), and locate client-side checks that can be patched out.
  • Local data storage: config files, registry, local databases (SQLite), logs and temp files — where sensitive data and credentials are routinely left in the clear.
  • Memory: runtime inspection for secrets, session tokens and sensitive data held in process memory, and the integrity of in-memory security checks.
  • Network traffic: intercepting not just HTTP but proprietary and non-HTTP protocols (raw TCP, database connections), where encryption is often absent or improperly validated.
  • The thick-client trust boundary: client-side validation, authorisation and business logic that the server fails to re-enforce — the single richest source of serious findings, because the client cannot be trusted and frequently is.
  • DLL and dependency issues: DLL hijacking, insecure loading, and vulnerable third-party components bundled with the app.
  • Back-end interaction: the same injection, access-control and logic flaws as any client-server system, reached through the thick client's own channels.

The recurring theme is that the server trusts the client. A thick client that enforces 'you may only transfer up to your limit' in the GUI, but whose server accepts whatever amount the client sends, is one patched binary away from a breach. Finding that requires testing the protocol, not the screen.

How the methodology differs

The phases look familiar, but the work inside them is specific to thick clients:

  • Information gathering and architecture mapping: identify the language and framework, how the client talks to the back end, what it stores locally, and whether the protocol is HTTP or proprietary. This determines every tool choice that follows.
  • Static analysis: decompile the binary (dnSpy/ILSpy for .NET, JD-GUI/Procyon for Java, Ghidra/IDA for native), hunt hardcoded secrets and logic, and find client-side controls that are candidates for bypass.
  • Local-side testing: inspect config, registry, local databases and memory for exposed secrets and weak storage; test file and DLL loading.
  • Traffic interception: for HTTP, a proxy; for non-HTTP, tools like the Burp 'Invisible'/non-HTTP handling, mitmproxy, Echo Mirage or a protocol-aware setup — because a web proxy alone will miss the proprietary channels entirely.
  • Logic and authorisation testing: manipulate what the client sends (not what the GUI allows) to prove whether the server re-enforces limits, roles and validation.
  • Reporting and retest: findings with reproduction, impact and fixes, then re-verification of closure — the same bar as any credible test.

Why it matters more in BFSI and critical systems

Thick clients cluster precisely where the data is most sensitive — trading and dealer terminals, core-banking front-ends, branch applications, hospital and SCADA systems. For these, the regulatory expectations (RBI, SEBI, CERT-In empanelled testing, IEC 62443 for OT HMIs) assume the client has been tested properly, not scanned as if it were a website. Treating a trading terminal like a web form is how a serious authorisation flaw ships to production with a clean report attached.

Frequently asked questions

FAQs

How is thick-client testing different from web application testing?

The client runs on a machine the attacker may control, the transport is often not HTTP, and the binary itself can be decompiled and patched. So the work includes reverse engineering, local-storage and memory analysis, and interception of proprietary protocols — none of which web-only testing covers. A web proxy pointed at a thick client will miss most of the real attack surface.

What is the most common serious finding?

Server-side trust of the client: business rules, authorisation or validation enforced in the GUI but not re-checked by the server. Because the client can be patched or its traffic manipulated, any control that lives only on the client is effectively absent. Proving it requires testing what the client sends, not what the screen permits.

Can automated tools do thick-client testing?

Only partially. Tools assist with decompilation, memory inspection and traffic capture, but the core work — understanding a proprietary protocol, reasoning about the trust boundary, and finding logic flaws — is manual. This is one of the least automatable areas of security testing.

Which applications most need it?

Anything processing sensitive data on the desktop: trading and dealer terminals, core-banking and branch front-ends, ERP, healthcare and SCADA/HMI applications. These are also where regulators (RBI, SEBI, CERT-In, IEC 62443) expect proper testing, not a web-style scan.

The bottom line

Thick-client security lives in the places web testing never looks — the binary, local storage, memory, proprietary protocols, and above all the server's misplaced trust in the client. If your testing provider treats a desktop application like a website, the report will be clean and the risk will still be there. CyberSigma runs CERT-In empanelled thick-client penetration testing with the reverse-engineering, protocol and trust-boundary work these applications actually require. Book a free scope review for your desktop or terminal application.

Naveen Kumar

Naveen Kumar

CyberSigma is a CERT-In empanelled cybersecurity firm helping Indian businesses with VAPT, ISO 27001, PCI DSS, SOC 2 and DPDP compliance — delivered by senior auditors, not juniors.

Free 1-minute check
Free Security Assessment
Get a complimentary, no-obligation assessment from CERT-In empanelled senior auditors.
Try it free →
Share

Leave A Comment

Delivering from Noida · Mumbai · Bengaluru · Pune · Dubai · Cairo · Melbourne — see all locations & addresses →