How to read the “Copy/Paste” Buffer Caching – Sieve

บทนำ (Overview)

บทความนี้นำเสนอ การเขียนโปรแกรม เกี่ยวกับการ “Copy” และ “Paste” ข้อมูลใน “Clipboard” ซึ่งข้อมูลที่ถูกเก็บไว้ที่นี้ สามารถเข้าถึงจากโปรแกรมอื่น ๆ ได้ เพราะฉะนั้นข้อมูลสำคัญใน “Textbox” หรือที่ใด ๆ ก็ไม่ควรเก็บไว้ใน “Clipboard” เพื่อป้องกันโปรแกรมไม่ประสงค์ดีแอบอ่านและส่งไปยังผู้ประสงค์ร้าย เพื่อนำไปประติดประต่อเป็นข้อมูลสำคัญ โดยที่เราอาจไม่ตั้งใจก็ได้

ขั้นตอน (Steps)

  1. ติดตั้งโปรแกรม How to install Android Studio เราจะใช้เพื่อเขียนโปรแกรมอ่าน “Clipboard”
  2. สร้าง “AVD” โดยสามารถติดตามจากบทความ How to start Android Emulator (AVD)
  3. เราจะสร้างโปรแกรมสำหรับอ่าน “Clipboard” เข้าไป โดยแก้ไข “Source Code” ของโปรแกรมช่องโหว่ “DIVA
  4. ติดตั้งโปรแกรม sieve เพื่อใช้เป็นตัวอย่างสำหรับโปรแกรมช่องโหว่ How to install sieve.apk on Genymotion Emulator
  5. เปิด “Source” ของ “DIVA” เราจะสร้าง “Activity” ใหม่ขึ้นมาสำหรับอ่าน “Clipboard” คลิกขวาและเรียกเมนูตามภาพข้างล่างandroid-clipboard-01
  6. ตั้งชื่อ “Activity” ตามใจชอบ จากนั้นกดปุ่ม “Finish”android-clipboard-02
  7. จากนั้นไปที่เมนู “res\layout\<activity ที่สร้างขึ้นมาใหม่>” จากนั้นคลิก “Tab Text” เพื่อสร้าง “GUI”android-clipboard-03
  8. เพื่อ “Controls” ปุ่มกับกล่องแสดงข้อความ ดังนี้
        <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/rBuffer" android:id="@+id/cmdRead" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:onClick="access"/>
    
        <TextView android:layout_height="wrap_content" android:id="@+id/txtShowBuffer" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_below="@+id/cmdRead" android:textAlignment="center" />
    
  9. ที่นี้เราจะต้องตามไปเพิ่มที่ “\value\string.xml”
    <string name="rBuffer">Read Buffer</string>
    

    android-clipboard-04

  10. ที่นี้เราจะเพิ่มปุ่มในหน้า “Main menu” (\res\layout\content_main.xml) เพื่อเรียกใช้งาน “Activity” ใหม่ที่เราสร้าง
            <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/rBuffer" android:id="@+id/cmdReadActivity" android:onClick="startChallenge" android:layout_below="@+id/d13button" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" />
    

    android-clipboard-05

  11. กลับมาเขียน “Intent” ที่ “MainActivity” ให้กับปุ่มหน้าจอหลักเพื่อไปเรียก “Activity” ใหม่ที่เราสร้างมา
    else if (view == findViewById(R.id.cmdReadActivity)) {
       Intent i = new Intent(this, ReadClipBoardActivity.class);
       startActivity(i);
    }
    

    android-clipboard-06

  12. จากนั้นกลับไปเขียน code สำหรับการอ่าน “Clipboard” ที่ “Activity” ใหม่ที่สร้างไว้
    package jakhar.aseem.diva;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    import android.widget.Button;
    import android.view.View;
    import android.widget.TextView;
    import android.content.ClipData;
    import android.content.ClipboardManager;
    import android.content.Context;
    
    
    public class ReadClipBoardActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_read_clip_board);
    
            final Button btn1 = (Button) findViewById(R.id.cmdRead);
            final TextView txtRead = (TextView)findViewById(R.id.txtShowBuffer);
            txtRead.setTextSize(30);
    
            btn1.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
    
                    ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                    ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
                    txtRead.setText(item.getText().toString());
                }
            });
        }
    }
    
  13. โปรแกรมที่ผ่านการ “Compile” และจะอยู่ใน “Folder” ของ “\diva-android-master\app\build\outputs\apk” เราสามารถนำไป “Install” และทดสอบการอ่าน “Clipboard” ของ “Sieve” ได้ดังนี้ android-clipboard-07
  14. เมื่อคลิกอ่าน “Password” โปรแกรมใช้วิธีการซ่อนผ่าน “Clipboard” เพื่อไม่ให้คนอื่น ๆ มองเห็น เพื่อนำใน “Paste” ใส่ “Field” ของ “Password” ได้ทันที ลองใช้โปรแกรมที่เราสร้างขึ้นมา android-clipboard-08

ใส่ความเห็น