安卓刷量技術揭祕(一) 工具篇
目前 市面上你能買到的一些安卓刷量變機工具例如 008K、變機寶等等 使用的都是XPOSED框架來修改手機的機型。這種修改方式目前是一種主流技術,主流技術的優點就是相容性好、開發(包括文件支援、社群支援、第三方模組)成本低、穩定性高等特點。但對於當前專案來說,主流技術並不是一個好的解決辦法,因為主流技術不光你瞭解,APP的廠商的技術人員也很瞭解,而且一般規律來看,廠商的技術實力、人力、財力以及這三方面的積累,不是一個小團隊的作者可以對抗的。
目前改機軟體所實現的修改機型專案彙總起來分為以下幾類
1:手機唯一身份標誌
這個很好理解,主要包括 IMEI IMSI ICCID 等等這些全球唯一的身份標誌,來表示這臺手機的獨立性,另外要實現一些編號的校驗位運算,一般情況下,這些標誌身份的序號都有校驗位和一些固定的格式和
2 : 唯一標誌衍生資訊
這個衍生資訊就有很多項了,例如一些改機軟體 隨便的把某個廠商的型號和一個合法的IMEI結合在一起,殊不知IMEI的前6位為TAC,是每個機型獨有的身份標誌,隨便搭配後,一定會被檢測出來的。再例如聯通的IMSI是46001開頭,移動和電信的就不一樣,IMSI,ICCID,NUMBER,運營商,網路制式,mnc,mcc這些資訊最起碼是要匹配的。
3:環境資訊
環境資訊分為兩部分 ①:手機內部環境 包括你的系統特定資訊,使用者特定資訊。②:手機外部環境:基站資訊、GPS資訊、WIFI資訊等等。
本文中所有的操作都基於
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。 外部地址即