首页
社区
课程
招聘
[原创]中关村第三届网络与信息安全专项技能赛reverse_flat
2019-8-20 20:57 4052

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

2019-8-20 20:57
4052

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

附件是原题


[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2019-8-21 10:54 被wx_答案编辑 ,原因:
上传的附件:
  • flat (12.72kb,4次下载)
收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 225
活跃值: (262)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bestriven 2019-8-21 10:48
2
0
i春秋的题目这么水的吗
雪    币: 237
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
ooww 2019-8-23 12:14
3
0
学习了
游客
登录 | 注册 方可回帖
返回