美文网首页
2018-10-29 win.exe(暨南大学校赛题)

2018-10-29 win.exe(暨南大学校赛题)

作者: 小白King | 来源:发表于2018-12-14 16:30 被阅读0次

    题目网址:https://pan.baidu.com/s/1czp8npiCczQ2sU32YA_96g

    提取码:jm99

    暨南大学新手赛题目,win.exe拿进去看,运行:

    看来可以拖进去ida(提示是32位,自己可以尝试)

    拖进去,优先找main函数,按F5:

    看到一个do while的循环语句

    说明要输入的第一个数字是2018,输进去,看看:

    对的,很好,接下去分析,

    看到congratulation!

    说明这里是关键函数,所以V3是我们的关键数字,要不能为空,找到V3的出处。那个sub-401610那里,进去:

    我们猜测,用户肯定有输入的,所以这个a1应该是传进来的外部参数

    所以,我们可以判断出这里就是有比较的,看到一串可疑的字符串:

    感觉很像是flag的样子,所以这个函数要装载字符串?(猜测)

    进去看看:

    result是要返回的值,a3是我们要处理的字符串,V5是最后一个字符的地址,它和sub_44B160有关系,所以进去看看: 我们看到一个memcpy函数,是说把a3地址开始的数据复制到V5,V5=v3+12开始的数据,数据长度是v2,v2=v5_1-a3;

    v2就是我们能知道的字符串的长度,所以就是copy全部(当然这里是可选的长度,说不定下次就是一半呢,哈哈(暗示可以自己修改算法代码)),这样就明朗了,V5就是copy到的寄存器,出来吧:

        v4是存下来了,而V4的首地址刚好就是a1,再回去:

    a1的地址就是V11的地址呀,所以,V11就是存储字符串的地址,很好,接下来继续分析: 看到这个函数,对V11和a1进行处理了,所以我们推断a1是用户输入进来的,V11刚分析了一波,是我们的字符串,说明是有股匹配在里面,V11和a1是两股势力

    我们从头开始分析,

    这是判断V3和a1的前12位地址的内容,

    不行同则调到label—24那里,后面的也是,label—24是什么,我们看看:

    讲V4=0,很明显: 返回的是V18,而v18在label—24中是恒为0的,因为v4是0,

    所以这个函数是我们要避免的,不能跳到这个坑里面,所以继续分析:

    问发现426810函数就是一直在用的函数,它对a1和V11都是进行了相同的操作,所以我们进去看: 发现了关键函数,substr,这是个剪切字符串的函数,substr(a,b,c)表示a字符串从b处开始剪切c长度的字符串;

    回去看看一个具体的分析:

    我们发现了东西,a1从8处开始剪长度为6的字符串放到V12,V11从0处开始剪辑长度为6的字符串放到v13,然后比较V13和V12的内容,不相等则跳到label-24(就是前面那个坑!),所以以此类推: 这段代码就读懂了    !

    最后全部匹配完成,成功的话,V4=1,就是V3的值=1;

    接下来,我们就是要把剪辑的东西还原出来了!

    对V11进行操作啦!来个python脚本:

    我们去看看对不对!

    程序闪退了,说明正确!

    好啦,脚本搞出来了,接下来,题目还提示拼拼拼!前面不是还有2018吗?所以答案就是:flag{2018reverse_1s_very_easy}!

    这就是全部过程啦,这道题还是很有收获的,首先是第一个substr函数的用法!切片(任意切!),第二个就是对于整体的把握和认知,程序明白了,一切都好办了~本题的匹配是将输入切片和答案的切片进行匹配,通过切片达到保护作用!

    相关文章

      网友评论

          本文标题:2018-10-29 win.exe(暨南大学校赛题)

          本文链接:https://www.haomeiwen.com/subject/egrbtqtx.html