DDCTF re1 writeup
下载下来是一个叫做reverse1_final的文件,打开发现是windows x86文件,直接用IDA无法反编译,提示如下
怀疑被加壳了,拖进PEID里面查看PE信息
EP段是UPX1,说明是UPX的壳,下载解压器,拖进去解压得到新的文件,发现新的文件已经无法正常运行,拖入IDA反汇编,先找到main函数,然后一通改名字
发现是对v4进行一系列操作后同DDCTF{reverseME}
进行比较,输入进入str_in,然后v4就是解密后的内容,进入该函数
发现就是对输入的字符串进行读取,让然后去匹配data里面的数值,data大概就是密码表,双击进入data是可以发现data没有在源码里面固定。
乱打乱撞,进入data里面发现这样
没有发现密码表,然后在下面翻,居然让我发现了类似密码表的东西
这串字符八九不离十就是密码表了,然后写脚本进行输出
1 |
|
运行结果如下58 58 59 42 56 3 12 25 8 25 12 11 25 49 57 1
根本不像是能打进去的字符串,于是进入ollydbg,发现这个地址是随机化了的,不好下断点,于是用PEtools 关闭地址空间随机化
然后保存,在关键函数sub_401000
处下断点,然后输入测试数据就是密码表的前面几个字符ABCDEFG
进行测试
1 | loc_401020: |
这一块就是从堆栈里面找到data[eax]
里面的内容,eax就是偏移量,然后eax是由ebx+ecx得到的,此时的寄存器信息如下
发现A指向的是],于是修改C
1 |
|
采用这种方式来找到偏移量,是-'='+']'
然后在OD里面验证一下,发现符合] \ [ Z Y X W
然后把key换成DDCTF{reverseME}
放到OD里面进行验证
成功拿到Flag~~
撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。