你的位置: sewuyue > 男同 porn > 手机成人游戏 [原创] 一个深网灰色直播APP的逆向筹算-Android安全-看雪-安全社区|安全招聘|kanxue.com
热点资讯

手机成人游戏 [原创] 一个深网灰色直播APP的逆向筹算-Android安全-看雪-安全社区|安全招聘|kanxue.com

发布日期:2024-09-03 08:54    点击次数:109

手机成人游戏 [原创] 一个深网灰色直播APP的逆向筹算-Android安全-看雪-安全社区|安全招聘|kanxue.com

注:本文首发于我的个东说念主博客 https://evilpan.com需要看雪账号手机成人游戏,因此特来混积分:)

当你疑望山地的时辰, 山地也在疑望你 —— 尼采.

从简略13年运行, 各大直播平台就如雷霆万钧般冒出来, 犹记稳当初还世俗在午休时看DOTA的直播下饭. 自后不知说念什么时辰运行不再仅仅游戏直播, 而是一度刮起了女主播打擦边球的不正之风, 再自后严厉整顿, 各个平台也才逐渐料理是非的发展, 逐渐步入正轨. 关系词, 在阳光照不到的所在, 已经感叹万千...

弁言

发现这一迹象的机会, 是在总部位于卢森堡的某定约网站发现运行有大都中国东说念主拍摄的视频, 这在海外网站中是比拟有数的. 而这些视频有个共同特征, 都打有某某直播的水印. 那时并莫得介怀, 加上年底也比拟忙没空深究. 直到今天闲下来, 才想起来一洽商竟.

领先按照水印的logo去搜索, 发现一个网站:

webpage

主页倒是中规中矩, 一副文艺酬酢的时势, 然则看标题就知说念不一般啊. SM是什么东西, 熟谙二次元的一又友应该都不会目生. 尽管我也有所了解, 但跟着深入洽商如故被战抖到, 是以提议未成年的小昆仲三念念而百度.

说到百度, 来望望百度对这个站的收录是如何的:

baidu

确实莫得收录! 确实藏得很深. 什么叫暗网? 不是洋葱才叫暗网, 这亦然一种暗网. 回偏激来, 这个网站彰着仅仅一个下载站, 也莫得web造访界面, 因此咱们要深入的话需要下载其手机APP. 网站提供了安卓和iOS版块, 咱们先选拔前者来进行分析.

分析APP的第一步天然是使用了. 以防万一, 这种APP如故先放在沙盒里运行, 保不准有什么坚贞木马. 意想之中的是不维持x86的模拟器, 换到arm环境中闲居启动. 贵圈的画风是怎么样的的? 截了一张图全球感受下:

shot

内部大致分为直播和回放, 天然天地莫得免费的午餐, 每个视频或者直播都只可免费播放8秒, 8秒之后自动掸出购买窗口, 平均购买价钱为288-988金币不等, 金币价钱如下, 维持微信支付哦:)

price

探索

大致玩了一遍这个APP, 基本功能都了解了, 接下来就从时刻角度去探索下内部的杀青. 一般来说逆向都要预先定下计算计算, 然则咱们此次莫得很明确的计算, 仅仅简略逛逛, 趁便温习下逆向技能.

脱壳

领先在刚才的首页下载安卓apk, 用JADX望望大致的结构:

shell

看时势是使用了360的安全加固, 恰巧之前写了个脱壳剧本, 一键脱掉:

unpack

之后每个dex就不错闲居使用jadx-gui来大开看了, 不外这里共享一个我比拟心爱的操作, 即用jadx呐喊行区分反编译各个dex, 然后用rsync统一到一处.

mkdir t380.jadx
for i in {1..4};do
    JAVA_OPTS="-Xmx8G" jadx -j 1 -r -d t380_${i}.jadx unpacked_classes${i}.dex
    rsync -a t380_${i}.jadx t380.jadx
done

为什么要这样作念? 因为使用jadx-gui区分大开每个dex时辰不论是查找函数如故查找援用都不太简易,统一到一处不错径直用find/grep来查找. 这关于上百兆的巨型APK逆向如故很实用的.

逆向

天然这个APK独一50多M, 但代码量也不小, 径直看有点无从下手, 就从收费的所在运行吧! 毕竟这是通盘环境最中枢的部分. 咱们大开一个直播间, 等8秒后弹出付费窗口, 定位这个所在:

ui

天然, 还有个比拟径直的方法, 径直使用adb来检察现时置顶的activity:

$ adb shell dumpsys window windows | grep Focus
  mCurrentFocus=Window{be2e8cd u0 com.zhuoyigou.dese/com.zhuoyigou.dese.ui.live.activity.PlayerLiveActivtiy}
  mFocusedApp=AppWindowToken{73e5eb8 token=Token{bfded1b ActivityRecord{2d0fb2a u0 com.zhuoyigou.dese/.ui.live.activity.PlayerLiveActivtiy t50}}}

这个直播软件有个颠倒的所在是内部除了直播, 还有大部分是视频回放, 不雅看视频回放一样是需要收费. 定位方法亦然一样, 回放的activity为com.zhuoyigou.dese.ui.live.activity.PlayBackActivity.

