反虚拟机技术

1:浮点运算的花指令 如果不是花指令则更好了

2:借助EPO思想,解密函数远离入口点

3:多线程技术

4:SEH技术

5:元多形技术MetaPolymorphy

慢慢总结

 

6:同浮点运算一样 借用SSE指令 这些随时会被AV补上  但是缺提供给我们一种思路

push eax comiss xmm0,xmm0 ;比较低位数并且设置标识位 xor eax,eax cvtpi2ps xmm0,mm0 ;32位整数转变为浮点数 pop eax 

 

7:

00401716 |. 54 push esp ;esp->"google.com" 00401717 |. FFD7 call edi ;call - > gethostbyname("google.com") 00401719 |. 83C4 10 add esp,10 0040171C |. 64:A1 34000000 mov eax,dword ptr fs:[34] ; 从teb中读取GetLastError数值给eax 00401722 |. 69C0 01000100 imul eax,eax,10001 00401728 |. 35 58862413 xor eax,13248658 0040172D |. 3D 35A14934 cmp eax,3449A135 ; 校验返回值 00401732 |. 74 24 je short Anunnaki.00401758 00401734 |. 6A 00 push 0 00401736 |. 68 65737300 push 737365 0040173B |. 68 50726F63 push 636F7250 00401740 |. 68 45786974 push 74697845 00401745 |. 54 push esp ; esp->ExitProcess 00401746 |. E8 50FEFFFF call Anunnaki.0040159B 0040174B |. 50 push eax 0040174C |. E8 37FDFFFF call <Anunnaki.my_getprocaddress> 00401751 |. 83C4 0C add esp,0C 00401754 |. 6A 00 push 0 00401756 |. FFD0 call eax ; 00401758 |> 61 popad 00401759 /. C3 retn 

这段代码的作用是:

通过没有 WSAStartup 前调用 gethostbyname 会返回10093错误来检测的:

代码:
  0040171C                   |.  64:A1 34000000   mov eax,dword ptr fs:[34] ; 从teb中读取GetLastError数值给eax 
  00401722                   |.  69C0 01000100    imul eax,eax,10001
  00401728                   |.  35 58862413      xor eax,13248658
  0040172D                   |.  3D 35A14934      cmp eax,3449A135          ; 校验返回值
10093 这样乘出来正好是 0x3449A135。实际机器中直接gethostbyname会因为没有初始化而返回这个错误值,而虚拟环境中可能因为是个stub而GetLastError为0。

你可能感兴趣的:(多线程,c,虚拟机,解密)