前言
本文章仅做安全学习交流用途,严禁作其他用途,如果侵犯您的权益请联系我删除。
所用工具: jadx,reqable,frida
分析
网络抓包
首先使用reqable抓包,请求url为https://lohaslifepc.wxzniot.com/api/app/versionUpgradeManage/info/newestVersionIOS?secretData=wDyktmcQY6R/2BBD1YX6EApY9e9oN%2BfUougB7YYBejhi%2B3adBiKsZE5vlspXnhq6ZmFRMLDIKQr4BNYU5hgwHn7N6IshxO8s83/EYEG%2BNUy4/RYJn2N/Bypw0KF3ioeGN3GX6W6JwMfzmIWWXNl4S%2B50VhGW%2BDtu6keOQ8ACe1o%3D&type=1&versionNum=2.2.1,其中secretData是需要分析的参数
分析
用jadx打开这个app,搜索secretData这个关键词

定位到这里,按d调到声明

来到这里,很显然他是一个rsa加密,用frida对其进行hook

发现进程直接中止了,很明显这个app有frida的检测,用这个函数检测一下加载了那个lib
function hook_dlopen() {
var interceptor = Interceptor.attach(Module.findExportByName(null, "android_dlopen_ext"),
{
onEnter: function (args) {
var pathptr = args[0];
if (pathptr !== undefined && pathptr != null) {
var path = ptr(pathptr).readCString();
console.log("[LOAD]", path)
}
}
}
)
return interceptor
}
发现是libSdkHelper_abc.so这个lib文件,再用hook_dlsym函数hook加载流程,发现是调用pthread_create创建了一个pthread检测线程

我参考了之前libmsaoaidsec.so的过检测,但是发现过不去,于是这里我就不会过了,但是这个app没有进行加固,于是我直接把libSdkHelper_abc.so这个文件删除掉重新签名安装,发现可以正常hook

实际上这就是一个RSA加密

这是java层的代码,很容易看懂,加密方式为RSA/ECB/PKCS1Padding,公钥为
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXGrwhWvn1+HmZRpn3stbnOGrEmVBBAKgHC77MYrZGVlieNeCf1QbgMxc5q5ZwIgOdd0SgY+757hnaJ8DtZq6QO0rfiSHRutuszpTVRsbc3XCAs5h/M/2qxnyxidCq5nsWKWVFLEVzks69IEz//06WCfwBdNz+oRvdYEm6oBNh2QIDAQAB每次的secretData都是对当前日期,如2024-12-24进行了RSA加密,由于RSA每次的加密结果都不一样,且我没找到私钥(本地应该没有,因为decrypt在本地没有进行调用),所以只能通过构造数据包看能否正确返回来验证是否正确
验证

分别传入错误明文和正确明文进行请求验证,发现正确明文请求成功
ESP32
通过对开门时发送的网络数据请求进行抓包,发现只要对https://access.xxxxx.com/zs_accesscontrol_api/openDoorByApp/openDoor这个url发送post请求,即可控制开门。
第一次实现
第一次实现为了验证可行性,通过wifi模块,将esp32连接手机热点,然后发送http的post请求,成功开启了闸机门,相关代码在连接手机热点控制开门
这种方式实现简单,但是需要手机热点保持开启状态,会很消耗手机的电量,因此不采用。