* 现在很多的app使用了so加密,以后会越来越多。爬虫工程师可能会直接逆向app,看java代码,完成java层的算法破解,但是如果遇到so该怎么办呢?可能你会直接破解so,但是真的会有很多爬虫工程师会去并且会破解so吗?有时候我们可以不用破解so,利用很多大佬写好的轮子即可完成so的调用。
*说到调用,就有很多方法了,比如用frida的rpc、xposed+andserver、再者就是unicorn+web框架等等,今天要说的并不是这些,而是unidbg,这框架有什么好的地方呢?看看介绍。
## 介绍(来自逸飞)
unidbg 是一个基于 unicorn 的逆向工具,可以黑盒调用安卓和 iOS 中的 so 文件。unidbg 是一个标准的 java 项目。
由于现在的大多数 app 把签名算法已经放到了 so 文件中,所以要想破解签名算法,必须能够破解 so 文件。但是我们知道,C++ 的逆向远比 Java 的逆向要难得多了,所以好多时候是没法破解的,那么这个时候还可以采用 hook 的方法,直接读取程序中算出来的签名,但是这样的话,需要实际运行这个应用,需要模拟器或者真机,效率又不是很高。
unidbg 就是一个很巧妙地解决方案,他不需要直接运行 app,也无需逆向 so 文件,而是通过在 app 中找到对应的 JNI 接口,然后用 unicorn 引擎直接执行这个 so 文件,所以效率也比较高。
* 这里重要的是目前利用unidbg+springboot做成了web服务。
## 食用
案例来自JXU2QkQyYXBwJTIwdjQuMTYuMA==
对于该app而言,是非常适合入门的一个app,未加固、算法简单、很容易找到so的jni。
先去凯神的github上下载[https://github.com/zhkl0228/unidbg](https://github.com/zhkl0228/unidbg)
下载完毕用idea打开,等待maven下载完毕。我这里已经创建好du的文件。

上个代码看着比较方便,代码中有很多注释
您好,本帖含有特定内容,请回复后再查看。
上边代码有jni的类是哪一个需要知道,就是下面这个类,这个其实是和加载so有关系的。
` TTEncryptUtils = vm.resolveClass("com/*/aesjni/AESEncrypt");`
我们需要逆向app,这里不细说如何在app中寻找加载so的类。如下图,encodeByte是该app调用native层加密的入口,loadLibrary是java加载so的方法,这个类就是上述代码中填写的。

然后再看`"encodeByte(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"`这里,这是smali写法,不补基础,后面跟上需要传的参数,
`getByteValues` 这个方法是毒获取的一个01字符串,并且在java层进行了处理,然后再传进`encodeByte`里面,`encodeByte`这个方法最后获取的其实并不是最终需要的,需要md5才是最后的newSign。可以验证一下下。

测试结果通过。
### 最后
启动java文件时候注意这个改成自己的平台!!!
```
VM options: -Djava.library.path=prebuilt/os -Djna.library.path=prebuilt/os
Where os may: linux64, win32, win64, osx64
```

最后这个文件放在[https://github.com/zhaoboy9692/dailyanalysis](https://github.com/zhaoboy9692/dailyanalysis)喜欢的可以star,谢谢。