猿人学2022-APP出题思路

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 这里说一下我这十道题的一个出题思路,以及每道题采用的算法(有的算法我改了一点点流程)。提前说一下,本篇文章存在剧透成分。关于题解我这里也没有,期待着其他的大佬们的分享了。逃~~

猿人学2022-APP出题思路


这里说一下我这十道题的一个出题思路,以及每道题采用的算法(有的算法我改了一点点流程)。提前说一下,本篇文章存在剧透成分。关于题解我这里也没有,期待着其他的大佬们的分享了。逃~~


第一题

第一题所有算法都在Java层,反编译工具如果好用的话,抠出来代码大概率就能直接用了。为了凑字数,我来写一个第一题的题解蛤(单纯的凑字数)。

第一题题解

这里假装一下,我并不知道这是什么算法蛤,偷偷地假装。

我来说一下,这一道题如果是我要还原算法我的思路是什么,首先看到这代码都没混淆,那是相当的开心,然后直接定位到需要还原的函数

package com.yuanrenxue.match2022.security;
import java.util.ArrayList;
import o00OO.OooO00o;
/* compiled from: proguard-dict.txt */
public class Sign {
    // ...
}

大概看一眼,这道题开头的四个常量A, B, C, D这里转换成16进制来看

final private static int A = 0x67452301;
    final private static int B = 0xefcdab89;
    final private static int C = 0x98badcfe;
    final private static int D = 0x10325476;

发现它很像MD5的初始化常量,然后接着往下看,发现它比md5的函数少一个,并且是没有T表的,因此怀疑大概率不是MD5,然后接着看1518565785这个常量引起了我的兴趣,这里把他转换成16进制0x5A837999然后Google上搜一把,好像也没搜到啥有用的信息。然后搜索一下第二个常量0x6ED9EBA1

这回,感觉是接近我想要的东西了。

这里通过观察,很明显他不是sha系列的算法,所以呢,看到箭头所示的内容,点进去看一下。感觉这一波稳了啊,大概率就是MD4了,如果对于密码学熟悉,能直接猜出来这个是MD4进行了简单的修改,那么也可以跳过搜索这一步。

有了目标算法,这里就简单了,找一个原始的Python实现,然后对着改一改,py版本就出来了。

这里给出一篇我写的文章哈,偷偷给自己的文章加个链接


第二题&第三题

这两道题,其实都是在native层做的加密,区别在于第二道题没有混淆,没有隐藏符号表,第三道题混淆并且隐藏了符号表,如果使用unidbg的话,大概率一套代码可以搞定俩题。

第二题

第二题所采用的算法是MD2,但是这里结果我返回的是base64编码的哈希值。

第三题

第三题算法采用的是SM4,一个国密算法,但是结果我返回的是hex的字符串。


第四题(grpc)

这道题核心在于grpc上面,搞定grpc怎么发请求应该就可以了,如果使用unidbg的话,有关算法这里采用的是FNV-Hash,整个算法其实是比较短的。


第五题(双向认证)

这道题目比较单纯,只有一个双向认证,并没有添加算法。


第六题(设备指纹)

这道题核心思想来源于珍惜大佬的获取Mac地址(https://bbs.pediy.com/thread-271698.htm)的方法,然后这道题的加密采用的白盒AES,实际上并没有魔改,有兴趣研究的大佬可以尝试搞一下密钥。不过根据后面大佬的分析,我发现我犯了一个错误,这里我模式选取的并不合适,因此可以不通过白盒,来抽取出来加密的方法,这也提示了我,在选取加密算法和模式的时候要注意使用场景,避免出现虽然添加了加密算法,但是安全度并没有提高的问题。逃~~


第七题(quic)

这道题核心是quic协议,这里我采用了cloudflare开源的https://github.com/cloudflare/quiche来实现的quic协议,然后他给的是rust版,因此呢so我就用rust实现了。(逃~~)

然后这一道题算法采用的是ZUC算法。


第八题(upx)

这一道题也是和标题一样,so给加了一个upx的壳。这里其实也来了一个我的非预期解,最新版的unidbg注释掉两行代码,实际上就能运行了,我的本意还是脱掉upx的壳,参赛的大佬们还是强大,给大佬们点赞,有关这道题的算法采用了AES和Base64(Base64实际上是编码,并不是加密哈)。然后这道题的AES是采用了查表法来实现的。


第九题(tcp协议)

这一道题实际上是tcp+tls,直接采用原生的请求发送的tcp包。然后有关这一道题的算法,其实也比较轻量,采用的RC4。


第十题(tls指纹)

这一道题我实现了好长时间,其中考点个人感觉是有三个,第一就是标题所说的tls指纹,第二是我检测了hook, 第三是整个so混淆开的比较大,并且参数有亿点点的多。具体hook检测的思路参考https://github.com/emanriquez/antifridaAndroid 有兴趣的大佬可以继续研究一下,这个监测点还是比较有意思的。有关这道题的算法相比于上面的9道题,涉及的算法其实就比较多了,因为这道题上了tls,因此呢整个openssl的库就直接被打包进来了,所以说呢,这里算法我好多其实可以都不用自己实现,里面的算法可以随便用了,相当的舒服,里面所采用的编码以及加密算法有AES、Base64、Hex编码、Sha256、SM4、RC4、whrloppl。大部分实际上是没有魔改的,真·只修改了一点点。


总结

好了,整个10道题的具体算法到这里就介绍完了,最后感谢平哥对于这次比赛的支持,感谢开源库的作者提供的出题思路,感谢各位参与者对赛题当中不完美地方的包容,在这里期待一下大佬们的分享了。

相关文章
|
5月前
|
编解码 搜索推荐 iOS开发
你知道APP UI设计基础知识和测试点吗?
你知道APP UI设计基础知识和测试点吗?
|
算法 数据安全/隐私保护 索引
App逆向百例|09|某App hkey分析还原
App逆向百例|09|某App hkey分析还原
292 0
|
数据安全/隐私保护
App逆向百例|05|某视频App参数分析
App逆向百例|05|某视频App参数分析
303 0
|
数据安全/隐私保护
App逆向百例|10|某App x-zse-96分析
App逆向百例|10|某App x-zse-96分析
379 0
|
算法 Java 数据安全/隐私保护
App逆向百例|12|某电商App Sign分析
App逆向百例|12|某电商App Sign分析
383 0
|
5月前
|
算法
某圈app算法分析
某圈app算法分析
58 0
|
5月前
|
算法 Java
某江app算法分析
某江app算法分析
34 0
|
5月前
|
算法 数据挖掘 数据安全/隐私保护
某合伙人app算法分析
某合伙人app算法分析
44 0
|
算法 数据安全/隐私保护
App逆向百例|15|某特惠App参数分析
App逆向百例|15|某特惠App参数分析
153 0
App逆向百例|15|某特惠App参数分析
|
算法 测试技术 数据安全/隐私保护
App逆向百例|13|某段子App参数分析
App逆向百例|13|某段子App参数分析
237 0