Keeping pace with the AFR


Back in February, we told you about the handy Deobfuscator tool, which made it possible to copy and paste text from the Australian Financial Review (via its sister site MIS). Following reader reports, we can confirm that the original Deobfuscator tool no longer seems to work on MIS pages (presumably there’s been a coding change at the back end).
However, all is not lost — as I learnt during the Pubcamp media conference in Melbourne earlier this week, the AFR is making at least some content available on its site the day of publication, and the Deobfuscator still works fine on that. Here it is working its magic on an article about the corporate coming of age of Twitter and LinkedIn by Renai LeMay, well worth passing on to your management if they still insist that social networking should be banned on work computers. The original AFR article is here. (Thanks Sean C for raising the issue!)


  • It’s not a terribly difficult obfuscation. They simply have 2 divs, each composed of the paragraphs, with every second character missing.
    So to spell “LIFEHACKER”, one would read “L F H C E ” and the other would read “I E A K R”.

    The two divs are floating, and overlay over each other so that the spaces line up with the characters of the other div (they use a monotype font to ensure this).

    You can knock up Greasemonkey script to “fix” this bizzare obfuscation.

  • An example Greasemonkey script for this:

    var allDivs, thisDiv, firstDiv, secondDiv;
    allDivs = document.evaluate(“//div[@class=’float’]/P”,

    for (var i = 0; i
    var para1 = allDivs.snapshotItem(i);
    var para2 = allDivs.snapshotItem(i+allDivs.snapshotLength/2);

    var combined = “”;
    for (var j=0; j

    if (String(para1.textContent[j]) == ‘\u00A0’ && String(para2.textContent[j]) != ‘\u00A0’)
    combined += String(para2.textContent[j]);
    else if (String(para1.textContent[j]) != ‘\u00A0’ && String(para2.textContent[j]) == ‘\u00A0’)
    combined += String(para1.textContent[j]);
    combined+= String(para1.textContent[j]);
    para1.textContent = “”;
    para2.textContent = combined;

Log in to comment on this story!