1. 程式人生 > >安卓刷量技術揭祕(一) 工具篇

安卓刷量技術揭祕(一) 工具篇

目前 市面上你能買到的一些安卓刷量變機工具例如 008K、變機寶等等 使用的都是XPOSED框架來修改手機的機型。這種修改方式目前是一種主流技術,主流技術的優點就是相容性好、開發(包括文件支援、社群支援、第三方模組)成本低、穩定性高等特點。但對於當前專案來說,主流技術並不是一個好的解決辦法,因為主流技術不光你瞭解,APP的廠商的技術人員也很瞭解,而且一般規律來看,廠商的技術實力、人力、財力以及這三方面的積累,不是一個小團隊的作者可以對抗的。

目前改機軟體所實現的修改機型專案彙總起來分為以下幾類 

1:手機唯一身份標誌 
這個很好理解,主要包括 IMEI IMSI ICCID 等等這些全球唯一的身份標誌,來表示這臺手機的獨立性,另外要實現一些編號的校驗位運算,一般情況下,這些標誌身份的序號都有校驗位和一些固定的格式和

演算法,這裡有很多渠道和積分牆是對這些序號的合法性有檢測的。 
2 : 唯一標誌衍生資訊 
這個衍生資訊就有很多項了,例如一些改機軟體 隨便的把某個廠商的型號和一個合法的IMEI結合在一起,殊不知IMEI的前6位為TAC,是每個機型獨有的身份標誌,隨便搭配後,一定會被檢測出來的。再例如聯通的IMSI是46001開頭,移動和電信的就不一樣,IMSI,ICCID,NUMBER,運營商,網路制式,mnc,mcc這些資訊最起碼是要匹配的。 
3:環境資訊 
環境資訊分為兩部分 ①:手機內部環境 包括你的系統特定資訊,使用者特定資訊。②:手機外部環境:基站資訊、GPS資訊、WIFI資訊等等。

本文中所有的操作都基於

Android Studio環境。下面進入實戰操作環節!

2 配置好XPOSED環境後,在該APP中建立HOOK類 本文為MainHook,該類必須繼承IXposedHookLoadPackage

public class MainHook implements IXposedHookLoadPackage
{
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable
    {
        //xposed程式入口 do something...
} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3 實際修改項

目前市面上的很多改機軟體都沒有修改第二處的IMEI 
另外一個位置是在com.android.internal.telephony.PhoneSubInfo類中, 
導致有些反作弊系統讀取這個位置的IMEI值後不會下分

HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getDeviceId", GetCatValue("imei"));
HTool.XHookMethod("com.android.internal.telephony.PhoneSubInfo",mLpp.classLoader, "getDeviceId", GetCatValue("imei"));
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getSubscriberId", GetCatValue("imsi"));
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getLine1Number", GetCatValue("number"));
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getSimSerialNumber", GetCatValue("simserial"));
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getSimCountryIso", GetCatValue("simcountryiso"));
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getSimOperator", GetCatValue("simoperator"));
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getSimOperatorName", GetCatValue("simoperatorname"));
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getNetworkCountryIso", GetCatValue("networkcountryiso"));
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getNetworkOperator", GetCatValue("networkoperator"));
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getNetworkOperatorName", GetCatValue("networkoperatorname"));

//WIFI資訊
HTool.XHookMethod(android.net.wifi.WifiInfo.class.getName(),mLpp.classLoader, "getMacAddress", GetCatValue("wifimac"));
HTool.XHookMethod(android.net.wifi.WifiInfo.class.getName(),mLpp.classLoader, "getBSSID", GetCatValue("bssid"));
HTool.XHookMethod(android.net.wifi.WifiInfo.class.getName(),mLpp.classLoader, "getSSID", "\""+GetCatValue("ssid")+"\"");
XposedHelpers.findAndHookMethod(java.net.NetworkInterface.class.getName(),mLpp.classLoader, "getHardwareAddress", new Object[] {
        new XC_MethodHook()
        {
            protected void afterHookedMethod(MethodHookParam param) throws Throwable
            {
                //每個安卓系統中 至少存在5個以上的MAC地址 
                //但大多數軟體只修改了MAC和BSSID 
                //真正的MAC修改是在此處理函式中監聽每次訪問.
            }
        }});

//藍芽資訊
HTool.XHookMethod(BluetoothAdapter.class.getName(),mLpp.classLoader,"getAddress", GetCatValue("bluemac"));
HTool.XHookMethod(BluetoothAdapter.class.getName(),mLpp.classLoader, "getName", GetCatValue("bluename"));

//設定手機資訊 無論手機是否插入了sim卡 都會模擬出SIM卡的資訊 APP獲得SIM卡訊息時返回該手機已有SIM卡
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getPhoneType", TelephonyManager.PHONE_TYPE_GSM);
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getNetworkType", TelephonyManager.NETWORK_TYPE_HSPAP);
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "getSimState", TelephonyManager.SIM_STATE_READY);
HTool.XHookMethod(android.telephony.TelephonyManager.class.getName(),mLpp.classLoader, "hasIccCard", true);


