Henry's Blog
  • CobaltStrike系列
    • CobaltStrike的基本操作
    • CobaltStrike会话管理
    • CobaltStrike重定向服务
    • CobaltStrike钓鱼攻击
    • 凭据导出与存储
    • Beacon的常用操作
    • DnsBeacon详解
    • 权限提升
    • 简单的内网信息收集
    • Cross2生成LinuxShell
    • CNA插件开发
    • Profile编写规则
    • BOF开发
    • execute-assembly原理
    • Vps搭建可能遇到的问题
  • OPSEC(免杀)
    • BypassPPL
    • Certutil绕过技巧
    • DLL劫持技术(白+黑)
    • PEB伪装
    • PpidSpoofing
    • Python反序列化免杀
    • WebShell绕过技巧
    • mimikatz免杀
    • 利用CobaltStrikeProfile实现免杀
    • 利用Windows异常机制实现Bypass
    • 削弱WindowsDefender
    • 模拟Powershell实现Bypass
    • 浅谈CobaltStrikeUDRL
    • 添加用户和计划任务(Bypass)
    • 移除NtDll的hook
    • 定位修改MsfShellcode特征码实现免杀
    • 利用COM接口实现进程断链执行.md
    • 免杀工具篇
      • Invoke-Obfuscation
      • Shellter
    • 流量检测逃避
      • CobaltStrike流量逃避.md
      • MSF流量加密.md
      • NC反弹Shell流量加密.md
  • Shellcode加密
    • 前置知识
    • XOR加密
    • AES加密
  • Shellcode加载器
    • 常见的加载方式
    • 分离加载
    • 创建纤程加载
    • 动态调用API加载
    • 基于APC注入加载
    • 基于反调试加载
    • 基于回调函数加载
    • 基于线程池加载
    • 模块踩踏
    • 进程镂空注入(傀儡进程)
    • 反射dll注入(内嵌式)
  • Web渗透
    • 信息收集
    • 各类Webshell
    • 基本漏洞利用
    • 远程命令执行漏洞
    • sql注入
    • sqlmap的使用方法
  • 内网渗透
    • 内网渗透前置知识
    • BadUsb制作
    • Linux反弹Shell总结
    • 内网渗透技术总结
    • 横向移动
      • GoToHttp
      • MS14-068
      • PassTheHash
      • PassTheTicket
      • Psexec
      • RustDesk
      • SMB横移
      • WMI横移
      • 用户枚举与爆破
    • 流量加密
      • CobaltStrike流量加密
      • MsfShell流量加密
      • OpenSSL加密反弹shell
  • 协议分析
    • TCP_IP协议
  • 权限提升
    • 土豆提权原理
    • UAC提权
  • 蓝队技术
    • 应急响应流程总结
  • 进程注入
    • Conhost注入
    • session0注入
    • 内核回调表注入
    • 剪切板注入
  • 逆向技术
    • HOOK技术
    • IDA遇到的坑
    • Shellcode的原理与编写
    • Windbg的使用
    • 使用Stardust框架编写Shellcode
    • PeToShellcode
    • 破解系列
      • PUSH窗体大法
      • VM绕过技巧(易语言)
      • Crackme_1
      • 反破解技术
      • 按钮事件特征码
      • 逆向调试符号
      • 破解实例
        • IDA逆向注册码算法
  • 钓鱼技术
    • Flash网页钓鱼
    • LNK钓鱼
    • 自解压程序加载木马
  • 隧道应用
    • 隧道应用前置知识
    • BurpSuite上游代理
    • DNS隧道传输
    • EarthWorm内网穿透
    • Frp内网穿透
    • ICMP隧道传输
    • MsfPortfwd端口转发
    • Neo-reGeorg内网穿透
    • NetCat工具使用
    • Netsh端口转发
    • SSH端口转发
    • 正向连接与反向连接
  • 基础学习
    • C和C++
      • C++编程
      • C程序设计
    • Linux学习
      • Linux Shell编程
      • linux基础
    • Python基础
      • python之Socket编程
      • python之多线程操作
      • python基础
      • python算法技巧
    • Qt基础
      • Qt笔记
    • 逆向基础
      • PE结构
      • Win32
      • 汇编语言
  • 漏洞复现
    • Web漏洞
      • ApacheShiro反序列化漏洞
    • 系统漏洞
      • Linux漏洞
        • ShellShock(CVE-2014-6271)
  • 靶场系列
    • Web靶场
      • pikachu靶场
      • sqli-labs
      • upload-labs
    • 内网靶场
      • Jarbas靶场
      • SickOS靶场
      • W1R3S靶场
      • prime靶场
      • vulnstack靶场系列一
      • vulnstack靶场系列二
      • vulnstack靶场系列四
  • 代码审计
    • PHP代码审计基础
  • 一些杂七杂八的
    • 开发工具与环境
      • Github的使用
      • JSP环境搭建
      • Pycharm设置代码片段
      • VS2017安装番茄助手(破解版)
      • VisualStudio项目模板的使用
      • WindowsServer搭建IIS环境
      • 安装Scoop
      • c++安装vcpkg
      • dotnet-cnblog的安装与使用
      • gitbook使用教程
      • kali安装burpsuite
      • 配置win2012域服务器
      • VSCode配置MinGW
    • 踩坑记录
      • BurpSuite导入证书
      • Powershell禁止执行脚本
      • centos7没有显示ip
      • kali安装pip2
      • oracle12没有scott用户
由 GitBook 提供支持
在本页
  • 0x1追踪[EBP-4]
  • 介绍
  • 实例
  • 0X2重载内核Dll
  • 介绍
  • 实例
  • 0X3偏移量追钟按钮事件
  • 介绍
  • 实例
  1. 逆向技术
  2. 破解系列

VM绕过技巧(易语言)

上一页PUSH窗体大法下一页Crackme_1

最后更新于1年前

0x1追踪[EBP-4]

介绍

找到按钮事件特征码的位置,可以发现call调用的是[ebp-4]的值的位置,若找到[ebp-4]的值是从哪里来的,就算别人把按钮事件特征码整个给vm掉了,也能追踪到按钮事件特征码

实例

在按钮事件特征码附近有个beginprocessevent函数,在它下面有一个汇编是给将eax的值赋值给[ebp-4],而eax的值是从beginprocessevent函数返回的,当触发按钮操作后,eax的值是不等于0的,所以在下个条件断点

运行程序点击按钮,断点断下来后按enter进入call test.krnln_?BeginProcessEvent@CKrnl>,里面有许多个retn,在每个retn处都下断

点击运行程序,如果不触发按钮事件还能断下来的断点我们直接取消掉,直至找到按钮触发的断点

程序在retn处断下来后查看OD右边的寄存器窗口的eax值,此处eax的值为4010D8

eax的值就是[epb-4]的值,ctrl+G搜eax的值跳转到按钮事件特征码的函数头位置

​

提取retn断点处的特征码用于以后可直接追踪按钮事件特征码

8B 70 04 85 F6 74 4C 8B 54 24 18 85 ED 89 93 E4 01 00 00 74 12 8B C5 5F 89 83 E8 01 00 00 8B C6
5E 5D 5B 59 C2 10 00

​

0X2重载内核Dll

介绍

通常写易语言软件的作者都会将按钮事件特征码整段都给vm掉,但是他们忽略了一个点, 没有把按钮事件特征码其外层的call进行vm, 而这个外层call走的是易语言的内核函数

在按钮事件特征码的call下断点,查看右下角的堆栈窗口可找到外层call

鼠标右键反汇编窗口跟随,找到外层call test.krnln_?Notify@CKrnlApp@@QAEHHK>

进入这个call找到函数头部并提取特征码:64 A1 00 00 00 00 6A FF 68 ?? ?? ?? ?? 50 64 89 25 00 00 00 00 83 EC 10 53 55 8B 6C 24 28

实例

首先准备好易语言的dll文件来用作后续的dll注入,为了识别是否注入成功,这里写了一个信息框

​

将要破解的软件的按钮事件特征码给vm掉

​

将加完vm后的软件拖入OD,使用StrongOD插件注入dll,这里选择远程注入

在代码节搜索前面所记述的特征码,发现有两处,第一个地址为40ee20,第二个地址为9c19a40 ,40ee20是程序本身的,9c19a40是注入的dll的

ctrl+G转到对应的地址,修改其汇编代码,将call 40ee20修改为call 9c19a40

通过查询模块窗口,发现这个9c19a40是在注入的dll的代码段的范围之内,然后双击这个dll进入它的代码段

搜索按钮事件特征码并下断点(其实就是在注入的dll下按钮事件特征码断点)

运行程序点击按钮,发现程序在刚刚下的断点断下了

F7单步步入这个call,这个call的地址就是真正的按钮事件函数,并没有任何的vm痕迹

0X3偏移量追钟按钮事件

介绍

新建一个易语言程序并将其拖入OD打开,二进制搜索FF 25转到易语言体处的第三个jmp下断

然后一路往下跟,跟到calltest.krnln_?LibInitUserProgram,F7进如此call

走到mov eax,dword ptr ds:[___eapp_info],并提取其特征: 55 8B EC 6A FF 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 81 EC AC 01 00 00

将此处的内存地址复制下来,到内存窗口里搜索此地址

在内存窗口找到第二行第四列所对应的地址550370,然后转到此地址处

在内存窗口里往下拉,直至可以看到左边的ascii窗口处有“按钮”字样,其实这是一个结构体,里面有些成员是用于追踪按钮事件的偏移量

怎么知道哪个是偏移量呢?有一个规律05....01....43,这个43就是偏移量,也就是说05...01再往后的值就是偏移量

​

回到反汇编窗口的易语言体处然后往上拉,找到nop下面的反汇编地址,此处地址是4010ac

注意:此处的反汇编代码是不固定的,不一定是pop esi,有时候是push ebp

计算4010ac + 43(偏移量) = 4010EF, 计算出的这个地址就是按钮事件的函数头部

实例

准备好一个vm好了的易语言程序,这里就不演示VM过程了

在OD搜索createwindow然后下断,这一步的操作是为了让vm把壳吐出来

内存中搜索前文所准备好的特征码:55 8B EC 6A FF 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 81 EC AC 01 00 00,找到关键函数地址0x437600

根据前文的讲过的操作寻找到偏移量(过程不演示了),偏移量是B0

转到易语言体的反汇编处往上拉,nop下面的地址是401004,然后加上偏移量等于4010b4,这个地址就是按钮事件函数地址

image-20220821180315681
image-20220821162511719
image-20220821162703429
image-20220821180414811
image-20220821180605123
image-20220821180750504
image-20220821182702777
image-20220821204121034
image-20220821211909354
image-20220821212420520
image-20220821212723579
image-20220821212906329
image-20220821212914802
image-20220821213006366
image-20220821213018357
image-20220821213115214
image-20220821213243057
image-20220821213352760
image-20220821213514880
image-20220821213712457
image-20220821213751434
image-20220821214328818
image-20220821214653031
image-20220821214704562
image-20220821214836942
image-20220821214912864
image-20220821214940838
image-20220821215056436
image-20220821215321282
image-20220821215705379
image-20220821215712677
image-20220821220112480
image-20220821220214020
image-20220821220229144
image-20220821220418276
image-20220821220445522