常见问题
没有限制过滤的抓包问题: 1、抓不到-工具证书没配置好 2、抓不到-app走的不是http/s 有限制过滤的抓包问题: 3、抓不到-反模拟器调试 4、抓不到-反代理VPN 5、抓不到-反证书检验
做移动安全测试时,设置好了代理,但抓不到数据包 反抓包Demo:https://github.com/AndroidAppSec/vuls 反调试Demo:https://github.com/lamster2018/EasyProtector
防护手段
1、反模拟器:禁用模拟器进行调试访问 部分监测可以通过虚拟机中修改模拟机配置进行绕过
虚拟的机型手机号等信息
2、反证书检验:SSL证书绑定(单向校验和双向校验) 单项校验-客户端校验服务端的证书。
//使用OkHttp进行SSL证书固定(SSL Pinning)
public class SSLPinningActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sslpinning);
}
//配置了两个CertificatePinner,分别用于验证特定的域名和相应的证书指纹。
//对"www.baidu.com"和"www.sohu.com"两个域名的证书指纹。这意味着应用将只信任这些网站使用指定证书指纹的SSL证书。如果服务器返回的SSL证书不匹配指定的证书指纹,请求将会失败。
public void okhttp3(View view) {
CertificatePinner leafCertPinner = new CertificatePinner.Builder()
.add("www.baidu.com", "sha256/M9Hz16jmJjXzPUkH8FUKG2GZLd/55sT6yCNiQgwfNtk=")
.add("www.sohu.com", "sha256/MQ==")
.build();
CertificatePinner intermediateCertPinner = new CertificatePinner.Builder()
.add("*.baidu.com", "sha256/IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4=")
.build();
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.certificatePinner(leafCertPinner)
.certificatePinner(intermediateCertPinner)
.build();
Request.Builder builder = new Request.Builder();
Request request = builder.get().url("https://www.baidu.com/").build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(SSLPinningActivity.this, "请求失败", Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final int code = response.code();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(SSLPinningActivity.this, "请求成功" + code, Toast.LENGTH_LONG).show();
}
});
}
});
}
}
这是使用真机进行测试 首先刷入Magisk面具
然后使用Lsposed 或者Xposed加载JustTrustme模块进行绕过客户端证书校验
这样基本上就绕过了客户端对服务端SSL证书的检测
其中涉及的操作包括:(可能哪一步操作不慎手机就变成了转🧱)
- 使用pixel或者小米等机型进行刷机,一般root后系统会出现magisk APP
- 然后使用magisk对刷机包中的boot文件进行修补,进行手机fastboot后进行刷入,这样magisk才算完整
- 后面使用PC端进行抓包的时候需要将证书(Charles或者Burp)导入到手机上
- android 7之前证书可以直接导入到系统区,android 7之后版本系统只信任系统证书(现在手机基本上都是android12+),需要借助到move cert模块进行移动(move cert github上的zip不能直接导入magisk中) 可以参考https://blog.csdn.net/puppyinasock/article/details/130207403 用户证书目录:/data/misc/user/0/cacerts-added 系统证书目录:/etc/security/cacerts
- 导入move cert模块后重启手机,用户区证书就自动移动到系统证书目录下
- 导入证书后可以抓到https的包,绕过证书需要在Lsposed上导入JustTrustMe模块(Lsposed是在Magisk上导入的)
注:Magisk更多用于对系统的修改、Xposed/LSPosed(android8.0以上的替代品)更多用于对用户软件的修改 差不多就这么多操作,不过操作起来却是挺复杂的
双向认证-客户端不仅仅要校验服务端的证书, 也会在app内放一张证书;服务端也会检验客户端里的证书。
3、反代理VPN:代理检测、VPN检测、发包框架强制不走代理 配置代理后无法访问,数据异常等 连接VPN节点后无法访问,数据异常等 配置代理后正常访问且无任何异常,但无数据包 使用系统代理打开后显示
示例检测代码:
代码通过调用System.getProperty(“http.proxyHost”)和System.getProperty(“http.proxyPort”)方法来获取HTTP代理的主机名和端口号。如果返回的值不为null,表示设备已经设置了HTTP代理。
绕过手段: 1、用APP工具设置-Postern&SocksDroid 2、用PC工具设置-Proxifier 3、逆向删反代码重打包