我是目前研究出海投放&變現(xiàn)業(yè)務(wù)的SL。最近重溫了《三俠五義》,說話古風(fēng)古氣的,哈哈。抽空又來更新了,越來越懶了,而且感覺也沒得寫了,之后可能有空更新一下!最近看了粉絲們的評論區(qū)和私信,發(fā)現(xiàn)大家在防護驗證的知識體系還是缺少一些基本功。除了我們內(nèi)部自己的平臺驗證之外,其實不同的應(yīng)用商店也都提供了一些基礎(chǔ)功能幫助我們驗證流量。我們可以用起來。對于營銷小伙伴了解一些也是很不錯的。所以這期總結(jié)一下目前常見的平臺都如何配置這些套件和功能,這個功能可以自己做,也可以交給MMP(如果你沒有這個精力和資源的話,算是省心省力,沒有打廣告哦)。分三個平臺講:Google Apple AmazonGoogle License Verification Library(LVL)Google License Verification Library (LVL) 的主要作用是驗證應(yīng)用的合法授權(quán),以防止未經(jīng)授權(quán)的安裝。為了防作弊,Google LVL通過Google Play License Server進行授權(quán)驗證,應(yīng)用啟動時會調(diào)用LVL,請求GP服務(wù)器進行授權(quán)驗證。在GP的服務(wù)器返回驗證結(jié)果(LICENSED、NOT_LICENSED或ERROR)后,應(yīng)用會根據(jù)驗證的結(jié)果決定是否允許此次運行。https://developer.android.com/google/play/licensing/server-side-verificationhttps://developer.android.google.cn/google/play/licensing/client-side-verification.html#app-publishing為了防止破解或偽造授權(quán)信息,LVL采用了以下安全措施:(1) 響應(yīng)數(shù)據(jù)簽名Google Play的服務(wù)器返回的授權(quán)響應(yīng)帶有數(shù)字簽名,使用Google私鑰加密。作弊渠道無法偽造服務(wù)器響應(yīng),因為他們無法偽造Google的簽名。在本地應(yīng)用中,LVL 需要用GP提供的公鑰驗證簽名的真實性。
String signedData = response.getSignedData();?//?Google Play 返回的授權(quán)數(shù)據(jù)
String signature = response.getSignature(); ?//?Google Play 返回的簽名
boolean isValid = verifySignature(signedData, signature, PUBLIC_KEY);
if?(isValid) {
? ? // 授權(quán)通過
}?else?{
? ? // 可能是偽造的授權(quán)信息,拒絕訪問
}
Google LVL在每次請求時會加入隨機數(shù) (nonce),防止重放攻擊(Replay Attack)。這樣,即使作弊渠道試圖緩存上一次的授權(quán)響應(yīng)并重復(fù)使用,系統(tǒng)仍然能檢測到。
long?nonce =?new?SecureRandom().nextLong();?
sendLicenseRequest(nonce);
Google LVL采用了Base64編碼和一定的混淆技術(shù),防止黑客直接篡改授權(quán)數(shù)據(jù)。攻擊者不能直接修改響應(yīng),否則簽名驗證會失敗。ProGuard/R8:LVL推薦使用ProGuard或R8來混淆代碼,防止黑客反編譯應(yīng)用并繞過授權(quán)驗證。自定義驗證邏輯:Google 建議開發(fā)者不要直接使用 LVL 提供的默認實現(xiàn),而是修改和混淆授權(quán)邏輯,使得破解難度提高。除了LVL自帶的機制,我還建議開發(fā)者結(jié)合Google Play Integrity API進行更嚴格的安全檢查。當(dāng)然MMP平臺也提供了一些簡化版本的服務(wù),我們以Appsflyer為例:廣告主需要將配置好的property同步給Appsflyer的CSM。Appsflyer的CSM將會開啟測試模式(只標記不檢出),如果數(shù)據(jù)穩(wěn)定的話,就可以同步到正式版了。1.Appsflyer需要購買Protect360服務(wù)后才能夠開啟驗證。2.Appsflyer將這類型Fraud標記的原因算作Bots。https://support.appsflyer.com/hc/en-us/articles/17329535522961-Setting-up-the-Google-License-Verification-Library-LVLApple App Store install validation官方說法如下:Apple App Store Install Validation是一種驗證iOS應(yīng)用的安裝來源和合法性的機制,主要用于防止盜版、偽造安裝、未經(jīng)授權(quán)的運行等情況。它可以確保應(yīng)用只在 App Store下載和安裝,而不是通過越獄設(shè)備、第三方商店或企業(yè)簽名的方式繞過授權(quán)。蘋果沒有提供SDK,Apple是利用自己的生態(tài)完成驗證。(1)Receipt Validation(收據(jù)驗證)每個應(yīng)用都有一個receipt,用于驗證應(yīng)用來源以及是否合法安裝,以及是否有合法的內(nèi)購。該收據(jù)包含設(shè)備ID、購買信息、Bundle ID等信息,并由Apple簽名。我們可以在應(yīng)用啟動時驗證收據(jù),確保應(yīng)用是從Apple下載的,而不是從第三方來源sideload安裝的。一般收據(jù)會存儲在這里:
/var/mobile/Applications/{App?UUID}/StoreKit/sandboxReceipt
import?requests
import?base64
# 讀取 receipt 文件
with?open("receipt",?"rb")?as f:
? ? receipt_data = base64.b64encode(f.read()).decode()
# 發(fā)送到 Apple 服務(wù)器驗證
response = requests.post("https://buy.itunes.apple.com/verifyReceipt", json={
? ??"receipt-data": receipt_data,
? ??"password":?"your_shared_secret"
})
# 解析返回的 JSON 結(jié)果
print(response.json())
(2) App Store Server API(防止假安裝 & 內(nèi)購欺詐)用于檢測應(yīng)用安裝來源,并防止黑客利用偽造安裝數(shù)據(jù)獲取獎勵(如廣告歸因作弊)。Apple提供App Store Server API,我們可以使用getTransactionHistory或getRefundHistoryAPI 來檢查用戶是否真的從應(yīng)用下載并購買了應(yīng)用或訂閱。這個API不會被篡改,可以有效檢測假裝安裝或偽造支付信息的情況。(3) Device Integrity Checks(設(shè)備完整性檢查)用于檢查設(shè)備是否越獄(Jailbroken),并檢測是否運行在模擬器或被 Hook。
func?isDeviceJailbroken() -> Bool?{
? ??let?paths = ["/Applications/Cydia.app",?"/Library/MobileSubstrate/MobileSubstrate.dylib",
? ? ? ? ? ? ? ? ?"/bin/bash",?"/usr/sbin/sshd",?"/etc/apt"]
? ??for?path?in?paths {
? ? ? ??if?FileManager.default.fileExists(atPath: path) {
? ? ? ? ? ??return?true
? ? ? ? }
? ? }
? ??return?false
}
Amazon Digital Rights Management APIAmazon沒有直接對應(yīng)Google License Verification Library (LVL)的官方SDK,但Amazon提供了Appstore SDK,其中的DRM (Digital Rights Management) API可以實現(xiàn)類似的功能。它允許廣告主檢查應(yīng)用是否是通過Amazon Appstore合法下載的,并防止盜版或未經(jīng)授權(quán)的使用。(可以重點防治某家!!!)首先,我們需要集成Amazon Appstore SDK,在應(yīng)用中添加 Amazon 提供的Appstore SDK(可從 Amazon Developer Console 下載)。https://developer.amazon.com/zh/docs/appstore-sdk/integrate-appstore-sdk.html然后在代碼中調(diào)用DRM API,就可以實現(xiàn)通過LicenseVerifier進行驗證了:
import?com.amazon.device.drm.LicensingService;
import?com.amazon.device.drm.model.LicenseResponse;
import?com.amazon.device.drm.LicensingListener;
public?class?MyActivity?extends?Activity?{
? ??@Override
? ??protected?void?onCreate(Bundle savedInstanceState) {
? ? ? ??super.onCreate(savedInstanceState);
? ? ? ??LicensingService.verifyLicense(new?LicensingListener() {
? ? ? ? ? ??@Override
? ? ? ? ? ??public?void?onLicenseValidated(LicenseResponse licenseResponse) {
? ? ? ? ? ? ? ??if?(licenseResponse.getLicenseStatus() ==?LicenseResponse.LicenseStatus.LICENSED) {
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? // 未授權(quán)(盜版、無效賬戶等)
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? }
}
之后把我們的應(yīng)用已上傳到Amazon Appstore,并啟用了DRM保護,就完成了全部操作啦。為了防止破解或偽造授權(quán)信息,DRM采用了以下安全措施:Amazon DRM服務(wù)器的響應(yīng)包含簽名數(shù)據(jù),并使用Amazon的私鑰加密。應(yīng)用必須用Amazon提供的公鑰驗證返回數(shù)據(jù)的真實性,防止偽造授權(quán)信息。DRM授權(quán)信息與用戶的Amazon賬戶綁定,而不是僅僅存儲在本地設(shè)備上。每次驗證時,Amazon服務(wù)器會檢查當(dāng)前設(shè)備是否屬于該賬戶,防止拷貝授權(quán)數(shù)據(jù)到其他設(shè)備使用。(3) 授權(quán)數(shù)據(jù)加密&反篡改Amazon DRM SDK會加密存儲授權(quán)信息,并采用校驗機制,防止作弊渠道手動修改本地授權(quán)數(shù)據(jù)。如果檢測到數(shù)據(jù)被篡改,應(yīng)用可以拒絕運行。當(dāng)然,如果要驗證IAP的話,也可以用Amazon IAP (In-App Purchasing) 進行二次授權(quán)檢查,確保購買驗證的安全性。關(guān)注我,獲取更多廣告投放變現(xiàn)知識!