能力值:
( LV2,RANK:10 )
|
-
-
26 楼
虽然写的比较细了,无法学习,只能膜拜
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
膜拜,今天上班还能看到这样的好东东,mark
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
一键还原成 右边的注释就好了 那VMP就真的拜拜了 楼主太强悍
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
顶大牛!!!!
顶大牛!!!!
顶大牛!!!!
顶大牛!!!!
顶大牛!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
MARK
。
|
能力值:
( LV9,RANK:156 )
|
-
-
31 楼
先膜拜后学习。
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
问一下楼主,这个神器可以分析VMP的SDK吗?
|
能力值:
( LV8,RANK:130 )
|
-
-
33 楼
可以,这个CrackMe里调用了4个SDK函数,VMProtectIsDebuggerPresent、VMProtectIsVirtualMachinePresent、VMProtectIsValidImageCRC、VMProtectDecryptStringA,分别是检测调试器、检测虚拟机、检测文件改变、解密字符串。其他的没试过,应该也可以的,SDK就是一段虚拟程序,跟其他的好像没什么区别。
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
爆句粗话 很好很强大
|
能力值:
( LV2,RANK:10 )
|
-
-
35 楼
这个必须膜拜。。。。。。。。
|
能力值:
( LV12,RANK:980 )
|
-
-
36 楼
发重复了。纠正一下。
|
能力值:
( LV12,RANK:980 )
|
-
-
37 楼
我看到一个VMP的程序,貌似里面有以下4个API,不知是不是SDK。另外,不知道SDK的API直接RET如何操作,请楼主再指点一二。
0053227C 硬件断点 1 位于 terminal.0053227C
[ebp]: 76A47E1A | kernel32.IsDebuggerPresent
0053227C 硬件断点 1 位于 terminal.0053227C
[ebp]: 76A3504E | kernel32.CheckRemoteDebuggerPresent
0053227C 硬件断点 1 位于 terminal.0053227C
[ebp]: 76A60651 | kernel32.UnhandledExceptionFilter
0053227C 硬件断点 1 位于 terminal.0053227C
[ebp]: 77546048 | ntdll.ZwQueryInformationProcess
|
能力值:
( LV8,RANK:130 )
|
-
-
38 楼
[QUOTE=csjwaman;1145506]我看到一个VMP的程序,貌似里面有以下4个API,不知是不是SDK。另外,不知道SDK的API直接RET如何操作,请楼主再指点一二。
0053227C 硬件断点 1 位于 terminal.0053227C
[ebp]: 76A47E1A | kernel32.Is...[/QUOTE]
VMP的反调试确实有这几个API,入口的调试器检测和VMProtectIsDebuggerPresent中的方法是一样的。如果调用API时文件还没有解压,可能是入口的检查,否则应该是SDK,当然也有可能是用户自己加的。如果只是想过反调试的话,直接用StrongOD插件就行了,我是为了脱壳时不用填充这些API地址才修改的SDK。
我的方法是在SDK的入口直接退出虚拟机,先要找到入口,如果中断在API的话可以在返回到的地址选择分析虚拟机,选中进入虚拟机时中断,进入虚拟机调试状态后一直Ctrl+F9直到正常代码(不包括调用),往前一点就应该是进入虚拟机的位置,在这里分析虚拟程序。如果SDK是虚拟机中调用的就跟进去找虚拟机内调用,SDK中有一些很明显的特点比如使用vCall指令调用API等,普通程序中没有这些。找到入口后就可以让他在做检测之前退出虚拟机,方法这篇教程里讲过了,在最后脱壳的地方,这里再说一下。
VMP在进入虚拟机后会把堆栈中的初始数据弹出,退出虚拟机前把真实寄存器压栈,vRet负责恢复。所以我们要找到初始数据全部被弹出(堆栈长度为0)的地方,按顺序压入真实寄存器对应的数据,然后用vRet退出虚拟机就行了,注意EAX的返回值要正确。
|
能力值:
( LV2,RANK:10 )
|
-
-
39 楼
实在太精彩了
|
能力值:
( LV12,RANK:980 )
|
-
-
40 楼
感谢回复。这几个API是在脱壳后,使用某些功能时才调用的。 这几个API没有放在输入表中,估计是LocalAlooc时放入的。应该是反DUMP的手段吧。不知也可以直接RET不?
|
能力值:
( LV5,RANK:60 )
|
-
-
41 楼
会火~~~~~~~~~~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
lz太强了,文章有点长,留着慢慢看
|
能力值:
( LV8,RANK:130 )
|
-
-
43 楼
脱壳后还能调用,说明脱壳后的程序中还有这些API的地址,一般SDK中使用的API地址都是加密后放在动态分配的内存中的,DUMP时应该保存不下来。如果想脱壳后去掉这些API调用的话,在SDK做任何事之前退出虚拟机就行了,就像我前面说过的。
|
能力值:
( LV12,RANK:980 )
|
-
-
44 楼
非常感谢,继续研究!
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
看的好晕,要是有个视频配着这文字说明就好了。插件反汇编窗口右键查看- 注释 表达式 引用数据 产生数据 怎么都没有显示呢?
|
能力值:
( LV8,RANK:130 )
|
-
-
46 楼
这些东西要分析后才能显示的,你是不是反汇编后没有分析啊,选中菜单里的反汇编后自动分析试试,或者按Ctrl+A手工启动分析。
|
能力值:
( LV2,RANK:10 )
|
-
-
47 楼
楼主精神可嘉,膜拜,必须地
|
能力值:
( LV2,RANK:10 )
|
-
-
48 楼
所有的全选上了,遇到临时指令块。是没有分析数据的。怎么分析这个所谓的临时指令块呢。进入临时指令块后,按ctrl+A没什么用啊!
|
能力值:
( LV8,RANK:130 )
|
-
-
49 楼
临时指令块是调试过程中遇到没有分析过的代码时从中断的vEIP临时反汇编的,不是完整的虚拟程序,所以不能分析,一般是启用进入虚拟机时中断后中断到没有分析过的代码里。想分析的话有两种方法,第一个是数据窗口中跟随当前vEIP,右键菜单里选分析虚拟程序,需要填写虚拟机指令表地址,这种方法不能分析初始化部分,而且当前vEIP不是指令块的第一条指令的话还有可能分析失败。另一种是找到虚拟程序入口再分析,这是比较好的方法,可以先执行到返回,直到退出虚拟机(不包括调用时的退出),前面应该就是调用虚拟机的地方。
|
能力值:
( LV4,RANK:50 )
|
-
-
50 楼
神帖~~神帖~~神帖~~神帖~~神帖~~
|
|
|