Mixed-mode. Native + C++/CLI. ILSpy is great on the managed half and useless on the native. Ghidra is the opposite.…
On this crackme the bug was a signed compare. Graph hid it. Listing showed the jle. Decompiler invented a cast that…
Old Delphi 7 target (public, licensed to the lab). No TDS. Ghidra treats it as a blob of stdcall with crazy stack f…
UPX, but they patched the magic so upx -d shrugs. The stub is still UPX. Restore the magic, decompress, move on. I …
People talk about RELRO like it changes the reverse. On a BIND_NOW + FULL RELRO lab binary the GOT is read-only aft…
Public COM server. Typelib exists. I still see people QueryInterface-guessing instead of loading the IDL. Ghidra's …
Overlay entropy looked packed. It was a ZIP of maps. file(1) on the overlay offset would have saved an hour. Please…
People call any resource blob a packer. This one is a config. Decode is 12 lines. I wish writeups would stop saying…
Installer. The interesting code is in the overlay, not the NSIS stub. Ghidra on the stub is a waste of a morning. 7…
I dump after OEP, load in Ghidra, and all my x64dbg comments are gone. Labeless/retsync is the usual answer. What i…
Delay-load DLL. The IAT slot is a helper, not the real import, until the first call. Ghidra named it as the import …
People dump FLOSS output and call it a day. On this crackme the interesting strings are built on the stack in 4-byt…
Embedded signature vs catalog. People screenshot 'Digital Signatures' in Explorer and call it verified. I use signt…
No PDB. I have a loop that touches what is obviously a struct at rcx+0x20, +0x28, +0x30. Creating a Ghidra struct a…
MBA pass on a CTF binary. I rewrote until the decompiler showed a xor. Then I stopped. Is there a Ghidra plugin in …
Mostly Thumb-2, a few ARM veneers. Ghidra mixed modes in one function and the decompiler invented bx loops. I split…
SPI dump from a router we own. No ELF, no PE. Vector table at 0, SP/PC look sane, then Thumb code. Ghidra language …
Tokio-ish lab tool. The interesting logic is in a generated poll() state machine. Function names are hash soup. I n…
Crash dump, matching binary gone. I have ntdll and the module list. Enough to name the crashing call, not enough to…
I walked COL -> type descriptor -> name. Ghidra has an analyzer. On this binary it named 60% and left the rest. Is …
Crackme decrypts import names into a heap buffer then GetProcAddress. I emulated the decryptor in 30 lines of Pytho…
CET-enabled public binary. incsspq around returns. Ghidra treated them as noise; the graph is still fine. Does anyo…
Go 1.21+ register ABI. Ghidra still treated some functions as stack ABI and invented extra args. I set the Go calli…
Public sample driver (WHQL, old). I reversed the IOCTL table statically before attaching WinDbg. DeviceIoControl co…
Someone shipped .debug_line and stripped the rest. Line numbers without types. Still gold. Ghidra imported the line…
Public loader-style crackme. Hash + PIC stub, then a normal IAT. I named the stub Resolve and the hash table. Do yo…
clang-cl, /EHsc, no PDB. Throw sites have a typeinfo pointer that Ghidra left unnamed. I walked the catchable type …
Public engine (licensed). Custom allocator, so 'follow the malloc' is a lie. I found the arena from a size class ta…
One function: dense jump table for 0-31, binary tree for the rest. Ghidra recovered the table and missed the tree. …
Crackme TLS callback checks BeingDebugged and skips the real init. Without a debugger the interesting function neve…
Forwarded export. EAT says kernel32.Foo, the string is NTDLL.RtlFoo. Ghidra named the thunk as kernel32. Do you ren…
Classic overlapping-instruction trick on a public crackme. Capstone linear sweep lies. Recursive descent with a for…
R2R image. ILSpy is fine on the IL, Ghidra sees a native precompiled body and an IL blob. I want the native body na…
Public ARM64 Linux binary built with PAC and BTI. Ghidra shows PACIASP / AUTIASP as noise around every frame. Do yo…
No RTTI, no PDB. vfptrs in .rdata, slots look like functions. I am grouping by cross-refs and naming IUnknown-shape…
I still see writeups treating the rich header as 'packer residue'. It is a compiler/linker fingerprint. Useful, not…
ntdll syscall stubs are all `mov r10, rcx; mov eax, imm; syscall`. Ghidra FID sometimes names them, sometimes leave…
Decoder writes plaintext into a heap buffer, never back into .rdata. Patching the binary does nothing useful. I emu…
Release notes said exception-handler decompiler is less cursed. I opened an old project and re-decompiled two funct…
Signatures for a static lib we compiled ourselves (lab). FLIRT in IDA Free is limited. Ghidra FID I can actually ge…
MSVC C++ binary. Ghidra marked a pile of methods as __fastcall. They are thiscall. Decompiler invented extra argume…
Not a fan war. Same public vendor tool (40MB, lots of C++) in IDA Free and Ghidra 11. IDA won on initial auto-analy…
Public CTF binary used a CFF pass (dispatcher + state var). I am not asking for a generic unflatten. Find the dispa…
I keep rewriting the same 'walk EAT, ror13 add' script with tiny twists. One family uses ror13, one djb2, one crc32…
Rustc 1.78, panic=unwind. Every fallible path fans into rust_begin_unwind and the decompiler becomes a novella. I m…
Stripped Go binary, ARM64, no symbols. pclntab is there but Ghidra's Go analyzer only named ~40% of functions. I wa…
Legal crackme I authored. UPX -d gets the inner blob. The stub walks the IAT and XOR-decodes .text with a 4-byte ke…
SEH/VEH on x64 still confuses the decompiler when the compiler emitted overlapping unwind codes. What worked: force…