flare-on2014复现记录
复现了flare-on2014的部分题目,有的题目已经不具时效性,或者相关软件已经无法找到,便不再复现。
Flare-on 1
签到题,给了一个安装程序(这个不是题目),安装之后得到一个NET文件,直接拖进dnspy
断在程序入口点
跟进Form1()下好断点
然后在他下面的函数那里下好断电
看到下面的几个for循环,这里直接下断点
然后直接继续运行,这里观察下面的内存窗口,就可以看到flag
这个题目一开始给一张图片,然后按下按钮上面的字会变成乱码,很容易猜到这是把flag给改变了
Flare-on 2
题目给了一个图片,直接想到可能是图片隐写,winhex观察
这里看反正是隐写了一种语言的代码,再下面还有一些代码
将数据和代码提取出来
1 | order = [ |
这里就是用orde里的值来索引trems
用python来跑一下,得到一串base64密文,
1 | $_='aWYoaXNzZXQoJF9QT1NUWyJcOTdcNDlcNDlcNjhceDRGXDg0XDExNlx4NjhcOTdceDc0XHg0NFx4NEZceDU0XHg2QVw5N1x4NzZceDYxXHgzNVx4NjNceDcyXDk3XHg3MFx4NDFcODRceDY2XHg2Q1w5N1x4NzJceDY1XHg0NFw2NVx4NTNcNzJcMTExXDExMFw2OFw3OVw4NFw5OVx4NkZceDZEIl0pKSB7IGV2YWwoYmFzZTY0X2RlY29kZSgkX1BPU1RbIlw5N1w0OVx4MzFcNjhceDRGXHg1NFwxMTZcMTA0XHg2MVwxMTZceDQ0XDc5XHg1NFwxMDZcOTdcMTE4XDk3XDUzXHg2M1wxMTRceDYxXHg3MFw2NVw4NFwxMDJceDZDXHg2MVwxMTRcMTAxXHg0NFw2NVx4NTNcNzJcMTExXHg2RVx4NDRceDRGXDg0XDk5XHg2Rlx4NkQiXSkpOyB9'; |
解开密文,得到
1 | if(isset($_POST["\97\49\49\68\x4F\84\116\x68\97\x74\x44\x4F\x54\x6A\97\x76\x61\x35\x63\x72\97\x70\x41\84\x66\x6C\97\x72\x65\x44\65\x53\72\111\110\68\79\84\99\x6F\x6D"])) |
直接把后面的内容再用base解开,就能得到flag
1 | a11DOTthatDOTjava5crapATflareDASHonDOTcom |
这里把里面的DOT换成点,AT换成@,DASH换成-
网页其实是迷惑人的,关键在图片隐写
Flare-on 3
这个就纯动态调试了,没啥别的。不过出题人的本意应该是考察idc的使用
给了一个没有后缀的32位PE文件(winhex得出),然后加上后缀运行,直接弹错。不难看出,这里的报错是刻意为之的
进ida看一下
函数不多,但是没有什么实际价值
这里看起来需要动态调试,打开x32dbg,直接在0x401000处下断点,然后f9,来到最后的一个call这里
f7跟进之后,f8往下走,发现这里一个和0x66的异或,看一下异或之后的数据
在循环的时候,看到下面的指令在不断变化,这里直接在内存窗口看一下
循环结束之后发下字符串
so it beginshus
:这应该是开始的标志
在jmp之后又遇到一个循环,看到又在内存中生成了一串字符串
这里还是不清楚他想表达什么,但是这些字符串没有出现在程序窗口中,应该是作者刻意为之,继续往下跑
时刻观察着内存窗口,然后一直往下跑,不一会就看到了flag
Flare-on 4
这个pdf有一个背景,就是mandiant公司在2014年揭露了一个中国的国营黑客组织
“61398股”工作的性质被中国视为国家机密:然而,我们相信它从事有害的”计算机网络操作”。
61398号机组部分位于高桥镇大同路(路旁),位于上海浦东新区(区)。该大院的中心建筑是一个 130,663 平方英尺的设施,高 12 层,建于 2007 年初。
我们估计,61398股有成百上千的人员,根据61398股的有形基础设施的规模。
中国电信以国防的名义为该单位提供了特殊的光纤通信基础设施。
61398股要求其人员接受计算机安全和计算机网络操作培训,并要求其人员精通英语。
给了一个PDF,看官方wp,在用老版本的pdf阅读器的时候,程序会执行一些代码,但是我没有找到这个阅读器,现在的阅读器过于先进和安全,所以就没有成功复现
Flare-on 5
这是一个简单的dll逆向吧,开始想去直接动态调试,但是dll文件没有动起来,就只能静态看看了
ida进去找到dllmain函数
分析了一堆没啥用的api函数,最后在下面找到了关键函数
这里发现有俩函数,都跟进去看一下
第一个函数:
这时要学会浏览函数列表,列表中总会有一些函数,有奇怪的作用(算是一个逆向的技巧吧)
然后找到了一个函数(从上往下第四位)
函数很大,这里直接用c语言模拟一下
得到这个,考虑到这是dll文件,所以这里考虑输出这个函数,他就运行成功了
然后跟进xref向回引用查找
这里调用了成功函数,看到只有当这个数组>0时,才可以,所以看一下他在哪里被赋值了
这里跳转到下面那个,
这里再看他赋值为1的条件,是上面那个大于0,以此类推,靠着这个数组的和0比较的大小,不停的向回跳转,然后每一个函数最后都有一个返回值
根据xref的顺序记录一下返回值(这把一些英文单词换成符号)
得到:l0gging.ur.5tr0ke5atflare-on.com
Flare-on 6
这个elf文件不会,看他们分析也分析不出来
Flare-on 7
这个程序我不敢在本机跑,然后再win7虚拟机里跑也会出错,说他是个16位的程序,但是实际上是32位的,我不理解,这里记录一下题目中的涉及的反调试函数
IsDebuggerPresent() //调试时会返回1
IDT() //检查是否使用虚拟机
通过使用特权指令判断是否使用虚拟机
计算了1e1030到1e1780之间的0xCC数量,未调试时应为0x55
peb中的BeingDebugged,当调试时这个值为1
peb偏移0x68处为未公开的一处位置,调试时这个值为0x70
以上参考harmonica11师傅的博客,我也没有找到这些函数