//修改手機系統資訊 此處是手機的基本資訊 包括廠商 訊號 ROM版本 安卓版本 主機板 裝置名 指紋名稱等資訊
XposedHelpers.setStaticObjectField(android.os.Build.class, "MODEL", GetCatValue("model"));
XposedHelpers.setStaticObjectField(android.os.Build.class, "MANUFACTURER", GetCatValue("manufacturer"));
XposedHelpers.setStaticObjectField(android.os.Build.class, "BRAND", GetCatValue("brand"));
XposedHelpers.setStaticObjectField(android.os.Build.class, "HARDWARE", GetCatValue("hardware"));
XposedHelpers.setStaticObjectField(android.os.Build.class, "BOARD", GetCatValue("board"));
XposedHelpers.setStaticObjectField(android.os.Build.class, "SERIAL", GetCatValue("serial"));
XposedHelpers.setStaticObjectField(android.os.Build.class, "DEVICE", GetCatValue("device"));
XposedHelpers.setStaticObjectField(android.os.Build.class, "ID", GetCatValue("id"));
XposedHelpers.setStaticObjectField(android.os.Build.class, "PRODUCT", GetCatValue("product"));
XposedHelpers.setStaticObjectField(android.os.Build.class, "DISPLAY", GetCatValue("display"));
XposedHelpers.setStaticObjectField(android.os.Build.class, "FINGERPRINT", GetCatValue("fingerprint"));

XposedHelpers.findAndHookMethod("android.os.SystemProperties",mLpp.classLoader, "native_get", new Object[] {String.class,String.class,
        new XC_MethodHook()
        {
            //為了防止某些APP跳過Build類 而直接使用SystemProperties.native_get獲得引數
        }});
//修改系統版本 我看到世面上的軟體基本上都是不能修改系統版本的 從而造成了刷量後 很多渠道最終會顯示你的APP使用者全部使用的某一系統版本
//這樣的話資料就太假了.
XposedHelpers.setStaticObjectField(android.os.Build.VERSION.class, "RELEASE", GetCatValue("version"));
XposedHelpers.setStaticObjectField(android.os.Build.VERSION.class, "SDK", GetCatValue("apilevel"));

HTool.XHookMethod(android.os.Build.class.getName(),mLpp.classLoader, "getRadioVersion", GetCatValue("radioversion"));

//修改為指定的運營商mnc mcc資訊
XposedHelpers.findAndHookMethod(android.content.res.Resources.class.getName(),mLpp.classLoader, "getConfiguration", new Object[] {
        new XC_MethodHook()
        {
            ...........................
            //此處的mnc和mcc必須和系統中其他關於運營商的資料對應!
        }});

//修改ANDROID_ID
XposedHelpers.findAndHookMethod(android.provider.Settings.Secure.class.getName(),mLpp.classLoader, "getString",
new Object[] {ContentResolver.class,String.class,
        new XC_MethodHook()
        {
            ...............................
            //此處會根據傳入的String引數 判斷返回值 其中包括比較關鍵的資料就是android_id
        }});

//防止APP使用Runtime.exec方式獲取一些特定的系統屬性
XposedHelpers.findAndHookMethod(Runtime.class.getName(),mLpp.classLoader, "exec",new Object[] {String.class,String[].class, File.class,
        new XC_MethodHook()
        {
            //一些APP從JAVA層獲得到了資料 還會從shell(native)層獲得一些更底層的資料 來判斷使用者的合法性
            //經常用到的有 cat、getprop、ifconfig等等命令,當exec執行這些命令後 往往會返回一些手機的真實資訊
            //因為框架和處理方式不同,...部分此處根據自己需求,編寫重定向返回值的過程...
        }});

//修改位置資訊
XposedHelpers.findAndHookMethod(LocationManager.class.getName(),mLpp.classLoader, "getLastKnownLocation",
    new Object[] {String.class,
            new XC_MethodHook()
            {
                ..........................
                //返回預先設定好的經緯度資訊以偽裝地理位置
            }});

HTool.XHookMethod(Location.class.getName(),mLpp.classLoader, "getLatitude", latitude);
HTool.XHookMethod(Location.class.getName(),mLpp.classLoader, "getLongitude", longitude);


