外贸网站推广技巧,要钱吗,优化优化,旅游公司网站建设pptSublime Text4 crack时替换的汇编指令
首先请支持正版#xff0c;这里研究破解的步骤#xff0c;仅做汇编代码学习。
破解步骤很简单#xff1a; 打开二进制文件#xff0c; 搜索 80 78 05 00 0F 94 C1#xff0c; 替换为 C6 40 05 01 48 85 C9.
(源: https://gist.git…
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_id4366207)
替换的神奇数字含义是怎样的 查询 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 [rax0x5],0x0 // if (data[5] 0)
4: 0f 94 c1 sete cl // cl 1// else cl0C6 40 05 01 48 85 C9 // char data[10]
0: c6 40 05 01 mov BYTE PTR [rax0x5],0x1 // data[5] 1
4: 48 85 c9 test rcx,rcxsete 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, [r150x498]
xor ecx, ecx
cmp byte [rax5], 0 //
sete cl //
lea edx, [rcxrcx]
cmp byte [rax4], 0
...可以看到 在 cmp byte [rax5], 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 破解