It was with great confusion that today I realized google had marked this website as malicious, it took me a while because I had the Security features on Chrome disabled on my machine.
I quickly begun looking into what had happened, worrying I might had been hacked without realizing, but it quickly become clear what was going on.
A few days ago I had restored a download link UnSafeDiscX, scanning the file against virus total which Google owns and likely uses to judge if something is malware or not was flagging unsafediscx as malware.
The truth is that the file in question isn’t malware, but a set of tools to bypass the old SafeDisc CD copy protection. Tools that I figured might still be useful to people trying to run safedisc games on modern Windows 10 which no longer supports the copy protection.
Some bad Anti Virus companies insist on incorrectly marking such tools as “generic malware” even though they’ve been around and used for over 15 years without problems. Regardless, I was left with no choice but to remove the link for the file from the front page and requested google to re examine my site in the hopes that it will be unblocked.
I’m saddened by this, big red warnings are scary and I’m sure a lot of people will now see bnetlauncher with suspicion, even though it had nothing to do with it and has it’s source code fully available. It’s also a sobering reminder of how much power Google has to simply remove a site from circulation, which somewhat leaves me worried for the future of the internet. 🙁
It all started over 20 years ago in a normal day like any other except it was the first time I had ever seen a mouse! As I reached for I committed a terrible mistake that to this day I still somewhat remember, I grabbed it with my left hand…
Fast forward to present day I had multiple decades of mouse usage experience with my left hand in a world more and more dominated by right handed only ergonomic mouses and being a avid MMO player that meant I was left out of being able to use any of the MMO mouses that were starting to be released, until Razer announced the Naga 2014 Left Hand edition.
So after my Steelseries Xai broke down I decided to take the plunge and get myself a MMO mouse, little did i know this would end up giving more trouble than I’d ever expect.
So what do I mean by that? Well, hardware wise I had many bad things to say about the Naga, it works and is fairly comfortable even though far from the lean mouses I was accustomed to which made fps gaming a little bit worse (a tradeoff I was okay with). The same however could not be said for the software…
With the Xai I had been using the great X-Mouse Button Control which is simply amazing, it allowed full control of every button of the mouse with per application profiles so you could say I was spoiled. Sadly since the Naga had a 12 button keypad it basically meant I had to leave XMBC and use their own software, Synapse and the downgrade was harshly felt.
Synapse had per application profiles but the switch took seconds to activate instead of XMBC instant switch, it also wouldn’t swap back to the previous profile after you exited the application (something that’s been fixed since then) meaning I had to hack around associating a profile to Windows explorer so it would reset from game specific profiles. And since the Naga 2014 had no onboard memory to save profiles the keypad was literally useless without having to keep Synapse running.
So while not great I begrudgingly used Synapse and with the small improvements over time it ended up being a tolerable experience, until I decided to get a second Naga…
Why have two Nagas you ask? Well, these days using a computer remotely through in-home streaming is getting more and more common, but I could say I kinda pioneered the idea with my setup. Living in a small home I was able to simply pull a video and usb cable to my TV thus giving birth to the dual location setup I’ve had for over half a decade. I’d clone my screen to both locations and with 2 sets of keyboard and mouse be able to control the same computer from both places.
Having had the single Naga for a while now I was starting to miss the extra keys when gaming from my TV, thus I figured I’d simply nab a second Naga expecting things to just work great, but as I’d soon find out, they would not.
Both Nagas where detected by Windows as expected, but as soon as I opened Synapse I noticed only one of them was showing up “odd…” I thought, “probably the settings are just gonna be applied on both then…” but no, Synapse would only detect the first Naga it saw and ignore the second one. This meant if I wanted to use the keypad I would have to constantly remember to unplug the Naga I’m not using. I tried reaching to Razer support but they quickly proved totally useless, from template responses to confused reps all I ended up getting from them was “Synapse only works with one Naga” and that was that.
Not happy with that I tried hunting down a solution that would let me “hide” a Naga without having to physically disconnect it, the idea was if Synapse could only see one Naga it would bind itself to it. It didn’t take me long to find out about devcon utility included in the Windows DDK, with it I was able to disable the Naga main mouse driver (Naga actually shows to the system as 11 devices) from the command line and that meant I could easily script it using Powershell.
Surprise surprise it worked! By disabling one one of the Naga drivers Synapse would bind itself to the active one making the keypad binds work properly on that one, at which point I was able to re-enable the other Naga so it could still work as a regular mouse if needed. It was hackish and it was a shame I had to do this every time I swapped locations but at least it worked.
Until I decided to use the tilt wheel for extra keybinds, at first I wondered if my tilt had broken down, no matter what I set it to it just wouldn’t work, but after a bit of testing I finally figured it out, for some reason the tilt wheel settings weren’t applied to the active Naga mouse device but instead to Naga keyboard device! Problem with that is that unlike mouse device drivers it simply is not possible to disable a keyboard device driver.
So that’s where I’m at now, left with a mostly working hack of my own creation, I’m still looking to find a way to fully hide a Naga from synapse thus allowing my solution to fully work but until then my Nagas don’t have a working tilt wheel.
If there was a lesson I learned in all of this is that even though I do love all the buttons the Naga gives me and I’m thankful that Razer thought of people like me by making it, it also puts me at the their mercy to keep things working which as I’ve found out from all this “messing around” is a huge risk, Synapse will always install the latest version and Razer will never provide any older version, thus if the latest version ever has a problem then you’ll have no choice but to live with it and potentially be left with dead hardware.
I’ll continue to use and enjoy my Nagas but when they inevitably die I’ll likely go back to a 5 button mouse that’s not dependent of any dodgy software to work.
When I wrote bnetlauncher everything worked fine, I had been using it for days without any issues, so I figured why not release it in case someone else also found it useful?
But as feedback started to come in I realized that what I had created was utterly broken on other people’s computers! I felt shame and embarrassment on how I had managed to push so many blunders in such a tiny program.
As I pushed forwarded I decided to document my mistakes for future me and any one curious for the technical side of things.
What’s was going on?
When testing an application on your computer things are easy, you can press run on visual studio and step trough every instruction checking their result and effect. On someone else’s computer there’s no such thing. So I figured it would be good to have some sort of log file that would record debug messages as bnetlauncher ran trough it’s steps.
Has bug reports started to come in this proved invaluable, has it allowed me to see at what step of the process things where blowing up and gi what part s problem reports came in the first thing I ended up doing was implementing a Log file to try and give me a clue of what was going on.
Too slow to start
I keep my blizzard games on an SSD, further more I have 16gb of RAM and rarely shutdown my PC (i simply put it on standby). This meant that 99% when I launched the blizzard games I play they would already be cached and start “instantly” sadly though not everyone is running their games under the same conditions.
And for those people bnetlauncher was crashing most of the time, it was only when I used RAMMap to flush my file cache of memory with the game on a regular HDD did I manage to reproduce the issue myself, and after some debugging I realized what was going on.
The way bnetlauncher works is it tries to find the game the battle.net client started and copy it’s arguments. On my computer due to everything being cashed this worked fine, however on a non cached start the game would be found but it’s parameters wouldn’t be available yet which would just result in a crash 🙁
This was fixed by adding error catching code that simply keeps retrying to get the parameters until it succeeds.
Dude, where’s my files?
To my surprise I got reports that bnetlauncher simply did not work, Diablo 3 said it couldn’t find files, Hearthstone showed a black screen, what was going on?
Well the thing is I originally kept my bnetlauncher inside the game folder, only later moving it inside my steam folder this meant on Steam my “Start at” parameter was pointing to the game folder.
As it turns out blizzard games are quite trusting and take the “Start at” parameter as gospel when it comes to finding it’s files. So what was going on was that people leaving their “Start in” parameter unchanged (since they obviously had no idea) it would cause blizzard games to try and find their files in places where they where not.
I looked for a way to obtain the “CurrentDirectory” of another process and began to sweat when every place I looked kept telling me I would have to “inject a thread into the process to make calls in it’s context”. I value my battle.net account a lot and that sounded like something that could be miss interpreted by Blizzard’s anti-cheat systems.
So in the end the solution I picked was to just use the exe folder as the “Start in” parameter, which seems to work for all the games *fingers crossed*.
I suck at RTS games, I really do. So it’s only natural Starcraft 2 and Heroes of the Storm never held any appeal to me. Ironically those two proved to be somewhat unique in the way they start up. Even after all the bug fixes above those two where still not working.
So I downloaded them and took a look at what they normally and this was what I saw:
Starcraft 2 had a launcher of it’s own! Comparing what bnetlauncher was doing and the battle.net client was doing I realised the diference.
battle.net client launched SC2Switcher_x64.exe which in turn launched SC2_x64.exe using it’s own directory as the SC2_x64.exe “Start in” parameter.
bnetlauncher just launched SC2_x64.exe and tried to launch it usin it’s own folder as “Start in” parameter, which simply did not work.
This made me realize a fundamental flaw in the logic of what bnetlauncher was doing, I was looking for the last started process instead of the very first.
So that was fixed and the code upgraded to handle closing a process and it’s children so it could properly close Hots and Sc2 (else you’d get a error 2:-2000).
Click me baby one more time
What would happen when you started two instances of bnetlauncher (be it by accident or on purpose)? As I found out a lot, and none of it good.
Games could get swaped, so the D3 shortcut would bet WoW and the WoW shortcut would D3 and even worse if battle.net client was launched trough bnetlauncher the second instance would simply hang as the first closed the battle.net client making it impossible to actually launch then second game.
So how to fix this issue, first thing I thought was to simply stop bnetlauncher from starting if another instance was already running. It worked but I felt I could do better!
So instead of simply exiting I decided to implement a “wait” system where each instance of bnetlauncher would simply wait for the previous instance to finish before starting it’s own thing with the last in line closing the client if the first one had to start it.
Do the way I decided to fix this it challenging one with me cursing Microsoft vague documentation on Named Mutexes and how they’re suppose to be used. Was this overkill? Probably, but maybe people playing hearthstone while they wait for their turn in WoW’s dungeon queue to pop up might appreciate the feature…
Playing it safe
All these issues left me somewhat paranoid so also ended up adding error checks, logging and crashing protection to almost every step of the process.
Now it may have a bit too much but it’s certainly better then having too little like before.
Hopefully the lesson is learned and I will try to avoid releasing anything without more serious testing. To those that tried bnetlauncher early I can only extend my deepest apologies for the trouble I’ve caused you.
Sometimes wanting everything your own way can bite you in the ass HARD, after flashing a custom ROM my Wiko BLOOM I realized it had turned my IMEI invalid.
After trying dozens of guides (most of which I had to google translate) and several programs, without getting anywhere I was almost about to give up, fortunatly I finally saw this post mentioning BPLGU which eventually lead me to fixing the phone.
So, in the hopes of saving others from the hours of frustration I had to go trough I’m writing this guide,
Understanding my problem
After fixing it I came to the conclusion that when I booted the custom ROM it corrupted/erased all of the NVRAM. This not only removed the IMEI’s but it also removed all the Baseband information. So before I could try and restore the IMEI i’d first need to restore the Baseband information so it looks like the picture below (when broken mine would simply show “—” in the red box).
Fixing the problem
To fix the baseband we’ll first need a BPLGU file to flash into it, lucky for us Wiko actually provides all the files we’ll need with their system update packages.
So go to Wiko’s website support section (the global site lacks a support section so select the proper country website) and download the latest BLOOM update (BLOOM_V16.exe when I did it) and run it.
Once you see the upgrade application close it, you’ll see that the upgrade application created a folder with the same name as the exe, navigate that folder until you see these files:
These are the files we’ll use with SP Flash Tool to restore the nvram, but before we’ll need to edit the MT6582_Android_scatter.txt so that the flash tool will also write the NVRAM. So open the file in a text editor and search for “nvram”, on the block it finds you’ll need to change “is_downloaded: false” to “is_downloaded: true” like shown bellow:
- partition_index: SYS4
Now run SP Flash Tool, change to the Download tab and use the Scatter-loading button and point to the MT6582_Android_scatter.txt file we just edited, NVRAM will show in the list unticked and without a filename, click the file box and select the BPLGU file in the directory (BPLGUInfoCustomAppSrcP_MT6582_S00_MOLY_WR8_W1315_MD_WG_MP_V34_1_wg_n in my case) and make sure the line is checked so it’s flashed. It should look like the picture bellow:
For the next step I did a full ROM flash (everything selected), however it’s possible you can get away with just having NVRAM selected but like I said I did a full flash. So just follow the normal SP Flash Tool procedure to flash the files.
So it’s that time again, the new Windows 7 public preview as been made available. I’ve been following it’s progressed by installing the leaked betas on aVM to test them out but that’s always slow and doesn’t make you take your feet of familiar ground (my tuned XP desktop) to really get to know the OS, so i felt it was time to jump in on the public beta and try and use it as a main OS for a month.
One thing I think needs to be clear, Windows 7 is Windows Vista plus polish, Vista had a difficult birth, suffering from numerous issues and that showed in the final product, vista was released as a ghost of what was “promised” and riddled with performance issues and driver issues from the get go, at it’s core it wasn’t bad but it wasn’t what I and allot of people were expecting, as such I gave it a pass and stayed with XP. But stay in the “past” forever isn’t usualy a good idea so I had to see if Windows 7 was ready for me.
First hurdle was the install, Windows 7 comes on a DVD, not having any kind of optical drive in my computer for a few years now (with a fast Internet connection and a big enough hdd it becomes pointless) I had to figure out how to install it without one, odds would have it Microsoft as made it very easy to make a Windows 7 install USB pen/HDD. So following some instructions I proceeded to install it without no issues on a side partition I save for alternative OS’s, score one for Windows 7.
But eventually it came time to setup my screen cloning and that’s were things went bad for Windows 7, or maybe should I say nvidia. It seems that the nvidia drivers available no longer support cloning with screen spanning, as such I’m unable to have cloning and native resolution on my main screen since it limits it to the maximum resolution both monitors can support. I tried installing Vista drivers, using UltraMon but Vista drivers didn’t have a working control panel and UltraMon didn’t even manage to start, so as far as trying out Windows 7 Beta that was it for me, just not willing to give up the convenience of my screen clone setup for Windows 7, hopefully drivers will get better as Windows 7 aproaches final and I’ll try it again.
From the few minutes I used it some I liked, the aditions to windows managing and the show desktop corner button seem great ideas even if it seems it will take some getting used to, the new taskbar however asn’t fully convinced me yeat but without everyday use I can’t really say for sure, some of my friends with simpler setups are trying it out as well so at least I’ll get to know all the kinks of it anyways for round 2…
Update: Got UltraMon to work by folowing some instructions in the forums, although mirrowing worked it proved very cpu intencive (40% cpu usage) and as such unviable.