diff --git a/README.md b/README.md
index 8460f7f..2a81620 100644
--- a/README.md
+++ b/README.md
@@ -1,31 +1,32 @@
-## AndroidHttpCapture网络诊断工具 [](https://travis-ci.org/JZ-Darkal/AndroidHttpCapture)
+## AndroidHttpCapture网络诊断工具
是一款针对于移动流量劫持而开发的手机抓包软件,可以当作是Android版的‘Fiddler’
主要功能包括:手机端抓包、PING/DNS/TraceRoute诊断、抓包HAR数据上传分享
使用前请确保手机HTTP代理的关闭
-### [Demo APK下载](http://h5.darkal.cn/har/demo.apk)
+### [Demo APK下载](http://static.hk.darkal.cn/har/demo.apk)
-### [点击查看操作手册](http://h5.darkal.cn/har/guide/widget.guide.html)
+### [点击查看操作手册](http://static.hk.darkal.cn/har/guide/widget.guide.html)
### 功能简介
1. HTTP/HTTPS抓包
当用户通过AndroidHttpCapture访问页面的时候,所有的http请求都会被记录下来,然后这些请求包可以预览、分享、上传(上传接口的网址需自行在MainActivity修改)。
#### 第一次进入程序需要安装CA证书以便进行HTTPS抓包(原理同fiddler,MITM中间人)不安装证书的话无法抓取HTTPS的请求
+#### 高版本的Android不允许跳转设置安装证书,需要自行在设置->安全和锁屏->加密与凭据->安装证书(证书位置:/har/littleproxy-mitm.pem)
预览页面可以查看从APP启动起所有网络请求数据,实现了按分页过滤、URL搜索功能,并可清空所有数据包
预览的内容包括Request Header、Request Cookie、Request Content、Response Header、Response Cookie、Response Content
Content内容如果为JSON将会自动格式化显示
-
-
+
+
分享功能将抓包生成的所有数据包打包为har文件并压缩为zip,支持分享到微信、QQ等
2. 返回包注入
支持修改流量返回包(该版本暂时只支持http的修改)
-
-
+
+
3. 环境切换
支持切换模拟为微信、手Q,默认为普通浏览器。
-
+
4. 多样性输入:导航、地址栏、扫一扫、schema呼起
支持地址栏直接输入地址,扫扫描二维码,以及schema呼起app并打开目标页面。
@@ -33,37 +34,35 @@ schema的协议格式为:jdhttpmonitor://webview?param={'url'='http://www.dark
5. Host配置
可以配置各域名的host
-
+
6. 查看console.log日志
-
+
7. 网络工具
目前AndroidHttpCapture集成了常见的网络工具,如dns,ping,以及设备信息
-
+
8. 设置系统代理,监听其他app请求包
当将用户手机的代理服务器设置为127.0.0.1:8888时,可以对其他app(例如微信)的HTTP数据进行抓包
(此时AndroidHttpCapture就是一个手机上的fiddler)
-
+
### Q & A
1. 分享的http包如何查看和分析?
分享的文件解压后为.har文件,可以通过fiddler方式或者在线工具进行分析。
Fiddler方式需要先将包导到电脑上,然后使用fiddler导入该包:Import Sessions->Select Import Format ->HTTPArchive ->选择包,即可
- 在线工具外网:http://h5.darkal.cn/har/ 只需要将包拖入此工具即可分析
+ 在线工具外网:http://static.hk.darkal.cn/har/ 只需要将包拖入此工具即可分析
### 已知BUG
1. 信任所有的服务器证书不做校验
~~2. 开启返回包注入功能后,https返回的部分页面存在 err_CONTENT_LENGTH_MISMATCH 错误
~~(看起来似乎是解决了,待用户反馈)
#### 如果觉得工具好用的话请多多star以及Pull requests
支持我喝杯咖啡请扫描下面的二维码,谢谢(ง •̀_•́)ง
-
+
-#### 相关技术交流可以加入QQ群:816839175
-
### 致谢
AndroidHttpCapture基于Netty、browsermob-proxy来实现核心抓包的功能
diff --git a/app/build.gradle b/app/build.gradle
index 73adbe9..46b68f6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,21 +8,25 @@ android {
storeFile file('./darkal.jks')
storePassword '333333'
v1SigningEnabled true
- v2SigningEnabled false
+ v2SigningEnabled true
}
}
dexOptions {
javaMaxHeapSize "4g"
}
- compileSdkVersion 27
- buildToolsVersion '27.0.3'
+ compileSdkVersion 30
+ buildToolsVersion '30.0.3'
dataBinding {
enabled = true
}
+ buildFeatures {
+ dataBinding true
+ viewBinding true
+ }
defaultConfig {
applicationId "cn.darkal.networkdiagnosis"
minSdkVersion 14
- targetSdkVersion 22
+ targetSdkVersion 27
versionCode 31
versionName "3.2.31"
// Enabling multidex support.
@@ -70,16 +74,17 @@ dependencies {
testImplementation 'junit:junit:4.12'
implementation 'com.jakewharton:butterknife:8.8.1'
+// annotationProcessor 'com.android.databinding:compiler:3.1.3'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'com.android.databinding:library:3.1.3'
implementation 'com.android.databinding:adapters:3.1.3'
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
- implementation 'com.android.support:appcompat-v7:27.1.1'
- implementation 'com.android.support:design:27.1.1'
- implementation 'com.android.support:support-v4:27.1.1'
- implementation 'com.android.support:gridlayout-v7:27.1.1'
+ implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'com.android.support:design:28.0.0'
+ implementation 'com.android.support:support-v4:28.0.0'
+ implementation 'com.android.support:gridlayout-v7:28.0.0'
// compile 'com.android.support:cardview-v7:24.0.0'
- implementation 'com.android.support:support-annotations:27.1.1'
+ implementation 'com.android.support:support-annotations:28.0.0'
implementation 'com.android.support:multidex:1.0.3'
// littleproxy及其依赖
implementation('net.lightbody.bmp:littleproxy:1.1.0-beta-bmp-17') {
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 4a4e5fa..97ec900 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -21,7 +21,7 @@
-dontpreverify # 混淆时是否做预校验
-verbose # 混淆时是否记录日志
-keepattributes *Annotation* # 保持注解
--ignorewarning # 忽略警告
+#-ignorewarning # 忽略警告
-dontoptimize # 优化不优化输入的类文件
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法
diff --git a/app/src/androidTest/java/cn/darkal/networkdiagnosis/ApplicationTest.java b/app/src/androidTest/java/cn/darkal/networkdiagnosis/ApplicationTest.java
index 6873d0e..4d3d1a6 100644
--- a/app/src/androidTest/java/cn/darkal/networkdiagnosis/ApplicationTest.java
+++ b/app/src/androidTest/java/cn/darkal/networkdiagnosis/ApplicationTest.java
@@ -1,13 +1,13 @@
-package cn.darkal.networkdiagnosis;
+// package cn.darkal.networkdiagnosis;
-import android.app.Application;
-import android.test.ApplicationTestCase;
+// import android.app.Application;
+// import android.test.ApplicationTestCase;
-/**
- * Testing Fundamentals
- */
-public class ApplicationTest extends ApplicationTestCase {
- public ApplicationTest() {
- super(Application.class);
- }
-}
\ No newline at end of file
+// /**
+// * Testing Fundamentals
+// */
+// public class ApplicationTest extends ApplicationTestCase {
+// public ApplicationTest() {
+// super(Application.class);
+// }
+// }
diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Activity/ChangeFilterActivity.java b/app/src/main/java/cn/darkal/networkdiagnosis/Activity/ChangeFilterActivity.java
index 5c75f26..b149581 100644
--- a/app/src/main/java/cn/darkal/networkdiagnosis/Activity/ChangeFilterActivity.java
+++ b/app/src/main/java/cn/darkal/networkdiagnosis/Activity/ChangeFilterActivity.java
@@ -14,15 +14,13 @@
import android.widget.RelativeLayout;
import java.util.ArrayList;
-import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import cn.darkal.networkdiagnosis.Adapter.ContentFilterAdapter;
-import cn.darkal.networkdiagnosis.Bean.ResponseFilterRule;
+import cn.darkal.networkdiagnosis.bean.ResponseFilterRule;
import cn.darkal.networkdiagnosis.R;
import cn.darkal.networkdiagnosis.SysApplication;
-import cn.darkal.networkdiagnosis.Utils.DeviceUtils;
import cn.darkal.networkdiagnosis.Utils.SharedPreferenceUtils;
public class ChangeFilterActivity extends AppCompatActivity {
diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Activity/MainActivity.java b/app/src/main/java/cn/darkal/networkdiagnosis/Activity/MainActivity.java
index b6ff32c..bdc9419 100644
--- a/app/src/main/java/cn/darkal/networkdiagnosis/Activity/MainActivity.java
+++ b/app/src/main/java/cn/darkal/networkdiagnosis/Activity/MainActivity.java
@@ -74,7 +74,7 @@
import butterknife.BindView;
import butterknife.ButterKnife;
import cn.darkal.networkdiagnosis.Adapter.PageFilterAdapter;
-import cn.darkal.networkdiagnosis.Bean.PageBean;
+import cn.darkal.networkdiagnosis.bean.PageBean;
import cn.darkal.networkdiagnosis.Fragment.BaseFragment;
import cn.darkal.networkdiagnosis.Fragment.BackHandledInterface;
import cn.darkal.networkdiagnosis.Fragment.NetworkFragment;
diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/ContentFilterAdapter.java b/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/ContentFilterAdapter.java
index 2ca0355..1d2a7ac 100644
--- a/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/ContentFilterAdapter.java
+++ b/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/ContentFilterAdapter.java
@@ -12,14 +12,9 @@
import java.util.List;
import cn.darkal.networkdiagnosis.Activity.ChangeFilterActivity;
-import cn.darkal.networkdiagnosis.Activity.MainActivity;
import cn.darkal.networkdiagnosis.BR;
-import cn.darkal.networkdiagnosis.Bean.PageBean;
-import cn.darkal.networkdiagnosis.Bean.ResponseFilterRule;
-import cn.darkal.networkdiagnosis.Fragment.PreviewFragment;
+import cn.darkal.networkdiagnosis.bean.ResponseFilterRule;
import cn.darkal.networkdiagnosis.R;
-import cn.darkal.networkdiagnosis.SysApplication;
-import cn.darkal.networkdiagnosis.Utils.DeviceUtils;
/**
* Created by Darkal on 2016/9/5.
diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/PageFilterAdapter.java b/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/PageFilterAdapter.java
index 275a3e9..9fe647e 100644
--- a/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/PageFilterAdapter.java
+++ b/app/src/main/java/cn/darkal/networkdiagnosis/Adapter/PageFilterAdapter.java
@@ -9,7 +9,7 @@
import java.util.List;
-import cn.darkal.networkdiagnosis.Bean.PageBean;
+import cn.darkal.networkdiagnosis.bean.PageBean;
import cn.darkal.networkdiagnosis.BR;
import cn.darkal.networkdiagnosis.R;
diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/SysApplication.java b/app/src/main/java/cn/darkal/networkdiagnosis/SysApplication.java
index 88eff04..b085ca3 100644
--- a/app/src/main/java/cn/darkal/networkdiagnosis/SysApplication.java
+++ b/app/src/main/java/cn/darkal/networkdiagnosis/SysApplication.java
@@ -24,7 +24,7 @@
import java.util.Locale;
import java.util.Random;
-import cn.darkal.networkdiagnosis.Bean.ResponseFilterRule;
+import cn.darkal.networkdiagnosis.bean.ResponseFilterRule;
import cn.darkal.networkdiagnosis.Utils.DeviceUtils;
import cn.darkal.networkdiagnosis.Utils.SharedPreferenceUtils;
diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Utils/DeviceUtils.java b/app/src/main/java/cn/darkal/networkdiagnosis/Utils/DeviceUtils.java
index 199c9df..ce931d1 100644
--- a/app/src/main/java/cn/darkal/networkdiagnosis/Utils/DeviceUtils.java
+++ b/app/src/main/java/cn/darkal/networkdiagnosis/Utils/DeviceUtils.java
@@ -6,23 +6,15 @@
import android.util.Log;
import net.lightbody.bmp.BrowserMobProxy;
-import net.lightbody.bmp.filters.RequestFilter;
import net.lightbody.bmp.filters.ResponseFilter;
import net.lightbody.bmp.proxy.dns.AdvancedHostResolver;
import net.lightbody.bmp.util.HttpMessageContents;
import net.lightbody.bmp.util.HttpMessageInfo;
-import org.littleshoot.proxy.HttpFilters;
-import org.littleshoot.proxy.HttpFiltersSource;
-
-import java.net.InetSocketAddress;
import java.util.List;
-import cn.darkal.networkdiagnosis.Bean.ResponseFilterRule;
+import cn.darkal.networkdiagnosis.bean.ResponseFilterRule;
import cn.darkal.networkdiagnosis.SysApplication;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.http.HttpObject;
-import io.netty.handler.codec.http.HttpRequest;
import io.netty.handler.codec.http.HttpResponse;
/**
diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Bean/PageBean.java b/app/src/main/java/cn/darkal/networkdiagnosis/bean/PageBean.java
similarity index 95%
rename from app/src/main/java/cn/darkal/networkdiagnosis/Bean/PageBean.java
rename to app/src/main/java/cn/darkal/networkdiagnosis/bean/PageBean.java
index 1a01f51..f836f12 100644
--- a/app/src/main/java/cn/darkal/networkdiagnosis/Bean/PageBean.java
+++ b/app/src/main/java/cn/darkal/networkdiagnosis/bean/PageBean.java
@@ -1,4 +1,4 @@
-package cn.darkal.networkdiagnosis.Bean;
+package cn.darkal.networkdiagnosis.bean;
/**
* Created by xuzhou on 2016/9/5.
diff --git a/app/src/main/java/cn/darkal/networkdiagnosis/Bean/ResponseFilterRule.java b/app/src/main/java/cn/darkal/networkdiagnosis/bean/ResponseFilterRule.java
similarity index 92%
rename from app/src/main/java/cn/darkal/networkdiagnosis/Bean/ResponseFilterRule.java
rename to app/src/main/java/cn/darkal/networkdiagnosis/bean/ResponseFilterRule.java
index 7605dc0..f77a87c 100644
--- a/app/src/main/java/cn/darkal/networkdiagnosis/Bean/ResponseFilterRule.java
+++ b/app/src/main/java/cn/darkal/networkdiagnosis/bean/ResponseFilterRule.java
@@ -1,8 +1,8 @@
-package cn.darkal.networkdiagnosis.Bean;
+package cn.darkal.networkdiagnosis.bean;
import java.io.Serializable;
-import static cn.darkal.networkdiagnosis.Bean.ResponseFilterRule.RULE_TYPE.STRING_REPLACE;
+import static cn.darkal.networkdiagnosis.bean.ResponseFilterRule.RULE_TYPE.STRING_REPLACE;
/**
* Created by darkal on 2017/5/31.
diff --git a/app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java b/app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java
index a4358e2..bad11b1 100755
--- a/app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java
+++ b/app/src/main/java/org/littleshoot/proxy/mitm/CertificateHelper.java
@@ -255,10 +255,8 @@ private static X509Certificate signCertificate(
X509v3CertificateBuilder certificateBuilder,
PrivateKey signedWithPrivateKey) throws OperatorCreationException,
CertificateException {
- ContentSigner signer = new JcaContentSignerBuilder(SIGNATURE_ALGORITHM)
- .setProvider(PROVIDER_NAME).build(signedWithPrivateKey);
- return new JcaX509CertificateConverter().setProvider(
- PROVIDER_NAME).getCertificate(certificateBuilder.build(signer));
+ ContentSigner signer = new JcaContentSignerBuilder(SIGNATURE_ALGORITHM).build(signedWithPrivateKey);
+ return new JcaX509CertificateConverter().getCertificate(certificateBuilder.build(signer));
}
public static TrustManager[] getTrustManagers(KeyStore keyStore)
diff --git a/app/src/main/res/layout/item_filter.xml b/app/src/main/res/layout/item_filter.xml
index 3185354..072f69f 100644
--- a/app/src/main/res/layout/item_filter.xml
+++ b/app/src/main/res/layout/item_filter.xml
@@ -4,7 +4,7 @@
+ type="cn.darkal.networkdiagnosis.bean.ResponseFilterRule" />
+ type="cn.darkal.networkdiagnosis.bean.PageBean" />
- - false
- - false
+
+
diff --git a/build.gradle b/build.gradle
index bb818af..a9fc7a4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.1.3'
+ classpath 'com.android.tools.build:gradle:4.0.0'
classpath 'com.tencent.bugly:symtabfileuploader:latest.release'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 44b68b4..7decb3c 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Thu Jul 05 14:53:57 CST 2018
+#Wed Dec 09 15:54:43 CST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip