利用系統時間實現APP內部隨機IMEI和IMSI的方法

前言

我們知道很多APP都有第一次使用的體驗功能,如Wifi伴侶,手機第一次使用時就會免費時長;還有很多的APP活動,比如百度糯米、安客居等,還有以前360應用的下載賺金幣等等,都是手機的初次使用時纔有。很顯然,他們識別初次的方法就是手機的IMEI或者IMSI,如果能有一種方法,讓APP啓動時都像第一次啓動那樣被服務器端識別的話,那麼Wifi伴侶就有無限的使用時長了,或許百度糯米也可以無限領優惠了..(意淫結束 與錢掛鉤的東西,從來沒有那麼容易的。。)下面就說說隨機的方法。

該方法來源於好友 @晴天 的分享。

一開始的考慮是直接產生隨機數。先寫Java代碼 然後再轉化爲Smali的話,必然是一大串,這就增加了錯誤的機率,那有沒有一種更簡單的。唉 不做引誘了,也不多說明了,老累%>_<% 其實就是藉助系統時間。利用的 currentTimeMillis()方法,獲取相對於1970年1月1日0時起到當前的毫秒。一般是19位長型數字,然後在用substring()方法取到15位數字就可以隨機僞裝IMEI和IMSI。具體代碼見下:

修改IMSI:示例是我是車神_Ver1.2.6

    .local v1, "telManager":Landroid/telephony/TelephonyManager;
    invoke-virtual {v1}, Landroid/telephony/TelephonyManager;->getSubscriberId()Ljava/lang/String;

    move-result-object v0
   //獲取系統的時間
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0

   invoke-static {v0, v0}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
	
    move-result-object v0
   //獲取長度
    invoke-virtual {v0}, Ljava/lang/String;->length()I

    move-result v1
   //截取15位
    add-int/lit8 v1, v1, -0xf

    invoke-virtual {v0, v1}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v0
	
    .local v0, "imsi":Ljava/lang/String;

修改IMEI:示例是追魂3_Ver1.0
    invoke-virtual {v0}, Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String;

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0
	
    invoke-static {v0, v0}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
		
    move-result-object v0

    iget-object v1, p0, Lcom/call3/VerifyActivity;->c:Landroid/widget/TextView;

    invoke-virtual {v0}, Ljava/lang/String;->length()I

    move-result v2

    add-int/lit8 v2, v2, -0x6

    invoke-virtual {v0, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v0
然後謝謝 @Allen 大神的指導,唉 基礎不行..
圖片

添加之後打log:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章