Monday, November 14, 2011

Danske Banks udokumenterede smartphone API

Halløj

Nu hvor jeg har fået sat min android emulator op så jeg kan læse krypteret ssl trafik mellem emulatorens applikationer og internettet, har jeg været ved at rode med Danske Banks Mobilbank app for at hitte ud af hvordan den snakker med banken, så jeg selv kan snakke med banken! Jubii.

Grundene til det er mange, men mest af alt lysten til at lære hvordan de har lavet kommunikationen også tilfredsstille personlige krav som f.eks:

  1. At have adgang til mine egne bank data, og gøre med dem hvad jeg vil.
  2. Lave et vækkeur der donere penge når man sover over
  3. Android widgets der viser ens balance eller måske 3-4 sidste transaktioner.
  4. Dashboard widgets med balance og transaktioner.
  5. Lave et stort led display til lejligheden der viser fælleskontoens balance - Så man let kan finde ud af om man skal gå ud og spise eller lave noget selv, desværre er de halv dyre, så det ender nok med at blive et meget lille lcd display :)
Der er flere tools der tilbyder at lave mitm attacks, wireshark, fiddler (desværre kun til windows) og så vidre, jeg har dog fundet Charles web proxy meget let at gå til specielt på mac'en, men hvis der er tale om andet end http(s) trafik er wireshark formentlig at fortrække. 


Oven over ses et pr screenshots af hvordan det forgår, man starter først Charles op og enabler SSL proxying, starter sin emulator med parameteren -http-proxy fra dokumentationen og derefter sender den alt tcp trafik igennem charles. 

Efter at ha luret lidt på hvordan den snakker med banken, lavede jeg mit eget lille terminal app som en slags proof of concept ... ting.

Appen er implementeret i php og skulle kunne køre direkte fra en hver Mac. (Eller andet grej med PHP 5.3 eller højere).
Kildekoden findes her: mobilbank.php og DanskeBank.php

Lad mig endelig høre om spændende brug af api'et :)

6 comments:

  1. Dette er jo fantastisk og åbner for en masse muligheder. Ville det også være mulig at gøre for andre banker, såsom arbejdernes landsbank. De har også en Android app der bruger pinkode til at logge ind.

    ReplyDelete
  2. Det kommer jo an på hvordan app'en kommunikere med banken - Nu er danske banks api her lidt et særtilfælde for deres api er virkelig nydeligt, gennemført og så tilstrækkeligt simpelt at det nærmest dokumentere sig selv :)

    Men med det sagt hvis man har tiden til at undersøge det vil jeg gætte på at de andre apps også kommunikere med en webservice af en slags

    ReplyDelete
  3. Så vidt jeg kan se er DanskeBank APIen siden hen blevet opdateret - har du eventuelt selv haft mulighed for at RevEng den nyere udgave?

    ReplyDelete
    Replies
    1. Ah beklager - jeg kan se du har skrevet andetsteds at du er skiftet til en anden bank. Det var ærgeligt - jeg kunne djævelsk godt bruge lige præcis denne funktion til forenings-arbejde (små smarte lokale apps til at tjekke om deltagere har betalt f.eks.), men har begrænset tid (og vi har egentlig også Arbejdernes Landsbank - men ville skifte for at få adgang til API..).

      Tak for et godt arbejde, none the less :-)

      Delete
  4. Eller - hvad skal man gøre for selv at reverse-engineere API'et igen?

    :) Kim

    ReplyDelete
  5. Det virker stadigvæk. Danske bank har ikke ordnet shit... Deres "kryptering" virker ikke... Bruteforce CreateSession også virker det.

    ReplyDelete