当前位置: 首页 > news >正文

Sublime Text4 crack时替换的汇编指令

在这里插入图片描述

Sublime Text4 crack时替换的汇编指令

首先请支持正版,这里研究破解的步骤,仅做汇编代码学习。

破解步骤很简单: 打开二进制文件, 搜索 80 78 05 00 0F 94 C1, 替换为 C6 40 05 01 48 85 C9.

(源: https://gist.github.com/skoqaq/3f3e8f28e23c881143cef9cf49d821ff?permalink_comment_id=4366207)

替换的神奇数字,含义是怎样的? 查询 https://defuse.ca/online-x86-assembler.htm#disassembly2 :

80 78 05 00 0F 94 C1                                            // char data[10]
0:  80 78 05 00             cmp    BYTE PTR [rax+0x5],0x0       // if (data[5] == 0)
4:  0f 94 c1                sete   cl                           //    cl = 1// else cl=0
C6 40 05 01 48 85 C9                                        // char data[10]
0:  c6 40 05 01             mov    BYTE PTR [rax+0x5],0x1   // data[5] = 1
4:  48 85 c9                test   rcx,rcx

sete cl: sete 是 Set Byte On Condition 的缩写。

如果零标志被设置(即上一条比较或算术指令的结果为零),那么 sete 指令会将目标操作数设置为 1,否则设置为 0。

或者这样理解:根据ZF标志位的值,设置一个变量的值为1或0. 如果ZF为1,则CL为1,否则CL为0.

在x86_64架构的指令集中, CL是一个8位的寄存器,通常用于计数、控制循环和字符串的操作等。其中在字符串操作中, CL 可以用来存储字符串的长度。

char data[10]: 这里是随便写的,不确定。

使用 edb 检查汇编代码呢?

sudo apt-get install libcapstone-dev
git clone https://github.com/eteran/edb-debugger
cd edb-debugger
git submodule update --init --recursive
cmake -S . -B build && cmake --build build
cd build
./edb /opt/sublime_text/sublime_text_copy2

搜索 80 78 05 00 0F 94 C1, 发现了地址是 0x00564f:81e70f39, 调转到地址查看对应汇编代码:

...
mov r14, rax
mov rax, [r15+0x498]
xor ecx, ecx
cmp byte [rax+5], 0     //
sete cl                 //
lea edx, [rcx+rcx]
cmp byte [rax+4], 0
...

可以看到, 在 cmp byte [rax+5], 0 这行之前, 执行了 xor ecx, ecx, 也就是说 ecx 寄存器现在为0.

因此, 破解后的做法, 是保持了 ecx 寄存器为0, 因而 cl 也是0; 进一步的, test rcx, rcx 使得 ZF 为1.
在这里插入图片描述

由于难度问题,暂时搁置分析:

  • sublime_text 可执行程序,并没有符号信息, gdb 查看不到符号(函数名字),没法用前面几篇中使用 gdb 练习到的技能继续分析
  • 觉得 IDA Pro 或 Ghidra 过于庞大, 即使是 edb, 也不太会用

贴两篇前人的分析文章,有缘人可以参考:

  • [Windows]Sublime Text 4143注册分析
  • Sublime Text 破解

相关文章:

  • 时间戳的大小写的坑
  • 深入理解 Flink(五)Flink Standalone 集群启动源码剖析
  • 逻辑回归(解决分类问题)
  • 通过Wireshark抓包分析谈谈DNS域名解析的那些事儿
  • 通过开源端点可见性改善网络安全响应
  • 【React 常用的 TS 类型】持续更新
  • 树莓派4B-Python-使用PCA9685控制舵机云台+跟随人脸转动
  • QT笔记 - 添加项目到版本控制系统 - Git
  • mysql原理--redo日志2
  • 2024,会更好嘛?
  • golang学习-流程控制
  • Golang+Gorm库使用踩坑——未标识primarykey导致创建后无法返回修改
  • 大白菜U盘安装系统-戴尔电脑
  • 【JVM 基础】类字节码详解
  • SwiftUI CoreData Picker
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【RocksDB】TransactionDB源码分析
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • extract-text-webpack-plugin用法
  • Java面向对象及其三大特征
  • PaddlePaddle-GitHub的正确打开姿势
  • SpringCloud集成分布式事务LCN (一)
  • SwizzleMethod 黑魔法
  • 爱情 北京女病人
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 入门到放弃node系列之Hello Word篇
  • 使用parted解决大于2T的磁盘分区
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 线上 python http server profile 实践
  • 1.Ext JS 建立web开发工程
  • ​io --- 处理流的核心工具​
  • ​人工智能书单(数学基础篇)
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #DBA杂记1
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (30)数组元素和与数字和的绝对差
  • (function(){})()的分步解析
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)c52学习之旅-点亮LED灯
  • (十)T检验-第一部分
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转) 深度模型优化性能 调参
  • (转)大道至简,职场上做人做事做管理
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .axf 转化 .bin文件 的方法
  • .NET Core 中的路径问题
  • .Net Core和.Net Standard直观理解
  • .net framework4与其client profile版本的区别
  • .NET多线程执行函数
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • @31省区市高考时间表来了,祝考试成功