InShot v2.200.1530 (com.camerasideas.instashot) — 全量第三方库清单与构建系统痕迹
分析对象:反编译源码 /Users/ccc/Downloads/app/out/jadx_src/sources/、解码资源 out/jadx_src/resources/、解压 APK apk_extract/(原 APK:apk/Inshot_v2.200.1530.apk)
0. 总览数据
- 反编译源码总量:30,794 个 .java 文件;其中约 21,019 个保持可读(应用自身代码 + 有 keep 规则的 SDK),约 9,775 个类被 R8 混淆(单字母 /
pNNN 前缀包名)。
- 6 个 dex(
classes.dex ~ classes6.dex,multidex)。
- 注意:应用自身包名未混淆(
com.camerasideas.* 全部可读);被混淆的是 kotlinx.coroutines、OkHttp 主体、Retrofit2、RxJava2、okio、Lottie 内部类等缺乏 keep 规则的依赖。jadx 把混淆包改名为 p002a 风格(p+编号+原名),并把单字母包归到 A0 等目录。混淆代码例证:tj/o.java = retrofit2.KotlinExtensions(注释 compiled from: KotlinExtensions.kt + @Yh.e(c = "retrofit2.KotlinExtensions"))、p386ti/* = kotlinx.coroutines、p405uh/c.java = RxJava2CallAdapter(含 "missing onError handler … RxJava" 字符串)。
1. 第三方库清单(包名前缀 | 类数(kept) | 版本线索 | 用途)
媒体 / 图像
| 库 |
包/证据 |
类数 |
版本线索 |
用途 |
| ExoPlayer |
com.google.android.exoplayer2 |
1011 |
VERSION="2.17.1"、VERSION_INT=2017001(ExoPlayerLibraryInfo),模块含 ui/、ext/okhttp |
视频播放器(全模块 2.17.1) |
| Glide |
com.bumptech.glide |
50(kept)+混淆其余 |
无版本常量;有 okhttp3/webp/gifframe 集成模块 + GeneratedAppGlideModuleImpl;InShotModule.java 是 Glide @GlideModule(extends AppGlideModule),不是 Dagger module |
图片加载 |
| Fresco |
com.facebook.{imagepipeline,drawee,fresco,common,animated,soloader,webpsupport} |
113(+SoLoader 29) |
无常量;原生 lib 佐证:libimagepipeline.so、libgifimage.so、libnative-imagetranscoder.so、libstatic-webp.so |
图片管线 |
| Picasso |
com.squareup.picasso |
38 |
BuildConfig(BUILD_TYPE=release,VERSION_NAME 空) |
图片加载(遗留) |
| PhotoView |
com.github.chrisbanes.photoview |
15 |
BuildConfig VERSION_NAME="1.0"(AAR 自带) |
图片缩放查看 |
| GPUImage |
jp.co.cyberagent.android.gpuimage |
78 |
无常量(2.x 推断) |
滤镜;原生 libgpuimage-library.so/libgpuimage-extension.so + assets 两个 .glsl |
| AndroidGifDrawable |
libpl_droidsonroids_gif.so(pl.droidsonroids.gif,java 部分被混淆) |
— |
— |
GIF 播放 |
| Volley |
com.android.volley |
~15 |
无 |
老网络库(遗留) |
| AndroidYouTubePlayer |
com.pierfrancescosoffritti.androidyoutubeplayer |
2 |
无 |
YouTube 嵌入 |
| AnimatedVectorDrawable |
androidx.vectordrawable-animated |
(version 文件) |
1.1.0 |
矢量动画 |
网络 / 序列化
| 库 |
包/证据 |
类数 |
版本线索 |
用途 |
| OkHttp |
okhttp3(仅 PublicSuffixDatabase 保留) |
1 kept |
UA 字符串 "okhttp/4.11.0"(2 处) |
HTTP 客户端 |
| Retrofit2 |
混淆为 tj/p348ri 等 |
— |
KotlinExtensions 存在 → ≥2.6;推断 2.9.x |
REST 框架 |
| RxJava2 |
混淆(p405uh = RxJava2CallAdapter) |
— |
推断 2.2.x |
响应式编程 |
| Gson |
com.google.gson |
78 |
有 disableJdkUnsafe(2.9.0+)与 Gson.newJsonWriter(2.4+);无 JsonReader/JsonWriter.Strictness(2.11.0 引入)→ Gson 2.9~2.10.x(最可能 2.10.1) |
JSON |
| protobuf-lite |
com.google.protobuf |
212 |
javalite 运行时(内含 IS_ROBOLECTRIC 运行时探测) |
序列化 |
| gatewayprotocol |
gatewayprotocol.v1 |
137 |
Unity Ads 4.12.5 内部 Gateway 协议(导入方全是 com.unity3d.ads.core) |
Unity 广告协议 |
广告(最大头,合计 ~6,000 类)
| SDK |
包 |
类数 |
版本线索(代码常量 / BuildConfig) |
| AppLovin MAX |
com.applovin |
615 |
AppLovinSdk.VERSION="13.3.1";assets/ad-viewer v1.37.1(AdViewer web 包) |
| ├ Fyber 适配 |
com.applovin.mediation.adapters.inneractive |
|
BuildConfig 8.3.8.0(→ Fyber SDK 8.3.8) |
| ├ Unity 适配 |
…adapters.unityads |
|
4.12.5.0 |
| ├ Vungle 适配 |
…adapters.vungle |
|
7.5.0.3 |
| ├ InMobi 适配 |
…adapters.inmobi |
|
10.8.7.0 |
| ├ AdMob 适配 |
…adapters.google |
|
24.5.0.0 |
| ├ PubMatic 适配 |
…adapters.pubmatic |
|
4.8.0.0 |
| Unity Ads |
com.unity3d |
933 |
SdkProperties.getVersionName()="4.12.5"、versionCode 41205 |
| Vungle |
com.vungle.ads |
381 |
BuildConfig VERSION_NAME="7.5.0"(DEBUG=false,BUILD_TYPE=release) |
| InMobi |
com.inmobi |
926 |
InMobiSdk.getVersion()="10.8.7" |
| Fyber/Inneractive |
com.fyber |
1492 |
适配器 8.3.8.0;assets fyb_*、ia_*(endcard/mraid) |
| PubMatic OpenWrap |
com.pubmatic.sdk |
281 |
适配器 4.8.0.0;assets pob_*.js/svg、PubMatic_Logo.svg |
| TradPlus |
com.tradplus.ads + com.tp |
620+163 |
BuildConfig VERSION_NAME="14.4.0.1" |
| DigitalTurbine Ignite |
com.digitalturbine.ignite |
2 |
— |
| Giphy SDK |
com.giphy.sdk.ui |
57 |
META-INF verification.properties 时间戳 2024-08-06 |
| OM SDK |
com.iab.omid(多广告网副本) |
544 |
— |
| AdMob |
com.google.android.gms.ads |
518 |
play-services-ads 24.5.0(props) |
| UMP 隐私 |
com.google.android.ump |
~10 |
user-messaging-platform 3.2.0(props) |
Google / Firebase / Play
| 组件 |
版本线索 |
| Play Billing |
billing.properties 7.1.1 |
| Play App Update(+ktx) |
app-update.properties 2.1.0;com.google.android.play.core.install 包 |
| Play Integrity |
integrity.properties 1.5.0;com.google.android.play.core.integrity 包 |
| core-common / googleid |
2.0.4 / 1.1.1 |
| Firebase |
com.google.firebase 77 类:analytics、messaging(FCM)、crashlytics、remoteconfig、appcheck、storage、sessions、installations、abt、iid;props:firebase-analytics 22.5.0、firebase-annotations 16.2.0、firebase-auth-interop 18.0.0、firebase-encoders 17.0.0、firebase-iid-interop 17.1.0、firebase-measurement-connector 20.0.1 |
| Play Services 全家桶 |
com.google.android.gms 共 7,980 类;props:ads 24.5.0、ads-identifier 18.2.0、auth 21.1.1、auth-api-phone 18.0.2、base 18.5.0、basement 18.5.0、cloud-messaging 17.2.0、cronet 18.0.1、fido 21.0.0、location 19.0.0、measurement* 22.5.0、places-placereport 17.0.0、stats 17.0.2、tasks 18.2.0、appset 16.0.2 |
| Firebase Transport |
com.google.android.datatransport(+cct/runtime) |
AndroidX(全部版本来自 META-INF/*.version,kept 类约 505 个,内部类部分被混淆)
core 1.15.0、core-ktx 1.15.0、appcompat 1.7.1、fragment 1.8.8、activity 1.8.1、lifecycle 全套 2.9.2、recyclerview 1.3.2、viewpager2 1.1.0-beta02、viewpager 1.0.0、material 1.12.0(com.google.android.material,105 kept)、splashscreen 1.0.1、profileinstaller 1.4.0、work-runtime(-ktx) 2.7.0、datastore(-core/-preferences) 1.1.3、room-runtime 2.2.5(旧,2020,疑似传递引入)、sqlite 2.1.0、webkit 1.11.0-alpha02(含 org.chromium 54 类)、credentials 1.3.0-beta01、privacysandbox.ads 1.1.0-beta11、window 1.3.0、media 1.4.3、exifinterface 1.3.6、emoji2 1.3.0、browser 1.8.0、tracing 1.2.0、transition 1.5.0、startup 1.2.0、dynamicanimation 1.0.0、databinding(baseAdapters/Ktx/library/viewbinding) 8.12.3、annotation-experimental 1.5.1 等约 80 个 artifact。
Kotlin / 协程 / 存储 / 工具
| 库 |
证据 |
版本 |
| kotlinx-coroutines |
kotlinx_coroutines_{android,core,play_services}.version ×3;DebugProbesKt.bin(apk 根,coroutines debug probes) |
1.10.2 |
| Kotlin stdlib |
kotlin/*.kotlin_builtins、kotlin/coroutines/jvm |
与编译器 2.1.0 相关 |
| MMKV |
com.tencent.mmkv.MMKV + com.tencent.mars.xlog + libmmkv.so + libmarsxlog.so |
MMKV.version() 是 native,Java 侧无常量(so 内无可见版本串) |
| EventBus |
org.greenrobot.eventbus |
3.x |
| ButterKnife |
butterknife(31 类)+ 应用内大量 *_ViewBinding.java |
10.x(无常量) |
| Booster |
com.didiglobal.booster.instrument(ShadowAsyncTask/ShadowThread/ShadowTimer/ActivityThreadHooker/FinalizerWatchdogDaemonKiller…) |
无常量;构建期字节码插桩已生效(应用代码里遍布 ShadowExecutors 等调用) |
| HiddenApiBypass |
org.lsposed.hiddenapibypass |
—(广告 SDK 用) |
| FMOD |
org.fmod + libfmod.so |
— |
| vlayout |
com.alibaba.android.vlayout(VirtualLayoutManager) |
1.x(推断) |
| UltraViewPager |
com.tmall.ultraviewpager |
— |
| Banner |
com.youth.banner |
2.x |
| Toaster |
com.hjq.toast |
— |
| RoundedImageView |
com.makeramen.roundedimageview |
2.3.x(推断) |
| VerticalSlideView |
com.tokaracamara.android.verticalslidevar |
— |
| KPSwitch |
cn.dreamtobe.kpswitch |
— |
| filepicker |
com.popular.filepicker(仅 exception 包保留) |
— |
| Commons Math3 |
assets/org/apache/commons/math3(Sobol new-joe-kuo-6.1000 等资源,无 java 引用) |
被混淆依赖的残留 |
| 反篡改 |
com.cer.CerChecker + libcer.so + assets/cer.cer(JSON)+ openssl_pub.key |
自研 |
| 自研模块 |
com.camerasideas(3,130)、com.inshot(625)、com.android.*(157:inshot/mvvm/video/videostabilize/inpaint/glPixelReader/skigifcore…)、org.instory(159,视频引擎)、com.shantanu(117:aigc/iap/mmkv/mobileads/network/remove/stickershop/storage/tenor/tts)、com.yuvcraft(11:ai_flash/ai_task/speechrecognize)、com.graphics(7) |
— |
明确结论:
InShotModule.java = Glide @GlideModule,不是 Dagger module;
- 全库无 Dagger / Dagger-Hilt / Guice(唯一 "dagger" 命中是 Fyber 代码里的 HTML 实体
† = †,8224);
- Retrofit / RxJava2 / OkHttp / coroutines 均被混淆但可确证存在。
2. META-INF/ 与签名
文件清单
- v1 签名:
ANDROID.RSA(1.7KB)+ ANDROID.SF(822KB)+ MANIFEST.MF(822KB)。
- 版本文件: ~87 个
*.version(androidx ~80、kotlinx_coroutines ×3、material、arch.core 等)。
- 构建元数据:
com/android/build/gradle/app-metadata.properties(AGP 8.12.3)、version-control-info.textproto。
- 广告验证:
com/applovin/mediation/{fyber,inmobi,pubmatic,vungle}-adapter/verification.properties(token 相同,时间戳 2025-01-29 → 构建窗口 ≈ 2025 年 1 月底,与 versionName 2.200.1530 吻合)、com/giphy/sdk/ui/verification.properties(2024-08-06)。
- 其他:
androidx/{annotation,lifecycle}/LICENSE.txt、services/ri.F(内容 "si.b")与 services/wi.o(内容 "si.a")——两个被混淆的 ServiceLoader 服务注册(来自被混淆库);androidsupportmultidexversion.txt(git a1f28028…)。
- APK 根目录另有全部 SDK 版本 properties(见 §4)与 4 个
.proto。
签名方案与证书(关键发现)
- 三种签名方案齐备:
- v1(JAR):
.SF 头 X-Android-APK-Signed: 2,3,条目摘要为 SHA-256 → v1.2 方案,Built-By: Signflinger(apksigner 的 C++ v1 签名器);
- v2/v3:APK 中存在 "APK Sig Block 42" 块;
- v3.1 source stamp:根目录
stamp-cert-sha256(32 字节 = stamp 证书 SHA-256)。
- 证书是 Android 默认 debug keystore:
CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US,自签名,SHA1 61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81(公认的 SDK 默认 debug key 指纹),有效期 2008-02-29 → 2035-07-17,SHA1withRSA(weak),2048-bit RSA。
- 重新签名痕迹:
.SF 头部 Created-By: Android Gradle 8.0.2,而 app-metadata.properties 是 AGP 8.12.3 → 该 APK 的 v1 签名由 8.0.2 工具链用 debug key 完成,与内部构建元数据(AGP 8.12.3)不一致。强烈提示:这份 APK 是经第三方(镜像站/修改者)用默认 debug keystore 重签的,不能视为原始发行签名。
- 泄露的构建信息:
version-control-info.textproto 记录构建时 git revision = e292e629d43aa300896807def7257c33af4e6a5c。
3. assets/ 分类(顶层 115 项,递归 410 文件,共 11MB)
- 字体(20):
Aileron.otf、Aleo-Regular.otf、Roboto-{Regular,Medium,Thin}/RobotoCondensed-Regular.ttf、BEBAS.ttf、Lobster_1.3.otf、AmaticSC-Regular.ttf、Blackout-2am/Midnight.ttf、CaviarDreams.ttf、Champagne & Limousines.ttf、LuckiestGuy-Regular.ttf、PermanentMarker.ttf、PUSAB.otf、BPdotsUnicase.otf、AngelFace.otf、danielbd.ttf 等。
- GLSL shader(2):
GPU3DLookupFilter.glsl、GPUAdjustLookupFilter.glsl(GPUImage 查找表滤镜)。
- Lottie JSON(约 20):
inshot_loading.json、icon_pro.json、christmas.json、discount_animation.json、bind_subscribe_discount_animation.json、pro_20off/sale.json、pro_crown_default/*.json、pro_default/crown_sale.json、pro_btn_bg_animation.json、logo/main_logo_pro_animation_star.json、google_animated_emoji.json、ani_pro_popular.json、data_chroma_guide.json、data_rate_star.json、data_star_1_4.json、guide_breath_jump(+white).json、hint_stick_to_frame_anim.json、remove_guide.json、stick_to_frame_highlight.json、ideas_help.json、anim/loading.json、anim/video_ff.json 等。
- 自定义动画数据(非 Lottie):
anim-text/(basic×10、letter×~28、loop×11,每项 data.json 含 in/out 关键帧)、aniemoji01/(12 组 PNG 序列 + info.json)、sticker/、line/outline_param.json、resolution/、pro_20off_no_title/、pro_popular_images/、discount_animation/、christmas/、hint_stick_to_frame_animation/、pro_btn_bg_animation/。
- 内置媒体:
background_color_border_1.mp4(+480p 变体)、flim_transition.mp3、transition_audio/(7 个转场 mp3)、voice_change_audio/(dizziness/music_robot/underwater.mp3)。
- 滤镜查找表:
table_*(40 个:antique/cinema01-05/duotone02/film01-05/gold/grape/lomo/moody03/moss/skin01-05/vintage/warm…)。
- 广告 Web 资源:
ad-viewer/(AppLovin AdViewer v1.37.1 完整 web 包:主 js + 分片 + 21 语言 + MRAID 0.0.6 + OM SDK js)、omsdk-v1.js、MRAID 相关(ia_mraid_bridge.txt、pob_mraid.js)、pob_*(PubMatic OpenBid)、fyb_*(Fyber endcard 模板)、dsa_page.html、PubMatic_Logo.svg、pob_info_button.svg、pob_person_button.svg。
- 配置/证书:
cer.cer(JSON 数据,反篡改配置,非 X.509)、openssl_pub.key、dexopt/baseline.prof + baseline.profm(基线配置文件,prm 002 格式)、org/apache/commons/math3(数学库资源残留)、privacy_policy_setting(目录)。
- AI 模型: assets 中没有任何 .bin/.tflite/.mnn/.onnx 模型文件 —— 人脸/人像分割等模型内嵌在 native so 中(
libMNN.so、libYXAIEngine.so、libface_detect.so、libportrait_matting_jni.so、libvid_seg.so、libvid_sot.so),或运行时下载。
4. 构建痕迹
- AndroidManifest.xml(jadx 解码):package=
com.camerasideas.instashot、versionCode=1530、versionName=2.200.1530、minSdkVersion=24、targetSdkVersion=35、compileSdkVersion=35;android:allowBackup="false"、android:extractNativeLibs="true"、android:networkSecurityConfig="@xml/network_security_config";无 android:debuggable(release)。
- 无 proguard mapping/seed 文件(mapping.txt 不随 APK 分发);混淆证据 = 代码中大量单字母类名 + META-INF/services 服务名被混淆 → R8 全量模式(full mode)。
- 构建期字节码插桩:
com.didiglobal.booster 运行时类 + 应用代码中 ShadowExecutors/ShadowThreadPoolExecutor 调用 → Booster(booster-android-instrument)已启用。
- DataBinding / ViewBinding:
androidx.databinding.* version = 8.12.3(= AGP 版本,绑定生成启用)。
- 基线配置:
assets/dexopt/baseline.prof(+profm)+ androidx.profileinstaller 1.4.0 → AGP baseline profile 流程。
- 根目录 SDK 属性文件归属:
billing.properties → Play Billing 7.1.1;
app-update(-ktx).properties → Play App Update 2.1.0;
core-common.properties → Play core-common 2.0.4;
firebase-*.properties、play-services-*.properties、integrity.properties(1.5.0)、googleid.properties(1.1.1)、user-messaging-platform.properties(3.2.0) → 见 §1;
client_analytics.proto → Firebase transport(package firebase.transport);
messaging_event.proto(+messaging_event_extension.proto)→ Firebase(package reporting,分析/消息事件);
byte_string_store.proto / universal_request_store.proto / webview_configuration_store.proto → Unity Ads(package com.unity3d.ads.datastore)。
kotlin-tooling-metadata.json → Gradle/编译器信息(见 §6)。
5. lib/ 对比
- 仅 armeabi-v7a 与 arm64-v8a 两个 ABI,无任何 x86/x86_64/mips 目录 → 只支持 ARM 设备(64 位为主)。
- 两 ABI 各 47 个 .so,文件列表完全一致(无差异)。
- 组成:
- 自研核心:
libanim_engine_lib.so(14.4MB)、libisffmpeg.so(12.7MB)、libskia.so(7.1MB)、libskigifcore.so、libisplayer.so、libisvideoengine.so、libisvideoutil.so、libisblur.so、libisTurboJpeg.so、libinpaint.so、libcaption.so、libpallet.so、libglPixelReader.so、libaudio_silence_dt.so、libauto_beat.so、libsmoothvideo.so、libvideo_stabilization.so、libsafe_auth.so、libcer.so、libanimated-frame.so、libnative-filters.so;
- AI:
libMNN.so(Alibaba MNN)、libYXAIEngine.so、libYXAImg.so、libface_detect.so、libportrait_matting_jni.so、libvid_seg.so、libvid_sot.so;
- 三方:
libc++_shared.so、libfmod.so、libmmkv.so、libmarsxlog.so、libcrashlytics*.so×4、libapplovin-native-crash-reporter.so、libgpuimage-{library,extension}.so、libglide-webp.so、libstatic-webp.so、libimagepipeline.so、libgifimage.so、libnative-imagetranscoder.so、libpl_droidsonroids_gif.so、libdatastore_shared_counter.so(androidx.datastore 1.1.x)。
6. 测试 / 开发工具痕迹
- 无 JUnit / Espresso / Robolectric / Mockito 依赖(protobuf 类里的
IS_ROBOLECTRIC 只是其运行时探测 org.robolectric.Robolectric 是否存在,非测试代码)。
- 无 LeakCanary(全库无匹配)。
- StrictMode 仅出现在被混淆的第三方/框架代码中(如 Firebase Concurrent 线程工厂
StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog(),以及 DiskLruCache 相关类),属库代码,非应用调试残留。
- 无
android:debuggable 标志;Vungle BuildConfig DEBUG=false/BUILD_TYPE=release。
- 最显著的"调试痕迹"其实是签名(见 §2):默认 debug keystore + 重签。
7. 构建工具链推断
- Gradle 8.14.3(
kotlin-tooling-metadata.json:buildSystem=Gradle,buildSystemVersion=8.14.3)
- AGP 8.12.3(
app-metadata.properties:androidGradlePluginVersion=8.12.3;与 databinding version 文件 8.12.3 互相印证;AGP 8.12 需 Gradle ≥8.13,与 8.14.3 一致)
- Kotlin 2.1.0(buildPlugin=KotlinAndroidPluginWrapper,buildPluginVersion=2.1.0;HMPP enabled)
- Java 11 source/targetCompatibility(kotlin-tooling-metadata;字节码目标 11)
- R8 全量混淆(minifyEnabled + full mode)+ 资源收缩(代码单字母混淆、服务注册名被混淆、baseline profiles 存在)
- Booster 字节码插桩(
com.didiglobal.booster:booster-android-instrument 运行时在包内)
- DataBinding / ViewBinding 开启、multidex 6 dex、profilers 使用 androidx.profileinstaller + AGP profgen(prm 002)
- 签名链: 原始构建很可能为 CI 签名(v2/v3/stamp + v1.2 由 apksigner/Signflinger 完成),但当前 APK 的 v1 由 AGP 8.0.2 工具链以默认 debug keystore 完成 → 经第三方重签,原始发行签名无法从该 APK 直接取证。
- 附带泄露: git revision
e292e629d43aa300896807def7257c33af4e6a5c(version-control-info.textproto)、构建窗口 ≈ 2025-01-29(verification.properties 时间戳)、multidex 库 git a1f28028ba4e22c11cfaffe0e37ae27be1eea0c3(androidsupportmultidexversion.txt)。