众所周知,Android7.0以后系统不在信任用户的证书.这一改动使得我们在抓包的时候产生了诸多不便。在Android端很多人的做法是先刷入Magsik在通过Magsik模块的方式来将抓包证书修改成系统证书。
比较出名的就是大名鼎鼎的HttpCanary(小黄鸟),只是它虽然抓包方便,调试起来却没有Fiddler Charles等抓包工具方便。
接下来,我将介绍几种方法能让你像装了Magsik模块的小黄鸟一样方便的抓包,并且方便的调试,希望能对你有所帮助。
Android系统对证书的不信任是从高版本开始的,那直接用低版本的Android系统即可完美解决这一问题。如果你手头没有低版本的安卓真机进行调试,可以尝试用PC端的Android模拟器来解决。诸如夜神(Nox),MuMu等等,绝大多数的模拟器都提供了Android5.0版本等低Android版本的系统。
在使用这些低版本的系统进行抓包时,除了APP使用上可能不如高版本流畅,在抓包这一方面效率绝对是相当的不错。
注意 --> 某些APP由于不支持32位可能无法运行。
此法虽然名字高大上,实际上比较针对于自己写APP进行调试时使用。不过对于一些冷门的小软件或者是没那么注重安全的开发者所作出的产品来说,可能会有奇效。
⑴. 让apk的targetSDKVersion <= 23 即可解决. 碰到做了反编译等保护的很难实现
⑵. 在res/xml目录下添加network_security_config.xml文件,并在application下设置好如下属性:
android:networkSecurityConfig="@xml/network_security_config"
xml文件模板:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!-- 设置允许http明文传输-->
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<!-- 设置信任系统级别证书-->
<certificates src="system" />
<!-- 设置信任用户自定义证书-->
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
本文的重点方法,通过将证书移动至系统证书目录,来解决不信任证书造成的无法抓包问题。
这里根据你的抓包工具来自行导出,但是你需要注意的是,现阶段的Android有效时间超过两年的证书。所以你导出的来的证书最好有效期不要超过这个时长,以避免不必要的麻烦。
此处以Fiddler为例,我们使用Fiddler的证书制作工具来导出一个证书。

使用OpenSSL对cer证书进行格式转换,变为pem格式
openssl x509 -inform DER -in FiddlerRoot.cer -out FiddlerRoot.pem
注意自己替换证书路径
在转换成pem格式后查看证书的hash值
openssl x509 -inform PEM -subject_hash_old -in FiddlerRoot.pem
如图所示:

记住图中圈出来的hash值,这个hash值就是最后转换出来的文件的文件名。
此时我们直接将转换好的pem证书进行重命名即可,如果你想用命令的话,Windows下可以用ren命令
ren FiddlerRoot.pem e5c3944b.0
如果你在Linux操作或者Android中使用终端模拟器的话就用mv命令
最后你将获得一个e5c3944b.0文件
将转换好的证书推送到Android的 /system/etc/security 目录下并赋予文件可读权限即可,这个目录就是系统证书的目录。
首先Android端打开adb调试,这里我是用的网络调试,也可以自己接线,如果是模拟器的话,也可以用模拟器的办法连接模拟器的adb。

PC端使用adb命令连接设备
首先与设备进行配对
adb pair 192.168.2.43:41053
随后连接设备
adb connect 192.168.2.43:37877
最后进入shell环境
adb shell

注意上面连接设备时输入的ip和端口,是与设备截图中一一对应的。
连接好设备后,来到目标目录
cd /system/etc/security
注意这里的目录权限,是755

而我们想要往目录中存放文件需要写的权限,此处采用adb临时赋予777权限
chmod 777 cacerts
这里可能会失败,由于我是真机且已经获取了root,所以直接su获取权限给目录加上了777
如果你是带root的模拟器,一般不需要专门su获取权限

如果碰到提示Read-only file system,可以使用mount -o remount,rw /system,将系统文件夹挂载为可读写。然后再用chmod赋予777权限。

修改好权限后,输入exit退出shell(如果你su了需要两次exit才能退出)。再用adb命令来推送证书文件
adb push E:\Desktop\e5c3944b.0 /system/etc/security/cacerts
这里的证书文件目录记得自己替换
如果你是模拟器的话,经过上边的操作应该已经推送成功了,不过我这里是真机所以无法直接推送到/system下,所以我这里稍微绕一下,先推送到手机内存中,然后再进入shell转移到cacerts目录下
adb push E:\Desktop\e5c3944b.0 /sdcard/
su
mv /sdcard/e5c3944b.0 /system/etc/security/cacerts

这里还要检查下你把文件推送过去,一定要给读的权限,不然在已信任的证书中是看不到这个证书的
chmod 666 e5c3944b.0

同样是真机的话记得推送完文件以后把目录的权限改回755

既然你已经有了root权限,完全可以通过软件直接在Android端直接进行转移

图示为使用MT管理器直接将证书移动到系统证书目录中
不管你用什么办法,只要把证书文件移动到/system/etc/security/cacerts这个目录下,并赋予证书文件可读的权限即可.
这个办法我并没有试验过,不过据说雷电模拟器是可行的
adb shell settings put global http_proxy <代理ip>:<代理端口>
参考文章:
https://blog.csdn.net/qq_43278826/article/details/124291040
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r