更多>>关于我们
西安鲲之鹏网络信息技术有限公司从2010年开始专注于Web(网站)数据抓取领域。致力于为广大中国客户提供准确、快捷的数据采集相关服务。我们采用分布式系统架构,日采集网页数千万。我们拥有海量稳定高匿HTTP代理IP地址池,可以有效获取互联网任何公开可见信息。
您只需告诉我们您想抓取的网站是什么,您感兴趣的字段有哪些,你需要的数据是哪种格式,我们将为您做所有的工作,最后把数据(或程序)交付给你。
数据的格式可以是CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等。
更多>>技术文章
发布时间:2020-06-18 来源:西安鲲之鹏官微
【经验分享】接上篇“毒(得物)APP数据采集”。上篇提到了这个APP对HTTP请求做了"手脚"无法直接抓到包。这里分析一下,它到底做的什么"手脚",以及怎么绕过。
1. 在com.shizhuang.duapp.common.helper.net.RestClient类中可要找到如下代码:
writeTimeout.proxy(Proxy.NO_PROXY);(详见图1)
这里 writeTimeout是一个OkHttpClient实例,OkHttpClient.proxy(Proxy.NO_PROXY),意思就是不使用(绕过)系统代理。
绕过这个的方法有两个:
(1) 让DuConfig.f277505a的值为true,这样就能避免执行“writeTimeout.proxy(Proxy.NO_PROXY);”,从而使用系统代理。
而DuConfig.f277505a = applicationInfo.metaData.getBoolean("debug");(详见图2)
因此我们可以通过Hook Bundle.getBoolean()让其返回true,另外一个思路是HookOkHttpClient.proxy,让其失效。
(2)使用Proxifier让安卓模拟器进程的流量(例如夜神的NoxVMHandle.exe)强制转发给Fiddler。这种方法比较通用。
2. 另外APP里还加了证书固定机制,通过代理后会报网络异常。
通过如下代码可以绕过:
var OkHostnameVerifier = Java.use('okhttp3.internal.tls.OkHostnameVerifier');
OkHostnameVerifier.verify.overload('java.lang.String', 'java.security.cert.X509Certificate').implementation = function(arg1, arg2){
console.log("OkHostnameVerifier.verify('java.lang.String', 'java.security.cert.X509Certificate') called.");
console.log(arg1);
console.log(arg2);
return true;
}
OkHostnameVerifier.verify.overload('java.lang.String', 'javax.net.ssl.SSLSession').implementation = function(arg1, arg2){
console.log("OkHostnameVerifier.verify('java.lang.String', 'javax.net.ssl.SSLSession') called.");
console.log(arg1);
console.log(arg2);
return true;
}
var CertificatePinner = Java.use('okhttp3.CertificatePinner');
CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function (arg1, arg2) {
console.log('CertificatePinner.check() called. ');
console.log(arg1);
console.log(arg2);
}
var OpenSSLSocketImpl = Java.use('com.android.org.conscrypt.OpenSSLSocketImpl');
OpenSSLSocketImpl.verifyCertificateChain.implementation = function (arg1, arg2) {
console.log('OpenSSLSocketImpl.verifyCertificateChain() called.');
console.log(arg1);
console.log(arg2);
}
PS:上述代码和之前我们发的“58同城APP证书固定机制绕过(ssl unpinning)方法”中的一样。
经过上述两步之后,就能顺利抓到HTTP(s)流量,如图3所示。
1. 在com.shizhuang.duapp.common.helper.net.RestClient类中可要找到如下代码:
writeTimeout.proxy(Proxy.NO_PROXY);(详见图1)
这里 writeTimeout是一个OkHttpClient实例,OkHttpClient.proxy(Proxy.NO_PROXY),意思就是不使用(绕过)系统代理。
绕过这个的方法有两个:
(1) 让DuConfig.f277505a的值为true,这样就能避免执行“writeTimeout.proxy(Proxy.NO_PROXY);”,从而使用系统代理。
而DuConfig.f277505a = applicationInfo.metaData.getBoolean("debug");(详见图2)
因此我们可以通过Hook Bundle.getBoolean()让其返回true,另外一个思路是HookOkHttpClient.proxy,让其失效。
(2)使用Proxifier让安卓模拟器进程的流量(例如夜神的NoxVMHandle.exe)强制转发给Fiddler。这种方法比较通用。
2. 另外APP里还加了证书固定机制,通过代理后会报网络异常。
通过如下代码可以绕过:
var OkHostnameVerifier = Java.use('okhttp3.internal.tls.OkHostnameVerifier');
OkHostnameVerifier.verify.overload('java.lang.String', 'java.security.cert.X509Certificate').implementation = function(arg1, arg2){
console.log("OkHostnameVerifier.verify('java.lang.String', 'java.security.cert.X509Certificate') called.");
console.log(arg1);
console.log(arg2);
return true;
}
OkHostnameVerifier.verify.overload('java.lang.String', 'javax.net.ssl.SSLSession').implementation = function(arg1, arg2){
console.log("OkHostnameVerifier.verify('java.lang.String', 'javax.net.ssl.SSLSession') called.");
console.log(arg1);
console.log(arg2);
return true;
}
var CertificatePinner = Java.use('okhttp3.CertificatePinner');
CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function (arg1, arg2) {
console.log('CertificatePinner.check() called. ');
console.log(arg1);
console.log(arg2);
}
var OpenSSLSocketImpl = Java.use('com.android.org.conscrypt.OpenSSLSocketImpl');
OpenSSLSocketImpl.verifyCertificateChain.implementation = function (arg1, arg2) {
console.log('OpenSSLSocketImpl.verifyCertificateChain() called.');
console.log(arg1);
console.log(arg2);
}
PS:上述代码和之前我们发的“58同城APP证书固定机制绕过(ssl unpinning)方法”中的一样。
经过上述两步之后,就能顺利抓到HTTP(s)流量,如图3所示。
特别说明:该文章为鲲鹏数据原创内容 ,您除了可以发表评论外,还可以转载到别的网站,但是请保留源地址,谢谢!!(尊重他人劳动,我们共同努力)
☹ Disqus被Qiang了,之前的评论内容都没了。如果您有爬虫相关技术方面的问题,欢迎发到我们的问答平台:http://spider.site-digger.com/