//修改GSM制式手機的基站資訊
HTool.XHookMethod(android.telephony.gsm.GsmCellLocation.class.getName(),mLpp.classLoader, "getLac", GsmLac);
HTool.XHookMethod(android.telephony.gsm.GsmCellLocation.class.getName(),mLpp.classLoader, "getCid", GsmCid);


//修改CDMA制式手機的基站資訊
HTool.XHookMethod(android.telephony.cdma.CdmaCellLocation.class.getName(),mLpp.classLoader, "getBaseStationLatitude", CdmaLatitude);
HTool.XHookMethod(android.telephony.cdma.CdmaCellLocation.class.getName(),mLpp.classLoader, "getBaseStationLongitude", CdmaLongitude);
HTool.XHookMethod(android.telephony.cdma.CdmaCellLocation.class.getName(),mLpp.classLoader, "getBaseStationId", CdmaBid);
HTool.XHookMethod(android.telephony.cdma.CdmaCellLocation.class.getName(),mLpp.classLoader, "getSystemId", CdmaSid);
HTool.XHookMethod(android.telephony.cdma.CdmaCellLocation.class.getName(),mLpp.classLoader, "getNetworkId", CdmaNid);


//模擬手機的APP列表
XposedHelpers.findAndHookMethod("android.app.ApplicationPackageManager",mLpp.classLoader, "getInstalledPackages",new Object[] {int.class,
        new XC_MethodHook()
        {
            //此處模擬正常使用者的APP列表 其中隨機的增加和刪除一些常用APP 以達到每個手機的APP有很大的隨意性和合理性
        }});

XposedHelpers.findAndHookMethod("android.app.ApplicationPackageManager",mLpp.classLoader, "getInstalledApplications",new Object[] {int.class,
        new XC_MethodHook()
        {
            //此處模擬正常使用者的APP列表 其中隨機的增加和刪除一些常用APP 以達到每個手機的APP有很大的隨意性和合理性
        }});

//防止APP的VPN SOCK5 HTTP代理檢測
XposedHelpers.findAndHookMethod(java.net.NetworkInterface.class.getName(),mLpp.classLoader, "getNetworkInterfacesList",new Object[] {
        new XC_MethodHook()
        {
            ........................................
            //此處對於一些連線資訊 對JAVA做了隱藏處理 但對於系統和Native層依然是可見的 所以APP不會檢測到代理 但代理卻可以正常的執行...
        }});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135

以上這些做下來 從資訊採集上基本可以過市面上70%的反作弊系統了 對於某些反作弊系統的高階檢測,則需要我們採用更高階的處理方式才能攻破對方的防線,這些處理方式我們隨後會講到。 
但目前推廣市場上 不光是採用技術手段 還採取大資料分析等方式判斷你是否作弊 所以還是需要多摸索多實踐。

相關推薦

技術揭祕() 工具

目前 市面上你能買到的一些安卓刷量變機工具例如 008K、變機寶等等 使用的都是XPOSED框架來修改手機的機型。這種修改方式目前是一種主流技術,主流技術的優點就是相容性好、開發(包括文件支援、社群支援、第三方模組)成本低、穩定性高等特點。但對於當前專案來說,主流技術並不

改機技術揭祕() 工具

目前 市面上你能買到的一些安卓刷量變機工具例如 008K、變機寶等等 使用的都是XPOSED框架來修改手機的機型。這種修改方式目前是一種主流技術,主流技術的優點就是相容性好、開發(包括文件支援、社群支援、第三方模組)成本低、穩定性高等特點。但對於當前專案來說,主流技術

技術揭秘

ng2 aop 刷量 href art csdn tail 工具 hang 安卓刷量技術揭秘(一) 工具篇 安卓刷量技術揭秘(二) 高級攻防技巧 可使用XPOSED來進行刷量安卓刷量技術揭秘

除錯/測試-AS(android studio)——工具之Android Monitors

前言:你可以不會除錯優化記憶體和cpu佔用,但截圖,錄屏你要還拿手機折騰半天就太low,其實AS內建了,就在Monitors裡面,本篇重點介紹幾個無腦點選除錯app優化方法(PS:不定期更新) 基本概念 Android Monitors:讓你可以很容易

更新 是 可用的 針對 軟件開發包和工具 Updates are available for android software development packages and tools

安卓 模擬器 軟件 ide software ava -m android 設置 作者:韓夢飛沙 Author:han_meng_fei_sha 郵箱:[email protected]/* */ E-mail: 313134555 @qq.com

專案實戰之ByeBurger句程式碼實現標題欄、導航欄滑動隱藏

