中关村第三届网络与信息安全专项技能赛reverse_flat
2019-08-29 15:43:45 Author: bbs.pediy.com(查看原文) 阅读量:107 收藏

[原创]中关村第三届网络与信息安全专项技能赛reverse_flat

2019-8-20 20:57 482

[原创]中关村第三届网络与信息安全专项技能赛reverse_flat

作为信息安全小白。赛后做个总结,写了个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}

附件是原题

[活动]走进企业看安全第22站--蚂蚁金服!

最后于 2019-8-21 10:54 被wx_答案编辑 ,原因:

上传的附件:
  • flat (12.72kb,0次下载)

文章来源: https://bbs.pediy.com/thread-254022.htm
如有侵权请联系:admin#unsafe.sh