前言
之前在做手机采集调研的时候,发现对于andriod7以上的版本,很多app用charles抓包都会显示unknown,于是上网查了一下,发现是在android7之后系统证书和用户自行安装的证书被分开了,很多app可以识别到非系统证书从而不让访问了。于是上网找了找解决方法,最终是反编译apk后修改了点东西再重新安装之后好了。
反编译
apk反编译需要apktool这一工具,网上的下载资源很多。下载完之后将apktool.jar和需要反编译的apk放在同一路径下,随后命令行运行java -jar apktool的名字 d(反编译) 要解包的apk -o(输出) 文件名 ,例如java -jar .\apktool_2.6.0.jar d .\douyin.apk -o douyin ,运行成功之后应该会在路径下生成一个douyin的文件夹 打开douyin文件夹,其中res和AndroidManifest.xml是本次关注的重点。
修改配置
在res路径下新建network_security_config.xml,内容为
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
在AndroidManifest.xml找到application,新增android:networkSecurityConfig="@xml/network_security_config
重新打包
命令行运行java -jar apktool的名字 b(打包) 要打包的文件夹名字 ,例如java -jar .\apktool_2.6.0.jar b .\douyin\ ,打包完之后会在该路径的dist目录下生成对应apk。但这个时候的apk还是不能安装的,因为还没有签名,接下来生成签名keytool -genkey -alias douyin.keystore -keyalg RSA -validity 40000 -keystore douyin.keystore 该命令的使用参数为: -genkey 产生证书文件 -alias 产生别名 -keystore 指定密钥库的.keystore文件中 -keyalg 指定密钥的算法,这里是RSA(非对称密钥算法) -validity 为证书有效天数,这里是40000天 生成签名文件之后,运行以下命令给apk签名
jarsigner -verbose -keystore douyin.keystore douyin.apk douyin.keystore
然后这个apk就可以安装了,但是需要注意如果手机上有原来的app需要先卸载再重新安装
|