Dot eating

Eolass patent bites the dust

This patch is not supported nor functional anymore. Please check follow-up solution by XenoAntares - http://my.opera.com/XAntares/blog/xanocta
Or read below if you like reading.

Some background:
Eolas (E) is a company that patented a certain way of interacting with embedded objects on web pages. This is why in Opera, you sometimes have to click (for example) a flash player to "activate" it before it can actually be controlled. That sucks.

Opera is the only browser that I know of, that currently have this annoying system in place. IE had it, but it reached to a pocket full of money to buy a license from E.

Other (open source) browsers don't implement this mechanism because E was kind enough to commit not to pursue legal actions against open source browsers that are violating its patent. Why? I guess because it wouldn't really be able to enforce that anyway. Builds without this future would pop up everywhere in no-time.

Solution:
Make a "custom" Opera build.

Now I look at it, finding out how to bypass this system took more time then it had to.

My starting point was to grab onto the string "Click to activate and use this control". It's displayed in status bar when hovering over non-activated embed.
It can be found in english.lng listed as:
-191213401="Click to activate and use this control"

Looks like Opera is using signed long's to identify strings. We can't just search for this number in opera.dll file and expect to find it there. Storing numbers as strings would be highly inefficient. Programs store numbers in hexadecimal instead so we have to convert this value to hex. Even windows calc will do the job in Scientific mode.
decimal -191213401 is 0xF49A50A7 in hex but we won't find that too in compiled file (even if we do, it won't be relevant to what we are looking for). PC's use little endian byte order so we have to search for reversed bytes: 0xA7509AF4, actually.

In a build I've been working on, this address was found twice in opera.dll. Those were the places where Opera actually referenced this string and as there were only two of those, it wasn't really hard to figure out that first one was the one I was looking for.

Found that out by setting a breakpoint in both of them and reloading a page that contained "non-activated" embed. Only one of those breakpoints triggered.

Tracing back from a code that references string, I eventually came to a code that created an "overlay" window. This is how Opera implemented "click-to-activate" thing. Invisible window is being positioned on top of non-activated embed and prevents interaction with it until clicked (when it is destroyed).

Cutting story short (I don't recall exact steps of this process as I've done that months ago - only some residual logs made this post possible), I've traced back again to find out where Opera decided to call CreateWindowEx function, that created our evil overlay. And below are the results of this work.

Patch:
For current versions of Opera 10 (alpha) and Opera 9.64 this change does the trick:
search: F7 D8 1B C0 F7 D8 C2 04 00 FF 74
replace: F7 D8 1B C0 B0 01 C2 04 00 FF 74

For Opera 9.63 (thanks Lex1 for correcting):
search: F7 D8 1B C0 F7 D8 5B C2 04 00
replace: F7 D8 1B C0 B0 01 5B C2 04 00

In 10alpha, search pattern can be found two times but only first one is relevant. Second match is actually involved in HTTPS related stuff so better not touch it.

Before hexediting opera.dll it has to be unpacked first. Use UPX command: "upx -d opera.dll"
For hex editing free XVI32 will do the job (not very friendly hexeditor though).

Download:
If you prefer to use a "ready to go" package then download this file, extract to Opera directory and run patch_click_to_activate.bat.
Patch for Opera 9.64 and Opera 10: opera-c2a.zip

For some 32/64 bit linux distributions use this patch script (thanks kylebaker for structuring script nicely): click-to-activate-removal-opera-10.sh
To use, download to any directory and execute these commands as a root:
chmod +x click-to-activate-removal-opera-10.sh
./click-to-activate-removal-opera-10.sh

PS. Pun intended in title ;>

Updated Gallery Viewer to v1.2Better Gmail title tweak

Comments

Squirt Tuesday, November 2, 2010 1:39:51 PM

Patch not working in the new build again.

Unregistered user Tuesday, November 2, 2010 4:08:16 PM

tang04022125 writes: opera 11 alpha: Search: 66 BA 2C 00 6A 17 59 E8 8E E5 C2 FF F7 D8 1B C0 F7 D8 Replace with: 66 BA 2C 00 6A 17 59 E8 8E E5 C2 FF F7 D8 1B C0 B0 01 opera 11 1045: Search: 66 BA 2C 00 E8 E0 BD BC FF F7 D8 1B C0 F7 D8 Replace with: 66 BA 2C 00 E8 E0 BD BC FF F7 D8 1B C0 B0 01

XenoAntaresXAntares Friday, November 5, 2010 12:22:38 PM

