News in FFDec 25.1.x

Debugging flash in the web browser, that pretty much sums up what 25.1.x brings.

25.1.3 – 2026-03-04

Debugger – Button to Disconnect Session

To disconnect currently selected debugger session, you can press new button.

Debug ribbon task for listen action

Debugger – Sort Variables

You can sort variables in the debugger alphabetically.

Sortable list of variables

AS3 Direct Edit – Error on Inaccessible Namespace

When you access private/protected/internal namespaces from other unrelated classes, it produces error.

AS3 Ambiguous Namespaces Prefixes

Prefix like public::xxx is used and can be added to resolve ambiguous namespace references.

Dockerfile

Docker file is available in the repository to run FFDec via Docker.

SVG Export – Gradient Glow / Bevel

Filters with gradients export to SVG.

SVG rendering

Changed: Debug Listen Icon

Icon for action of debug listening has icon with phone receiver instead of ear.

Start ribbon task

Changed: SVG Export – Gaussian Blur

SVG export uses gaussian blur filter instead of convolution filter (box blur) because the convolution filter does not scale correctly in Chromium based browsers. You can disable the gaussian blur in advanced settings.

25.1.2 – 2026-02-23

Debugger – SWF in Session Title

Dropdown list with debugger sessions now contains main SWF title.

Debugger – Remove Watch

We added feature of removing watches in the debugger. Previously, only add watch was available.

Debugger – List of Watches

A separate tab for list of watched variables.

Debugger – Read / Write Watches Flag

Watched variables (debugger) have special flags so now you know whether they are for reading only or even writing.

Watches tab, Remove watch, Flags

25.1.0 – 2026-02-21

Debugging in the Web Browser

We added the new button for Debug listening. Previously, you could only debug via standalone debug flash player that FFDec started via the Debug button in the toolbar. Now you can remote debug from any debug flash player no matter whether it is in the browser or standalone. Anything what connects to correct port in FFDec will debug your SWFs.

It is required, on SWFs which are to be debugged, that they are prepared for debugging first (instrumented). This step is done automatically when you press “Debug” button, but now, since we are not using this button, but “Debug listening” instead, we need to do the preparation of the SWFs manually. This can be done via context menu item “Prepare file for debugging” on SWF tree item. You click the menu item and then select file to save the instrumented version to. A “_debug” suffix is added automatically to original filename in the dialog file name field, you can change it as needed. The preparing for AS1/2 files will also create a SWD file in the same directory.

Prepare menu item on AS1/2 files
Prepare menu item on AS3 files

Make sure all files that you wish to walk during debugging are prepared this way.

Information after clicking Debug listen

After you press “Debug listen” toolbar button, you’ll se an information about how it works (the need of preparing files) and after you confirm it, it takes a little time to FFDec debugger to startup.
You’ll see “Starting flash content debugger” in the status bar and then finally “Listening for incoming connections”. Now you can launch the desired debug flash player with the instrumented SWF file – for example a HTML page with SWF file that is loaded via debug flash player plugin.

You can use for example Palemoon as a browser and download NPAPI flash debug plugin.
See this video of how to get the right plugin: https://youtu.be/V9PLj0nU5O0

Listening status message

After you open the SWF file in the browser, a status message should change to “Debugging”.

For AS3 files it will ask you to place your breakpoints just after starting debugging, the status just says “Debugging of file.swf started , execution halted. Add breakpoints and click Continue (F5) to resume running.” So you just do what it tells you to and after placing the breakpoints, press F5 to continue.

For AS1/2 files it won’t ask you. You just need to place first breakpoints before starting (or before preparing file for debugging). Luckily, it allows you to place breakpoints even when running.

Warning: It seems that for AS1/2, you cannot place breakpoints on first frame when the SWF has only single frame. This seems to be a bug in the flash player. Adding second frame will make the break point trigger.

Warning 2: When debugging a SWF file inside browser, the browser may show you a warning about unresponsive plugin. The browser should wait for you to place breakpoints, etc., so this is normal. You should allow the browser plugin to continue and you better check the “Don’t ask me again” checkbox otherwise it will ask again.

If you do not allow it or will wait a couple seconds, then the browser will automatically terminate the plugin and its connection to FFDec.

Debugging multiple SWFs

You may ask what will happen if the HTML page contains multiple SWFs. Well, if the SWFs are properly instrumented, then FFDec will receive connection from all of them. You can then switch so called “Sessions” in the dropdown menu under the tag tree over the call stack list. Unfortunately it seems that you cannot step when there are multiple concurrent SWFs paused (at least in Palemoon NPAPI plugin).

Video of debugging in the browser

I have created a video of me debugging sample SWF files, you can view it on Youtube here:

You can download the sample files I use on the following links:

as2_scoring.swf (+ html )
as3_scoring.swf (+ html )

AS3: Nonvalid Property QNames as Brackets

The second feature introduced in this release is handling AS3 obfuscated property QNames as brackets. So instead of myvar.§my property§ = 5 you will have myvar["my property"] = 5. It is optional and can be turned on in “Advanced settings / scripts / Show AS3 obfuscated QName properties in brackets”. The main reason why it is optional is that this would make obfuscated SWFs harder to walk, Ctrl + click won’t work on such properties, etc. Official compilers use QNames only for valid identifiers as I know so this is only matter for obfuscated code.


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *