首页
社区
课程
招聘
[原创]看雪CTF赛题练习
发表于: 2020-7-27 16:50 7423

[原创]看雪CTF赛题练习

2020-7-27 16:50
7423

达芬奇密码

一道windows的32位逆向题,涉及动态解密,大数运算,佩尔方程通解问题。

首先运行程序,发现字符串Wrong!,使用IDA搜索字符串搜不到,说明应该加密了,在程序中动态解密。

在程序运行时搜索内存,得如下内容

确定程序的关键函数401EA0,在IDA中反编译得如下代码

在判断代码中发现FLAG是长度位16字节的ASCII码字符数组,并且函数sub_4010E0是动态解密的,且此函数返回值为1则成功。
此时需要转储内存函数sub4010E0
使用lordPE把此进程完整转存为dump.exe

随后拖入IDA中反编译函数4010E0进行分析,如下
在下面的函数中涉及到大数运算,大数表示字节数组,此时把大数看成256进制的数就很容易理解其中的代码。

在上面代码中发现V38和V44是方程 V38^2 - 7 V44^2 = 8的解,且满足
2^56<=V38<2^60
2^56<=V44<2^60
调研后得知此方程是佩尔方程,且此时有无数组解,于是只需找到满足上面条件的一组解即可。
此方程通解的递推关系为
Xn = 8
Xn-1 + 21 Yn-1
yn = 3
Xn-1 + 8 * Yn-1(n>=2)
X1 = 6
Y1 = 2
求解代码如下

解得
V38=385044246406735194
V44=145533045678356702
继续回推可得FLAG,相关代码如下


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 1567
活跃值: (905)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大佬太强了
2020-7-27 18:02
0
游客
登录 | 注册 方可回帖
返回
//