Return to Video

36C3 Wikipaka WG: Free access to substitution plans – Deobfuscation adventures

  • 0:19 - 0:20
    *Wikipaka Intro Musik*
  • 0:20 - 0:29
    Herald: Welcome to the next talk about
    free substitution for schools. Yeah. By…
  • 0:29 - 0:36
    if it was done by Fynn […]. Thank you, for
    the translators for translating into
  • 0:36 - 0:41
    German. Let's start.
  • 0:41 - 0:48
    Fynn: In general, as you know, teachers
    can't always teach as planned, so students
  • 0:48 - 0:54
    need to be informed when their lessons are
    moved in time or space or both, or don't
  • 0:54 - 1:00
    take place as they should, or they have a
    different teacher. All that. And for that,
  • 1:00 - 1:05
    schools create a substitution plan.
    There's software for that. For example,
  • 1:05 - 1:09
    Untis. And these substitution plans need
    to be distributed. And in Germany, a lot
  • 1:09 - 1:17
    of schools use Digitales Schwarzes Brett
    or Digital Signage Board or DSB for that.
  • 1:17 - 1:23
    And it works like this. Um. Oh, yeah. And
    it works like this that the school uploads
  • 1:23 - 1:30
    the plan. Pupils can read this
    substitution plan on these DSB screens, on
  • 1:30 - 1:36
    their mobile devices using the client
    software developed by Heinekingmedia and
  • 1:36 - 1:42
    using the website, once they have the
    credentials that they acquired from their
  • 1:42 - 1:47
    school. It's one pair of username and
    password for all pupils and one for all
  • 1:47 - 1:56
    teachers. Well. And this costs money,
    schools buy way to expensive screens from
  • 1:56 - 2:02
    Heinekingmedia. And then the schools pay
    extra for this, uh, fantastic web
  • 2:02 - 2:07
    interface here where you can sign in and
    view your substitution plans. You can also
  • 2:07 - 2:15
    use this mobile app. It's not really good,
    though, as I will explain. Um, this is
  • 2:15 - 2:21
    what it looks like. Things are tiny, as
    you can see. It's obviously proprietary
  • 2:21 - 2:27
    software. It depends on Google Play
    services. You need to zoom around. You
  • 2:27 - 2:32
    need to scroll around to see all the
    information because it's so tiny. So this
  • 2:32 - 2:39
    is super suboptimal. Um, I don't even know
    why this is so small. If you look it up on
  • 2:39 - 2:45
    a Web browser, it zooms fine when you have
    a small device. And I really don't know
  • 2:45 - 2:51
    how that… screwed up like that. It has
    useless push notifications like new
  • 2:51 - 2:55
    content available. It's not not useful.
    And you have to click at least one time
  • 2:55 - 3:00
    too much all the time. And due to these
    issues, I always wanted something that is
  • 3:00 - 3:06
    better than DSB mobile. So I began
    capturing DSB mobiles network traffic.
  • 3:06 - 3:13
    Surprisingly, in Android, this is really
    easy. Um, you can use user friendly
  • 3:13 - 3:20
    software like HTTPCanary, which is this
    one, or packet capture, which is this one.
  • 3:20 - 3:25
    It's unfortunately proprietary, but I
    don't know any non-proprietary software
  • 3:25 - 3:33
    for this is. If you know any, please tell
    me. Um, it acts like a VPN provider app
  • 3:33 - 3:39
    and proxies all the traffic that is going
    out, uh, through it; installs a
  • 3:39 - 3:43
    certificate in your system so that apps
    still think that the net…work connection
  • 3:43 - 3:50
    is secure, and then this app will decrypt
    and store and re-encrypt all the traffic
  • 3:50 - 3:55
    that is going out and in. And so you can
    read it, then. Uh, this is essentially
  • 3:55 - 4:02
    like a attacker-in-the-middle attack that
    you're doing yourself on your own network
  • 4:02 - 4:07
    traffic. Uh, yeah, except on recent
    Android versions. Apparently Android
  • 4:07 - 4:13
    doesn't trust certificates that you
    install, anymore. So you actually now have
  • 4:13 - 4:21
    to have root access to move them to this
    location /systems/etc/security/cacerts so
  • 4:21 - 4:25
    that they are ultimately trusted. And that
    is unfortunate because it makes it a
  • 4:25 - 4:33
    little more difficult. But in all our
    Android versions, it works really easy.
  • 4:33 - 4:41
    Um, with more effort, this capturing of
    network traffic can be circumvented by
  • 4:41 - 4:47
    implementing a kind of certificate
    pinnings so that the app checks beforehand
  • 4:47 - 4:51
    which certificates it trusts, and which it
    doesn't. With more effort, such a
  • 4:51 - 4:57
    prevention could also be circumvented. Uh,
    but DSB Mobile didn't have that, so I
  • 4:57 - 5:04
    could figure out how this end point works.
    As you can see, it's called the iPhone
  • 5:04 - 5:14
    Service. On Android. Using your user ID
    and password, you can request an auth
  • 5:14 - 5:21
    token. It has the form of this. Actually,
    that's what it looks like when you have
  • 5:21 - 5:26
    invalid credentials. So if it returns
    this, then your credentials are not valid.
  • 5:26 - 5:35
    It never changes. So I don't know what the
    use of this token is. Um, however, DSB
  • 5:35 - 5:43
    Mobile never stored it, even though it's
    the same all the time. So it took one
  • 5:43 - 5:50
    extra round trip time, every log in to
    fetch this, never changing auth token.
  • 5:50 - 5:56
    Using this auth token, you can request
    your substitution plan URL, and then once
  • 5:56 - 6:03
    you have this substitution plan URL, you
    can access your substitution plan. OK, so
  • 6:03 - 6:08
    using this knowledge, I developed a client
    that allows me to directly have access to
  • 6:08 - 6:13
    just the relevant information and I call
    it DSBDirect. Uh, the very first thing it
  • 6:13 - 6:20
    did better than DSBmobile is that it
    display things not as tiny. This is a kind
  • 6:20 - 6:26
    of old screenshot as you can see. These
    HTML files here can be parsed using a
  • 6:26 - 6:36
    parser and such that, uh, you can filter
    it, you can, um, have useful notifications
  • 6:36 - 6:45
    that I added later on. This is a native
    list, not a web view. So it has… it feels
  • 6:45 - 6:54
    better. And uh, yeah, of course it's not
    proprietary but Free Software. Uh yeah.
  • 6:54 - 7:02
    Oh, by the way, this logo, it's supposed
    to represent my school's logo. Uh, this
  • 7:02 - 7:09
    one. Hmm. Please don't tell me I did, too
    bad. OK? At least it's different from the
  • 7:09 - 7:15
    DSB mobile logo. This endpoint is fun in
    other regards. The first time I
  • 7:15 - 7:20
    encountered it, it allowed completely
    unencrypted connections, and the website
  • 7:20 - 7:28
    did not redirect users to HTTPS. So
    actually you'd most of the time input your
  • 7:28 - 7:35
    username and password and transmit it
    unsecurely. It supported up to TLS version
  • 7:35 - 7:42
    1.0, which is obsolete. It supported
    SSLv2, which enables a DROWN attack, which
  • 7:42 - 7:48
    I didn't quite understand. But apparently
    those aren't very likely to be exploited
  • 7:48 - 7:54
    here. But it could allow attackers to read
    your traffic. I informed the company about
  • 7:54 - 7:59
    this on August 11th. And I believe this is
    when I introduced the "not my fault
  • 7:59 - 8:06
    grumble" tag in the issue tracker…
    tracker. They were happy to be informed
  • 8:06 - 8:18
    about this. On August 22nd, they enabled
    TLS version 1.2, disabled SSLv2, er, still
  • 8:18 - 8:23
    allowed insecure connections. And I also
    noticed that they embedded fonts from
  • 8:23 - 8:30
    Google and this is obviously bad for
    privacy. So I told them about that. Uh,
  • 8:30 - 8:37
    Twice. September 19th, the iPhone service
    404s if the connection is insecure.
  • 8:37 - 8:44
    Although Google fonts are still embedded.
    Anyhow, it's October 4th that the iPhone
  • 8:44 - 8:54
    service is shut down. So I start focusing
    on the new endpoint that apparently the
  • 8:54 - 9:01
    DSB apps have been using for a while, but
    I didn't notice that. Uh, so I had to
  • 9:01 - 9:11
    figure out how this data format works. It
    looks like this. So you can see it has a
  • 9:11 - 9:23
    JSON body usi– which has a request, which
    is an object that has data, which is a
  • 9:23 - 9:29
    string. So I wanted to figure out how to
    read this. It looks like base64 when I'm
  • 9:29 - 9:36
    escaping these slashes, of course, because
    it's quoted in JSON. Um, however, decoding
  • 9:36 - 9:42
    this JSON string here did not, er, this
    base64 string did not deliver a nice
  • 9:42 - 9:49
    result. Uh, so I had to look for clues by
    decompiling the app. There are online
  • 9:49 - 9:55
    tools for that. Unfortunately, the app was
    minified or… which is obfuscated during
  • 9:55 - 10:01
    compile time, which made the results not
    very readable, which means that once you
  • 10:01 - 10:05
    have it decompiled, you will have, the
    first function that appears is "A", and
  • 10:05 - 10:10
    the second one is "B" or something.
    Fortunately, I don't remember how exactly
  • 10:10 - 10:15
    I did that. So instead we're going to have
    to look at whether this was legal or not.
  • 10:15 - 10:26
    Because that's interesting, too, because I
    think it is. Let's look at § 69e UrhG,
  • 10:26 - 10:30
    copyright law, Urheberrechtsgesetz,
    "Dekompilierung". "Die Zustimmung des
  • 10:30 - 10:37
    Rechteinhabers ist nicht erforderlich,
    wenn die," und hier steht "Verviefältigung
  • 10:37 - 10:41
    des Codes oder die Übersetzung der
    Codeform im Sinne der in § 69c Nr. 1 und
  • 10:41 - 10:44
    2.," gemeint ist Dekompilierung,
    "unerlässlich ist, um die erforderlichen
  • 10:44 - 10:46
    Informationen zur Herstellung der
    Interoperabilität eines unabhängig
  • 10:46 - 10:50
    geschaffenen Computerprogramms mit anderen
    Programmen zu erhalten, sofern folgende
  • 10:50 - 10:55
    Bestimmungen erfüllt sind." So. It says
    you may decompile without permission when
  • 10:55 - 11:00
    it is strictly necessary while trying to
    create interoperability between two
  • 11:00 - 11:07
    programs created independently from each
    other. Under these conditions. And here
  • 11:07 - 11:12
    are three conditions. Um, "Die Handlungen
    werden von dem Lizenznehmer oder einer
  • 11:12 - 11:15
    anderen zur Verwendung eines
    Vervielfältigungsstückes des Programms
  • 11:15 - 11:19
    berechtigten Person oder in deren Namen
    von einer hierzu ermächtigten Person
  • 11:19 - 11:23
    vorgenommen". It says, you must have
    permission to use the program. Hey, I
  • 11:23 - 11:27
    think I'm allowed to use the program. I'm
    assuming I am. My school paid for it.
  • 11:27 - 11:31
    Second, "die für die Herstellung der
    Interoperabilität notwendigen
  • 11:31 - 11:36
    Informationen sind für die in Nummer 1
    genannten Personen noch nicht ohne
  • 11:36 - 11:39
    weiteres zugänglich gemacht". So the
    information you want to know is not
  • 11:39 - 11:45
    already provided. Oh yeah. Actually
    Heinekingmedia didn't document this
  • 11:45 - 11:49
    obviously. So yeah. This
    *indistinguishable*. Third, "Die
  • 11:49 - 11:54
    Handlungen beschränken sich auf die Teile
    des ursprünglichen Programms, die zur
  • 11:54 - 11:57
    Herstellung der Interoperabilität
    notewndig sind". So you're only planning
  • 11:57 - 12:03
    the part that contains the information you
    want to know. Uh, yeah. I don't think this
  • 12:03 - 12:11
    Android app is divided into parts. So
    let's just, let's just skip that. The law
  • 12:11 - 12:14
    text goes on stating three things you may
    not do with the information you gain from
  • 12:14 - 12:19
    decompiling. "Bei Handlungen nach Abs. 1
    gewonnene Informatione dürfen nicht zu
  • 12:19 - 12:24
    anderen Zwecken als zur Herstellung der
    Interoperabilität des unabhängig
  • 12:24 - 12:27
    geschaffenen Programmes verwendet werden."
    So don't use it for other purposes than
  • 12:27 - 12:31
    creating interoperability,
    interoperability with the independently
  • 12:31 - 12:37
    created program. Oh yeah, of course. I
    never did use my knowledge for any other
  • 12:37 - 12:45
    reasons. Never. "…an Dritte weitergegeben
    werden, es sei denn, das dies für die
  • 12:45 - 12:50
    Interoperabilität des unabhängig
    geschaffenen Programms notwendig ist". So
  • 12:50 - 12:55
    don't tell third parties about the
    information unless necessary for
  • 12:55 - 13:01
    interoperability. Oh, yes, my Free
    Software implementation couldn't be
  • 13:01 - 13:07
    interoperable if the information wasn't
    public. Unless it was Non-Free Software,
  • 13:07 - 13:11
    which is not obviously. "Für die
    Entwicklung, Herstellung oder Vermarktung
  • 13:11 - 13:15
    eines Programms mit im Wesentlichen
    ähnlicher Ausdrucksform oder für
  • 13:15 - 13:20
    irgendwelche anderen das Urheberrecht
    verletzenden Handlungen verwendet werden".
  • 13:20 - 13:26
    So don't violate the rest of the copyright
    law. Of course, we're not. Surely,
  • 13:26 - 13:29
    creating an alternative to something, on
    its own, doesn't violate copyright law.
  • 13:29 - 13:37
    Right? So yeah, after doing it, I
    discovered that I did so legally. So I
  • 13:37 - 13:41
    found a usage of some class related to
    gzip. So I tried around a bit and figured
  • 13:41 - 13:51
    you could use this command to decrypt this
    string. And guess what it is? It's more
  • 13:51 - 13:57
    JSON! What an efficient data format.
    You're hiding our encoded JSON inside more
  • 13:57 - 14:03
    JSON. Let's look at the data we are
    sending. Of course, we have a user ID and
  • 14:03 - 14:10
    a pass. Besides that we have a lot of
    data, apparently for statistics. You have
  • 14:10 - 14:17
    the app's version, you have the package
    ID, the device model, the Android version
  • 14:17 - 14:23
    and API level, the user's language and the
    current date. I don't know why you have
  • 14:23 - 14:28
    the date. I think they know the date that
    the query arrives at, but, ya, you have
  • 14:28 - 14:35
    that anyway. You have a… oh sorry, some of
    this is redundant from the request header
  • 14:35 - 14:45
    or user agent that is already sent. I
    don't know why they do that twice. Um, you
  • 14:45 - 14:49
    have App ID, which is a unique-per-
    installation ID, which I at first didn't
  • 14:49 - 14:54
    know how to generate. And you push ID,
    which is, I'm assuming, an ID generated by
  • 14:54 - 14:59
    Google Mobile Services now known as Google
    Play Services to enable push
  • 14:59 - 15:05
    notifications. So it becomes obvious that
    they're able to link requests together and
  • 15:05 - 15:10
    possibly create usage patterns. What are
    they doing with this data? No clue!
  • 15:10 - 15:17
    There's no privacy policy anywhere. Which
    of these fields are required? All of them,
  • 15:17 - 15:23
    but push ID. But most strings can be left
    empty. So DSBdirect sent the minimal
  • 15:23 - 15:31
    amount of requested data, which is
    everything but with empty strings. And
  • 15:31 - 15:40
    yeah, actually guess what, this server
    allows insecure connections again. So, uh,
  • 15:40 - 15:52
    something happened. Um. On some date, the
    server side verification of this query was
  • 15:52 - 15:58
    changed and the field AppVersion suddenly
    became mandatory. I ran some experiments
  • 15:58 - 16:03
    and found examples of valid and invalid
    version names. These are examples of valid
  • 16:03 - 16:10
    version names. These are examples of
    invalid version names. Finally,
  • 16:10 - 16:15
    AppVersions that aren't real versions of
    Heinekingmedia's apps are accepted anyhow,
  • 16:15 - 16:28
    like version 7.0.0. We're only at version
    2.5.… I don't remember, 6, I think. So,
  • 16:28 - 16:34
    DSBlight started sending along some
    AppVersion… its own actually, which was
  • 16:34 - 16:41
    2.5, and the same as an older DSBmobile
    release. And because I thought maybe
  • 16:41 - 16:47
    they'd have more server side changes in
    the future, I implemented a new system. It
  • 16:47 - 16:52
    was to prevent server side changes from
    requiring an update because that would
  • 16:52 - 16:57
    mean I have to write change logs because
    after it releases are slow because the one
  • 16:57 - 17:03
    who was uploading it to Google Play for me
    also always took a while. And because of
  • 17:03 - 17:08
    that, there was now a "look for a fix"
    button that creates the news file, which
  • 17:08 - 17:13
    is located at the repository's root, which
    allows me to inform users when they can
  • 17:13 - 17:20
    expect a fix. It allows me to change this
    base JSON, that credentials are appended
  • 17:20 - 17:26
    to which is this without the user ID and
    user password. So they're added to this
  • 17:26 - 17:36
    JSON later. And… in case they checked that
    I added an option to send the real date. I
  • 17:36 - 17:42
    thought maybe that's what they would do
    next. They never did that, unfortunately.
  • 17:42 - 17:49
    This was the same release as the one with
    the version number fix, this one. Uh, we
  • 17:49 - 17:55
    have good news elsewhere, though. It was
    the same day, October 15th, that I
  • 17:55 - 18:02
    received an email that app.dsbcontrol.de
    was no longer accessible on Port 80 and
  • 18:02 - 18:08
    that Google fonts were now being loaded
    locally. This e-mail contained no usual
  • 18:08 - 18:12
    "bei Rückfragen können Sie sich gerne
    direkt an mich wenden", unfortunately,
  • 18:12 - 18:17
    maybe they didn't want to hear from me
    anymore. I couldn't verify this at first.
  • 18:17 - 18:23
    Uh, October 16th, I could verify this. So
    a friend noted that they have slow deploy
  • 18:23 - 18:29
    times, apparently. Uh, round 3, it's
    October 17th, and we're getting an invalid
  • 18:29 - 18:39
    answer from the server again. And now the
    App ID has to be set to a UUID and last ID
  • 18:39 - 18:46
    has to be set to something. It can't be
    empty. So we are now sending
  • 18:46 - 18:55
    "zurfrühstückszeit". I wasn't aware of how
    to generate App IDs yet, so I just took
  • 18:55 - 19:00
    the one that I had captured from my
    device. Contributor Pixilon and me learned
  • 19:00 - 19:04
    this through trial and error. I thought it
    was very bothersome because the service
  • 19:04 - 19:10
    sometimes accepted and sometimes rejected
    the very same query. Uh, so this slow
  • 19:10 - 19:16
    update cycle we noticed earlier turned out
    to be really bothersome and frustrating
  • 19:16 - 19:19
    because you'd, you try something and then
    it would work and then you'd remove it
  • 19:19 - 19:22
    again and that wouldn't work anymore. And
    then you thought this was the cause for
  • 19:22 - 19:30
    it… actually was just the slow release,
    deploy cycle. Um, likely, or maybe, they
  • 19:30 - 19:35
    had just banned this app ID at this point
    in time, but I didn't realize, I'm not
  • 19:35 - 19:40
    sure. Rather, I believe the server was
    generally are struggling and rejecting log
  • 19:40 - 19:45
    ins because my DSBmobile installation,
    with this app ID, was also sometimes
  • 19:45 - 19:53
    rejected. *incomprehensible*. They seem to
    have reverted some of these changes later,
  • 19:53 - 19:58
    which reaffirmed my belief that all
    DSBmobile installations were affected.
  • 19:58 - 20:04
    Contributor Pixelon figured that device
    was now mandatory, which meant not empty.
  • 20:04 - 20:12
    So we sent device "a". I remembered to
    have at some point in time sent the words
  • 20:12 - 20:17
    "kartoffel" or "poster" as a device
    eventually. Now, I thought we were smart.
  • 20:17 - 20:22
    I added new functionality to this new
    system I explained earlier. Firstly, as a
  • 20:22 - 20:28
    precaution, I could remotely activate
    sending the last date, in case that, I
  • 20:28 - 20:34
    mean remotely means that it happens when
    users click on "Look for a fix". Secondly,
  • 20:34 - 20:39
    I could now set an array of headers to
    send to the server. And thirdly, we had
  • 20:39 - 20:44
    discovered some alternative endpoints. To
    understand this, you first have to know
  • 20:44 - 20:50
    that they have sold skinned versions of
    DSB. Uh, so this is the normal DSBmobile.
  • 20:50 - 20:57
    I showed it earlier already. This is the
    IHK skinned DSBmobile. It's accessible via
  • 20:57 - 21:03
    two URLs, that delivers the same data as
    this website. Uh, it also has a
  • 21:03 - 21:13
    corresponding skinned Android app. So I
    configured… so I could configure the
  • 21:13 - 21:18
    endpoint the client would send the data to
    because each of these had a different
  • 21:18 - 21:31
    endpoint and this app used one of these
    two. However, this was tricky because I
  • 21:31 - 21:38
    had to prevent myself from giving myself
    the power to redirect users' queries to my
  • 21:38 - 21:45
    own server, so I hardcoded four URL
    endpoints… endpoint URLs, mobile, web, IHK
  • 21:45 - 21:52
    mobile and app IHK BB into the app so I
    could switch between them using an integer
  • 21:52 - 21:59
    and I set it to the IHK mobile endpoint. I
    believe it was the very next day that IHK
  • 21:59 - 22:05
    mobile and and app IHK BB endpoints were
    broken. Actually, they returned invalid
  • 22:05 - 22:14
    data in a way that crashed my app. Oops.
    And suddenly the web endpoint from the
  • 22:14 - 22:19
    normal website was constantly moving to
    new locations and there was a
  • 22:19 - 22:26
    configuration.js script that contained
    where it was, so I hard coded into the app
  • 22:26 - 22:31
    as a precaution in case I'd need it later
    a very specific way to to find this
  • 22:31 - 22:36
    location. And it was like behind this
    seventh quotation mark or something.
  • 22:36 - 22:40
    Clearly unreliable, and suddenly the
    string was moved a line downloads, so it
  • 22:40 - 22:48
    was now the ninth quotation mark.
    Interesting. Um, also this App stopped
  • 22:48 - 22:53
    working. It's still on the Play Store now
    and it's still not working. This website
  • 22:53 - 23:00
    is still available and it's not working
    because they broke their end point. Uh,
  • 23:00 - 23:04
    this was around the time that this Google
    Play takedown notice reached us because
  • 23:04 - 23:11
    apparently DSBdirect infringes the
    trademark of DSB. I don't feel qualified
  • 23:11 - 23:15
    to comment on this as I don't understand
    trademark law. I tried to ask for a
  • 23:15 - 23:21
    specific clarification as to why they
    removed my app, three times, but they
  • 23:21 - 23:25
    never responded. Oh, by the way, that's a
    nice trick you can do with emails you
  • 23:25 - 23:31
    don't like. You can just pretend you never
    received them. So a few days later, the
  • 23:31 - 23:36
    website JavaScript, including
    configuration.js, was obfuscated in such a
  • 23:36 - 23:43
    way that I don't understand how it works,
    but it constantly evokes the debugger, if
  • 23:43 - 23:48
    the developer tools are open. You can in
    theory easily circumvent this by telling
  • 23:48 - 23:53
    the browser to ignore breakpoints. This
    doesn't seem to work with Firefox, but it
  • 23:53 - 23:57
    works in chromium. I don't know why. I'm
    just going to assume you could have
  • 23:57 - 24:03
    figured this out somehow. Be it that we
    could have had a web view running in the
  • 24:03 - 24:07
    background if we absolutely had to. But
    fortunately, contributor Pixon had come up
  • 24:07 - 24:13
    with what is needed to talk to the mobile
    endpoint now. Because it's more data.
  • 24:13 - 24:18
    Through decompilation he learned that it
    was being generated using the default Java
  • 24:18 - 24:30
    UUID class, UID. … randomUUID.toString.
    Also device idea was mandatory. So I added
  • 24:30 - 24:36
    spoof data. I took a random device ID from
    this list. I took a random OS version from
  • 24:36 - 24:42
    anything between 4.0.2 and 10.0, I took a
    random language, mostly German, sometimes
  • 24:42 - 24:50
    English. And as a BundleId, I took the
    package ID of DSBmobile. With an option to
  • 24:50 - 24:55
    disable this via news in case it would get
    in the way somehow. And that was the end
  • 24:55 - 25:01
    of that. Apparently they stopped trying to
    prevent DSBmobile from working. Apparently
  • 25:01 - 25:05
    after it releases don't count to them and
    it isn't worth their time. Or maybe they
  • 25:05 - 25:10
    were just uncreative. I could still think
    of a few ways to tell DSBlight and
  • 25:10 - 25:17
    DSBmobile apart, but I'm clearly not going
    to tell them. However, just this month,
  • 25:17 - 25:23
    Pixilon asked again why DSBmobile was
    removed from the Play Store, also because
  • 25:23 - 25:28
    he believed we didn't violate German
    trademark law, currently, but, uh,
  • 25:28 - 25:33
    Jasmich, who, uh, is sitting here, by the
    way, had uploaded DSBdirect to the Play
  • 25:33 - 25:39
    Store again and received a rather
    interesting response. "Sehr geehrter Herr
  • 25:39 - 25:43
    Zwerger", dear Pixilon, "Vielen Dank für
    Ihre E-Mail. Leider sehen wir uns
  • 25:43 - 25:48
    außerstande mit Ihnen einen qualifizierten
    Diskurs zu diesem Thema zu führen. Uns
  • 25:48 - 25:52
    sind weder Daten zu Ihnen noch zum Herrn
    Godau bekannt." This means, unfortunately,
  • 25:52 - 25:57
    we don't have your address and thus can't
    send you legally meaningful messages.
  • 25:57 - 26:03
    Heißt, sie wollen Einwurfeinschreiben
    machen. "Ebenfalls ist uns nicht klar, in
  • 26:03 - 26:08
    welcher Rechtsbeziehung Sie zueinander
    stehen". We don't know about your legal
  • 26:08 - 26:11
    relationship. This is a bit strange
    because I don't know either. According to
  • 26:11 - 26:16
    my father, we might be a "Gesellschaft
    bürgerlichen Rechts", but it's not exactly
  • 26:16 - 26:22
    proof of familiarity with Free Software.
    "Dennoch möchte ich im Folgenden unsere
  • 26:22 - 26:27
    Position nochmals klar ausdrücken. Es ist
    weder Ihnen noch anderen Dritten
  • 26:27 - 26:30
    gestattet, unsere interne DSBmobile-API
    für eigene Softwareprodukte abzufragen.
  • 26:30 - 26:35
    Wir untersagen es Ihnen hiermit
    schriftlich und letztmalig." You may not
  • 26:35 - 26:41
    use our internal API, I find it
    questionable whether a publicly facing API
  • 26:41 - 26:46
    is to be considered internal. One might
    argue that it is only for communication
  • 26:46 - 26:51
    between software they control. But I
    believe I control my device and my client
  • 26:51 - 26:58
    installation, not them making the API, not
    internal. "Eine Inverkehrbringung einer
  • 26:58 - 27:02
    App mit gleichem oder ähnlichen Namen zu
    DSB ist Ihnen im europäischen Raum
  • 27:02 - 27:07
    ebenfalls untersagt. Hier liegt
    Markenschutz durch Heinekingmedia vor." I
  • 27:07 - 27:10
    don't understand trademark law. There are
    so many trademarks starting with this or
  • 27:10 - 27:15
    just consisting of the letters DSB with
    partially overlapping registered use cases
  • 27:15 - 27:18
    and their trademark doesn't have
    distinctive character,
  • 27:18 - 27:23
    "Unterscheidungskraft", and I just don't
    understand it. By the way, there are other
  • 27:23 - 27:28
    trademark "Digitales Schwarzes Brett"
    which is registered as a different one
  • 27:28 - 27:33
    from DSB was once rejected as a national
    trademark just because it didn't have
  • 27:33 - 27:38
    distinctive character. Why can there be
    European trademark laws without– European
  • 27:38 - 27:42
    trademarks, without distinctive character?
    I do not understand and I'm not qualified
  • 27:42 - 27:47
    to comment. "Eine App-Bereitstellung im
    Store ist dabei eine geschäftliche
  • 27:47 - 27:51
    Tätigkeit, ganz egal welchem
    wirtschaftlichen Zweck diese folgt, es
  • 27:51 - 27:54
    besteht Verwechslungsgefahr. Wir
    untersagen Ihnen hiermit die Benutzung der
  • 27:54 - 28:03
    geschützten Wortmarke DSB letztmalig." Um,
    the first part is true. I had gotten lot
  • 28:03 - 28:06
    wrong. It counts as "geschäftlicher
    Verkehr" when you provide a service even
  • 28:06 - 28:11
    for free to the public. Er, there's danger
    of confusion, this has to be about the
  • 28:11 - 28:16
    letters DSB, right? Because as I explained
    earlier our logo is completely unrelated.
  • 28:16 - 28:21
    Either, I'm not too certain that there
    really is danger of confusion that
  • 28:21 - 28:26
    Heinekingmedia is directly affected by or
    exclusively affected by. After all, one
  • 28:26 - 28:31
    could also believe that it is an app that
    provides access to something related to
  • 28:31 - 28:35
    the Danish railway company. Of course it
    does not, but it is about recognition
  • 28:35 - 28:40
    value, which is not something that the DSB
    has exclusively for sure. "Wir untersagen
  • 28:40 - 28:44
    Ihnen hiermit die Benutzung der
    geschützten Wortmarke DSB letztmalig."
  • 28:44 - 28:48
    *undistinguishable" "Sollten Sie weiterhin
    gegen unsere deutlichen Aufforderungen
  • 28:48 - 28:53
    verstoßen, werden wir den Fall an unsere
    rechtliche Vertretung, Herrn Doktor Selig
  • 28:53 - 28:59
    übergeben. Dieser ist in dieser E-Mail
    bereits CC." Scaring us. "Ebenfalls werden
  • 28:59 - 29:03
    wir weiterhin gegen jede Veröffentlichung
    einer solchen App vorgehen. Entsprechend
  • 29:03 - 29:08
    dadurch entstehende Kosten würden wir bei
    Ihnen als Schadensersatz geltend machen.
  • 29:08 - 29:13
    Wir bitten um zwingende Beachtung. Mit
    freundlichen Grüßen, Andreas Noack. Noag,
  • 29:13 - 29:20
    Norg, Noack. That's the CEO of
    Heinekingmedia. Yeah, we are famous! We
  • 29:20 - 29:23
    redirected this email to contributor
    Jasmich who had DSBdirect up on the Play
  • 29:23 - 29:27
    Store at this point of time. And he
    decided to take it down and apologize.
  • 29:27 - 29:31
    Suddenly, and this was the very next day
    he received an email that sounded a lot
  • 29:31 - 29:36
    friendlier. "Hallo. Vielen Dank für Ihr
    Entgegenkommen. Wir finden Ihren Ansatz
  • 29:36 - 29:41
    prinzipiell sehr gut. Allerdings hätten
    wir uns gewünscht, dass Sie uns vor
  • 29:41 - 29:45
    Veröffentlichungen und Nutzung unserer API
    um Erlaubnis gebeten hätten." If we had
  • 29:45 - 29:50
    asked for permission, I'm quite sure we
    would not have received it. "Dennoch
  • 29:50 - 29:58
    möchten wir Ihr Engagement gerne würdigen,
    und würden Sie daher gerne zu uns nach
  • 29:58 - 30:03
    Hannover einladen. Vielleicht können Sie
    uns mit Ihren Ideen helfen eine bessere
  • 30:03 - 30:08
    App zu bauen? Vielleicht finden wir ja
    sogar einen Weg, dass Sie daran mitbauen?
  • 30:08 - 30:13
    Gerne fördern wir junge Talente. Wir
    würden uns freuen, Sie kennenlernen zu
  • 30:13 - 30:17
    dürfen. Ich freue mich auf Ihre
    Rückmeldung. Mit freundlichen Grüßen,
  • 30:17 - 30:21
    Noack." I rather– I'll rather leave this
    largely uncommented. I don't know exactly
  • 30:21 - 30:27
    what they want from us, but I guess we'll
    have to see. And that's the dramatic
  • 30:27 - 30:33
    cliffhanger that we have to end our talk
    with. Events are yet to unroll. There's
  • 30:33 - 30:37
    one thing that I can learn from this.
    Don't use other people's trademarks.
  • 30:37 - 30:41
    Because trademark law is too complicated.
    Apologizing instead of being rebellious
  • 30:41 - 30:46
    seems to work better, even if the thought
    of conflict intrigues you and you really
  • 30:46 - 30:51
    do believe you're in the right, you
    probably just misunderstood the law.
  • 30:51 - 30:56
    Alternatively, exclusively do such things
    anonymously. Decide beforehand what you
  • 30:56 - 31:00
    want to put your name on. Thank you.
  • 31:00 - 31:01
    *Applause*
  • 31:01 - 31:02
    *postroll music*
  • 31:02 - 31:03
    Subtitles created by c3subtitles.de
    in the year 2021. Join, and help us!
Title:
36C3 Wikipaka WG: Free access to substitution plans – Deobfuscation adventures
Description:

more » « less
Video Language:
English
Duration:
31:29

English subtitles

Incomplete

Revisions