首页
社区
课程
招聘
[原创]一道CTF逆向题的逆向与学习
发表于: 2020-5-20 18:20 6733

[原创]一道CTF逆向题的逆向与学习

2020-5-20 18:20
6733

一道CTF逆向题,首先查壳为无壳,运行程序如下图,

直接用OD动态分析,

首先在地址0X401047处接收输入的flag,地址0X401050处计算输入flag的长度,保存在寄存器EAX。地址0X401058处判断flag的长度,只有小于0X1E才正确,这里大胆猜测flag的长度应该为0X1D位。

在地址OX4010F5处循环4次比较输入的flag前四位是否为"EIS{",循环4次后在0X4010DA处跳转到OX401120处,所以得知flag前四位为"EIS{"。


在地址0X401124处比较flag的第0X1D位是否ASCII码是否为0X7D,即‘}’,所以可以得知flag的长度为0X1D,即十进制的29位。可以看出在地址0X40115E处若跳转则显示正确(congratulations!)。所以地址0X40114F处为关键算法函数,

以下反汇编是将输入的字符串字符进行大小写转换大写转小写,小写转大写。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (11)
雪    币: 438
活跃值: (15)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
多看几遍
2020-5-22 01:10
0
雪    币: 174
活跃值: (181)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
把IDA中的变量重命名,把数组重定义. 你再看看. 大多数一目了然了.
2020-5-23 11:36
0
雪    币: 5341
活跃值: (3412)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
IBinary 把IDA中的变量重命名,把数组重定义. 你再看看. 大多数一目了然了.
那要怎么确定变量和数组分别代表哪一个量呢?
2020-5-27 00:20
0
雪    币: 120
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
应该说ida的优势之一在于伪代码吧,c代码会比汇编代码更有可读性,还有对于静态分析中,对文件的处理手段,patch和调整花指令,动态调试,可以c伪代码级别的调试,而且内置脚本,还有插件可拓展,非常强大的工具,非常值得学习,
2020-5-27 10:27
0
雪    币: 259
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
666
2020-5-28 01:14
0
雪    币: 542
活跃值: (373)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
C语言中int x[38]和int y[38]是干啥的?
2020-5-29 13:47
0
雪    币: 5341
活跃值: (3412)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
mb_vtcfcpck C语言中int x[38]和int y[38]是干啥的?
字符串的ASCII码
2020-5-29 14:58
0
雪    币: 542
活跃值: (373)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
加了48之后与哪个字符串异或了?
还有异或为啥必须写成ASCII码,普通字符串不行吗?
2020-5-30 10:41
0
雪    币: 5341
活跃值: (3412)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
mb_vtcfcpck 加了48之后与哪个字符串异或了? 还有异或为啥必须写成ASCII码,普通字符串不行吗?
输入的字符串字符进行大小写转换大写转小写,小写转大写,再与0X55进行异或,然后再加0X48,再与"GONDPHyGjPEKruv{{pj]X@rF"进行比较。
写成普通字符串应该也可以。
2020-5-30 11:39
0
雪    币: 542
活跃值: (373)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
ezre 输入的字符串字符进行大小写转换大写转小写,小写转大写,再与0X55进行异或,然后再加0X48,再与"GONDPHyGjPEKruv{{pj]X@rF"进行比较。 写成普通字符串应 ...
那C语言中c=x[i]^y[i];是解密啥的?
2020-5-30 16:08
0
雪    币: 347
活跃值: (1961)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12

刚刚做了一下,伪代码的优点可能就是不用去动态的分析寄存器的值,

算法写起来更直观,能直接复制伪代码,改几个变量和和几行代码就行

还有内存中的数值更清晰

技巧。。没啥技巧。。

2020-6-17 18:12
0
游客
登录 | 注册 方可回帖
返回
//