To make it easier to maintain the patch script as new patch methods might become necessary, I did a re-write of Rafal's perl patch script. It can be used embedded in a bundle similar to (and inheriting from) his ”ready to go“ package, as well. (I may or may not maintain that version in the foreseeable future; I'd certainly depend on contributed patches as new Opera versions come and go.)

It has not been thoroughly tested: neither did I check, if older Opera versions get patched (or rejected) successfully (the old patterns have been partially ”ported“, though), nor did I check the batch script under all circumstances.

Maybe someone likes to play with it.

Rafald.i.z. Friday, November 5, 2010 9:30:24 PM

XenoAntares: I've linked your version in my post. Hopefully it will be better maintained than mine was lately. smile

Also I've tried you patch. My Opera version was actually not supported by patching script but that allowed me to see some things that could be cleaned up.
Even though no patch locations were found, script ended up with all three files (opera.dll, opera.dll_original and opera.dll_patched) inside the directory. In such case I would expect backup file to be restored and no other file remaining.

I haven't looked at script to see what would happen if patching would be successful but I would expect the opera.dll_patched to be gone then. Maybe it's like that already.

Also, I don't think packing dll back is a good idea. It's a slow process and doesn't have any benefits. Besides, Opera will be shipped with unpacked dll soon.

XenoAntaresXAntares Friday, November 5, 2010 10:01:57 PM

Hi Rafal!

You're right. The stand alone invocation of the perl script was supposed to produce opera.dll_patched – but called via the batch file opera.dll was supposed to be overwritten (as a backup copy should already have been created by the batch). This has been fixed now, hopefully. (Calling ”xa-nocta.pl opera.dll 1“ overwrites directly.)

The re-packing should only occur if encountered opera.dll had been upx-packed in the first place. You can well argue the benefit of that step. ;)

qczi Saturday, November 6, 2010 4:32:07 PM

opera 11 1055 build
search : 66 BA 2C 00 E8 21 28 BB FF F7 D8 1B C0 F7 D8
replace: 66 BA 2C 00 E8 21 28 BB FF F7 D8 1B C0 B0 01

Unregistered user Wednesday, November 17, 2010 11:35:54 PM

Beast writes: Thanks bro...awesome job! :^D

Bucic Sunday, December 19, 2010 2:55:49 AM

What about Opera 11 final (b 1156)?

RainyShadow Sunday, December 19, 2010 7:49:38 AM

@Bucic
Read the notice at top of the article.

Bucic Sunday, December 19, 2010 3:34:43 PM

Originally posted by RainyShadow:

Read the notice at top of the article.


Oh, OK. I don't know how I could have missed that :blush:

Anyway, I'd like to take the opportunity to say a BIG !!!T H A N K Y O U!!! to Rafal and all the people who made it possible to fuck Eolas up

klaudyuxxx Saturday, January 29, 2011 1:09:03 PM

It's still working in Opera 11.01 ... thank you!

Valynor Sunday, January 30, 2011 8:51:41 PM

I confirm "F7 D8 1B C0 F7 D8 C2 04 00 FF 74" is still the correct search term for Opera 11.01.1190. Second occurence is the one to patch.

Unregistered user Monday, February 21, 2011 6:16:33 PM

eXAKR writes: Can someone make a ready-made patch for the latest version? I don't want to go to the trouble of having to hand-edit the binary files myself

Unregistered user Monday, February 21, 2011 6:32:00 PM

eXAKR writes: Ah, nevermind. I managed to fix it myself. If anyone wants the pre-fixed patch from me, I will post it up. Screw Eolas if they are going to sue me for doing this.

alekksander Thursday, February 24, 2011 5:18:44 PM

Thank You so much !

Unregistered user Monday, March 28, 2011 6:30:39 PM

Ken writes: Thanks! Works great on Opera 11.01, Build 1190, Windows XP, 32 bit ... too. I created temp directory + copied opera.dll there and ran patch_click_to_activate.bat in temp directory. opera dll date was updated, so I renamed the original opera.dll --> operaOEM.dll. Lastly, pasted the rebuilt / modified opera.dll into Program Files\Opera directory. No more click to activate pointer -- thanks again. Have OEM dll just in case ...

Unregistered user Tuesday, September 6, 2011 9:54:09 AM

匿名 writes: Opera 11.51 1087 build search :FF F7 D8 1B C0 F7 D8 C2 04 00 8B 44 24 04 (2nd) replace:FF F7 D8 1B C0 B0 01 ...

Write a comment

New comments have been disabled for this post.