一切福田,不離方寸,從心而覓,感無不通。

【破解APP抓包限制】Xposed+JustTrustMe关闭SSL证书验证!

1 前言 这篇文章主要想解决的问题是,在对安卓手机APP抓包时,出现的HTTPS报文通过MITM代理后证书不被信任的问题。(工作中在抓取12306请求时就遇到了这个问题) 之前的推送讲过,通常要抓取HTTPS加密的数据包,一般使用Charles或者Fiddler4代理HTTP请求,配置证书信任后,便可拿到明文报文。但是由于Charles证书和Fiddler证书并非证书机构颁发的目标站点的合法证书,所以会不被信任。同样的道理,之前说过的神器Packet Capture也存在该问题。 对使用Charles等工具进行中间人代理抓取HTTPS请求不会的请看之前的推送: 阅读下文来解决这个问题。 2 解决方案 要解决这个问题要使用的工具是:Xposed+JustTrustMe (安卓手机需要Root,该方法有手机变砖风险,建议在模拟器下操作) XposedInstaller(xposed框架)是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。 JustTrustMe是Github上的一个开源工程,他是一个Xposed模块,用来禁止SSL证书验证。以下是其简介。 JustTrustMe:An xposed module that disables SSL certificate checking. This is useful for auditing an appplication which does certificate pinning. Xposed安装器下载地址 安卓5.0版本以下下载地址:https://pan.baidu.com/s/1dEToAvJ 密码:uiu8 安卓5.0版本以上下载地址:https://files.cnblogs.com/files/pingming/xposedinstaller.apk JustTrustMe Relese版本下载地址:https://files.cnblogs.com/files/pingming/JustTrustMe.apk    github:https://github.com/Fuzion24/JustTrustMe/releases 以下是安装步骤: 1  安装Xposed安装器 2  安装Xposed框架 安装过程需要Root权限,完成后重启。 3  安装JustTrustMe 4  安装完成后打开模块选项 勾选JustTrustMe,重启即可。 至此,完成配置,再加上之前的Charles或者Fiddler4的HTTPS配置,就能抓取HTTPS请求了。 3 最后 最后再强调一次,安装Xposed是有风险的,请尽量在模拟器中操作。 文中的Xposed下载链接主要是针对于安卓5.0以下的机器,是在夜神模拟器安卓4.4版本测试通过,其他版本使用大同小异,请自行查找合适版本安装使用。   from:https://www.cnblogs.com/pingming/p/10846068.html

龙生   06 Dec 2021
View Details

使用Fiddler抓HTTP/HTTPS包,Android7.0以后https抓包失败问题

