明文数据解析方法大全

分析软件的时候,通常需要得到收发报文的明文数据,所以有了下面这篇文章。

加解密原理:

本文主要针对标准加密,即tls流量,非标准需要单独逆向分析其原理,如腾讯qq的tea算法,参见https://blog.csdn.net/liutianheng654/article/details/86641410

tls是非对称加密,即公钥和密钥两个。当建立连接时流程如下:

    大致就是客户端发送请求,服务器将证书发送给客户,客户通过ca验证证书的正确性,正确则随机生成对称密钥而后通过服务器公钥加密后发给服务器,而后服务器就使用这个密钥来加密最终的数据。详细的可以看:https://blog.csdn.net/rtmdk/article/details/78138299其中还有一些变种,后面会介绍。

常用分析方法:

    针对app,主要有以下几个方式,中间人方式、hook、全局代理等。下面一一进行讲解。

中间人方式:

常用工具:fiddler,charles,burpsuite等,但所有这些软件原理大致相同。

    就是网络截获客户端发往服务器证书和服务器发往客户端证书,将服务器证书替换为自己的证书。从而截取双方的明文数据。效果如下:

    可以看到,捕获的明文数据很好很顺利。但是毕竟现在很多软件都对安全性有了要求,不会让你这么顺利的得到想要的数据了。下面就一一加以说明。

代理方式:

    通常fiddler等中间人抓包的话,都是需要让流量走fiddler的代理才能实现的,这样很多应用开发的时候就设置了默认不走系统代理,比如okhttp等常用框架都提供了不走代理的功能,所以现在大多数软件都不在走代理了,需要我们自己加以设置,设置软件就是:proxydroid,可以强制应用走系统代理,这样就可以抓包了。

安装root根证书

    Android7.0之后应用默认不再信任用户添加的根证书,将选择权给了应用的开发者,所以直接安装根证书的方式,无法进行中间人攻击,即无法得到所需要的明文。这时候就需要有一个root的手机了,root的方式我就不写了,各个手机都不一样,我手头有一台nexus6,然后安装根证书的过程在我这篇博客里面:

https://blog.csdn.net/liutianheng654/article/details/101287072

安装完成后即可得到上图一样的明文信息了。目前所有7.0以后的手机想要看明文的话,都得root了。。

edxposed和xposed:

后面的justtrustme和hook打发都是基于xposed,但是xposed对android8以后就不维护了,建议android8.0以后使用edxposed代替xposed。

JustTrustMe:

    由于客户端天然的复杂性,它是可以内嵌服务器证书的,这样当遇到中间人攻击时,他就可以验证证书是否是客户端内嵌的证书,而非中间人所使用的了,但是他最终验证证书的真实性的api不会变,故可以通过hook证书验证的api的方式来破解,这里最出名的就是xposed模块JustTrustMe。

    xposed是android层的一个hook工具,大概原理就是:通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对系统应用的劫持。具体安装方式网上有很多了。

Hook大法:

    hook的方法就是通常应用开发都是使用的开源框架,那么最终调用加密的api相对而言就是固定的,可以在使用hook的方式得到这些api调用前后的参数,最终得到加密的数据,其中的集大成者就是xposed模块:inspeckage。但是这个一旦混淆就无法使用了。不过可以参考另一个xposed模块,微信巫师,可以在代码混淆的情况下使用,这个需要后期修改,如果我修改好了我就放在这里。。。

双向证书认证:

    不仅仅认证服务器端的证书,服务器也认证客户端的证书,但是这个对服务器性能消耗太大,感觉没什么用,所以没遇到过。fiddler可以导入客户端证书实现双向的认证。

 

发布了40 篇原创文章 · 获赞 22 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/liutianheng654/article/details/103488252