-
-
[原创]KCTF2022秋季赛签到题
-
发表于:
2022-11-26 21:35
7779
-
使用x64dbg进行动态调试分析,根据前期运行可知会返回success或者fail字符串,于是搜索字符串,定位到程序的核心位置如下图:
可以发现,程序中预先给了两个字符串,其中字符串 1841352 在后面回合用户输入的username进行拼接,比如 1841352KCTF,然后对这个拼接后的字符串计算md5值。这个md5码值记为md5_code。
另外一个字符串4fc0296a51e6d90c794c91951886dc2b则是一个程序预设的字符串,用于后续的计算和比较,将其记为formal_code。
分析循环可知,用户输入的注册码必须长度为32,接着计算公式是这样的:
tmp = ((ord(formal_code[i]) + i ) % 32 + i) % 32 - i(其中i为从0到31的计数器)
得到这个tmp后,程序的比较部分就是取出md5_code在tmp位置的值,与用户输入的注册码的第i位进行比较,如果相同则循环继续,进一步比较下一位,如果不相同则会调用fail的函数。
那么就先计算1841352KCTF的md5值为9b0c4341d546c9c7f15d2f15f973aaab,再编写简单脚本如下图:
最后结果为:
填入程序中,返回success,逆向成功。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课