原博客地址:https://www.52pojie.cn/thread-967606-1-1.html 抓包的重要性 网络抓包,是Android应用逆向分析的重中之重,很多时候我们拿到一个APP,不知道从何入手分析,往往是从抓包开始,先弄清楚他与服务器通信的内容,如果一目了然,我们完全可以照搬,自行写一个程序来模拟,如果有一些加密字段和随机字段,也不用担心,我们可以从抓包中了解到一些关键的URL和session之类的信息,然后再反编译分析代码的时候,这些字符串可以帮助我们更快的定位关键代码所在之处。 Fiddler的使用 Fiddler简直是HTTP抓包分析的神器,比Chrome等浏览器自带的调试工具高不知道哪去了,浏览器自带的调试工具,基本只能查看包内容,而Fiddler除了查看,还可以针对不同类型的内容进行格式化,观赏效果真的不要太爽。除了“看”数据包,它还可以一键重发HTTP请求,修改请求内容并重发HTTP请求,拦截修改数据包,返回预设的欺骗性内容等,还可以编写脚本进行更高级的自动化处理。 废话不多说,到Fiddler官网下载安装:https://www.telerik.com/fiddler 接下来,我们要开启Fiddler的HTTPS抓包功能,否则只能看到HTTP请求的内容,而HTTPS请求则是密文。 在Fiddler中点击 [Tools] — [Options] — [HTTPS] 勾选如下设置: 然后在 [Connections] 选项卡中勾选 [Allow remote computers to connect],我们知道Fiddler默认在8888端口开启HTTP/HTTPS代{过}{滤}理服务,不管是Android、IPhone还是PC等等设备和程序,只要设置了HTTP/HTTPS代{过}{滤}理,流量从Fiddler走,就可以抓包分析。此处开启远程访问,使得我们的Android/Iphone手机可以在WLAN设置上设置它为HTTP/HTTPS代{过}{滤}理,从而手机上的应用的HTTP/HTTPS流量将从Fiddler走,Fiddler就能捕获它们。 然后确保手机和PC在同一个局域网中,然后在手机上设置WLAN代{过}{滤}理,此处我的PC内网IP地址是192.168.1.100,你需要根据自己的情况进行设置: 然后我们在手机浏览器中打开http://192.168.1.100:8888 下载Fiddler根证书并安装 这是Fiddler解密HTTPS通信的关键,Fiddler对HTTPS包解密的原理是中间人攻击,对客户端声称自己的服务端,对服务端声称自己的客户端,两头欺骗。当然要想欺骗成功,前提是让客户端信任自己的根证书,接下来就可以愉快的观看HTTPS请求明文内容了。   畅快的抓包 Fiddler这个抓包方法,不仅对Android有用,对IPhone也有用。接下来在手机上,无论是打开浏览器,打开手机上的应用,应用内嵌的WebView,我们都可以在Fiddler中看到HTTP/HTTPS请求内容,但细心查看就会发现,还是有的HTTP包装不到。一般能抓到包的几种情况: Android内置浏览器 应用内置WebView 应用使用URLConnection或OkHttp发起HTTP请求 抓不到包,很可能目标APP使用了其它HTTP Client,比如自带一个libcurl的so,那样最终调用的是系统的Socket API,WLAN上设置的HTTP/HTTPS代{过}{滤}理对它无效,但其实这种情况很少,市面上绝大多数的应用,都是使用URLConnection和OkHttp,尤其是近些年的应用,几乎都是清一色的OkHttp,所以绝大多数情况下都能抓到包,如果抓不到,很可能是应用自己进行了额外的SSL证书校验工作,根据情况再特殊分析特殊处理。 注意!Android7.0以后抓包失败 以前我一直都是在Android5.1的手机上抓包分析应用,屡试不爽,但是近来使用Android7.1和Android8.1的手机,发现按照上面设置以后,尽管向Android导入了Fiddler的根证书,还是没法抓到HTTPS包的内容。 以 [云闪付] 为例,具体表现为APP中的WebView无法打开内容,和网络断开了一般,Fiddler中可以看到大量的CONNECT然后就没有下文了。   回顾之前我们总结的Fiddler抓不到包的原因 《Windows抓包指南(二):Fiddler抓不到的包是怎么回事?》可以猜想,很可能在Android7.0以及以后的版本,即便是导入了Fiddler根证书,但是APP的URLConnection、OkHttp、WebView,仍然不信任系统中导入的Fiddler根证书。 验证猜想 自行编写Android应用,分别使用URLConnection、OkHttp发起HTTPS请求,用WebView打开HTTPS的网页,看看出了什么错误。

  运行后果然抛出了异常: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValIDAtorException: Trust anchor for certification path not found. 不出所料,和我们之前在Windows上分析的情况一样,客户端并不信任我们导入系统的Fiddler根证书,那为什么在Android6.0及以前能正常工作呢?经过查阅资料,这个改动果然是从Android7.0开始的。 查看Android官方文档说明:https://developer.android.com/training/articles/security-config.html By default, secure connections (using protocols like TLS and HTTPS) from all apps trust the pre-installed system CAs, and apps targeting Android 6.0 (API level 23) and lower also trust […]

龙生   06 Dec 2021
View Details

带你了解Typescript的14个基础语法

本文分享自华为云社区《Typescript基础语法全解析》,作者:北极光之夜。 。 一.Ts是什么: 首先,强类型不允许随意的隐式类型转换,而弱类型是允许的。JavaScript就是经典的弱类型语言。而Typescript可以说是JavaScript的超集,在JS的基础上新增了许多语法特性,使得类型不再可以随意转换,能大大减少开发阶段的错误。 二. 基本语法: 1.声明原始数据类型: 在变量后面指定一个关键字表示其只能为什么类型。 string类型:

  number类型:

  boolean类型:

  null类型:

  undefined类型:

  symbol类型:

  2.声明Object类型: 首先,object类型不单单可以指定对象,还可以指定数组或函数:

  如果只想指定为对象,如下,对象属性都要提前声明好类型:

  3.1声明数组类型: 可以指定声明Array且通过<>指定元素类型,比如指定声明元素都为数字的数组:

  第二种方式如下,也指定声明元素都为数字的数组:

  3.2声明元组类型: 就是要提前指定数组里每个元素的类型,严格一一对应:

  4.声明枚举类型: 通过关键字enum声明一个枚举类型,如:

  如果全不写值,默认值为从0开始递增。如果第一个元素为字符类型,就必须全部定义值。如果第一个元素指定为一个数字,后面元素不写值,那值为第一个元素值按位置大小递增的结果。 5.函数参数与返回类型: 函数声明式: 指定函数传入参数类型,指定返回值类型,调用时传入参数个数与类型都必须相同: 括号里指定每个参数类型,括号右边指定返回值的类型。

  如果传入参数不确定传不传,那么可以给参数加个‘?’表明它是可选的:

  或者给参数添加默认值,那也会成为可选参数:

  如果参数个数不确定,可以用扩展运算符加解构赋值表示,当然要传入与指定类型一致的:

  函数表达式:

  定义接口时再详细说。 6.任意类型: 通过指定any关键字表示任意类型,跟原来 js 一样,可以任意赋不同类型的值:

  7.类型断言: 类型断言就是明确的告诉typescript这个变量就是某种类型的,百分之百确定。不用typescript在一些情况下要自己推断某些没有明确定义或者多变的场景是什么类型。 可以通过 as+类型 断言它就是某种类型的:

  也可以通过 <类型> 形式断言(不推荐):

  8.接口基本使用: 接口可以理解为一种规范,一种契约。可以约束一个对象里应该有哪些成员,这些成员都是怎么样的。 […]

龙生   06 Dec 2021
View Details