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 :

bash 复制代码
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
bash 复制代码
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 检查汇编代码呢?

bash 复制代码
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, 调转到地址查看对应汇编代码:

bash 复制代码
...
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, 也不太会用

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

相关推荐
星栖与芯2 小时前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
xx~t15 小时前
嵌入式——ARM——汇编2
linux·汇编·arm开发·嵌入式硬件·启动代码
祖力5517 小时前
ARM汇编LED实验
汇编·arm·imx6ull
索端阳1 天前
ARM Day02 学习总结:ARM汇编基础核心知识点梳理
汇编·学习·arm
xx~t2 天前
嵌入式——ARM——汇编1
linux·汇编·arm开发·嵌入式硬件·arm
索端阳2 天前
初识 ARM Cortex-A7,嵌入式底层入门总结
汇编·嵌入式硬件
ThornArmor3 天前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
星栖与芯3 天前
LiteOS-M 切换汇编逐行图解(1):汇编是什么·寄存器与栈
汇编·stm32·嵌入式硬件·harmonyos·鸿蒙系统
yume_sibai4 天前
11-Rust 不安全编程(unsafe 关键字 + 裸指针 + FFI + 内联汇编 + 内存安全保证)
汇编·安全·rust
小杨不想秃头6 天前
信息安全工程师 历年真题原题汇编(2016–2025)
汇编