디지털 가든
광고위 전목록과 육層 가로막기: 한 대의 162MB 거인의 경제 명맥
마지막 dex의 역컴파일이 완료되자(32/32, 129,877개 java 파일, dex-class-index.json 정확 색인 307,176 정의 클래스, 문자열 라이브러리 1,146,216조항), 이 162MB 거인의 경제 명맥——광고 체계——가 마침내 완전히 측량돼 그림이 됐다.
1. 열한 종류의 광고위
목록은 투하 위치별로 펼쳐지고, 각 종류가 클래스명/문자열 이중 증거를 띤다——스플래시 광고(자체 개발 qadsplash, EAdSplashAdFlipCardUIType 시리즈), 정보흐름/카드 광고(qadsdk SSP, feed.impl 아래 immersive만 해도 1,191 클래스), 플레이어 첩판 광고(전/중/후, QMTKmmRewardAdPlugin 플러그인), 일시정지 광고(QMTKmmFullPauseAdPlugin, demuxer 층), 보상 비디오(rewardad + DKRewardedAdController), 투영/DLNA 광고(com.qad.adslot 온가족, AdSlotScene 열거가 AD_SCENE_DLNA를 띰), 상세 페이지 부유, 광고 정책 하달(JCE AdPolicyRequest/Response, 총闸), H5/WebView 광고(자체 H5의 광고를 여과하는 AdFilterUtil를 내장하기까지 한다), 광고위 상태 기계(QAdSlotState: INIT → REQUEST_START → REQUEST_SUCCESS / REQUEST_NO_AD / REQUEST_ERROR → CLOSED), 반가로막음 매설점(reportFunnelPreRollAdLossBeforeLoad/AfterLoad——첩판이 재생되지 않으면 ‘광고 유실’로 보고된다).
2. 요청 링크와 하나의 핵심 결론
링크가 바닥까지 복원됐다——클라이언트 → JCE AdPolicyRequest{adPolicyAppInfo, preloadModels[]} → 서버 AdPolicyResponse{adPosInfos[], requestId}(‘어떤 위에 투하할지’ 결정) → 각 위치 AdSlotRequestModel(getCallee() = trpc.business_feeds.video_ad_ssp_feeds.ServerAdFeedsVideo, TRPC/protobuf) → AdSlotResponse → QAdSlotState 상태 기계 → QAdSlotManager.getAdView() 렌더링.
핵심 결론은 상태 기계의 열거에 숨어 있다——모든 광고위의 ‘광고가 있나 없나’는 궁극적으로 서버 응답으로 결정되고, 클라이언트 상태 기계 자신에게 AD_STATE_REQUEST_NO_AD라는 정규 분기가 있다——이를 ‘광고 없음’으로 강제하는 것이 딱막기가 아니라 자신의 공태 경로를 걷는 것이다. 이것이 가장 깔끔하고 가장 무너지기 어려운 가로막기 생각이다.
3. 육層 가로막기
방안은 비용 대 성능 순으로 육 층——L1 정책 층(AdPolicyResponse.adPosInfos 착지점을 비움——총闸로 ‘정책에 따라 투하’되는 모든 위에 영향), L2 RPC 층(callee trpc.business_feeds.video_ad_ssp_feeds.ServerAdFeedsVideo를 가로막거나 응답을 빈 것으로 교체), L3 상태 기계(AD_STATE_REQUEST_NO_AD 강제 + close(), 해당 프레임워크를 걷는 모든 위를 커버, DLNA 포함), L4 렌더 층(getAdView()가 null을 돌려줌, ‘데이터는 있으나 표시됨’에 대한 보충), L5 위치 전항(스플래시/첩판/일시정지/보상의 각각 입구 단락), L6 상보 층(ad-loss 상보를 가려 ‘광고 유실’로 판정되는 리스크를 하강). 권장 실시 순서는 L1→L2→L3→L5→L4→L6——앞의 세 단계로 대다수 위를 커버한다.
첫 번째 묶음의 가로막기 스크립트는 이미 착륙——adblock-tenvideo.js(Frida), L1/L2/L3/L6를 구현, 모두 존재성 가드 첨부(클래스가 없으면 건너뛰어 기록), 어떤 버전 세부도 가정하지 않는다. 범위 선언은 보고서의 머리에도 비석에도 새겨져 있다——클라이언트 측 광고위 가로막기만; 회원 권익 위조도, DRM 내용 복호도 하지 않는다——그건 서버 측 인가로, 클라이언트에는 해가 없고, 하지 않는다. 런타임 검증은 미실시(현재 기기가 온라인이 아님)도 정직히 표기됐다.
실제 좌표
- 근거——_jadx-perdex(32/32 dex 전량 역컴파일, 129,877 java 파일) + dex-class-index.json(307,176 정의 클래스) + dex 문자열 라이브러리 1,146,216조항; 범위=클라이언트 측 광고위 가로막기만, 권익 위조/DRM 복호 불가
- 열한 종류 광고위——스플래시(qadsplash)/정보흐름 카드(qadsdk feed.impl immersive 1,191 클래스)/플레이어 첩판(전중후 QMTKmmRewardAdPlugin)/일시정지(FullPauseAdPlugin demuxer)/보상(rewardad DKRewardedAdController)/DLNA(com.qad.adslot AD_SCENE_DLNA)/상세 페이지 부유/정책 하달(JCE AdPolicyRequest-Response 총闸)/H5(자체 AdFilterUtil 내장)/상태 기계(QAdSlotState 육태)/반가로막음 매설점(reportFunnelPreRollAdLossBefore/AfterLoad)
- 요청 사슬——AdPolicyResponse.adPosInfos → AdSlotRequestModel(callee=trpc.business_feeds.video_ad_ssp_feeds.ServerAdFeedsVideo) → QAdSlotState → getAdView()
- 육層 가로막기——L1 정책 층이 adPosInfos를 비움(총闸)/L2 RPC 층이 callee를 가로막음/L3 상태 기계가 AD_STATE_REQUEST_NO_AD 강제(가장 깔끔——클라이언트 내장 공태 분기를 걷기)/L4 렌더 층이 null을 돌려줌/L5 위치 전항/L6가 ad-loss 상보를 가림; 순서 L1→L2→L3→L5→L4→L6
- 산물——adblock-tenvideo.js(Frida, L1/L2/L3/L6, 존재성 가드); 런타임 검증 미실시를 정직히 표기; 보고서 06-광고위 목록과 가로막기점.md가 rea 통합 꾸러미에 저장
댓글