How to find the hardcoded username and password using Hopper

บทนำ (Overview)

บทความนี้กล่าวถึงการหาข้อมูลสำคัญในโปรแกรม เช่น username และ password ที่ถูกฝั่งอยู่ใน sourcecode โดยใช้โปรแกรมที่ชื่อว่า Hopper ซึ่งมีความสะดวกในการค้นหาคำสำคัญ และแปลงเป็น pseudo code ให้ง่ายต่อการตรวจสอบอีกด้วย สามารติดตามกรณีใกล้เคียงกันในโปรแกรมประเภท Android ได้ดังต่อไปนี้

 ขั้นตอน (Steps)

  1. ติดตั้งโปรแกรม “DVIA” เลือกเมนู “Binary Patching”
  2. จะเห็นหน้า Login ให้ทำการค้นหา username และ password สำหรับการ login
  3. ติดตั้งโปรแกรม “Hopper” บนเครื่อง “Mac”
  4. ดึง “Binary” มาไว้ที่เครื่อง “Mac” โดยเข้าไปที่โฟลเดอร์ดังข้างล่างผ่านโปรแกรม “File Transfer” หรือใช้สาย “Data link” ก็ได้ สามารถทราบรายละเอียดเพิ่มเติมที่
  5. เปิดโปรแกรม “Hopper” สามารถติดตามวิธีใช้ Hopper เพิ่มเติมได้จากบทความ
  6. จากนั้นโหลด “Binary” เข้ามายัง “Hopper” โดยใช้เมนู “File – Read Executable to Disassemble…”
  7. เลือกไฟล์ “Binary” ที่เอามาจากเครื่อง “iOS”
  8. จากนั้นกด “Ok”
  9. โปรแกรมจะแสดงหน้าจอ 2 ฝั่ง ฝั่งซ้ายคือส่วนค้นหา ฝั่งขวาคือ ส่วนคำสั่ง จากรูปเราสามารค้นหาแบบ “Labels” ซึ่งก็คือชื่อ “Method” ของโปรแกรมที่กำลังตรวจสอบนั้นเอง
  10. ให้ใช้คำค้นหาที่เกี่ยวข้องกับหน้า Uiviewcontroller นั้นก็คือ applicationpatching
  11. จากนั้นตรวจสอบ Method ที่อาจเกี่ยวข้องซึ่งพบว่ามีเกี่ยวข้องกับ Login ดังนี้
    [ApplicationPatchingDetailsVC loginMethod1Tapped:]
    
  12. ให้คลิกเลือก method ดังกล่าว จะปรากฏ code ทางด้านขวา
  13. ให้ใช้งาน pseudo code โดยคลิกปุ่ม
  14. จะได้ code ดังนี้
    void -[ApplicationPatchingDetailsVC loginMethod1Tapped:](void * self, void * _cmd, void * arg2) {
        r8 = self;
        r10 = [[r8 usernameTextField] retain];
        r4 = @selector(text);
        r0 = [r10 text];
        r7 = &arg_C;
        r11 = [r0 retain];
        r2 = @"Admin";
        r5 = @selector(isEqualToString:);
        if (([r11 isEqualToString:r2] & 0xff) != 0x0) {
                r0 = [r8 passwordTextField];
                r0 = [r0 retain];
                r6 = r0;
                r0 = [r0 text];
                r7 = r7;
                r0 = [r0 retain];
                r4 = r0;
                r2 = @"This!sA5Ecret";
                r5 = [r0 isEqualToString:r2];
                [r4 release];
                [r6 release];
                [r11 release];
                [r10 release];
                if ((r5 & 0xff) != 0x0) {
                        r0 = 0x1f2108;
                }
                else {
                        r0 = 0x1f210c;
    
  15. พบ username และ password ปรากฏอยู่ใน code
  16. ทดลองเอาไป login
  17. สามารถ Login ได้

ใส่ความเห็น