使用的软件:
- x64dbg
前言
实际网络上已有不少以010Editor为目标的破解文章,过往基于旧版本的010Edirot进行的破解迄今在新版本中也能窥见类似的指令段,破解思路也大同小异,甚至存在修改host在本地搭建web服务模拟服务端返回激活请求的破解案例。本文使用程序逆向方法仅作为个人学习记录,如你认为本文存在问题或有更好的建议可以留言提交你的看法。
文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
1.前期准备
应用官网:https://www.sweetscape.com/010editor/

我这边选择以64位版本作为对象,版本是目前官方的最新版本V15.0.1(2024/11/06)
正常安装完成后打开主程序EXE文件

首次安装程序有30天的试用时间,当试用结束后会提醒进行激活注册

输入后点击“Activate License”如输入错误就会提示如下的信息,激活失败

2.破解思路
- 跳过或删除判断和跳转指令
- 跳过或删除激活弹窗
- 分析注册码生成算法编写注册机
能力原因暂不对注册码生成算法和注册机进行说明,等再精进一些或许会有后续,也许...
3.实际分析
通过字符串搜索“Invalid name or license”,也就是注册失败的提示消息,通过消息定位判断指令是很常见的方法,当然如果是相对大型支持多语言的程序可能会根据消息编码调用对应的语言包内容,这种时候这个方式并不一定能够检索到相关信息

找到一条字符串信息正好对应注册失败的消息,我们可以在这打以个断点,运行程序随便输入Name和License,点击“Activate License”到达“00007FF7922A70B0”

继续运行到“00007FF7922A70CA”位置,此处弹出注册失败消息

判断并不在该位置,向上翻阅寻找跳转入口
在向上翻阅的过程中发现00007FF7922A6F1C,将一段疑似注册成功的字符串传入RDX寄存器

继续向上翻,在“00007FF7922A6E29”位置存在一个判断对比ebx寄存器中的值和DB这个常数,如果不相等(即EBX-DB == 0)即ZF标识位为0。jne指令会判断ZF标识位是否为1,与前面的cmp ebx,DB结合起来就是判断EBX是否和DB相等,相等则继续运行,反正跳转
可以观察到跳转的目标地址为00007FF7922A6FBD,而刚刚我们发现的疑似注册成功的代码段在00007FF7922A6F1C,可以大概判断这个位置执行的是注册成功后需要执行的代码段。在00007FF7922A6E29下个断点

为了验证我们刚刚的猜想,可以让jne不执行跳转,顺序执行下方代码段看对最中结果有什么影响。
我们知道jne指令不跳转条件是 ZF标志位 == 1,所以其中一种方式就是当cmp执行后修改ZF标志位的值为1
重新运行程序,触发断点,我们修改ZF标志位的值可以看到jne处将不会跳转

运行程序显示注册成功并进入程序,刚刚的猜想大致是正确的


但是不可能每次启动都进入x64dbg修改ZF标志位,这里我们还有一种粗暴的办法,就是直接用NOP指令代替jne跳转指令,让其不会进行跳转

然后我们可以保存一个修补(010Editor_Fix_01)导出看看

运行修补版本

随便输入Name和License点击Acitivate License可以看到依然显示注册成功并跳转到主页面

但实际上这种方式在每次启动程序时,都会弹出注册页面,需要每次都点一次Activate License
实际上我们可以尝试寻找定位到弹出该窗口的函数位置,然后故技重施将其NOP掉(该方法可能造成程序错误,并非所有程序通用)
可以尝试搜索窗口内的字符串,比如这个Activate License

运气很好有一个类似的,在00007FF7922A6686位置,在这下一个断点

运行程序然后步进,当步进到00007FF7924AB38A时,call一个函数位置,并弹出注册窗口

尝试NOP掉它

运行后程序正常进入主页面,按照上述同样的操作生成一个修补(010Editor_Fix_02)
正常运行,直接跳过注册页面进入主页,破解成功,功能正常

上述破解版下载地址:
Comments NOTHING