转载

2020-07-20

声明

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

前言

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

2020-07-20

首先准备工作

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

解决单向认证

安装Xposed框架

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

2020-07-20

点击这个安装

2020-07-20

选着安装

2020-07-20

接着点击安装

2020-07-20

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

2020-07-20

安装JustTrusMe模块

2020-07-20

点击左上角的菜单

2020-07-20

然后选着模块

2020-07-20

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

解决双向认证

我们来把目标程序抓个包

2020-07-20

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

找客户端的证书

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

2020-07-20

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

2020-07-20

找证书密码

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

bat

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

2020-07-20

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

2020-07-20

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

2020-07-20

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

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

跟进 v1 的值(双击即可)

2020-07-20

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

2020-07-20

继续跟进它

2020-07-20

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

java

class HelloWorld{

    public native void hello(String name);

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

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

}

最后再开头的地方找到了

2020-07-20

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

2020-07-20

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

2020-07-20

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

2020-07-20

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

2020-07-20

安装成功

2020-07-20

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

2020-07-20

参考文章

Code

https://www.jianshu.com/p/042ce0b88f03
https://mp.weixin.qq.com/s?__biz=MzI2NzQ0MDg0NQ==∣=2247483966&idx=1&sn=46c78ff91caa39d56af6f9e98296995f&chksm=eaff859cdd880c8ab591657e833bfcc33ed9a27a7c8801ebf6f03df6e640c1f2315a8ef04737&mpshare=1&scene=1&srcid=0719FxIFLnF7jlQ7dGWLvJpA&sharer_sharetime=1595174282256&sharer_shareid=1532787fff495593cb1e92cafe4a9e86#rd
原文  https://www.ascotbe.com/2020/07/20/HttpCertificate/
正文到此结束
Loading...