簡介 效果圖 內容View可為:ViewPager中巢狀RecycleView 內容View可為:NestedScrollView包裹TextView 內容View可為:NestedScrollView包裹WebView 如何使用 1.在project的

開發學習筆記():如何用Android Stuidio匯出apk檔案?

一,首先,我們在選單欄上找到這一欄: 然後點選build,再點選generate apk,然後出現以下介面: 由於之前我們並沒有進行apk檔案的生成,因此需要這個apk key做一個驗證,以防您的app上線之後被別人盜用,同時證明自己對這個app的擁有權。key store path就是您app key所

開發熱修復技術原理及選型

到我寫這篇博文為止,現行的熱修復技術主要有四種:美團的Robust、qq空間的Nuwa,微信的Tinker,阿里百川HotFix,但是更確切的說應該是有三種,Tinker和HotFix,因為Tinker是基於Nuwa的,原理一樣,是它的進化版,我們到Github(http

手機使用什麼螢幕錄製工具比較好

如今我們的生活學習充滿了資訊的力量,手機通訊的傳播,讓我們足不出戶就可以瞭解更多諮詢。眾所周知,蘋果手機和安卓有所不同,所以它們的投屏方式也是不一樣,那麼安卓手機使用什麼螢幕錄製工具比較好呢?應該如何使用呢!       使用工具:   手機 迅捷錄屏大師

ROM定製筆記() 使用隱藏API配合studio開發系統級APP

雖然在開發中使用隱藏API是不推薦的,但是為了一些需求,還是得做的。獲取安卓架包在sdk中這個包叫做android.jar,有兩種方式,第一種方式 從github上獲取,android-hidden-api,下載對應安卓版本的android.jar檔案第二種方式 從編譯完成的

當中如何判斷某項服務是否開啟

ActivityManager mActivityManager =(ActivityManager)getSystemService(ACTIVITY_SERVICE); List<RunningServiceInfo> infos = mActivityManager.getRu

常用到的幾個工具類(不定期更新)

自己做專案,用到的幾個工具類,這裡記一下,以後找到方便 1.一個double型別資料精準四則運算類Arith.java import java.math.BigDecimal; public class Arith{ //預設除法運算精度 private

一個開發中常用的字串工具

public class StringUtils { private StringUtils() { throw new AssertionError(); } /** * 密碼 * * @param

淺談自定義view():製作一個最最最簡單的自定義view

對於安卓程式設計師來說,自定義view簡直不要太重要,畢竟有很多功能,譬如圓形頭像這些,用單純的原生非常難以實現,而用自定義view,簡直分分鐘。 在這裡,我嘗試用最簡單方式跟初學者說一下如何自定義一個自己的view~ 首先,最簡單最簡單的自定義view,有

機及機包製作教程

刷機有兩種:線刷和卡刷。所謂的“線刷”就是在手機Download模式(俗稱為“挖煤”)下用Odin刷機程式刷機。而“卡刷”就是在手機的Recovery(恢復)模式下刷機。在這一講裡,我來介紹第二種刷機方法:“卡刷”或稱為CWM刷機。論壇中關於“卡刷”的刷機教程比較少,多半都是在刷某個具體的ROM裡給出。可

自定義Dialog(

這個自定義Dialog主要是提醒使用者一些資訊:該環境沒有網,登入賬號是提示密碼錯誤.... 話不多說直接上程式碼: 一.實現功能的.java類 public static Dialog CreatDialog(Context context, String s,

NDK開發案列:字串的加密和解密

前言:通過此案例來加深一下我們對JNI字串的處理,當然字串的操作用java也可以完美解決,廢話不多說開始今天的擼程式碼! --------分割線-------- ok,我們來看一下效果圖: 實現思路: 1.從edittext獲取字串。 2.將獲得的字串傳遞給jni 3.在

【菜鳥學】- TextView 顯示Html 解決圖片顯示不了的小問題

今天學習 TextView 顯示 html  但一直有一個問題就是圖片顯示不了 程式碼如下: ImageGetter imgGetter = new Html.ImageGetter() { public Drawable getDrawable(String so

藍芽技術之中央BluetoothGatt和周邊BluetoothGattServer的實現

BluetoothAdapter.LeScanCallback  Class Overview:回撥介面被用於傳輸LE掃描後的結果; 詳情請查看: onLescan(BluetoothDevice , int , byte[]) 是通過startLeScan(Blu

完全新手的視訊教程學習筆記()

1. 重啟abd 在DDMS中Devices下工具欄下拉箭頭中有重啟adb按鈕。 如果不行,在工作管理員中手動結束adb程序。 如果還不行,檢視是否有程式佔用5037埠。 2. 如何查詢計算機端口占用情況:   執行cmd,輸入netstat -ano。   外部地址即