逆向分析010 editor

2022-11-25 11:45:30 Author: www.secpulse.com(查看原文) 阅读量:28 收藏

0x01 什么是010 editor

010 Editor 是一款专业的文本编辑器和十六进制编辑器,旨在快速轻松地编辑计算机上任何文件的内容。该软件可以编辑文本文件,包括 Unicode 文件、批处理文件、C/C++、XML 等,但 010 Editor 擅长的地方在于编辑二进制文件。二进制文件是计算机可读但人类不可读的文件(如果在文本编辑器中打开,二进制文件将显示为乱码)。十六进制编辑器是一个程序,允许您查看和编辑二进制文件的各个字节,包括 010 编辑器在内的高级十六进制编辑器还允许您编辑硬盘驱动器、软盘驱动器、内存密钥、闪存驱动器、CD-ROM、 流程等。

官网地址:https://www.sweetscape.com/010editor/

0x02 OD暴力破解

在软件逆向破解的过程中,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,0xEDcmp 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出来,发现程序直接打开就能使用了也不用每次都点击验证了。

0x03 总结

其实010 editor对于新手逆向来说还是挺友好的,没有加壳,然后整个函数的逻辑也算比较清晰,更改起来也很简单,以后有时间的还是要研究一下注册验证的算法,然后写个注册机出来。

参考文章:逆向分析商业软件 010 Editor 及注册机编写

E

N

D

本文作者:TideSec

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/192246.html


文章来源: https://www.secpulse.com/archives/192246.html
如有侵权请联系:admin#unsafe.sh