这里再共享个小技巧, 逆向过程中叶俗会需要用剪辑器大开某个文献, 界说个shell函数不错加快该经过:

function jopen() {
    p=`echo -n $1 | tr . /`
    file=$p.java
    gvim -R $file
}

这里以PlayBackActivity为例, 在jadx代码目次下, 不错径直这样大开文献:

jopen com.zhuoyigou.dese.ui.live.activity.PlayBackActivity

哈, 扯远了, 来望望弹窗付费的所在是如何杀青的吧, 该类的部分代码作风如下:

code

作念了少许抵御, 然则却莫得弥散污染, 看来是不太了解木桶旨趣啊. 字据内部的方法称呼, 发现一个比拟兴趣的函数:

private void showTimeOutDialog() {
    if (isMainActivityTop(GiftActivity.class)) {
        reflashGiftActivity("1", null);
    }
    if (!isFinishing()) {
        this.mLiveTimeOutDialog = new LiveTimeOutDialog(this, 2131493319);
        this.mLiveTimeOutDialog.show();
        this.mLiveTimeOutDialog.setGold(this.mPlayBackBean.getLiveRoom().getPayMoney());
        this.mLiveTimeOutDialog.setTitle("replay");
        this.mLiveTimeOutDialog.setCancelable(false);
        this.mLiveTimeOutDialog.setBuyOnClick(new 12(this));
        this.mLiveTimeOutDialog.setNoBuyOnClick(new 13(this));
    }
}

径直把这个dialog禁掉试试. 测试不错用一些hook框架如xposed或者frida, 这里选拔后者, 因为可能会需要作念native的分析(有莫得发现这个Activity的onCreate函数是native的?). frida更新速率速即, 况兼许多用法和特色都莫得写到文档里, 多望望别东说念主写的剧本也许会有许多灵感.

劫持函数是惯例操作了:

const PlayBackActivity = Java.use("com.zhuoyigou.dese.ui.live.activity.PlayBackActivity");
PlayBackActivity.showTimeOutDialog.implementation = function() {
    log("skip showTimeOutDialog()");
}

再行附加程度, 大开直播间, 发现确乎不弹窗了, 然则过十几秒后视频窗口仍然会我方复返. 了解安卓诞生的应该都知说念, Activity复返一般是调用finish函数, 不外搜了一圈发现调用的所在太多了, 懒癌发作不想一个个搜检, 于是祭出frida大法, 在finish函数中检察堆栈:

[+] skip showTimeOutDialog()
[+] skip finish()
[+] java.lang.Exception: printStackTrace here:
    at android.app.Activity.finish(Native Method)
    at com.zhuoyigou.dese.ui.live.activity.PlayBackActivity$11.handleMessage(PlayBackActivity.java:561)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5539)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)

字据finish的堆栈检察com.zhuoyigou.dese.ui.live.activity.PlayBackActivity$11类中的handleMessage函数来进行考据, 确乎是有这个逻辑:

void handleMessage(Message msg) {
    switch(msg.what) {
        // ...
        case 1002:
            this.this$0.mPointProgressBar.setVisibility(8);
            PlayBackActivity.access$1400(this.this$0).onPause();
            if (PlayBackActivity.access$400(this.this$0)) {
                PlayBackActivity.access$1500(this.this$0);
            } else {
                PlayBackActivity.access$1600(this.this$0);
            }
            PlayBackActivity.access$600(this.this$0).sendEmptyMessageDelayed(AidConstants.EVENT_NETWORK_ERROR, 11000);
            return;
        case AidConstants.EVENT_NETWORK_ERROR /*1003*/:
            if (PlayBackActivity.access$400(this.this$0) && PlayBackActivity.access$900(this.this$0).isShowing()) {
                PlayBackActivity.access$900(this.this$0).dismiss();
            }
            this.this$0.finish();
            return;
        // ...
    }
}

在11秒后触发事件, 径直退出窗口. 在8秒的试看后还给你3秒选拔是否购买哦:) 手脚考据, 咱们径直对finish函数下手, 发现禁用dialog的同期禁用finish函数, 就不错绕过金币购买的范畴了, 想看多久看多久.

云存储

天然面前不错无范畴看片, 但正事如故要作念的. 下一步望望是哪家对象存储提供了劳动, 说不定还能找到硬编码的key. 在代码中瞎逛, 又(?)发现一个兴趣的函数:

