010Editor(v8.0.1)逆向分析
0x0软件简介
010Editor是一款采用QT界面库编写的,兼容多操作系统的十六进制编辑软件.功能强大,简单易用.0x1逆向环境及工具
系统环境:Window 7 32bit使用工具:OllyDbg,IDA
本次测试版本为官方最新版:
Name:010 Editor for Windows 32-BitVersion: 8.0.1, Windows 10/8/7/Vista/XP/2000
File Size: 14.2 MB

0x2主要算法简述
key的算法可能是有多种,其中第一种有判断中间字符为0x9C的为3个"-"分割,第二种判断0xAC的为4个"-"分割这里只简要说一下第一种
假设key由key0~key7组成,每个代表两个字符
那么key3==0x9C
key4==(byte)Name加密Result[0]
key5==(byte)Name加密Result[1]
key6==(byte)Name加密Result[2]
key7==(byte)Name加密Result[3]
(((key0^key6) ^ 0x18) + 0x3D) ^ 0xA7 != 0;(0x18B)
(((((key2^key5)+(key1^key7*0x100))^0x7892)+0x4D30)^0x3421)/0xB == Quotient(整除0xB的商,必须小于0x3E8)
附一组可用key
Name:Hades
Password:6DFE-9C9C-7271-9A65
0x3主要逻辑逆向
使用OD和IDA动态调试和静态分析结合.分析如下关键的两个算法函数(IDA中可用字符串引用定位,OD中可下断password错误的创建窗口一点点的找到)

在OD中下断在两个函数处
(通过计算偏移可以得到,也可以使用栈回溯办法定位到)

其中sub_409C9B函数中调用了sub_40A826函数.其中判断sub_40A826函数返回值为2D才为注册成功跳转
sub_409C9B函数中调用sub_40A826函数并对比其返回值是0x2D还是其他错误值

sub_40A826函数中的转换与算法
Name转换为Byte数组

输入的Name和Password(看到后边有判断9C的地方,特意把中间key改成了9C)

判断序列号某一组是不是9C

部分key加密的部分

计算序列号第1个与第7个的结果,函数

判断整除0xB的函数

加密Name,然后对比其中的几位序列号

加密Name的CALL 010Editor.01372E50函数的过程.

OD中动态调试其Name加密过程,得知0x3DD4148处是一个加密key用到的加密秘钥数组

整个加密key数组如下:

sub_40A826函数赋值并返回0x2D

sub_409C9B函数返回0xDB后表示成功:

另:继续使用的跳转:
这两处关键跳转,更改这两处跳转可以继续使用软件


完成注册机的编写
注册机程序源码:

测试注册效果


PS:010Editor也有简单的网络验证的,key可能过段时间不能用了,就是被检测到了,过掉网络验证也很简单,不在具体写了.