How to invoke Activities from other application

บทนำ (Overview)

เราสามารถทราบว่ามี “Activity” อะไรบ้างที่อยู่ในโปรแกรม “.apk” ได้จากการ (Reverse engineering) ได้จากบทความ How to access “AndroidMenifest.xml”  ในแต่ละ “Activity” จะประกอบด้วยไฟล์ .xml สำหรับสร้าง “user interface” และไฟล์ .java สำหรับเขียนโปรแกรม ซึ่งเราสามารถเข้าถึงหน้าจอ (Activity) ได้ทันทีแม้จะอยู่หลัง “Login” และสามารถเรียกใช้งานได้จากโปรแกรมอื่น ๆ

ขั้นตอน (Steps)

  1. เปิดไฟล์ “AndroidMenifest.xml” ได้จากบทความ How to access “AndroidMenifest.xml”
  2. ตรวจสอบในส่วนหน้า “Activity” ที่มีเงื่อนไขดังนี้
    • android:exported="true" :หมายถึงให้โปรแกรมอื่นสามารถเรียกใช้งานได้
    • android:exported="false" :ไม่ให้โปรแกรมอื่นเรียกใช้ได้เว้นแต่มี UID เดียวกัน
    • โดยปกติจะมีค่า “Default” ดังนี้ จะตั้งค่าค่า “False”เมื่อ android:minSdkVersion และ android:targetSdkVersion เป็น “version 16” และ เป็น “False” ตั้งแต่ version 17 ขึ้นไป
  3. โดยปกติใน Source-code เราสามารถตรวจสอบ “version” ของ “minSdkVersion” ได้ที่ไฟล์ “build.gradle”
    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 23
        buildToolsVersion '23.0.1'
    
        defaultConfig {
            applicationId "com.itselectlab.test"
            minSdkVersion 19
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        dexOptions {
            incremental true
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.1.1'
        compile 'com.android.support:design:23.1.1'
    }
    
    
  4. จากนั้นเชื่อมต่อ “ADB shell” ได้จากบทความ How to connect ADB shell on mobile device
  5. จากตัวอย่างเราจะเชื่อม “ADB” ผ่าน “Emulator” สามารถศึกษาวิธีสร้าง “Emulator” ได้จาก  How to start Android Emulator (AVD)
  6. ตรวจสอบ Device ที่เปิดขึ้นโดยใช้คำสั่งดังนี้ intent1
    C:\Users\[user]\AppData\Local\Android\sdk\platform-tools>adb devices
    List of devices attached
    emulator-5554   device
    
  7. เมื่อตรวจสอบพบ “Device” แล้ว เราก็จะเชื่อมต่อ ADB shell โดยใช้คำสั่งดังนี้
    C:\Users\[user]\AppData\Local\Android\sdk\platform-tools>adb shell
    root@generic_x86:/ #
    
  8. จากนั้นเราจะเรียก “Activity” ใดตามที่พบใน “AndroidMenifest.xml” โดยมีลักษณะ packageName/.activityName ดังนี้
    C:\Users\wsunpachit\AppData\Local\Android\sdk\platform-tools>adb shell
    root@generic_x86:/ #  am start -n com.itselectlab.test/.LoginActivity
    Starting: Intent { cmp=com.itselectlab.test/.LoginActivity }
    root@generic_x86:/ #
    
  9. จะพบว่าหน้าจอโปรแกรมมจะถูกเปิดขึ้นมา…intent2

ใส่ความเห็น