Wifi android app reverse engineering

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Torac
  • Registratie: Maart 2017
  • Laatst online: 18:56
Ik wil graag de app "ai-sync" reverse engineren om deze zo via mijn raspberry pi aan te kunnen sturen.
Deze app stuurt een wifi ceiling fan controller aan.

Hier de product pagina.
https://www.amazon.com/dp..._r_cp_api_i_FrOUDbVMFETS2

Nu heb ik de java codes eruit gekregen maar ik zie door de bomen het bos niet meer.
Ik dacht dat er ergens een code zou staan die een http post naar ipadress doet met daarin de boodschap speed X en off/on. Maar helaas is het niet zo simpel.

Kan iemand mij een beetje op weg helpen?

Hier een download link met de decompiled java sources.
https://drive.google.com/...OOXAAQjZ4OzSaO-EjxT5HtbeC

Acties:
  • 0 Henk 'm!

  • cowandchicken
  • Registratie: September 2018
  • Laatst online: 10-02 22:23
als ze het zo simpel gemaakt zouden hebben zou dat wel erg kwetsbaar zijn. Ik zie in je code classes als cipher, challenge en authentication.
Als ze al gebruik maken van een rest API dan zal deze authenticatie verwachten ben ik bang.
Ik ben verder niet thuis in java en betwijfel of decompiled code nog even leesbaar is als het zou moeten zijn

Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 17:53

DataGhost

iPL dev

De "java codes" zitten niet in de app en kan je er ook niet meer uit krijgen. Android apps zijn in principe in .dex-formaat met bytecode (smali volgens mij, het is voor mij ook weer een paar jaar geleden dat ik hiermee bezig was). Die kan je wel behoorlijk goed omzetten naar java-bytecode, en van daaruit is het gokwerk. Zo te zien is dat wat je nu hebt, .class-files zijn bytecode, niet source. Er zijn programma's waarmee je dat kan "omzetten naar source code" maar dat is eigenlijk schromelijk overdreven. Bij het compilen wordt eigenlijk standaard optimalisatie toegepast, waardoor de source code op bepaalde manieren verandert wordt zodat nog steeds hetzelfde gebeurt, maar de VM het op een voor de VM logischere manier kan uitvoeren. Daarbij gaat ook heel veel informatie van de code-structuur verloren. Het enige wat zulke apps doen is aan de hand van de bytecode gokken wat de source geweest zou kunnen zijn, en dan lukt maar bij een zeer beperkte subset van de code, en vaak komen er stukken code uit die onmogelijk kunnen werken (gewoon fout zijn dus), o.a. vanwege de optimalisatie. Je moet op veel plekken nog bytecode (een soort assembly) lezen en begrijpen om er chocola van te kunnen maken, en dat is ontzettend tijdrovend. Als je het vaker hebt gedaan kan je wel makkelijker in de juiste richting zoeken. Omdat dit nog relatief "makkelijk" is voor een geoefend persoon, gebruiken ze vaak nog obfuscators. Als ze een goede obfuscator hebben gebruikt is het ook vrijwel onmogelijk om dat te reversen, je zal ook veel werk zelf/handmatig moeten doen zoals strings decrypten/decoden, wat het zoeken op URLs enorm veel meer moeite maakt.

Anyway, je zou eens kunnen kijken naar jd-gui, een java "decompiler". Die probeert er dus java-source van te maken en laat je anders in ieder geval annotated bytecode (human-readable dus) zien. Dat is al wat leesbaarder dan de .class-files.

