190407 逆向-西湖论剑杯

博客介绍了西湖论剑杯逆向分析的三个问题,涉及easyCpp中的斐波那契数列运算、testre的base58解码挑战,以及Junk_Instruction的RC4解密。通过动态调试和理解算法,博主成功解决了这些问题,揭示了题目中的解题思路和关键步骤。
摘要由CSDN通过智能技术生成

Re1-easyCpp

IDA打开发现一大堆模板很丑,但仔细看一下其实只有一堆变量来回操作而已
基本上就是各种STL和vector的用法,算法名都保留下来了所以难度下降很多
基本流程是接收输入、生成斐波那契数列的十六项
然后对输入依次使用transform和accumulate算法
分别是遍历vector中的一元运算和二元运算
运算都是自定义的方法,双击算法进去可以看到lambda函数

transform
accumulate
transform的运算是累加第0个元素
accumulate则是通过back_inster迭代器将容器逆序

所以最终结果只要保证生成数组等于fib数列即可

但其实直接动态调试,黑盒的方法很容易看出来两次算法变换的内容,而无需去关注复杂的STL

fib = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987][::-1]
x = fib[0]
for i in range(len(fib)):
    print(0xffffffff&(fib[i]-fib[0]))

Re2-testre

核心函数中混有一个没有用的数组,最后比较仅用到另一个数组
生成方法是逐个字节遍历,每个字节模58的余数放在结果数组中,再整除58后移一位,直到整除58为0为止
最后用长为58的表转为可见字符

这里的算法有点绕,最好自己动态调试跟着走一遍,观察变量的值,自己写算法复刻一下比较
在这里插入图片描述
这里的d1是结果数组,d2没有意义无需看
关键是v21和break的条件
复刻出来长这样
在这里插入图片描述
比赛的时候想解方程结果眼瞎输错了数字,抱着侥幸心理试了一下base58,结果直接就出来了

>>> base58.b58decode(b"D9cS9N9iHjMLTdA8YSMRMp")
b’base58_is_boring’

后来回头观察了一下发现是眼瞎的问题,重修了一下方程就OK了
这里根据数据可以发现第一轮循环中倒数三个数分别为t=a[0] t%58, t/58%58, t/58/58%58
第二轮则可化简为t = a[0]<<8 + a[1]的状态下
t%58

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值