1. ANH EM CHÚ Ý CHỈ SỬ DỤNG CÁC HOST SAU ĐỂ UPLOAD/DOWNLOAD FILE !
    Dismiss Notice
  1. vandieutot

    vandieutot Chơi Mobile

    Bài viết:
    11,024
    Đã được thích:
    16,589
    Hướng dẫn fix USSD time out (tự mất mất sau 2 giây)

    Ở các máy hàn quốc bản K thường có 1 tình trạng làm ta hết sức bực bội là, #101# nó cứ tự mất đi sau 2s.
    Vậy làm thế nào để fix, có nhiều bạn hỏi mình (hình như gần đây nhất là box VU2 có hỏi) nên lần này mình tranh thủ hướng dẫn các bạn sửa/ Vẫn theo cách sửa tường tận, ngọn ngành để các bạn nắm được nguyên do nhé.

    Công cụ:
    dex2jar
    notepad ++ và plugin smali cho notepad++
    java decompiler
    apk tool

    Tự search các công cụ trên hoặc tìm các tút cũ của mình nhé
    Hướng dẫn fix USSD time out (tự mất mất sau 2 giây) viết bởi hoangnova từ LGViet.com

    Đầu tiên decompile thằng LGPhone.apk ra đã, nói chung mọi tính năng liên quan đến gọi điện, ussd đều nằm trên này nên ta cần sửa ở đó.
    Trước khi viết tút này mình cũng chả biết cái phần đó nằm ở đâu trong mớ hổ lốn kia. Tuy nhiên theo kinh nghiệm nên mình cứ search toàn bộ đám smali với từ khóa ussd xem thế nào đã.

    Đây rồi, thấy mấy cái liên quan đến ussd, mở lên xem thế nào
    [​IMG]

    Bây giờ code smali thế này thì nhìn khó hiểu lắm, nên cần dex2jar để xem các class có mấy từ khóa mà ta vừa tìm xem thế nào đã.

    Trong method displayMMIComplete thuộc class PhoneUtils nên đọc method đó xem thế nào. Nói lại, mấu chốt vẫn là cần có kinh nghiệm 1 chút về đọc code java và smali

    Kinh nghiệm cho thấy, các biến hoặc method trong code android thường đặt tên khá rõ ràng, trong method đó mình thấy cái khả nghi là mMmiCompleteTimeoutCbMsg, nghe có vẻ giống giống cái ta tìm.
    Vậy lần theo nó xem sao, trò này hơi hơi giống thám tử Conan, lần theo các manh mối ta có.
    USSD time out, fix #101# tự mất, fix ussd, LGVIet.com, hoangnova

    Search trong file đó khi đọc bằng java decompiler bằng ta thấy có 1 đoạn vô cùng khả nghi nằm trong displayMMIComplete nó đây:

    [​IMG]


    Khi thực USSD hiện lên, nó gửi đi 1 msg gì đó có giá trị 2000L = với khoảng thời gian mà cái ussd bị mất, lại có liên quan tới mMmiCompleteTimeoutCbMsg.
    Sau đó ta lại thấy nó check với if (ConfigUtils.isTargetOperator(2)) thì mới thực hiện việc đó, vậy check tiếp xem isTargetOperator(2)

    Lần theo manh mối này vào ConfigUtils ta tìm đc

    Mã:
    public static boolean isTargetOperator(int paramInt)
    {
    return MTARGETOPERATOR == paramInt;
    }
    Tìm tiếp MTARGETOPERATOR
    Mã:
    MTARGETOPERATOR = setTargetOperator();
    Tìm tiếp setTargetOperator(); xem cuối cùng nó check với isTargetOperator(2) là cái gì.

    [​IMG]




    Đây rồi vậy ta hiểu rằng nó chẹck với nhà mạng KT trong build.prop thì nó gửi cái msg đó đi. tạm vậy đã, tuy nhiên ko chắc lắm, phải sửa thử xem sao.

    Lưu ý, bài viết này mình viết theo hướng bình dân hóa, ko nặng về kỹ thuật lập trình, vì vậy đừng vặn vẹo nhiều.

    Quay trở lại với thằng PhoneUtils giờ ta làm gì, có 2 hướng 1 là thử tăng cái thời gian 2000L kia lên, 2 là thay đổi giá trị isTargetOperator(2) thành số khác, ví dụ số 5 chẳng hạn.

    Ở đây mình sửa thời gian timeout cho nó nhiều nhiều chút thành 2 phút chẳng hạn (thế là thoải mái rồi) (khoảng 120 giây, tương đương với 120000L. 2000L = 2 giây)

    Dùng calculator để đổi giữa Dec và Hex như tút trước hướng dẫn nhé.

    Mã:
    .line 1760
    sput-object p3, Lcom/android/phone/PhoneUtils;->mMmiCompleteTimeoutCbMsg:Landroid/os/Message;

    .line 1763
    const/16 v17, 0x2

    :try_start_2
    invoke-static/range {v17 .. v17}, Lcom/android/phone/ConfigUtils;->isTargetOperator(I)Z

    move-result v17

    if-eqz v17, :cond_12

    .line 1764
    sget-object v17, Lcom/android/phone/PhoneUtils;->mMmiCompleteTimeoutCbMsg:Landroid/os/Message;

    invoke-virtual/range {v17 .. v17}, Landroid/os/Message;->getTarget()Landroid/os/Handler;

    move-result-object v17

    const-wide/16 v18, 0x7d0

    move-object/from16 v0, v17

    move-object/from16 v1, p3

    move-wide/from16 v2, v18

    invoke-virtual {v0, v1, v2, v3}, Landroid/os/Handler;->sendMessageDelayed(Landroid/os/Message;J)Z
    Thấy cái 0x7d0 ko ? Nó chính là giá trị 2000L đấy, giờ mình sửa thành thế này

    Mã:
    const-wide/32 v18, 0x1d4c0


    Như thế là thành 2 phút cho thoải mái.

    Save lại và Compile file LGPHone.apk.

    Test thử xem sao. Chắc chắn là ngon lành ko bị time out sau 2 giây nữa.

    Chúc may mắn nhé.
    Nguồn: lgviet.com cám ơn anh @hoangnova@hoangnova
     
    • Mở iCloud all iPhone/iPad: 6/6S/7/7+,...
    • Mở qua IMEI, trực tiếp trên servers Apple !
    • Thời gian chờ chỉ 1-24h, 100% thành công !
    • Hỗ trợ máy đã báo mất: Lost/Stolen/Blacklist !
    • Unlock all iPhone lock Nhật, Mỹ: 5,5S,6,6S,7/7+ !
    • Thời gian chờ chỉ từ 1 ngày, 100% thành công !
    • Hỗ trợ tất cả các nhà mạng/quốc gia !
    • Hỗ trợ máy đã báo mất: Lost/Stolen/Blacklist !
    Tags:
    dokyson thích bài này.
  2. dokyson

    dokyson Administrative

    Bài viết:
    18,143
    Đã được thích:
    20,135
    Anh em Dev LG chiến luôn nhỉ
     
    vandieutot thích bài này.
  3. vandieutot

    vandieutot Chơi Mobile

    Bài viết:
    11,024
    Đã được thích:
    16,589
    Anh em LG chiến đấu thôi nào :)
     
Đang tải...