2018-12-16-绕过麻花影视抓包检测(完成)
本帖最后由 febsky 于 2019-1-2 17:57 编辑目的:能够用Charles或者fiddler抓包
**因为版主说文章发的太分散了,所以整理了一下放到里第一片里面,这个系列也不再单独更新 [首页地址](https://www.52pojie.cn/thread-842708-1-1.html)**
本来想抓包看看他的api请求,然后分析api加密和参数等问题呢,结果挂上Charles之后竟然界面没有数据并且 Toast 提示 `请关闭代{过}{滤}理重试`。
我能猜测到的引起这种现象的有两种情况:1,证书不匹配,项目固定了证书,或者服务端对客户端证书进行了验证;2,项目里面有代{过}{滤}理检测
进一步猜测并测试,我们再尝试一个别的代{过}{滤}理。用手机上的app,packet capture尝试一下结果竟然可以访问,而且也能够抓到数据。所以猜测证书引起的可能性不大。
并且它Toast 提示 `请关闭代{过}{滤}理重试`。这一行提示出卖了他。说明他知道我挂了代{过}{滤}理,那么它里面很有可能进行了网络代{过}{滤}理检测。
网上搜一下判断当前wifi是否使用了代{过}{滤}理的基本方法,都是下面这段代码:
```java
public static boolean isWifiProxy() {
final boolean IS_ICS_OR_LATER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
String proxyAddress;
int proxyPort;
if (IS_ICS_OR_LATER) {
proxyAddress = System.getProperty("http.proxyHost");
String portStr = System.getProperty("http.proxyPort");
proxyPort = Integer.parseInt((portStr != null ? portStr : "-1"));
} else {
proxyAddress = android.net.Proxy.getHost(context);
proxyPort = android.net.Proxy.getPort(context);
}
return (!TextUtils.isEmpty(proxyAddress)) && (proxyPort != -1);
}
```
jadx 全局搜索 `System.getProperty("http.proxyHost");`
得到 `com.mh.movie.core.app.i`
```
//不就是特么这个方法吗、
private boolean a(Context context) {
CharSequence property;
int parseInt;
if ((VERSION.SDK_INT >= 14 ? 1 : null) != null) {
property = System.getProperty("http.proxyHost");
String property2 = System.getProperty("http.proxyPort");
if (TextUtils.isEmpty(property2)) {
property2 = "-1";
}
parseInt = Integer.parseInt(property2);
} else {
String host = Proxy.getHost(context);
parseInt = Proxy.getPort(context);
property = host;
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("proxyAddress : ");
stringBuilder.append(property);
stringBuilder.append(", port : ");
stringBuilder.append(parseInt);
Log.i("checkWifiProxy", stringBuilder.toString());
if (TextUtils.isEmpty(property) || parseInt == -1) {
return false;
}
return true;
}
```
直接修改 `.class public Lcom/mh/movie/core/app/i;` 里面的代码为,直接返回false就行了,表明没有是用代{过}{滤}理:
```smali
.method private a(Landroid/content/Context;)Z
.locals 7
const/4 v1, 0x0
return v1
.end method
```
本来以为事情到这里就结束了,但是,TMD 、虽然能访问网络,但是抓不到包,抓不到包。。。。。why?
对于一些常用的网络库,其实是提供了我们设置的代{过}{滤}理的接口,我们只需要将其设置成无代{过}{滤}理的模式,它就不会去应用系统默认的代{过}{滤}理了。
就拿比较常用的 OkHttp 来举例,在初始化的时候,就可以通过 proxy() 方法,为 OkHttp 设置一个代{过}{滤}理。
```
var httpBuilder = OkHttpClient.Builder()
.addInterceptor(defaultInterceptor())
.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS)
.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS)
.readTimeout(DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS)
.proxy(Proxy.NO_PROXY)
```
全局搜索`Proxy.NO_PROXY` 这个玩意,都删了。
其实最后锁定到
是这个`com.jess.arms.b.b.f` 类里面的设置引起,但是目前我也没有办法直接锁定到这个类,因为这个项目用了Dagger 。我尝试出来的,jadx 全局搜索一共就是四五处用到这个NO_PROXY 的地方。然后一个个的改,而这个类最复杂,我放到最后才改。结果发现是这个类影响的。
好了终于可以,终于可以能够抓到包了。
>总结一下,他这里的抓包防护总共有两处1,检查是不是用了Http代{过}{滤}理,如果是,那么客户端不再发送网络请求,2,通过Okhttp 设置默认代{过}{滤}理,那么就不会走我们的Charles代{过}{滤}理了。设计很精巧 麻花难得的良心了,,没有那种不良广告,界面也算是清爽,这点还是能忍,毕竟要吃饭,生存。 yunruifuzhu 发表于 2018-12-25 17:32
我看过,它这个可以抓到包,但播放视频的时候就抓不到了。m3u8的加密视频 http://yunruiml.cn/com.o ...
已分析。
视频接口:
GET //mov/browse?movId=108939&version=v2&server=http%3A%2F%2Fapi1.jinsuiyumi.com%2F&url=mov%2Fbrowse HTTP/1.1
Cookie: JSESSIONID=50EC15A54B8723C725E251519BDF025E
X-Auth-Key: 368480924a6c78e2e8681551a7cf4c21
flowId: d6479aa9-fa48-4690-a67f-11aecdb20d911545793630617
X-Auth-Nonce: 88127698
Version: 114002201
Ip: 10.0.3.15
Response-Content-Type: application/json
Seq: 2953087ced728c6bda082C30mC3WuEJKvDpG
X-Auth-TimeStamp: 1545793630617
X-Auth-Sign: 9g7EdKcsiEyATA7d25va7Juz0rA%3D
User-Agent: Dalvik/2.1.0 (Linux; U; Android 6.0.1; MuMu Build/V417IR)
Host: api1.jinsuiyumi.com
Connection: Keep-Alive
Accept-Encoding: gzip, deflate
播放地址:
http://php.gamexbk.com/video/42/1sdde00470/93bef1sdde00470_360P.m3u8
播放地址加密了,解析ts为:
http://php.gamexbk.com/video/42/1sdde00470/93bef1sdde00470_360P_TS/1sdde00470_360P_0000.ts
最后的0000改成0001又是一个新的ts~~~自行写脚本跑就可以了 看不懂,大佬把麻花的视频地址搞出来能播放那就美滋滋了 @febsky 要是讨论贴就发讨论区,如果是同样类型的分享,你就合并到一个帖子就行了别刷一堆主题,把这个帖子内容编辑到之前的,然后回复我,我给你删除这个。 本帖最后由 狂暴补师亚丝娜 于 2018-12-24 15:11 编辑
感谢楼主告知APP,为了答谢楼主,送麻花影视海王接口一份:
接口如下:GET /api/app/video/ver2/user/clickPlayVideo_tv/7/1450?videoId=100856&time=1545634798226 HTTP/1.1
Content-Type: application/json
Accept: application/json
accessToken: f1c8cc0689c442fb1fad6ae6e8f0db195e42652273f257a8519a863da2a8e0b8
X-Client-NonceStr: TfibHpw33t
X-Client-IP: 127.0.0.1
X-Client-TimeStamp: 1543592259810
X-Client-Version: 1.0.1
X-Client-Sign: 0a9e3fb9a7b2c3dd6fdda9d33bc2cf7480827952891d1d8bfb682b4aeb63f13f
X-Auth-Token: mb_token:25361603:b22edbb38c1f8474bcb64a3165a2b079
X-Client-Token:
Host: api.zztxwj.com
Connection: Keep-Alive
User-Agent: okhttp/3.10.0
Accept-Encoding: identity
直接用fiddler,get一下,拿到json过后拼接即可。
如:
http://v.yimohui2017.com/v2/m_20 ... 1fe8b623_1080P.m3u8
后续:
区区一个麻花影视的本地代{过}{滤}理,证书绑定,不足以让人畏惧。 star321123 发表于 2018-12-24 14:25
看不懂,大佬把麻花的视频地址搞出来能播放那就美滋滋了
楼下 发布 谢谢分享,太好了,试试 都是能人 看不明白 太高深了属于 哪方面的内容 看不懂,玩不转!!!! Hmily 发表于 2018-12-24 14:29
@febsky 要是讨论贴就发讨论区,如果是同样类型的分享,你就合并到一个帖子就行了别刷一堆主题,把这个帖子 ...
抱歉哈,我没搞懂这些区到底怎么分的,我感觉是技术分享,怎么能是讨论帖呢?而且,每一篇是不同的技术点,合并到一篇文章里面怎么看?