首页
社区
课程
招聘
[原创]VMP分析插件v1.2(2011/12/15更新)
发表于: 2011-11-26 10:55 163963

[原创]VMP分析插件v1.2(2011/12/15更新)

2011-11-26 10:55
163963
收藏
免费 8
支持
分享
最新回复 (170)
雪    币: 2167
活跃值: (3569)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
151
再支持一下,楼主新年快乐,支持。
2012-1-25 22:15
0
雪    币: 2167
活跃值: (3569)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
152
你的意思是类似OD RUN跟踪的功能?这个以后会做,但是最近应该不会加入,想记录转移和比较过程的话,用条件记录断点应该可以,下一版会加入的。找比较用的常量可以从转移往前看,在压入加密的转移地址之前应该有加法或与非指令,常量就是这些指令的一个操作数,如果隐藏常量可能要手动计算一下。

请问一下,如果是隐藏常量要如何计算。
2012-1-30 12:12
0
雪    币: 1270
活跃值: (230)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
153
查找比较用的常量一般是从转移往上看,根据转移类型判断要比较的标志,看看标志是怎么来的。下面分析一个最简单的JNZ,只检查一个标志,选了隐藏常量,没有选检查虚拟机完整性,如果选检查虚拟机完整性的话解密常量时还会读取虚拟机引擎的一部分参与计算。

汇编代码
00401003      |.  817D 08 78563412      CMP DWORD PTR SS:[EBP+8],12345678
0040100A      |.  75 07                 JNZ SHORT chushihu.00401013

VMP代码,[EBP+8]=33333333
0040C4A6  |>  BF           vPopReg4 vR6
0040C4A5  |.  55 76620E68  vPushImm4 680E6276
0040C4A0  |.  B8           vAdd4
0040C49F  |.  7D           vPopReg4 vR13
0040C49E  |.  7C           vPopReg4 vR9
0040C49D  |.  FD           vPopReg4 vR15
0040C49C  |.  BD           vPopReg4 vR14
0040C49B  |.  AD           vPushReg4 vR14
0040C49A  |.  31           vPushVEsp
0040C499  |.  60           vReadMemSs4
0040C498  |.  15           vNand4
0040C497  |.  3F           vPopReg4 vR4
0040C496  |.  2B B074772E  vPushImm4 2E7774B0
0040C491  |.  0F           vNand4
0040C490  |.  FC           vPopReg4 vR11
0040C48F  |.  CF 4F8B88D1  vPushImm4 0D1888B4F
0040C48A  |.  AD           vPushReg4 vR14
0040C489  |.  0F           vNand4
0040C488  |.  BE           vPopReg4 vR2
0040C487  |.  15           vNand4
0040C486  |.  3F           vPopReg4 vR4
0040C485  |.  3F           vPopReg4 vR4
0040C484  |.  FF           vPopReg4 vR7
0040C483  |.  BC           vPopReg4 vR10
0040C482  |.  FE           vPopReg4 vR3
0040C481  |.  3D           vPopReg4 vR12
0040C480  |.  7E           vPopReg4 vR1
0040C47F  |.  BE           vPopReg4 vR2
0040C47E  |.  7F           vPopReg4 vR5
0040C47D  |.  7D           vPopReg4 vR13
0040C47C  |.  FC           vPopReg4 vR11
0040C47B  |.  3E           vPopReg4 vR0
0040C47A  |.  2E           vPushReg4 vR0
0040C479  |.  52           vPushVEsp
0040C478  |.  72           vReadMemSs4
0040C477  |.  12           vNand4
0040C476  |.  3C           vPopReg4 vR8
0040C475  |.  2B F6810E76  vPushImm4 760E81F6
0040C470  |.  2B 6409093A  vPushImm4 3A090964
0040C46B  |.  91           vPushVEsp
0040C46A  |.  60           vReadMemSs4
0040C469  |.  2B 0987F189  vPushImm4 89F18709
0040C464  |.  CC 0C        vPushImmSx1 0C
0040C462  |.  52           vPushVEsp
0040C461  |.  A1           vAdd4
0040C460  |.  3C           vPopReg4 vR8
0040C45F  |.  95           vWriteMemSs4
0040C45E  |.  31           vPushVEsp
0040C45D  |.  24           vReadMemSs2
0040C45C  |.  3C           vPopReg4 vR8
0040C45B  |.  F2 2C        vPopReg2 vR11W
0040C459  |.  70           vAdd4
0040C458  |.  FC           vPopReg4 vR11
0040C457  |.  12           vNand4
0040C456  |.  FF           vPopReg4 vR7
0040C455  |.  39           vPopfd
0040C454  |.  EE           vPushReg4 vR3
0040C453  |.  31           vPushVEsp
0040C452  |.  3C           vPopReg4 vR8
0040C451  |.  CF B422EB3A  vPushImm4 3AEB22B4
0040C44C  |.  2B 2020E830  vPushImm4 30E82020
0040C447  |.  2B 5E6DFA52  vPushImm4 52FA6D5E
0040C442  |.  5D 1C        vPopReg2 vR7W
0040C440  |.  5D 34        vPopReg2 vR13W
0040C43E  |.  55 87A9CBED  vPushImm4 0EDCBA987  ; 解密12345678的常量
0040C439  |.  CF ADEF6F01  vPushImm4 16FEFAD
0040C434  |.  31           vPushVEsp
0040C433  |.  E7           vReadMemSs2
0040C432  |.  2B 06A84241  vPushImm4 4142A806   ; 解密12345678的常量
0040C42D  |.  31           vPushVEsp
0040C42C  |.  0D 06        vPushImmSx1 6
0040C42A  |.  70           vAdd4
0040C429  |.  7D           vPopReg4 vR13
0040C428  |.  C8           vWriteMemSs4
0040C427  |.  40 0C        vPopReg1 vR3B
0040C425  |.  15           vNand4               ; 4142A806 NAND EDCBA987 解密常量12345678
0040C424  |.  FC           vPopReg4 vR11
0040C423  |.  2C           vPushReg4 vR8
0040C422  |.  0D 08        vPushImmSx1 8
0040C420  |.  70           vAdd4
0040C41F  |.  FE           vPopReg4 vR3
0040C41E  |.  87           vReadMemSs4          ; 参数 33333333
0040C41D  |.  91           vPushVEsp
0040C41C  |.  60           vReadMemSs4

