终于可以发贴了。
最近看个样本,是4代注册协议了。来了兴致,分析了下

跟3代比,没有了finger和pri。 我猜测data和ep也是八九不离十,也是这两个东西

jni注册是这3个函数,比之前少了很多,后面hook了下w11是主函数加密。 之前tn,pri都是在java层加密的。现在全部放在了ndk中。
进去w11这个之后,就是ollvm混淆的,hook一遍入参之后

这里先从rsakey出发,为了验证之前的猜想。 查看引用,

跟到这一块有字符串加密了

那直接frida看内存就行。
这里推荐用unidbg去跑这个脚本,刚好之前龙哥也跑过sm,拿来就用。
先unidbg下个断点。
断下来之后在控制台直接看这一片的内存。

一清二楚了。
拿到这些,8c1e8一看就是hash.put这样的操作。
先从ep开始分析。在5280c这块查看了引用(这是另一个so,本文中调试的so不是这个地址)


unidbg断下来之后。看看这个函数的参数。 一般都是r0-r4.r0就是第一个参数。

更加确定了ep会用rsa加密
第二个参数。

分析过3代的都知道,是根据一个随机数加密的rsa。这个随机数就是指纹最终加密的aes的key。
这里我把它固定住了。

从这个函数黎赋值的跟进去


用了这些c库,那就是随机值了,当前时间为随机种子。把它固定住好分析。
然后再跟进去51200这个地址,大致看一下,也就是调用java层的rsa加密。
这里可以通过unidbg的jni打印来验证猜想。

确实是,那直接从unidbg中hook住这些结果看看。

这是我写3代的时候写的代码,结合unidbg输出看看。

果然一看

那没事了。跟3代一样。
继续分析tn,回到开始hash.put这里。也是同样的套路。废话我就不多说了。

到这里要注意,aa994是一个append操作。 byte_d51fa就是sm_tn .这个也很熟悉。。 51200就是rsa加密的函数。然后hook住这个v40.
是一串md5、从4d06c哪里打下断点来看,


v43是字符串拼接之后的东西,应该是md5了一下。拿去验证一下。结果是的。

最后在验证一下这个值。是对的, tn的加密值也就出来了。

最后重头戏,看data
data这里有很多处引用。慢慢分析吧,也可以根据unidbg先去打印一遍函数的执行流程。根据流程来trace。

这里我也是习惯断在函数的前一个地址

v68就是之前那个随机数了。v'66是res,那么v67是啥。
v54 = sub_6D46C(a3, &v67);
这个函数引用了。a3就是我们需要加密的str。 这个把a3做了一些操作。
deflateInit2_(&strm, 9, 8, -15, 8, 0, &byte_D5C55, 56); deflateEnd(&strm);
里面用到了压缩算法,那就是把整体的a3压缩了一遍,在aes一下。 4c140里面是


的确从内存中看,也是byte流
为了进一步的验证,我把hex提取出来。解压一下试试

没啥问题。最后为了验证那个aes的算法。我们生成出来的data是根据随机值加密的。
固定住了,key也就固定住了。
拿到结果,进行解密一下,在解压缩.

正常解。最终的算法我就不放了,自己研究一下就能搞定,都是标准算法。 没有任何魔改的点。
最终试试。

没有任何毛病。
附上样本 链接:42bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3j5h3&6Q4x3X3g2T1j5h3W2V1N6g2)9J5k6h3y4G2L8g2)9J5c8Y4y4Q4x3V1j5I4y4%4l9K6k6q4N6G2c8W2m8y4k6#2m8z5d9s2m8z5L8s2c8I4L8f1g2a6k6H3`.`. 提取码:mr8l app名:本地探聊陌生交友
unidbg部分的代码,需要大家自己去龙哥星球下载啦。 8d6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6@1i4K6u0W2P5Y4y4^5M7g2)9J5k6h3y4G2L8g2)9J5c8V1A6q4g2g2k6X3h3h3j5`.
另外:有个小问题,

有懂的大佬可以指教一下小弟。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-9-10 10:47
被chionyuna编辑
,原因: 模糊化关键字