某设备注册加密分析
2021-09-23 19:30:17 Author: mp.weixin.qq.com(查看原文) 阅读量:31 收藏


本文为看雪论坛优秀文章
看雪论坛作者ID:chionyuna

本文章仅作学习交流用途,最近看个样本,是4代注册协议了,来兴致分析了下。
 
 
跟3代比,没有了finger和pri。我猜测data和ep也是八九不离十,也是这两个东西。


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

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


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


那直接frida看内存就行。
 
这里推荐用unidbg去跑这个脚本,刚好之前龙哥也跑过sm,拿来就用。
 
先unidbg下个断点。
Debugger debugger = emulator.attach();debugger.addBreakPoint(module.base + 0x17E00+ 1);

断下来之后在控制台直接看这一片的内存。
 

一清二楚了。
sub_8C1E8(v48, &byte_DB176, *orgation);sub_8C1E8(v48, &byte_DB183, &byte_DB186);sub_8C1E8(v48, &byte_DB18E, *appiddetaily);sub_8C258(v48, &byte_DB194, COERCE_UNSIGNED_INT64(2.0), HIDWORD(COERCE_UNSIGNED_INT64(2.0)));sub_8C258(v48, &byte_DB19B, COERCE_UNSIGNED_INT64(3.0), HIDWORD(COERCE_UNSIGNED_INT64(3.0)));sub_8C1E8(v48, &byte_DB1A4, v52);// data  这个时候的data已经加密好了 随机数的md5keysub_8C1E8(v48, &byte_DB1A9, v50);// tn a100str(有b1,就是data加密前的str)+ep+orgation+appid+sm_tn 的md5 加密,在一次rsasub_8C1E8(v48, &byte_DB1AC, v51);// ep 随机数的rsa

拿到这些,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就是之前那个随机数了。v66是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也就固定住了。
 
拿到结果,进行解密一下,在解压缩。

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

没有任何毛病。
 
附上样本 链接:https://pan.baidu.com/s/17p3dWoFPMgPNHpNltqmEOg 
提取码:mr8l
app名:本地探聊陌生交友
 
unidbg部分的代码,需要大家自己去龙哥星球下载啦。https://t.zsxq.com/JEUVfYf
 
另外:有个小问题,



烦请大佬不吝赐教。

 

看雪ID:chionyuna

https://bbs.pediy.com/user-home-775817.htm

*本文由看雪论坛 chionyuna 原创,转载请注明来自看雪社区

官网:https://www.bagevent.com/event/6334937

# 往期推荐

1. large chunk分配过程调试

2. 混淆后OKHTTP框架的通用抓包方案探索

3.CVE-2017-17215(华为HG532远程命令执行漏洞)复现学习

4. 高Glibc版本下的堆骚操作解析

5.新人PWN堆Heap总结off-by-null专场

6. CVE-2012-3569 VMware OVF Tool格式化字符串漏洞分析

公众号ID:ikanxue
官方微博:看雪安全
商务合作:[email protected]

球分享

球点赞

球在看

点击“阅读原文”,了解更多!


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458393202&idx=2&sn=dca9ec0ffa544a7f6f8a87721b9281ab&chksm=b18f2af886f8a3eecbb3cae1ec0a05c3872ee3646d3f3ed77a81d0650c05a9245c02c722e844#rd
如有侵权请联系:admin#unsafe.sh