北京新闻频道

usdt充提教程(www.caibao.it):AntCTF x D^3CTF 逆向White give题解

来源:北京新闻网 发布时间:2021-03-25 浏览次数:

USDT第三方支付API接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

前言:

​ 这场竞赛的质量照样不错的,这是肝了一天才做出来的问题,感受能学到器械,好好纪录一下,问题和exp放到附件内里了。

一、剖析main函数逻辑

用 ida7.5 定位 main 函数,先剖析程序的主要逻辑

稀奇难看,完全不像一道正常的逆向题,照样先看看运行的

效果,通过字符串定位法看函数

然后 ida 发现压根没有这些字符串???

盲猜应该是运行时动态解密出来的字符串(以前遇到过通过 异或自解密的字符串)
没关系,继续看 main 函数,实验优化一下,搞清晰逻辑 Jmpout 红色字体那里我们看汇编

c 一下转成代码,然后再 f5 看看

剖析出来了一部门了,另有 jumpout,同样的做法继续......... 最后获得完整的 main 函数代码:

这里有许多常量运算没有被优化的,可能是出题人有意这么 搞的,加大剖析难度,好比第一个 if 那里:

可以通过动态调试直接看==对照的是什么值,也可以直接将 qword 谁人常量值改成 const 类型,让 ida 自动优化:

发现效果很不错哦!后面的 for 循环那些同样用 const 的方 法继续搞一波操作............

然后通过 ida 动态调试看效果的方式,剖析函数的功效并做 好函数名的注释,最后获得完整的能看的程序,截图如下:

继续

二、加密算法剖析

这里 aes 算法是通过 sbox 的特征看出来的,在 data 最先的 位置那里找到的 sbox:

这里先说下我是怎么看出来谁人 sha256 的,实在一最先也没看出来,由于找 table 也没找到,不像 aes,然后我就一步步动态跟了下函数的详细实现(确实需要耐心):

发现谁人某个加密算法有点可疑,继续跟踪(然后就是一句好家伙!看不懂):

差点直接关闭 ida,这移位运算移来移去,另有&,另有异或, 另有 for 循环一直内卷,啥玩意?没见过这个算法,盲猜 tea、 sm4、md5.....效果都不是(自闭)。 然后动态调试历程中,我无意间看到了一个 table 的初始化:

于是跟踪进去看了下,解密出来的 table 数据(v51 谁人 table) 拿去谷歌了一下(可以自己动态跟踪下数据),于是发现是

sha256,好家伙!学到了学到了,居然来个隐藏 table 的骚操作~

,

Usdt第三方支付平台

菜宝钱包(www.caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

于是这块算是解决了,第一部门就是输入 64 位 flag,然后每 4 位举行 sha256 获得 32 字节,总共 512 个字节。下面继续 剖析:

这里的是 random 的初始化,可以动态调试获取数据,然则 发现没卵用。。。继续剖析

这里 table 的初始化,动态直接提取加密完的 table值。

继续剖析:

这里有个 buf1 的赋值,用到了前面的 table,动态发现实在

就是:

buf1[ii 0x100*m]=table[buf[ii 0x100*m]]

继续:

这里凭证上面初始化的 random 数据,举行了 v28 的 table 数据赋值,可以看成常量也可以动态提取 v28 那里的器械, 然则我没管了,由于常量最后都可以在最要害的地方用上, 继续剖析:

这里就是最要害的逻辑了,对 buf1 再次举行赋值,用到了 v28 那块的内容,以是这里我们可以动态调试直接提取出来 v28 那里的内容,由于每次 for 循环,v28 偏移处都市天生一 个表,以是这里需要提 16 次(恶心的提取,我用 lazyida 动态手动提取的,每次 256 个字符,师傅们可以试试 idapython 应该会快一些?)
我把 v28 那块的数据命名为 Another_array,在 python 剧本内里有。 然后同样动态优化一下这块的操作:

buf1[ll 0x100*m]=2*((buf1[ll 0x100*m]^0xff)&another_array [n][ll]) buf1[ll 0x100*m]-another_array[n][ll]
buf1[ll 0x100*m] =ll

继续剖析:

最后就是 memcmp 对照 buf1 和 buf2,很显著 buf2 就是密文, 直接动态调试 aes 自解密获得。
最后相同就会输出 you get the flag。这里为了利便看。我把整个逻辑和历程放到了 fake.c 中,附件内里有,自己写的伪代码,利便剖析而已,然后最先解密。

三、解密剧本誊写

从后往前剖析,获得了密文,也就是加密后的 buf1 的值已 经知道,看下算法:

不难看出来,这是点对点加密,也就是单一加密互不影响, 这时我想到了爆破法!
我先写了这个算法的 python 实现:

然后凭证这个举行爆破剧本誊写:

第一轮 256 是 crypto[i]==k,第二轮 256 是 crypto[i 256]==k, 这里是由于那时已经算到了第二步了没改,可以自己调回去, 通过密文,我们可以获得两部门的 kkk,合并就是举行 buf1赋值前的值了,这里需要将其转成字符串形式,同时将单个的补 0,处置一 下:

获得的是一长串的字符串,然后行使正则表达式举行每 64 个字符(32 个字节)切割:

获得 sha256 加密后的密文,最后每 4 个 flag 的字节举行 sha256 的爆破(可见字符域):

剧本大提要跑个 7 分钟,最后乐成拿到 flag~

四、总结

1、身为一个pwn手,要补补自己的逆向基础(我连sha256都没直接看出来.......)
2、做逆向异常需要耐心,动态调试连系静态剖析时做题的要害,有时也需要猜的因素
3、出题人的思绪不错,将要害性信息,例如字符串和table表格通过先加密的方式隐藏起来,然后动态运行时自解密,可以到达抗逆向剖析的目的
4、这题接纳了一些混淆的方式加大了剖析的难度,需要手动一步步改好代码
5、伪代码 函数注释的方式可以加速逆向剖析的速率

若有写的纰谬的地方,迎接师傅们留言指正!!

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片