private void initPlay(String videoUrl, PlayBackBean playBackBean) {
    MyLogger.jLog().e("reVideoUrl:" + videoUrl);
    this.mVideoUrl = videoUrl;
    if (TextUtils.isEmpty(videoUrl)) {
        showError(getString(R.string.video_invalid));
        return;
    }
    if (this.mPLVideoTextureView == null) {
        this.mPLVideoTextureView = (PLVideoTextureView) findViewById(2131362384);
    }
    AVOptions options = new AVOptions();
    options.setInteger("timeout", StatusCodes.AUTH_DISABLED);
    options.setInteger("fast-open", 1);
    options.setInteger("mediacodec", 0);
    PLVideoTextureView pLVideoTextureView = this.mPLVideoTextureView;
    PLVideoTextureView pLVideoTextureView2 = this.mPLVideoTextureView;
    pLVideoTextureView.setDisplayAspectRatio(2);
    this.mPLVideoTextureView.setAVOptions(options);
    this.mCustomController = new CustomController(this);
    this.mPLVideoTextureView.setMediaController(this.mCustomController);
    this.mPLVideoTextureView.setVideoPath(videoUrl);
    this.mPLVideoTextureView.start();
    this.mPLVideoTextureView.setOnInfoListener(new 4(this, playBackBean));
    this.mPLVideoTextureView.setOnCompletionListener(new 5(this));
    this.mPLVideoTextureView.setOnErrorListener(new 6(this));
}

videoUrl? 劫持该函数并打印出来, url地址如下(已打码):

_1546635114.mp4?sign=b6c6587f1794a14c250e143f28e07620&t=5c303623

这个诱骗使用wget确实不错径直下载, 下载效力即是mp4视频文献, 也即是播放的回放视频. 除了mp4还有m3u8体式的诱骗. m3u8诱骗不错径直用ffmpeg下载:

ffmpeg -i  -c copy vid.mp4

大书特书, 从这里的url地址看到了熟谙的qiniu, 莫非是七牛云? 检察代码发现确乎是用了七牛的安卓SDK. 一年前恰巧写了个七牛云的对象存储处治呐喊行器用qncli, 是以对七牛云如故有了解的. 七牛云自身有key和secret, 然则是使用token来对bucket进行造访. 关于客户端而言, 提议的安全作念法亦然使用劳动器下发token的时势来操作.

轻熟女

通过检察代码, 发现该url也确乎是劳动端下发的. 一般来说, 七牛云的颠倒bucket和会过对超时与资源一都签名来秩序对内容的造访, 体式为:

?e=1546686297&token=xxx

不知为何上述诱骗的体式却不是传统颠倒诱骗, 也许是其他产物也说不定, 有了解的一又友也不错留言同步一下.

MISC

除了云存储, 该直播软件与许多小众直播一样, 使用了三方直播SDK减少诞生量, 如某拍SDK. 同期集成了多家厂商的地址定位, 猜测是为了作念LBS酬酢, 而主页中出现的“同城”banner也部分印证了咱们的目的. 至于同城碰面是作念什么, 那就我方联想吧.

该APP同期也作念了共享赚金币的功能, 使用ShareSDK, 维持QQ、微信、微博、豆瓣等著名酬酢网站, 这也证实了为什么明明这个低调得都不干预百度收录的APP, 却领有不少的用户量. 上头也说过, 不论直播如故回放, 都是需要金币付费造访的. 而内部还不错发布非直播的视频, 有偿提供下载, 俨然成长为了一个小视频往返社区.

字据平台提供的统计数据, 充值用户的“土豪榜”如下:

user

另外通过期刻妙技, 发现该APP的注册用户数在25万控制, 天然量未几, 但都是实打实的付用度户啊! 按照金币的平均价钱以及用户的付费情况估算, 抛弃部分托儿刷榜, 保守估量该平台在18年收入亦然千万级. 这还仅仅单个APP明面上的数据, 实际上一个公司背后延续关所有十个平台, 拔出萝卜带出泥. 由于该平台自身并莫得作念什么伤天害理的事情, 就点到为止吧.

小结

本文出于败兴以及猎奇的豪情, 加上手痒, 就跟这个灰色直播软件玩了半天. 趁便纪录了一下Android逆向的一些常用操作, 有些时刻写出来确乎印象长远少许. 俗语说, 猎东说念主要随时保持我方的技能敏锐, 这关于安全筹算东说念主员亦然一样的. 安全时刻亦然日月牙异, 闲时也要把执好各式实战机会.

跋文

在使用该直播软件的过程中, 诧异地发现内部有很部分用户竟如故在校学生, 包括用户和主播. 通过某种妙技添加其中一个主播聊天得知, SM行业“水很深”, 除了直播间收礼物外, 主播一般还会将高质地用户引流到其他酬酢平台(刷“飞机”加微信). 然后私下面会视情况进行现实调教. 用该主播的话说, ”一天2个或者3个, 元旦那天最多, 一天有8个”, 这每一“个”的收费天然亦然不低的, 内容粗略有XX、XX和XX, 重口味少许的有XX、XX等...

关于该“圈子”的曲直且不去谈, 这个公司游走在法律角落, 还致未成年东说念主的身心健康于无物, 老子动画片(进攻的巨东说念主)都看不了, 这种直播竟莫得关系部门料理? 关于成年的不雅众, 全球都有辩认曲直的智商, 就未几说了吧. 至于主播, 许多东说念主即是手脚责任或者兼职, 赚的亦然竭力钱, 也未几说了吧. 毕竟, 直言贾祸, 你懂的.

contact_me

[培训]内核驱动高档班手机成人游戏,冲击BAT一流互联网大厂责任,每周日13:00-18:00直播讲课



----------------------------------