其他
对一篇反沙箱文章的分析学习小记
本文为看雪论坛优秀文章
看雪论坛作者ID:dayday向上8
前言
延迟执行-时间复杂度
SHA-1:00111b6d9552986d75607968268c22518948ac8e
Microsoft:Trojan:Win32/Ursnif.SM!MTB
1. 入手点
2. 具体思路
很幸运的是只有一处对lpAddress进行了赋值操作,不难发现此处是从地址0x4514e8向地址0x45B5F8进行了内存拷贝,字节数是0x491f。
3. 分析
//找到数据修改地方进行分析,在进行62((0BCAh-0AD2)/4)次循环对248((0BCAh-0AD2))个字节修改之后推出循环
//头部
text:004349FB BD D2 0A 00 00 mov ebp, 0AD2h
//中部
text:00434AAE A1 44 96 46 00 mov eax, lpAddress //(unk_45B5F8)
text:00434AB3 49 dec ecx
text:00434AB4 8D B4 28 2E F5 FF FF lea esi, [eax+ebp-0AD2h]
text:00434ABB 8B 06 mov eax, [esi]
//尾部
text:00434B06 05 C0 24 60 01 add eax, 16024C0h
text:00434B0B A3 A0 9F 46 00 mov dword_469FA0, eax
text:00434B10 89 06 mov [esi], eax ; 修改数据
text:00434B33 83 C5 04 add ebp, 4
text:00434B42 81 FD CA 0B 00 00 cmp ebp, 0BCAh
//循环代码行数
00434C2B-00434D2A = 0xFF(255)行
//循环跳出点
text:00434C49 83 7C 24 10 01 cmp dword ptr [esp+10h], 1
text:00434C4E 0F 82 DB 00 00 00 jb loc_434D2F
text:00434D0E FF 4C 24 10 dec dword ptr [esp+10h]
//循环代码行数
00434D6A-00435341 = 0x5D7(1495)
//循环跳出点
text:00435075 83 7C 24 10 00 cmp dword ptr [esp+10h], 0
text:0043507A 89 0D 30 90 45 00 mov dword_459030, ecx
text:004351E4 FF 4C 24 10 dec dword ptr [esp+10h]
总结
共同的内循环次数为0x3e次,两次不同的外循环次数相同,0x911FB2次,所以直到解出来最终代码共运行了0x911fb2 0x3e 2 = 0x464B5A38(1,179,343,416)次循环。
延迟执行-API调用
SHA-1:bbca30fc40784ef52ec352c5d9bbadd7a95b2f14
Microsoft:Trojan:Win32/Qakbot.AR!MTB
1. 入手点
这次我换了个思路,就是通过火绒剑先大概定位到超时的位置,之后再进行具体分析。
2. 具体思路
GetTickCount
SHA-1:c3f3ecf24b6d39b0e4ff51af31002f3d37677476
Microsoft:Trojan:Win32/Kovter
1. 入手点
2. 具体思路
3. 分析
cmp eax, 7
jz short loc_401A62
call ds:GetTickCount
mov byte_465290, al
jmp short loc_401A49
----------------------------
movzx ecx, byte_465290
xor ecx, 4Eh
xor ecx, 7
mov ProcName, cl ;只有上面al正确,此处函数名的第一个字节才正确
剩下的问题就是程序怎么崩了!?
API Flooding
SHA-1:6ca2bbcecc76d9c14e0373c919d67729311430a6
Microsoft:TrojanDropper:Win32/Cutwail.gen!K
1. 入手点
用火绒剑,找到超时之后执行的能看到第一个位置,开始栈回溯分析。
2. 分析
CPU Temperature Check
function Get-AntiVMwithTemperature {
$t = Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi"
$valorTempKelvin = $t.CurrentTemperature / 10
$valorTempCelsius = $valorTempKelvin - 273.15
$valorTempFahrenheit = (9/5) * $valorTempCelsius + 32
return $valorTempCelsius.ToString() + " C : " + $valorTempFahrenheit.ToString() + " F : " + $valorTempKelvin + "K"
}
这是我在物理机中运行得到的结果,虚拟机肯定也就不行了。
https://blog.talosintelligence.com/2018/04/gravityrat-two-year-evolution-of-apt.html
最后
看雪ID:dayday向上8
https://bbs.pediy.com/user-868245.htm
*本文由看雪论坛 dayday向上8 原创,转载请注明来自看雪社区。
推荐文章++++
* 探究 Process Explorer 进程树选项灰色问题
* ARM栈回溯——从理论到实践,开发IDA-arm-unwind-plugin
求分享
求点赞
求在看