下面开始比较,虚拟机中的减法操作

0040C41B  |.  0F           vNand4               ; NOT 33333333 = CCCCCCCC
0040C41A  |.  FE           vPopReg4 vR3
0040C419  |.  70           vAdd4                ; CCCCCCCC + 12345678 = DF012344
0040C418  |.  FE           vPopReg4 vR3         ; 标志 296
0040C417  |.  31           vPushVEsp
0040C416  |.  60           vReadMemSs4
0040C415  |.  B9           vNand4               ; NOT DF012344
0040C414  |.  3E           vPopReg4 vR0         ; 标志 206
0040C413  |.  FF           vPopReg4 vR7

下面是组合标志

0040C412  |.  EE           vPushReg4 vR3
0040C411  |.  B3           vPushVEsp
0040C410  |.  60           vReadMemSs4
0040C40F  |.  12           vNand4               ; NOT 296 = FFFFFD69
0040C40E  |.  FF           vPopReg4 vR7
0040C40D  |.  35 01        vPushImm1 1
0040C40B  |.  2F           vPushReg4 vR4
0040C40A  |.  11 00        vPushReg1 vR0B
0040C408  |.  2B F5FBFF7F  vPushImm4 7FFFFBF5   ; 解密FFFFF7EA的常量
0040C403  |.  7B           vPushVEsp
0040C402  |.  0D 06        vPushImmSx1 6
0040C400  |.  70           vAdd4
0040C3FF  |.  7D           vPopReg4 vR13
0040C3FE  |.  AB           vWriteMemSs4
0040C3FD  |.  31           vPushVEsp
0040C3FC  |.  60           vReadMemSs4
0040C3FB  |.  5D 34        vPopReg2 vR13W
0040C3F9  |.  FF           vPopReg4 vR7
0040C3F8  |.  83           vShl4                ; 常量FFFFF7EA
0040C3F7  |.  FC           vPopReg4 vR11
0040C3F6  |.  0F           vNand4               ; FFFFFD69 NAND FFFFF7EA = 14
0040C3F5  |.  7D           vPopReg4 vR13
0040C3F4  |.  2E           vPushReg4 vR0
0040C3F3  |.  7B           vPushVEsp
0040C3F2  |.  D8           vReadMemSs4
0040C3F1  |.  12           vNand4               ; NOT 206 = FFFFFDF9
0040C3F0  |.  FC           vPopReg4 vR11
0040C3EF  |.  55 EAF7FFFF  vPushImm4 0FFFFF7EA  ; 解密815的常量
0040C3EA  |.  AC           vPushReg4 vR10
0040C3E9  |.  E9 39        vPushReg1 vR14B
0040C3E7  |.  31           vPushVEsp
0040C3E6  |.  72           vReadMemSs4
0040C3E5  |.  40 1C        vPopReg1 vR7B
0040C3E3  |.  CF 60C44821  vPushImm4 2148C460   ; 解密815
0040C3DE  |.  33 0C        vPushImmSx1 0C
0040C3DC  |.  31           vPushVEsp
0040C3DB  |.  70           vAdd4
0040C3DA  |.  3F           vPopReg4 vR4
0040C3D9  |.  95           vWriteMemSs4
0040C3D8  |.  3F           vPopReg4 vR4
0040C3D7  |.  15           vNand4               ; 解密常量815
0040C3D6  |.  7D           vPopReg4 vR13
0040C3D5  |.  0F           vNand4               ; FFFFFDF9 NAND 815 = 202
0040C3D4  |.  FC           vPopReg4 vR11
0040C3D3  |.  B8           vAdd4                ; 202 + 14 = 216 比较的标志

