4

解决安卓单向/双向认证导致无法抓包

 3 years ago
source link: https://www.ascotbe.com/2020/07/20/HttpCertificate/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
解决安卓单向/双向认证导致无法抓包 | ascotbe

郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

本文思路来着公众号小和尚的安全之路,菜鸡的我周天面试被社会毒打了一顿,问了双向认证问题,但是这玩意我没接触过,刚好今天看到一篇文章,学习一下

image-20200720171422600

首先准备工作

  • XposedInstaller(Xposed安装器)
  • JustTrustMe(禁用SSL)
  • ida pro(静态逆向程序)
  • JEB(apk解包程序)
  • test.apk(目标程序)

所需文件位置下载

https://github.com/Ascotbe/virus/blob/master/HttpCertificate

解决单向认证

安装Xposed框架

刚开始安装好APK是显示框架未安装的

点击这个安装

xuanz安装

接着点击安装

然后从起后就能看到安装成功了

安装JustTrusMe模块

点击左上角的菜单

然后选着模块

勾选就好了,这样就解决了单向认证,可以绕过客户端校验了

解决双向认证

我们来把目标程序抓个包

可以看到服务器显示为400,抓包无法用了

找客户端的证书

接下来就是客户端的证书了,我们先解压这个软件

然后全局收缩这个软件的证书一般是.p12或者.pfx结尾的(如果这个版本有壳你嫌麻烦不想脱壳的话可以找之前的版本试试)

找证书密码

首先需要设置jeb的最大内存不然会报错,因为大的APK会导致java内存溢出,替换jeb_wincon.bat文件中的内容,-Xmx8192m表示内存的大小

%JAVA% -jar "%~dp0bin\app\jebc.jar" %*
//替换为
%JAVA% -Xmx8192m -XX:-UseParallelGC -XX:MinHeapFreeRatio=15 -jar "%~dp0bin\app\jebc.jar" %*

打开test.apk,利用搜索来找client.p12的值(或者关键字PKCS12,这是通常读取证书需要用到的关键字)

对字符串的位置进行右键解析

往下面找找看有没有什么open之类的函数来打开证书的

这边大概的意思就是把打开的证书和数组中的字符串加载到v4_1这个函数中,然后跳转到label_27中进行关闭打开的证书,所以百分之80可以断定v1应该就是我们需要的密码

跟进v1的值(双击即可)

跟进到这边发现调用了好几个值,由于我是菜鸡对JAVA不是很懂,就每一个值都看了一遍,发现SoulNetworkSDK.b().a(SoulNetworkSDK.b().g())中的b和g都是返回值并且不能跟进了,而a函数可以跟进并且函数名为getStorePassword,那百分之90可以确定a函数就是我们需要的函数

继续跟进它

再接着跟进,看到了private native String getStorePassword(String arg1)这个声明方法,wtf?线索断了?接着我百度了一下native方法发现,native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。然后看来下用例,原来 会加载一个文件一样的东西,大概的例子和下面类似,然后我们找这个类有什么文件加载的

class HelloWorld{

public native void hello(String name);

static{
System.loadLibrary("hello");
}

public static void main(String[] args){
new HelloWorld().hello("jni");
}

}

最后再开头的地方找到了

soul-netsdk就是调用的libsoul-netsdk.so文件,然后我们去解压的文件中找这个名字

我们用IDA打开它,然后全局搜索之前找到的那个函数名getStorePassword,为什么要搜索这个函数名呢,因为**.SO文件是Linux下的动态链接,其功能和作用类似与windows下.dll**文件,而getStorePassword就类似于一个导出函数

然后F5即可看到伪代码了,并且密码也出来了

利用这个密码和之前那个证书进行安装

接着我们再次尝试抓包,成功

https://www.jianshu.com/p/042ce0b88f03
https://mp.weixin.qq.com/s/0uItUS5P8gFQ1Cu5-jkCgQ

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK