欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

检测手段

检测手段

这个帖子拖这么长 代码估计是不发了 来更新上一些理论知识
我的帖子怎么沉这么深了 给我起来!!^_^
加点东西
跳过了N多的指令 一下的所有记录都将是跳跃式的 一切初始化、计算、移动等无聊部分都被略过 当然如果关键操作 而我也没有看到的也将被跳过 将就着看吧VM_MOVdw_[EBP]_EBP+4这是一条跨堆栈的指令,他可以把数据随意的存到其他地方,VM就是用这条指令把下面的DLL的名字存入到EBPSTACK下面的堆栈中,下面的堆栈空间被当做是一个字符串存储的数据空间
CPU Stack
Locked    Value      ASCII Comments
0013F790   7C80B741  A|    ; kernel32.GetModuleHandleA
0013F794   0013FF8C  .    ; ASCII "SbieDll.dll"
VM_APIJMP_EBPSTACK
;这个指令首先给ECX放入API参数的个数,循环读取参数,最后跳转进系统空间
;第一个APIJMP检测的是 沙盘(sandboxie) 我没有用沙盘
;跳转地址:004363EA
;解码出第二个要检测的函数kernel32.IsDebuggerPresent
;还有一个地址0013F6C8   004393BC  C.    ; Entry point of procedure
CPU Stack
Locked    Value      ASCII  Comments
0013F698   7C813133  31|    ; kernel32.IsDebuggerPresent
;下一个要检测的是IsDebuggerPresent函数,但是在进入之前,先来一个CC码检测,看看有没有下断
CPU Stack
Locked    Value      ASCII  Comments
0013F790   3133
0013F794   00CC7C81  |.
VM_EBPSTACKw_MEMb
0013F794   00CC0064  d..
;接下来就是一系列的检查和比较跳转 这里不再复述
;我肯定是没有下断点洒 最后计算好、解密完的地址是0043C2D4
VM_JMP          ;走起
0013F698   7C813133  31|    ; kernel32.IsDebuggerPresent
VM_APIJMP_EBPSTACK
;这里就直接该返回值了,返回值肯定是1洒,毫不犹豫的改为0
;接着就是检测返回值了 毫无疑问 VM检测不出来^_^
;最后的比较跳转地址:0043929C
VM_JMP          ;走起
0013F794   7C85AAF2  |      ; kernel32.CheckRemoteDebuggerPresent
;我们的第三位登场的角色就是它了
VM_JMP          ;走起
;CC码检测是必须的
VM_EBPSTACKw_MEMb
0013F794   00CC008B  ..
;最后的比较+跳转时刻的堆栈图:
0013F780   FFBF
0013F784   FD6CFFFF  l
0013F788   0004FFFF  .
0013F78C   0013F790  .
0013F790   7681CB89  v
0013F794   768003D3  v
;我肯定是没有下断点洒 最后计算好、解密完的地址是0043A82B
VM_JMP          ;走起
0013F78C   7C85AAF2  |     ; kernel32.CheckRemoteDebuggerPresent
0013F790   FFFFFFFF
0013F794   0013FF98  .
VM_APIJMP_EBPSTACK      ;执行去了
;返回值修改为0
;接着还是一系列的比较,ZF位检测,最后的跳转地址:00428F50
;我们如果不修改,被查到你开了调试器,跑去了另外一路的结局就是:
0013F794   00423E60  `>B.   ; ASCII "A debugger has been found running in your system.
Please, unload it from memory and restart your program."
VM_APIJMP_EBPSTACK
0013F788   7C80B56F  o|     ; kernel32.GetModuleFileNameA
0013F78C   00400000  ..@.   ; OFFSET NOTEPAD
;最后的结局就是消息框里“嘣”的弹出上面的话给你
VM_JMP          ;走起
0013F794   7C809BE7  |     ; kernel32.CloseHandle
;下一个是这位
0013F784   7C809BE7  |     ; kernel32.CloseHandle
0013F788   DEADC0DE          ;这叫什么东西!
0013F78C   0013FFE0  .     ; Pointer to next SEH record
0013F790   00427A04  zB.   ; SE handler
0013F794   0013FF98  .
VM_APIJMP_EBPSTACK          ;执行
;返回为0 也不用去异常 这是一个关闭无效句柄的检测 DEADCODE本身就不是什么东西
;跳转地址:0042357C
VM_JMP          ;走起
;这次去的地方并不是新的函数,而是释放掉在CloseHandle函数那里构建的SEH
0013F794   7C863FCA  ?|     ; kernel32.UnhandledExceptionFilter
;首先依然是检测CC码,跳转地址:00422E3E
VM_JMP          ;走起
0013F794   7C809BE7  |     ; kernel32.CloseHandle
;这个也一起出现,跳转地址:004262DC
VM_JMP          ;走起
0013F76C   0013FF8C  .     ; ASCII "sice.sys"
;这个也出现,跳转地址:00422D4C
VM_JMP          ;走起
0013F794   0013FF8C  .     ; ASCII "siwvid.sys"
;字符串进一步解码为这个
0013F790   00425E64  d^B.
0013F794   0013FF8C  .     ; ASCII "siwvid.sys"
VM_APIJMP_EBPSTACK
;命名的有点问题,这个handler并不只是可以跳去API,它是有一个分支的,这里它就跳去了一个VM的call里
;SoftIce都停止开发了,我也没有用洒,不怕它检测
0013F634   7C92D92E  .|    ; ntdll.NtQuerySystemInformation
;呼呼 好绕呀,最后进入的是这个函数
;跳转地址:0042357C 
VM_JMP          ;走起
;跳转地址:00426071 我晕 我想不起我装了SoftIce的,让我们重新来过,这里过去就灭了
VM_JMP          ;走起

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功