Open source · Rust + WebAssembly

Decompile
InstallScript

Drop a compiled InstallShield script — setup.inx, .obs, .obl or setup.ins — and get readable .rul source back. Everything runs in your browser; your file is never uploaded.

Output

Installed programs keep a copy of their script in C:\Program Files (x86)\InstallShield Installation Information\{GUID}\setup.inx.

Choose a file to begin
// Decompiled source will appear here.

Private by design

The decompiler is compiled to WebAssembly and runs in a background worker. No server ever sees your script.

Old and new InstallShield

Encrypted setup.inx from InstallShield 6 onwards, .obs objects, .obl libraries and InstallShield 5 setup.ins.

Structured output

Recovers typedefs, globals, prototypes, local variables and if blocks, with names for exported functions and externs.

Frequently asked questions

What is an InstallScript decompiler?

InstallShield installers are driven by scripts written in InstallScript (.rul files). The installer ships them compiled — usually as an encrypted setup.inx. A decompiler reads that compiled form and reconstructs InstallScript source you can read, so you can see what an installer does before or after running it.

Where do I find setup.inx?

Programs installed with InstallShield keep a copy under C:\Program Files (x86)\InstallShield Installation Information\{product GUID}\setup.inx. For an installer you haven't run, extract setup.exe (or look next to it on the installation media) — setup.inx sits alongside data1.cab and setup.ini. Older InstallShield 5 installers use setup.ins instead.

Which files are supported?

Compiled setup scripts (setup.inx) from InstallShield 6 and later, compiled script objects (.obs), script libraries (.obl, each member is decompiled in turn) and InstallShield 5 scripts (setup.ins). Drop a script together with its debug symbols (.dbg) to get the original names of functions and variables back.

Is my file uploaded anywhere?

No. The decompiler is written in Rust and compiled to WebAssembly; it runs inside your browser in a background worker. Your file never leaves your computer.

Why does the output look different from the original source?

Compilation throws away comments, formatting and the names of local variables and non-exported functions, so those come back as generated names like LclVarNum1 or Func_2047. Loops come back as gotos. Scripts compiled with debug information keep the names: they are restored automatically when embedded in setup.inx, or when you add the .dbg file the script was built with. Decompilation is not perfect — if a file produces wrong output, please open an issue.

Can I use it from the command line?

Yes. The same decompiler is available as an open-source command-line tool — see the GitHub repository.