下面是检查标志,生成转移目标

0040C3D2  |.  3F           vPopReg4 vR4
0040C3D1  |.  7D           vPopReg4 vR13
0040C3D0  |.  0F           vNand4               ; 解密转移目标常量1
0040C3CF  |.  3F           vPopReg4 vR4
0040C3CE  |.  2B 532BEB3A  vPushImm4 3AEB2B53
0040C3C9  |.  2B 00036328  vPushImm4 28630300
0040C3C4  |.  0F           vNand4               ; 解密转移目标常量2
0040C3C3  |.  FE           vPopReg4 vR3
0040C3C2  |.  31           vPushVEsp            ; 保存转移目标的vESP
0040C3C1  |.  DD D538      vPushImm2 38D5
0040C3BE  |.  03 2FC7      vPushImm2 0C72F
0040C3BB  |.  03 8EE1      vPushImm2 0E18E
0040C3B8  |.  5D 1C        vPopReg2 vR7W
0040C3B6  |.  30           vAdd2
0040C3B5  |.  FF           vPopReg4 vR7
0040C3B4  |.  6D           vPushReg4 vR13
0040C3B3  |.  31           vPushVEsp
0040C3B2  |.  72           vReadMemSs4
0040C3B1  |.  15           vNand4               ; NOT 216 = FFFFFDE9
0040C3B0  |.  3F           vPopReg4 vR4
0040C3AF  |.  2B D5AE94E7  vPushImm4 0E794AED5
0040C3AA  |.  2C           vPushReg4 vR8
0040C3A9  |.  31           vPushVEsp
0040C3A8  |.  86           vReadMemSs1
0040C3A7  |.  55 EA506B18  vPushImm4 186B50EA
0040C3A2  |.  0D 0A        vPushImmSx1 0A
0040C3A0  |.  7B           vPushVEsp
0040C39F  |.  70           vAdd4
0040C39E  |.  FE           vPopReg4 vR3
0040C39D  |.  95           vWriteMemSs4
0040C39C  |.  11 29        vPushReg1 vR10B
0040C39A  |.  93 0C        vPopReg2 vR3W
0040C398  |.  F2 0C        vPopReg2 vR3W
0040C396  |.  70           vAdd4                ; 解密常量 FFFFFFBF = NOT 40(ZF)
0040C395  |.  FC           vPopReg4 vR11
0040C394  |.  12           vNand4               ; 标志 AND 40(ZF)
0040C393  |.  FF           vPopReg4 vR7
0040C392  |.  53           vShr4                ; 右移4位,结果是0或4
0040C391  |.  FC           vPopReg4 vR11
0040C390  |.  70           vAdd4                ; 加上前面保存的vESP
0040C38F  |.  FE           vPopReg4 vR3
0040C38E  |.  60           vReadMemSs4          ; 读取解密前的转移目标
0040C38D  |.  3F           vPopReg4 vR4
0040C38C  |.  FC           vPopReg4 vR11
0040C38B  |.  FC           vPopReg4 vR11
0040C38A  |.  2F           vPushReg4 vR4
0040C389  |.  31           vPushVEsp
0040C388  |.  87           vReadMemSs4
0040C387  |.  FC           vPopReg4 vR11
0040C386  |.  EA           vPushVEsp
0040C385  |.  60           vReadMemSs4
0040C384  |.  12           vNand4
0040C383  |.  BD           vPopReg4 vR14
0040C382  |.  55 FCEAAB3A  vPushImm4 3AABEAFC   ; 最后的两个常量是解密转移目标
0040C37D  |.  0F           vNand4
0040C37C  |.  FE           vPopReg4 vR3
0040C37B  |.  EC           vPushReg4 vR11
0040C37A  |.  55 031554C5  vPushImm4 0C5541503
0040C375  |.  0F           vNand4
0040C374  |.  3F           vPopReg4 vR4
0040C373  |.  0F           vNand4
0040C372  |.  3F           vPopReg4 vR4
0040C371  |.  3F           vPopReg4 vR4
0040C370  |.  AF           vPushReg4 vR6
0040C36F  |.  AF           vPushReg4 vR6
0040C36E  |.  AC           vPushReg4 vR10
0040C36D  |.  2D           vPushReg4 vR12
0040C36C  |.  AE           vPushReg4 vR2
0040C36B  |.  6D           vPushReg4 vR13
0040C36A  |.  6F           vPushReg4 vR5
0040C369  |.  ED           vPushReg4 vR15
0040C368  |.  2C           vPushReg4 vR8
0040C367  |.  6D           vPushReg4 vR13
0040C366  |.  6E           vPushReg4 vR1
0040C365  |.  6C           vPushReg4 vR9
0040C364  |.  2B 8A9DF197  vPushImm4 97F19D8A
0040C35F  |.  70           vAdd4
0040C35E  |.  FE           vPopReg4 vR3
0040C35D  |.  AF           vPushReg4 vR6
0040C35C  |.  2F           vPushReg4 vR4
0040C35B  |.  27           vJmp_0040AA56        ; JNZ chushihu.0040C1AF

这还是比较简单的,如果是需要检查多个标志的条件比如JG等,再加上检查虚拟机完整性,代码会很长。只要可以跳过检查标志的部分,往上看一下标志是怎么来的,一般都能找到比较的常量。现在静态分析手动计算常量的确有些麻烦,动态调试会好一些,在转移前往下跟一下,堆栈和寄存器里可以看到解密好的常量,解密常量的数一般都在前面不远。以后准备加入查找数据来源,可以选择一个指令的操作数,向前跟踪数据是如何生成的,如果是常量可以直接计算。
2012-2-1 23:16
0
雪    币: 9049
活跃值: (4449)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
154
顶上来~~~~~~
2012-2-21 23:42
0
雪    币: 576
活跃值: (1163)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
155
测试了下,发现楼主确实强大,这个插件功能强大,OD界面设计的也很强大。。

提一点意见:

我觉得之所有要使用程序,就是为了避免人工手动的操作,所以,设计插件的很重要的一点是:

要尽最大可能的将伪指令缩减到最少,这样看起来就容易,简单明了。。

我觉得楼主既然做到能动态调试的话,就没什么必要将不会执行的分支伪指令代码也显示出来,这样的话,
里面的伪指令代码就太多。。这些不会执行的代码我们也不会想去看的,呵呵。。

总结: VMP的难点正如楼主说的不在于分析虚拟机,而在于对伪指令的最大化缩减,尽可能的压缩成有用的
代码,尽可能地接近于原始汇编代码。。
2012-2-23 19:10
0
雪    币: 2
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
156
这个一定要mark!!
2012-2-23 19:48
0
雪    币: 1270
活跃值: (230)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
157
现在调试功能已经基本能用了,再往下做就是化简和还原,在这之前准备完善一下当前的功能。最近没有多少时间,等忙完了这一段把剩下的部分做出来,然后再往下做。下面准备添加一些小的功能,比如计算真实ESP、分析退出虚拟机的函数调用等,做到完全恢复程序结构。化简和还原我想做成通用的程序,其他的变形和虚拟也可以做很少的修改就能使用,往下做之前要重新设计和编写整个程序,可能要停很长一段时间了。

你说不显示不会执行的分支,我没看到VMP里有什么不会执行的分支啊,只有一个检查单步标志的分支一般不会执行,其他的就是使用变形+虚拟后产生的假分支了,只是把程序复制出来一份。如果要清除这样的分支的话,必须能检查出两个分支路径功能相同,即使化简后都是有难度的,而且执行时也有可能进入这样的分支,如果不显示调试时不是也看不到了吗。
2012-2-26 16:59
0
雪    币: 9049
活跃值: (4449)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
158
~~~~~~~~~~~~
2012-2-27 01:02
0
雪    币: 236
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
159
不顶不行啊~!感谢楼主分享
2012-3-7 14:12
0
雪    币: 24
活跃值: (1353)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
160
实在是强大,只有膜拜,老大你是如何练成神功的~~~~~
2012-3-22 21:21
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
161
先支持,再慢慢看。
2012-3-22 21:59
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
162
不得不顶得帖子
2012-4-3 10:52
0
雪    币: 2167
活跃值: (3569)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
163
沉下去了,楼主什么时候要更新,期待中。
2012-7-31 21:20
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
164
这个DLL还没实验过 拿来学习 谢谢
2012-8-2 00:54
0
雪    币: 2219
活跃值: (3281)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
165
看来VMP的时日也无多了
2012-8-3 15:06
0
雪    币: 1579
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
166
楼主这么牛,你叫我这等菜鸟情以何堪。            
2012-8-29 16:29
0
雪    币: 424
活跃值: (992)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
167
可累死了...分析一下用了半小时....

05F340E0   分析虚拟程序,从地址5F340E0开始...
             开始反汇编虚拟程序入口...
             反汇编虚拟程序入口完成
             开始查找初始vEIP...
10032004     初始vEIP(重定位前):10032004
             开始分析初始堆栈...
05F31A3D       vESP+0:重定位=F5F30000
05F31A2E       vESP+4:EFL
05F31A17       vESP+8:EDX
05F31A11       vESP+C:EBP
05F31493       vESP+10:EDI
05F31171       vESP+14:ECX
05F31166       vESP+18:ESI
05F3115B       vESP+1C:EBX
05F31C2E       vESP+20:EBX
05F31C26       vESP+24:EAX
05F340E5       vESP+28:返回地址=5F340EA
05F340E0       vESP+2C:vEIP
             分析初始堆栈完成
             开始反汇编虚拟程序...
             反汇编完成,3个指令块,1034个指令
             开始检查程序结构...
             检查完成,没有错误
             开始分析...
               分析数据...
               分析数据完成
               分析无效指令...
               分析无效指令完成
               化简有效常量12个
               识别无效指令297个
               识别计算常量指令89个
               化简率37.33%
             分析完成
05F340E0   分析虚拟程序完成,用时1596.78秒
2012-11-25 13:03
0
雪    币: 141
活跃值: (318)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
168
原来是这个插件的使用分析,牛逼呀
2013-4-8 23:49
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
169
分析VMP的利器,当强贴出现时,VMP分析又前了一步;个人前进一小步,逆向前进一大步;支持!
2013-8-31 07:50
0
雪    币: 103
活跃值: (126)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
170
非常谢谢 只能说强悍
2013-9-27 13:32
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
171
mark一下。
2013-11-3 15:19
0
游客
登录 | 注册 方可回帖
返回
//