第一届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("vfPu000eu000fBAu0006
Gu0015Iu001au0001u0016H\ u0002u0013/ ^u001dJOa]Cu001bu0005");
}
分析后猜测this.label2.Text为flag,可以对此进行解密,但是我懒,所以加了条lulz.datwork();之后在datwork里改为下图
直接调试查看text得到flag