-
-
[原创]看雪CTF2016第8、9题解题过程(补)
-
发表于: 2016-12-29 23:15 3629
-
先说第8题
1、首先定位输入输出,程序是64位程序,很多分析工具永不了,直接上IDA静态分析,找到获取输入的位置如下,注册码格式是:%dA%s

数字参数传递给F1_140001300,该函数需要返回非0,才能调用F2_1400014B0函数,函数F2是输出”恭喜你注册成功!“的函数。相关代码如下图所示。

2、接下来去除反调试,将下面的cmp eax, 1改成cmp eax, 2,去除反调试。

3、最后建立输入与输出的关系
逆向分析F1_140001300函数的功能,发现其是返回一个数,该数的平方为输入参数,其实就是一个开根号的功能。此处可以从F2函数先确定v1,然后反过来求平方得到v4。
F2_1400014B0函数会检测A之后的字符是否为1,2,3,4,如果存在其它字符报注册码格式不正确。输入121A1234,代码执行到下列反编译的代码,由于判别条件的不等于成立,输出字符被赋予“注册码不正确“,现在需要构造A之前的字符,使得等号成立。

解方程:(3-g_V5iMul)*arg1 == 0xd2; 其中g_V5iMul = 2;
arg1 = 0xd2 = 210;
210*210 = 44100
输入 44100A1234, 注册成功。

再说第9题
这道题的解太多了,由于题目Bug,只需通过获取下面长度信息:23个字符

尝试4个一组的输入,最后1组3个字符:11112222333344445555666,直接成功了。
本题除了多解,程序体积也超出了300K大小的限制,另外没有太大的分析价值,也就没有继续分析。
1、首先定位输入输出,程序是64位程序,很多分析工具永不了,直接上IDA静态分析,找到获取输入的位置如下,注册码格式是:%dA%s

数字参数传递给F1_140001300,该函数需要返回非0,才能调用F2_1400014B0函数,函数F2是输出”恭喜你注册成功!“的函数。相关代码如下图所示。

2、接下来去除反调试,将下面的cmp eax, 1改成cmp eax, 2,去除反调试。

3、最后建立输入与输出的关系
逆向分析F1_140001300函数的功能,发现其是返回一个数,该数的平方为输入参数,其实就是一个开根号的功能。此处可以从F2函数先确定v1,然后反过来求平方得到v4。
F2_1400014B0函数会检测A之后的字符是否为1,2,3,4,如果存在其它字符报注册码格式不正确。输入121A1234,代码执行到下列反编译的代码,由于判别条件的不等于成立,输出字符被赋予“注册码不正确“,现在需要构造A之前的字符,使得等号成立。

解方程:(3-g_V5iMul)*arg1 == 0xd2; 其中g_V5iMul = 2;
arg1 = 0xd2 = 210;
210*210 = 44100
输入 44100A1234, 注册成功。

再说第9题
这道题的解太多了,由于题目Bug,只需通过获取下面长度信息:23个字符

尝试4个一组的输入,最后1组3个字符:11112222333344445555666,直接成功了。

本题除了多解,程序体积也超出了300K大小的限制,另外没有太大的分析价值,也就没有继续分析。
赞赏
他的文章
谁下载
谁下载
谁下载
谁下载
谁下载
谁下载
谁下载
赞赏
雪币:
留言: