Saturday, January 30, 2016

Google Play Services networking error > Phishing?

Last week my son approached me, because his Samsung all of a sudden started to show networking errors for YouTube, the PlayStore and G+ app.  Connectivity was fine, we switched from 4G to Wifi and back, with no change (he would not have asked me for a pure/true connectivity issue). The Youtube app itself worked fine and played videos, he just could not log in with his Google account.
So no wonder this problem exists across several google services/apps, but nothing else.

Opening google.com/youtube.com in the browser also showed no problem, so definitely not a networking, dns, routing... problem.

I did some googling and found (apart from nonsense like "turn on wifi"...) some hints about a broken hosts file.  So I adb'd into the device from my computer, pulled the /system/etc/hosts file:
127.0.0.1    localhost
127.127.120.139 android.clients.google.com
With a hint from the ever-helpful stackexchange and the fine coincidence that he (or was it me?) rooted his phone sometime in the past, I was able to shell in, su to root, mount the file system as read-write, comment out that last weird line (for android.clients.google.com) and change the file system back to read only. Check the details on this post on stackexchange.

And then it worked.

This looks suspiciously like a phishing attempt by some malware, that managed to manipulate the hosts file to get the google password. So thirst thing after fixing this, chance the password.
Next thing, find that f*ing app that did this.

That's the downside of having rooted your phone. So finding the phone rooted was not such a coincidence after all. 

Thursday, December 31, 2015

What happened 2015?

So, as you noticed, I did not really blog a lot this year, i.e. 2015.
Let me quickly recap what I was busy with in the last couple of month (lame excuse, I know).

In summer I changed job from Oracle to vmware. Still handling the channel/partner business, but now no longer for (boring) hardware, but for - to me - exiting software. The concept of the software defined datacenter - or SDDC for short - is something I really like. Virtualize everything. Move from on-premise to cloud(s) seamlessly... pretty cool I think.

Enough of the professional plug.
I still found time for some nice hacks at home.

I've been recording my electricity and gas consumption at home for years, nay, decades now. What started with a plain ascii file in the early 90s, turned in to a DB2 application on OS/2 (with visual REXX) , and then to a very rudimentary web application (against the same DB2 database) under Windows XP and 7. Over the years I slightly modified the web application to also be mobile friendly, so I could take my phone (Nexus 5 right now) or iPad and enter the data while I was reading the meter.
Did I mention that I'm a nerd and do this weekly? No?
Well perhaps I should.
Not very interesting from a hack perspective, is it?

So this year I decided to change this, and I

  1. created an Android app for it
  2. added the anyline meter reading to it (because I did not want to get into the OCR stuff myself)
  3. created a REST interface to my database (building upon the old web application I had), using Jersey.
Two really impressive things here. Anyline... check it out. Excellent meter reading SDK (and other OCR stuff) on iOS and Android. 
And Jersey, wow!! REST with the click of a button, yet you are still in full control. And also getting JSON and XML with the same code. Nice.

Now for step 4 I'll re-write the old web-app to a pure Ajax/jQuery/JSON thing, and will only keep the REST interface to the database.

And step 5, already started: I bought some NFC tags (from whiztags, thanks for the hint, Max). One will go to the gas meter, the other one to the electricity meter, and both are registered to my app on Android. So when I go near the meter, it will automatically open the app with the OCR scanner for the respective meter. Click, and done.

So that's the last half year - or so - in a nutshell.

Sunday, November 22, 2015

NetBeans and DB2 again

So for various reasons (mainly the 64bit v 32bit problem with the native driver) I changed my DB2 JDBC driver to type 4, i.e. the Universal driver.
However, when I connect from NetBeans with an URL like jdbc:db2://localhost:50000/sample the schema would stay empty.
Nothing. Zip. Zilch. Zero.
Nada.
Quite some googling and debugging - mainly with a little java program like this:

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;


public class MainDB2 {
    
    private static final String URL = "jdbc:db2://localhost:50000/SAMPLE";
    private static final String USER = "roman";
    private static final String PASSWORD = "max11";
    private static final String SCHEMA = "roman";
    
