[FlareOn1]Challenge7

第一届flare on的最后一题

32位exe,拖进ida

想到我没写过什么关于反调的内容,这里详细说一下每个函数

FUNC1

使用IsDebuggerPresent,调试时会返回1

FUNC2

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

FUNC3

这里通过IDT检查是否使用虚拟机

FUNC4

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

FUNC5

此处自定义了一个错误码0x1234,OutputDebugStringW在没有调试的情况下会失败导致错误码刷新,所以v0不是自定义的值

FUNC6

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

FUNC7

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

FUNC8

判断是否为周五

FUNC9

判断文件名是否为backdoge.exe,并且这个值会被用作密钥解密,所以可以直接动调修改a1

FUNC10

要联网

FUNC11

判断时间为17点,这个和上面的周五可以修改时间,修改zf也可以

FUNC12

要联网

FUNC13

这里的szUrl为https://twitter.com/FireEye/status/484033515538116608,要有梯子,不过这里我总是返回0,查看了网址

这里我跳过了v5的赋值部分,因为后面是 strncpy(v7, v6 + 11, 7u);所以我手动将Secluded HijackRAT写到了v5处

到此处函数分析完,下面要写到文件中

经过查看很容易知道两个参数为dos头和pe头的标识,就此可以得到gratz.exe

gratz.exe分析

这是个.net文件,拖进dnspy

public void lulzors()
        {
            lulz lulz = new lulz();
            lulz.datwork();//这条是我加的
            new Thread(new ThreadStart(lulz.datwork)).Start();
            this.label2.Text = lulz.decoder4("\v\fP\u000e\u000fBA\u0006\rG\u0015I\u001a\u0001\u0016H\\\t\b\u0002\u0013/\b\t^\u001d\bJO\a]C\u001b\u0005");
        }

分析后猜测this.label2.Text为flag,可以对此进行解密,但是我懒,所以加了条lulz.datwork();之后在datwork里改为下图

直接调试查看text得到flag

posted @ 2020-12-12 22:45  Harmonica11  阅读(151)  评论(0编辑  收藏  举报