-
-
[原创]看雪CTF赛题练习
-
发表于:
2020-7-27 16:50
7422
-
达芬奇密码
一道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,相关代码如下
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课