作为信息安全小白。赛后做个总结,写了个WriteUp:
前面直接忽略,直奔主题:IDApro反汇编
根据字符串特征 定位到关键函数处;
F5查看伪代码:
通过分析伪代码:
发现有五个check String的输入的函数:
重点分析这五个函数:可以看到fun_check1到fun_check4,参数都是输入的strings,比较好分析:最后分析fun_check5
fun_check1:
抠出最关键信息:0<string<50。
Fun_check2:
抠出关键信息:String[0:5]=”flag{”。
Fun_check3:
抠出信息:string[41] = “}” 0x7D转换成ascii码是“}”
Fun_check4:
关键信息:string[13]=string[18]= string[23]=string[28]=0x2D 转换成ASCII码是“-”;所以猜测输入的字符串是flag{xxx-xxx-xxxx-xxxx}形式;
最关键的函数fun_check5:
首先分析参数:V20,dest
V20已经给出:根据表达式 可以计算出V20[0]=strings[5] V20[1]=strings[6] ………..依次类推 V20[35]=strings[40] 长度刚好是flag{xxx-xxx-xxxx-xxxx}未知的部分,根据index来看刚好对应的上。
另一个参数dest也给出:
这是个常量,追踪下去:
可以看到:dest=”J2261C63-3I2I-EGE4-IBCC-IE41A5I5F4HB”
参数有了,继续看fun_check5函数:
函数表较长 只看关键部分:
根据函数逻辑和相关信息,整理:*v13=*dest
遍历输入的字符串:
if 0<=*string<=9:
v13[index] = string[index]+17
if ‘a’<=*string<=’z’:
v13[index] = string[index]-48
if *string == “-”:
v13[index] = string[index]-48
最后编写注册机:
计算出:str = 9bbfa2fc-c8b8-464d-8122-84da0e8e5d71;最后结果为:String= flag{9bbfa2fc-c8b8-464d-8122-84da0e8e5d71}
附件是原题
最后于 2019-8-21 10:54 被wx_答案编辑 ,原因: