首页
社区
课程
招聘
[讨论]Vmprotect1.2x诡计收集
2007-11-27 22:01 17370

[讨论]Vmprotect1.2x诡计收集

2007-11-27 22:01
17370
昨天跟了一个伪代码块,发现几个有趣的伪代码组合:
1、
第000030条:0x92 01       |0044|VM_PUSH_IMMB         ;push 0x01
第000031条:0x0a            |0048|VM_ADD                 ;
第000032条:0x92 ff         |0044|VM_PUSH_IMMB         ;PUSH -0x01
第000033条:0x0a            |0048|VM_ADD                 ;       

这个组合 相当于NOP吧。对[esp]里的DWORD数,先加个1,再减个1。

2、
第000047条:0xc3          |0040|VM_PUSH_ESP                
第000048条:0x14          |0040|VM_MOV_SSA_TO_B

这个组合 相当于是吧 push [esp]吧,把[esp]再push一次。

3、
第000047条:0xc3          |0040|VM_PUSH_ESP                
第000048条:0x14          |0040|VM_MOV_SSA_TO_B
第000049条:0x57          |0044|VM_NOR                

这个组合 是把第2个组合之后家了个VM_NOR .相当于是VM_NOT。

---------------
大家碰到什么有趣的组合没?希望拿来分享。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞7
打赏
分享
最新回复 (30)
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
十三少 2 2007-11-27 22:07
2
0
第1,3个组合:
Mutation. The executed file is modified on the level of processor commands (existing commands are modified, all kinds of garbage commands are added, etc.).
This compilation type poorly protects the code it processes against hacking and analyzing and mainly prevents functions being processed from determining with
signature analyzers (PEiD+KANAL, IDA+FLIRT, etc.). As a rule, there is no need to protect library functions against hacking and analyzing and it will be
enough just to change their signatures for the hacker to be

第2个组合
The bug causing an error during the mutation of the PUSH ESP has been fixed
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wangdell 6 2007-11-27 22:10
3
0
等我打开金山,慢慢的看。。。
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wangdell 6 2007-11-27 22:18
4
0
13,没看懂啊。。。解释一下?
“The bug causing an error during the mutation of the PUSH ESP has been fixed ”
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wangdell 6 2007-11-27 23:08
5
0
找到出处,多谢。
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2007-11-28 15:30
6
0
As a rule, there is no need to protect library functions against hacking and analyzing and it will be
enough just to change their signatures for the hacker to be

这句话将会成为本世纪最大的笑话
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
foxabu 13 2007-11-28 18:43
7
0
其实我也是这么想的~
我在想如果把MFC库用GCC编译一下给VC 链接.看IDA 能够识别多少
雪    币: 1946
活跃值: (238)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
Bughoho 8 2007-11-28 19:42
8
0
哪里可以看出来?
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2007-11-28 21:58
9
0
楼上问这个问题只有两种可能:
1、没有破过重口味VM的东西
2、已经强大到有90%还原x86的unpacker

我觉得后者概率高一些
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
十三少 2 2007-11-28 22:42
10
0
其实我没看懂我贴的是什么。
雪    币: 257
活跃值: (56)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
vrowang123 1 2007-11-28 22:42
11
0
forgot的话越来越难让人看懂。
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wangdell 6 2007-11-28 22:56
12
0
大家说的都高深莫测,比汇编还难看懂。似乎每句都有虚拟机、变形、花指令、扰码、偷代码。。处处玄机。
听不大懂,只好自己自言自语了。将上面几组定义为变形组合,命名为VMX_???

1、VMX_INC
0xe6 01     |0040|VM_PUSH_IMMB 	01h         
0xf4           |0044|VM_ADD 		FFB9CF5Bh   


2、VMX_DEC
0x92 ff         |0044|VM_PUSH_IMMB   ;PUSH -0x01
0x0a            |0048|VM_ADD     ; 


3、VMX_NOP=VMX_INC,VMX_DEC
0x92 01       |0044|VM_PUSH_IMMB   ;push 0x01
0x0a            |0048|VM_ADD     ;
0x92 ff         |0044|VM_PUSH_IMMB   ;PUSH -0x01
0x0a            |0048|VM_ADD     ;  


4、VMX_PUSH_[ESP]暂定
0xc3          |0040|VM_PUSH_ESP     
0x14          |0040|VM_MOV_SSA_TO_B


5、VMX_NOT=VMX_PUSH_[ESP],VM_NOR
0xc3          |0040|VM_PUSH_ESP     
0x14          |0040|VM_MOV_SSA_TO_B 
0x57          |0044|VM_NOR     


6、VMX_NOP=VMX_NOT,VMX_NOT
0xa1          |0040|VM_PUSH_ESP 		12FE00h       
0xa9          |0040|VM_MOV_SSA_TO_B 		FFF9CF5Bh 
0xc1          |0044|VM_NOR 	                 	 4630A5h  
0xa1          |0040|VM_PUSH_ESP 		12FE00h       
0xa9          |0040|VM_MOV_SSA_TO_B 		 4630A5h  
0xc1          |0044|VM_NOR 			FFF9CF5Bh


7、VMX_NOP=VMX_NOT,VMX_INC,VM_NOT,VM_INC
0xa1          |0040|VM_PUSH_ESP 		12FE00h         
0xa9          |0040|VM_MOV_SSA_TO_B 		 4630A5h    
0xc1           |0044|VM_NOR 			FFF9CF5Bh   
0xe6 01     |0040|VM_PUSH_IMMB 		01h         
0xf4           |0044|VM_ADD 			FFB9CF5Bh   
0xa1          |0040|VM_PUSH_ESP                            12FE00h         
0xa9          |0040|VM_MOV_SSA_TO_B 		FFB9CF5Bh   
0x5e          |0044|VM_NOR 			4630A4h     
0xe6 01     |0040|VM_PUSH_IMMB 		01h         
0xf5           |0044|VM_ADD 			4630A5h
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2007-11-28 23:08
13
0
其实你也没看懂我贴的是什么,
其实你没发现你暴露马甲了。
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
Isaiah 10 2007-11-29 12:02
14
0
如果钩选了Hide Constant上面的代码组合很常见。不一定就是无意义的代码。

所有机器还原感觉有点难。
雪    币: 8188
活跃值: (4243)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
ccfer 16 2007-11-29 13:20
15
0
其实你没发现他旁边有个戴墨镜的
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2007-11-29 13:38
16
0
其实你没发现旁边还有个蘑菇
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
Isaiah 10 2007-11-29 15:41
17
0
完全不懂了。
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wangdell 6 2007-11-29 17:33
18
0
哎,自叹鲁钝,无法和高手沟通。我还是不说话了。
专心看代码吧。
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-11-29 17:46
19
0
这个不是马甲,你认为那个不是马甲的才是马甲
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2007-11-29 18:23
20
0
你认为我认为那个马甲不是马甲那个不是马甲的才是马甲?
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wangdell 6 2007-11-29 18:28
21
0
贴一些常用的变形代码(摘自月中人翻译的《变形实践》,vmprotect里用到不少),给愿意一起研究的看一下
BTW:是我的马甲
1、
XOR Reg,-1 --> NOT Reg
XOR Mem,-1 --> NOT Mem
MOV Reg,Reg --> NOP
SUB Reg,Imm --> ADD Reg,-Imm
SUB Mem,Imm --> ADD Mem,-Imm
XOR Reg,0 --> MOV Reg,0
XOR Mem,0 --> MOV Mem,0
ADD Reg,0 --> NOP
ADD Mem,0 --> NOP
OR Reg,0 --> NOP
OR Mem,0 --> NOP
AND Reg,-1 --> NOP
AND Mem,-1 --> NOP
AND Reg,0 --> MOV Reg,0
AND Mem,0 --> MOV Mem,0
XOR Reg,Reg --> MOV Reg,0
SUB Reg,Reg --> MOV Reg,0
OR Reg,Reg --> CMP Reg,0
AND Reg,Reg --> CMP Reg,0
TEST Reg,Reg --> CMP Reg,0
LEA Reg,[Imm] --> MOV Reg,Imm
LEA Reg,[Reg+Imm] --> ADD Reg,Imm
LEA Reg,[Reg2] --> MOV Reg,Reg2
LEA Reg,[Reg+Reg2] --> ADD Reg,Reg2
LEA Reg,[Reg2+Reg2+xxx]--> LEA Reg,[2*Reg2+xxx]
MOV Reg,Reg --> NOP
MOV Mem,Mem--> NOP 


2、
PUSH Imm / POP Reg --> MOV Reg,Imm
PUSH Imm / POP Mem --> MOV Mem,Imm
PUSH Reg / POP Reg2 --> MOV Reg2,Reg
PUSH Reg / POP Mem --> MOV Mem,Reg
PUSH Mem / POP Reg --> MOV Reg,Mem
PUSH Mem / POP Mem2--> MOV Mem2,MemMOV Mem,Reg/PUSH Mem --> PUSH Reg
POP Mem / MOV Reg,Mem --> POP Reg
POP Mem2 / MOV Mem,Mem2 --> POP Mem
MOV Mem,Reg / MOV Reg2,Mem --> MOV Reg2,Reg
MOV Mem,Imm / PUSH Mem --> PUSH Imm
MOV Mem,Imm / OP Reg,Mem --> OP Reg,Imm
MOV Reg,Imm / ADD Reg,Reg2 --> LEA Reg,[Reg2+Imm]
MOV Reg,Reg2 / ADD Reg,Imm --> LEA Reg,[Reg2+Imm]
MOV Reg,Reg2 / ADD Reg,Reg3 --> LEA Reg,[Reg2+Reg3]
ADD Reg,Imm / ADD Reg,Reg2 --> LEA Reg,[Reg+Reg2+Imm]
ADD Reg,Reg2 / ADD Reg,Imm --> LEA Reg,[Reg+Reg2+Imm]
OP Reg,Imm / OP Reg,Imm2 --> OP Reg,(Imm OP Imm2)
OP Mem,Imm / OP Mem,Imm2 --> OP Mem,(Imm OP Imm2)
LEA Reg,[Reg2+Imm] / ADD Reg,Reg3 --> LEA Reg,[Reg2+Reg3+Imm]
LEA Reg,[(RegX+)Reg2+Imm] / ADD Reg,Reg2--> LEA Reg,[(RegX+)2*Reg2+Imm]
POP Mem / PUSH Mem --> NOP
MOV Mem2,Mem / MOV Mem3,Mem2 --> MOV Mem3,Mem
MOV Mem2,Mem / OP Reg,Mem2 --> OP Reg,Mem
MOV Mem2,Mem / MOV Mem2,xxx --> MOV Mem2,xxx
MOV Mem,Reg / CALL Mem --> CALL Reg
MOV Mem,Reg / JMP Mem --> JMP Reg
MOV Mem2,Mem / CALL Mem2 --> CALL Mem
MOV Mem2,Mem / JMP Mem2 --> JMP Mem
MOV Mem,Reg / MOV Mem2,Mem --> MOV Mem2,Reg
OP Reg,xxx / MOV Reg,yyy --> MOV Reg,yyy
Jcc @xxx / !Jcc @xxx--> JMP @xxx (this applies to (Jcc & 0FEh) with(Jcc | 1)
NOT Reg / NEG Reg --> ADD Reg,1
NOT Reg / ADD Reg,1 --> NEG Reg
NOT Mem / NEG Mem --> ADD Mem,1
NOT Mem / ADD Mem,1 --> NEG Mem
NEG Reg / NOT Reg --> ADD Reg,-1
NEG Reg / ADD Reg,-1 --> NOT Reg
NEG Mem / NOT Mem --> ADD Mem,-1
NEG Mem / ADD Mem,-1 --> NOT Mem
CMP X,Y / != Jcc (CMP without Jcc) --> NOP
TEST X,Y / != Jcc --> NOP
POP Mem / JMP Mem --> RET
PUSH Reg / RET --> JMP Reg
CALL Mem / MOV Mem2,EAX --> CALL Mem / APICALL_STORE Mem2
MOV Reg,Mem / CALL Reg --> CALL Mem
XOR Reg,Reg / MOV Reg8,[Mem] --> MOVZX Reg,byte ptr [Mem]
MOV Reg,[Mem] / AND Reg,0FFh --> MOVZX Reg,byte ptr [Mem]


3、
MOV Mem,Reg
OP Mem,Reg2
MOV Reg,Mem
--> OP Reg,Reg2

MOV Mem,Reg
OP Mem,Imm
MOV Reg,Mem
--> OP Reg,Imm

MOV Mem,Imm
OP Mem,Reg
MOV Reg,Mem
--> OP Reg,Imm (it can't be SUB)

MOV Mem2,Mem
OP Mem2,Reg
MOV Mem,Mem2
--> OP Mem,Reg

MOV Mem2,Mem
OP Mem2,Imm
MOV Mem,Mem2
--> OP Mem,Imm

CMP Reg,Reg
JO/JB/JNZ/JA/JS/JNP/JL/JG @xxx
!= Jcc
--> NOP

CMP Reg,Reg
JNO/JAE/JZ/JBE/JNS/JP/JGE/JLE @xxx
!= Jcc
--> JMP @xxx

MOV Mem,Imm
CMP/TEST Reg,Mem
Jcc @xxx
--> CMP/TEST Reg,Imm
Jcc @xxx

MOV Mem,Reg
SUB/CMP Mem,Reg2
Jcc @xxx
--> CMP Reg,Reg2
Jcc @xxx

MOV Mem,Reg
AND/TEST Mem,Reg2
Jcc @xxx
--> TEST Reg,Reg2
Jcc @xxx

MOV Mem,Reg
SUB/CMP Mem,Imm
Jcc @xxx
--> CMP Reg,Imm
Jcc @xxx

MOV Mem,Reg
AND/TEST Mem,Imm
Jcc @xxx
--> TEST Reg,Imm
Jcc @xxx

MOV Mem2,Mem
CMP/TEST Reg,Mem2
Jcc @xxx
--> CMP/TEST Reg,Mem
Jcc @xxx

MOV Mem2,Mem
AND/TEST Mem2,Reg
Jcc @xxx
--> TEST Mem,Reg
Jcc @xxx

MOV Mem2,Mem
SUB/CMP Mem2,Reg
Jcc @xxx
--> CMP Mem,Reg
Jcc @xxx

MOV Mem2,Mem
AND/TEST Mem2,Imm
Jcc @xxx
--> TEST Mem,Imm
Jcc @xxx

MOV Mem2,Mem
SUB/CMP Mem2,Imm
Jcc @xxx
--> CMP Mem,Imm
Jcc @xxx

PUSH EAX
PUSH ECX
PUSH EDX
--> APICALL_BEGIN

POP EDX
POP ECX
POP EAX
--> APICALL_END
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
wangdell 6 2007-11-29 18:31
22
0
VMX_NOP是我目前喜欢的东东。如果以后申请马甲,就用这个了。
想起softworm的成长故事里引用的。。。是非成败转头空,古今多少事,都付笑谈中。呵呵,这么多VM_OP最后只不过是VM_NOP。
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-11-29 20:07
23
0
真真假假,假假真真
真在假时假亦真
假在真时真亦假
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
十三少 2 2007-11-30 03:49
24
0
其实你没发现旁边还有个背背。
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2007-11-30 11:10
25
0
其实你没发现他旁边有个戴墨镜的
其实你没发现旁边还有个背背
--> 墨镜旁边是背背
游客
登录 | 注册 方可回帖
返回