  public static void main(String[] args) throws Exception {
        Class.forName("com.ibm.db2.jcc.DB2Driver");
        Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
        try {
            DatabaseMetaData dmd = conn.getMetaData();
            ResultSet rs = dmd.getTables(null, SCHEMA, "%", new String[] { "TABLE" });
            try {
                while (rs.next()) {
                    int count = rs.getMetaData().getColumnCount();
                    System.out.println("Column count: " + count);
                    int i;
                    for (i = 1; i <= count; i++) {
                        try {
                            System.out.println(rs.getString(i));
                        } catch (SQLException e) {
                            System.err.println("Exception reading column " + i);
                            e.printStackTrace();
                        }
                    }
                    System.out.println();
                }
            } finally {
                rs.close();
            }
        } finally {
            conn.close();
        }
    }
}



I was able to trace it back to an SQLCODE -443SQL0443N with diagnostic text "SYSIBM:CLI:-805". SQLSTATE=38553. Google this and you will get to here and learn that - again - a package was not bound, this time the db2schema.bnd file. Bind it as suggested in the article with the usual db2 bind db2schema.bnd blocking all grant public

and voila, NetBeans will find the schema.

Gets me every second year, it seams.

Friday, September 25, 2015

The iOS9 Podcast app is totally broken

Usually I hate and hence avoid to slam an app or service like this, but the podcast player in iOS9 really sucks. At least for video on an iPad.

No full screen video anymore, too much white space, and even with all that unused space, the controls are too small

Exhibit A:

Please Apple, we need an urgent update to fix/revert this.

Sunday, September 13, 2015

How to hide a userid from Windows login screen

With DB2 on my home PC[1] I have a service account for the DB2 instance, makes life a lot easier than trying to map it to you actual user(s).

However, regular Windows (Home) setup has 2 defaults that are annoying:
a. password and account expiry for this user.
b. the userid appears on the Windows login/lock screen, although nobody is supposed to sign in with it.

Create a maintenance free user
The first issue I fixed a couple of month ago, because that was really annoying. Because DB2 just would not start. And the first two times this happened I had to work through db2diag.log to find out what happened.
So, make sure the account actually never expires (that's separate from the password). With admin privileges run
  net user db2admin [2]
to check if the user account expires.
If it does, then run a
  net user db2admin /expires:never
to fix this.

The password expiration is trickier, since it cannot be done with the net user command.
To make the password everlasting, run
  WMIC USERACCOUNT WHERE "Name='db2admin'" SET PasswordExpires=FALSE

I found this thanks to the folks at StackExchange.

Hide the service account from the login screen
I wanted to do this on Windows 7 already, but never found the time or cared enough. Now with the move to Window 10 I thought of it again and fixed it.
So this can be done with group policies and stuff, but not on a standalone Windows Home edition.

Registry and Microsoft Technet to the rescue:

Create an entry under
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList and list the db2admin user with a dword (32) of 0 to hide it. Remove the entry or set it to 1 to show the user again.

Voilà.

--
[1] Ha, now that I no longer work for Oracle, I can again freely admit it... Not that I really held back on this in the past 5 years.
[2] replace db2admin with the userid you need this for

Saturday, September 12, 2015

Windows 10 installed

While I finally made it to a Mac (MacBook Air 13) at work, I gave in and let Microsoft install Windows 10 over my Windows 7 on my home PC.

It went surprisingly smooth and without any problems.
Except that my Tomcat did successfully start under Window 10, because for some weird reasons Redmond decided to install and activate the Internet Information Services (which I previously did not have), and those blocked port 80 of course.
Simple de-install of those features, reboot and everything was running fine again. All apps and services I had running (or those I could think of within 30minutes) are running fine again.
Amazingly even my DB2 instance did not create any problems at all.

Now I only have to get used to the new UI, but even that seems easier than I thought.... well, as long as I have the keyboard.

Sunday, August 23, 2015

WiFi + Train + Google Location = weird

For some while now, the Austrian Railways (OeBB) offer free Wifi at least on their premium trains ("railjet"). The trains are good and fast, the Wifi (most of the time, at least in Austria) is good, but it confuses the heck out of the Google/Android location services.
The trains operate all the routes from Zürich to Vienna, from Munich to Budapest, from Graz to Prague, etc etc.

And it seems that Google (and Apple as well) associate various geo coordinates to those access points, On my route from Vienna to Salzburg, both my iPad and my Nexus 5 "re-located" me to Graz, Linz and Prague, while I actually was just around Salzburg.

(For the convenience of readers outside Central Europe I include the map as a reference for the screw-up)

There must be some way to report those access points to Google so they exclude them from location services. The concept of mobile hotspots/access points should be too common.

Any idea anyone where I can report this ?