Ergebnis 1 bis 4 von 4
Like Tree3Likes
  • 3 Post By StarGate01

Thema: [Hack] Aufrufen von nativen Bibliotheken

  1. #1
    WPVision.de Erfahrener


    Registriert seit
    Nov 2014

    Kenntnisse
    Guru
    Smartphone Hersteller
    Samsung
    Smartphone Modell
    Ativ S
    Netzbetreiber

    Beiträge
    131
    Danke erhalten
    66

    Lightbulb [Hack] Aufrufen von nativen Bibliotheken

    Hallo liebe Forengemeinde,

    Zunächst: Das ist ein Hack. D.h. ich übernehme keine Garantie dass es klappt, und ich übernehme auch keine Haftung für eventuell entstandene Schäden.
    Außerdem hab ich diese Methode weder erfunden, noch den ganzen Code selbst geschrieben. Quellen stehen unten.

    Ich dachte mir ich teile einen kleinen Trick mit euch, der mir bei meinen Apps schon ab und zu geholfen hat.
    Die Anleitung ist für Programmierer mit Genunlocken WP8 oder WP8.1 (WP10 ungetestet) Handys.

    Ziel der Bemühungen ist es, beliebige Bibliotheken (DLLs) aus /System32/ zu laden, und dann von diesen Funktionen aufzurufen.
    Demonstrieren werde ich das hier anhand der Funktion ShellChromeAPI.dll#Shell_TurnScreenOn. Diese Funktion kann das Handy ausschalten (=sperren).

    Nun gibt es mehrere Möglichkeiten nicht verwalteten Code aufzurufen, die einfachte ist P/Invoke:

    C# Code
    Code:
    [DllImport("ShellChromeAPI.dll")]
    private extern static void Shell_TurnScreenOn(bool value);
    Dieser Aufruf funktioniert in Windows-Store-Apps, jedoch nicht in Silverlight 8.0 (grundsätzlich nicht) und auch nicht in Silverlight 8.1 (Nur bestimmte DLLs dürfen aufgerufen werden).
    Nun ist aber das Problem, dass mache Apps Bibliotheken aus der Silverlight-Welt benötigen UND native Bibliotheken aufrufen müssen.
    Das schöne ist, dass in Windows-Phone-Apps selbstgeschriebene native Bibiotheken eingebunden werden können - So genannte Runtime Components.
    Der Plan ist also folgender: Eine RTC in C++ schreiben, die über krude Wege die gewünschte Bibliothek läd und aufruft.
    Gesagt, getan:

    C++ Code (NativeAPI.h)
    Code:
    #pragma once
    using namespace Platform;
    namespace RTComponent
    {
        public ref class NativeAPI sealed
        {
            public:
                NativeAPI();
                void TurnScreenOn(bool state);
        };
    }
    Und nun der eigentliche Teil.
    Was hier passiert ist etwa folgendes:
    • Pointer auf den aktuellen Thread Environment Block auslesen
    • Die Adresse von KERNEL32.dll im Speicher ermitteln
    • Die Adresse der Funktion LoadLibraryExW ermitteln und als Delegat einhängen
    • Mit LoadLibraryExW und GetProcAddress die gewünsche Funktion laden und einhängen
    • Die Funktion bereitstellen


    C++ Code (NativeAPI.cpp)
    Code:
    #include "pch.h"
    #include "NativeAPI.h"
    #include "Objbase.h"
    
    using namespace RTComponent;
    using namespace Platform;
    
    typedef struct _CLIENT_ID {
        PVOID UniqueProcess;
        PVOID UniqueThread;
    } CLIENT_ID;
    typedef struct _MODULE_LIST_ENTRY {
        struct  _MODULE_LIST_ENTRY* Flink;
        struct  _MODULE_LIST_ENTRY* Blink;
        DWORD* baseAddress;
    } MODULE_LIST_ENTRY;
    typedef struct _PEB_LDR_DATA {
        //    BYTE fill[0x1c]; x86
        ULONG Length;
        BOOLEAN Initialized;
        PVOID SsHandle;
        LIST_ENTRY InLoadOrderModuleList;
        LIST_ENTRY InMemoryOrderModuleList;
        MODULE_LIST_ENTRY* initModuleList;
    } PEB_LDR_DATA;
    typedef struct _PEB {
        //    BYTE fill[0x0c]; x86
        BYTE Reserved1[2];
        BYTE BeingDebugged;
        BYTE Reserved2[1];
        PVOID Reserved3[2];
        PEB_LDR_DATA* ldr;
    } PEB;
    typedef struct _TEB {
        //BYTE fill[0x30]; x86
        NT_TIB nt_tib;
        PVOID EnvironmentPointer;
        CLIENT_ID id;
        PVOID ActiveRpcHandle;
        PVOID ThreadLocalStoragePointer;
        PEB* currentPEB;
    } TEB;
    typedef HMODULE(*LoadLibraryEx)(LPCTSTR lpLibFileName, HANDLE hFile, DWORD dwFlags);
    
    //ShellChromeAPI
    
    typedef VOID(*Shell_TurnScreenOn)(BOOL state);
    Shell_TurnScreenOn Shell_TurnScreenOnW;
    
    NativeAPI::NativeAPI()
    {
        TEB* teb = NtCurrentTeb();
        HMODULE kernel = (HMODULE)teb->currentPEB->ldr->initModuleList->Flink->baseAddress;
        LoadLibraryEx LoadLibraryExW = (LoadLibraryEx)GetProcAddress(kernel, "LoadLibraryExW");
        HMODULE ShellChromeAPI = LoadLibraryExW(L"ShellChromeAPI.dll", NULL, 0x00001000);
        Shell_TurnScreenOnW = (Shell_TurnScreenOn)GetProcAddress(ShellChromeAPI, "Shell_TurnScreenOn");
    }
    
    void NativeAPI::TurnScreenOn(Boolean state)
    {
        Shell_TurnScreenOnW(state);
    }
    Aus diesen beiden Dateien baut man sich nun ein Runtime Component, kompiliert dieses und referenziert es in seiner Hauptapp.
    Danach kann mit

    C# Code
    Code:
    using RTComponent;
    NativeAPI napi = new NativeAPI();
    napi.TurnScreenOn(false);
    die Funktion aufgerufen werden - und das Handy sperrt sich, d.h. der Bildschirm geht aus.

    Einige interessante DLLs sind:
    Code:
    ADVAPI32LEGACY.DLL
    FCRouterProxy.dll
    MediaApi.dll
    RadioApi.dll
    ShellChrome.dll
    ShellChromeAPI.dll
    WinMMBase.dll
    Das Problem daran ist die Methodensignaturen zu ermitteln. Nutzt ein Programm wie IDA Pro oder DUMPBIN um die Exports zu ermitteln, aber die Signaturen müssen von Hand herausgefunden werden.
    Hilfe ist immer gern gesehen!

    Ich hoffe diese kleine Anleitung hat dem ein oder anderen geholfen!


    Quellen:
    winapi - How to call Shell_TurnScreenOn in ShellChromeAPI.dll from C++ (Windows Phone)? - Stack Overflow
    [XAP][SOURCE] Native Toast Notification Laun… | Windows Phone 8 Development and Hacking
    [HACK] Using complete Windows API in Windows… | Windows 8, RT Development and Hacking
    http://www.cnblogs.com/anye6488/p/3915852.html (Chinesisch)
    Windows Phone C++ Load System Dll Using LoadLibraryExW | VILIC's Blog

    P.S.: Sollte das hier auf Interesse stoßen, werde ich noch vielleicht noch weitere "Hack"-Anleitungen schreiben: Wie man eine Lockscreen-App entwickelt, wie man das Samsung-RPCCompoonent verwendet, wie man eigene Apps in die Systemeinstellungen bringt, ...
    Die Infos existieren zwar schon alle im Netz, aber nicht auf Deutsch und auch nicht gebündelt.
    CTHTC, angerlilli und softkill haben sich bedankt.

  2. #2
    Supermod
    Avatar von CTHTC

    Registriert seit
    Oct 2012

    Smartphone Hersteller
    Nokia
    Smartphone Modell
    Lumia 1520
    Weitere Modelle
    *Samsung AtivS Win10M RS2 Insider*HTC HD2 WP7.8*
    Tablet Hersteller
    Microsoft
    Tablet Modell
    Surface Pro 4
    Netzbetreiber
    Vodafone

    Beiträge
    25.744
    Danke erhalten
    2274
    Auch wennich persönlich damit derzeit nocht nicht viel anfangen kann, ist das doch eine interessante Materie.
    Wenn Du Zeit und Lust hast wäre es super, wenn Du noch weitere Anleitungen bereitstellen könntest. Wie Du schon gesagt hast, geistert da zwar schon viel im Netz rum aber englisch ist nicht jedermanns Sache.

    Gruß
    CTHTC
    Wenn Du ein paar nette Worte loswerden möchtest, dann hier klicken. / Das Passwort für unsere Downloads findest Du hier!



    Aktuelle Sachen rund um die Welt von Microsoft kannst Du Dir in unserem Podcast anhören.


    Bisher erfolgreich getestet:

    HTC HD2 * HTC Titan * Samsung Ativ S * Nokia Lumia 1520 * Nokia Lumia 635 * Allview Impera S * TrekStor WinPhone 4.7 HD * Microsoft Lumia 535 * Microsoft Lumia 950XL * Microsoft Lumia 650 *
    Asus Vivo Tab * Microsoft Surface Pro 2 * Acer Iconia W4 * Lenovo YOGA Tablet 2 1051 F * Microsoft Surface 3 * i.onik Windows 10 Global Tab W11601 *Microsoft Surface Pro 4 *

  3. #3
    WPVision.de Erfahrener


    Registriert seit
    Nov 2014

    Kenntnisse
    Guru
    Smartphone Hersteller
    Samsung
    Smartphone Modell
    Ativ S
    Netzbetreiber

    Beiträge
    131
    Danke erhalten
    66
    Hier gibts die Testbibliothek zum Download: RTComponent.zip

  4. #4
    WPVision.de Erfahrener


    Registriert seit
    Sep 2015

    Kenntnisse
    Anfänger
    Smartphone Hersteller
    Nokia
    Smartphone Modell
    lumia 830
    Netzbetreiber
    Base/ E-Plus

    Beiträge
    189
    Danke erhalten
    11
    hi also erstmal hut ab auch wen ich grad wie ein schwein ins Uhr werk schau Respekt für die
    die das alle drauf haben

Ähnliche Themen

  1. WindowsPhone Backup online aufrufen
    Von CTHTC im Forum Anleitungen
    Antworten: 2
    Letzter Beitrag: 04.12.15, 15:50
  2. Xbox One Controller: erster Hardware-Hack verfügbar
    Von InsideMetro im Forum XBox One Hardware Tipps und Tricks
    Antworten: 0
    Letzter Beitrag: 05.12.13, 21:34

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
über uns

... WPVision.de ist Deine Community im Bereich Windows Phones und Windows Tablets.

Fragen, Probleme oder Sorgen? Einfach registrieren, Post schreiben und schon wird Dir geholfen.

Dein WPVision.de Team

Folgt uns auf...