010 Editor 是一款专业的文本编辑器和十六进制编辑器,旨在快速轻松地编辑计算机上任何文件的内容。该软件可以编辑文本文件,包括 Unicode 文件、批处理文件、C/C++、XML 等,但 010 Editor 擅长的地方在于编辑二进制文件。二进制文件是计算机可读但人类不可读的文件(如果在文本编辑器中打开,二进制文件将显示为乱码)。十六进制编辑器是一个程序,允许您查看和编辑二进制文件的各个字节,包括 010 编辑器在内的高级十六进制编辑器还允许您编辑硬盘驱动器、软盘驱动器、内存密钥、闪存驱动器、CD-ROM、 流程等。
官网地址:https://www.sweetscape.com/010editor/
在软件逆向破解的过程中,OD暴力破解是比较有效的方式,通过修改jcc指令或者nop掉一些跳转让程序按照正确的流程走下去。
主要流程大概是:1、寻找关键函数;2、分析整体流程;3、修改程序验证逻辑。
本次测试的010 editor版本为v13.0
首先查壳
既然无壳那就直接上OD
首先我们要找到注册的函数,首次下载010 editor可以试用30天,点击注册按钮
程序会让输入用户名和注册码,随便输入试试
程序会提示无效的用户名和密码,可以根据程序提示的内容来找到对应的函数
通过OD的中文搜索引擎-智能搜索功能查找对应字符串
找到对应的字符串,跟进函数
跟进后可以看到,程序执行到输出无效的用户名和密码处,是通过一个跳转到该位置的,继续往上跟看看是那个地方跳转
发现是从0x0144B62A
位置处跳转过来的,这样的话是否可以直接修改jcc执行来让程序不跳转呢
改成je试下,改成je后发现不对,程序会执行到0x0144B6C6
的位置,提示 Password accepted but the trial period is already over
,那么就继续往上跟踪
在跳转前边有三个cmp指令,其中0x0144B60D
是从0x0144B4E2
处跳转来的
在0x0144B4E2
处下断点调试一下
在这里发现0x0144B51D
的位置会输出Password accepted
,所以这里把jnz改成je或者nop掉就可以了
保存出来看一下
可以看到输入任意的内容已经激活成功,但是这样的话每次打开都需要点击一下check license,那么继续看看能不能让程序直接打开。
首先来梳理一下正常的逻辑程序是怎么运行的:首先在0x0030B3FC
的位置处EAX和0xE7进行比较,此时EAX的值为0xE7,所以je跳转成立,程序运行到0x0030B4DC
处,cmp ebx,0xDB
,这时候EBX的值为0x177,jnz不等于则跳转,所以此时跳转成立,跳转到0x0030B60D
的位置处,这个时候程序已经跳过了验证成功的地方,继续执行,有三个cmp语句后跟jcc跳转指令,cmp ebx,0xED
和cmp ebx,0x20C
,这时EBX的值还是0x177,所以两个je都没有跳转,运行到第三个cmp指令cmp eax,0x93
的位置,EAX此时的值为0xE7,这里是jnz指令所以跳转成功,跳转到0x0030B6E8
的位置,输出无效的用户名密码,验证函数到此结束。
通过上面的分析当EBX等于0xDB的时候程序才会走到验证成功的位置,也就是说想要程序不每次运行都弹验证框,需要直接将0xDB赋给EBX
返回到0x0030B3FC
的位置继续往上跟踪可以看到EBX的值就是EAX的值,所以需要将0xDB赋给EAX,那么需要继续跟踪看看EAX的值是谁赋给的,在0x0030B3E9
的位置处下断点,F8执行,发现在执行call 0x0013808A
的时候EAX的值发生了变化,所以直接跟进call里面
在开头直接给EAX赋值,mov eax,0x2d retn 0x8
最后把程序dump出来,发现程序直接打开就能使用了也不用每次都点击验证了。
其实010 editor对于新手逆向来说还是挺友好的,没有加壳,然后整个函数的逻辑也算比较清晰,更改起来也很简单,以后有时间的还是要研究一下注册验证的算法,然后写个注册机出来。
参考文章:逆向分析商业软件 010 Editor 及注册机编写
E
N
D
本文作者:TideSec
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/192246.html