Soms is een andere aanpak ook makkelijker. Heb je bijvoorbeeld al geprobeerd om het wifi-verkeer te sniffen met een geschikte wifi-adapter, of over een kabel tussen twee AP's bijvoorbeeld? Als het niet versleuteld is kan je daar direct mee uit de voeten.
cowandchicken schreef op vrijdag 1 november 2019 @ 09:39:
als ze het zo simpel gemaakt zouden hebben zou dat wel erg kwetsbaar zijn. Ik zie in je code classes als cipher, challenge en authentication.
Als ze al gebruik maken van een rest API dan zal deze authenticatie verwachten ben ik bang.
Ik ben verder niet thuis in java en betwijfel of decompiled code nog even leesbaar is als het zou moeten zijn
Je hebt wel de hele source, waarmee het mogelijk is om te verbinden naar die service. Dat betekent dus dat je het zelf na kan maken. Die classes die jij noemt zijn niet zo heel spannend en zijn in vrijwel elke app wel aanwezig, de gebruikte libraries worden namelijk voor een behoorlijk deel meegepackaged met de app. Ik ken de details verder niet helemaal, ik heb namelijk nog nooit een android-app gemaakt, ik heb ze alleen maar deels gereversed 8)7 maar dat is wat ik heb gezien.

Voor een wifi-ventilator kan je je ook afvragen hoe belangrijk de "veiligheid" is en ingeschat is door de maker van de app. Het zou zomaar kunnen dat die classes die je noemt alleen maar gebruikt worden voor contact met een webservice, of om ads in te laden ofzo, en helemaal niet voor de fan zelf.

[ Voor 10% gewijzigd door DataGhost op 01-11-2019 10:05 ]


Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 16:21

memphis

48k was toen meer dan genoeg.

Ik denk met snifferen dat je veel sneller je info krijgt.

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
memphis schreef op vrijdag 1 november 2019 @ 10:06:
Ik denk met snifferen dat je veel sneller je info krijgt.
Exact dit. Zet gewoon een MitM op waarop je al het verkeer afluistert. Dit kan op de telefoon, je access point of de elders in de keten. Als er TLS (HTTPS) gebruikt wordt, moet je hopen dat het certificaat niet gecontroleerd wordt (wat voor dit soort apparatuur helaas gebruikelijk is), dan kun je gewoon decrypten, afluisteren en opnieuw encrypten.

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 17:53

DataGhost

iPL dev

En anders, ik heb even kort gekeken naar de "source" van de app, ik kon daar niet echt veel applicatielogica vinden wat niet van third parties komt. Als ik verder kijk zie ik dat vanaf het entrypoint heel gauw cordova gebruikt wordt, wat me een soort webserver/browser lijkt te zijn, en die laadt assets/www/index.html (uit de APK). Dat lijkt de app zelf te zijn, en de hele boel is geschreven in javascript. Volgens mij staat de applicatielogica dus in assets/www/build/, beginnend met main.js. Het lijkt allemaal minified javascript te zijn, maar niet deels obfuscated. Dus dan zou ik daar gaan kijken als sniffen niet werkt.

Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 18:04
Heb je de fancontroller al eens opengemaakt? In veel gevallen is IoT-meuk gebaseerd op de ESP8266 wifi-chip en dan kun je er zo Tasmota firmware (of iets anders) op flashen. Zit je ook niet meer vast aan een of andere gare Chinese app.

https://github.com/arendst/Tasmota/wiki/Sonoff-iFan02

En mocht er toch een ander chipje in zitten waardoor flashen niet mogelijk is, dan kun je zo'n Sonoff bestellen en die inbouwen. Zijn de kosten ook niet.

[ Voor 32% gewijzigd door ThinkPad op 01-11-2019 10:38 ]


Acties:
  • 0 Henk 'm!

  • Torac
  • Registratie: Maart 2017
  • Laatst online: 18:56
Bedankt voor de reacties.
@ThinkPad zeker een mogelijkheid maar zou toch liever de originele software op te houden zodat de afstandsbediening het ook blijft doen.

@DataGhost Daar heb ik wat aan, bedankt.

@Evanescent Heb je een linkje met een tutorial? Ik denk gewoon nox/bluestacks of een andere android simulator daar de app op en dan via wireshark oid het verkeer af luisteren?

@DataGhost Bedankt voor de lading met info. Ik heb jd gui al gebruikt maar die bleef maar laden rond de 75%.
Pagina: 1