【破解】010editor9.0.2 64位注册破解

    逆向 lz520520 5年前 (2019-10-06) 937次浏览

    0x00 前言

    emmm,做这个破解主要是因为我自己的010editor因为升级更新,然后授权过期了,现在没法用了,本来想找注册机但发现网上有破解文章,就学习下破解过程。网上针对32位 V9.0的暴力破解,直接修改序列号算法返回值绕过校验,我这里把64位 V9.0.2的也测试了下,可以达到同样的效果,自己动手可以更好的理解这个破解过程,参考文章中可能有些细节没说到,我这里自己动手破解,就把一些细节写一下,文章链接放到最后面。

    0x01 破解

    这个其实和32位一样的,QT库,VS2103编译,没壳。

    【破解】010editor9.0.2 64位注册破解

     

    打开editor输入任意序列号,可以看到弹窗,我们根据弹窗内容去调试器里搜索即可。

    【破解】010editor9.0.2 64位注册破解

     

     

     

    因为是64位,OD用不了,这里用的是x64_dbg,这软件开源的,网上去官网就可以下载了。

    010editor拖进去会发现断在ntdll.dll里,并不是主程序入口。

    【破解】010editor9.0.2 64位注册破解

     

     

    这里点运行会因为 int 3中断再次断在010editor主程序入口

    【破解】010editor9.0.2 64位注册破解

     

     

    右键菜单-搜索-当前模块-字符串,来查找我们刚才注册失败的字符串。

    【破解】010editor9.0.2 64位注册破解

     

     

    可确实过滤到指定字符串,我们跳转到字符串调用位置

     

    【破解】010editor9.0.2 64位注册破解

     

     

    【破解】010editor9.0.2 64位注册破解

     

     

    从该处我们往上翻,其实可以找到一处字符串提示Password Accepted,可能是注册成功的字符串。内存地址为00007FF791227BF2。

    【破解】010editor9.0.2 64位注册破解

     

    为了确定跳转到该处的程序逻辑,我这里使用了IDA来查看,比较直观。

    这里我们很直观的看到,如果要跳转到该处,需要先通过一个cmp比较ebx是否等于DBh,相等才跳转,可以猜测DB是序列号校验正确的一个参数。那么如果我们将该处设置为恒等即可暴力破解。

    【破解】010editor9.0.2 64位注册破解

     

     

     

    对应到x64dbg里,这里我尝试将jne nop掉,让他无法跳转到注册失败的地方。

    【破解】010editor9.0.2 64位注册破解

     

    右键菜单-二进制-用NOP填充

    【破解】010editor9.0.2 64位注册破解

     

    NOP后如下图

    【破解】010editor9.0.2 64位注册破解

     

    最后右键菜单-补丁,将修改保存。

    【破解】010editor9.0.2 64位注册破解

     

    修补文件

     

    【破解】010editor9.0.2 64位注册破解

     

     

    点击010editor_patched.exe,弹出注册页面,但填入任意注册码,都提示Password accessted,成功绕过注册使用软件。

    【破解】010editor9.0.2 64位注册破解

     

    【破解】010editor9.0.2 64位注册破解

     

     

    其实到这里算是破解成功了,但每次会有注册弹窗,根据参考文章,可以去除注册弹窗,完美破解。

     

    有几处跳转到cmp ebx,0DBh ,往上可看到一个cmp esi,0E7h,而esi的值通过调用sub_140003F99,将返回值eax赋给esi得到的。如果esi等于0E7,就会进一步比较 ebx,0DB。

    【破解】010editor9.0.2 64位注册破解

     

     

    尝试运行010editor,并输入任意注册码,上述函数的返回值,如图RAX,为E7h,说明无效注册码,该函数均会返回E7h。

    【破解】010editor9.0.2 64位注册破解

     

    并且还会看到,cmp ebx,0DBh,ebx的值来自sub_14000A565的返回值eax,并且sub_14000A565在图中看到附近调用了两次,均将返回值和0DB比较。该函数可能是检测注册是否成功的关键函数,修改函数名为 lzcheckRegCode。

    【破解】010editor9.0.2 64位注册破解

     

     

    查看lzcheckRegCode的交叉引用,可以发现有多处调用

    【破解】010editor9.0.2 64位注册破解

     

    并且会发现其他地方的调用也是会比较返回值是否等于0DB,进一步确认可能真的为注册检测函数。

    【破解】010editor9.0.2 64位注册破解

     

     

     

    我们进入lzcheckRegCode函数,分析函数,会发现最后eax赋值为0DBh之前,先要调用一个sub_140003F99,判断返回值eax是否等于2Dh,相等才将eax赋值为0DBh,从而注册成功。而这个sub_140003F99正是之前提到的用于和E7h比较。

    【破解】010editor9.0.2 64位注册破解

     

    PS:这里提一句,010editor的函数调用为间接调用,调用函数会跳转到一个函数表,然后在jmp到真正的函数。

    【破解】010editor9.0.2 64位注册破解

     

     

    我们查看sub_140003F99,该函数会有一系列判断以及异或、移位运算,很可能就是序列号算法函数。根据上面的分析,如果等于E7h会直接进入注册检测,等于2Dh,则表示注册成功,那么在第一次调用该算法函数时,返回值直接为2Dh,是否就可以直接跳过输入注册码验证的步骤。

    【破解】010editor9.0.2 64位注册破解

     

     

    这种算法函数能暴力修改返回值就没必要分析逻辑了。在函数最后会将ebx赋值为2Dh或者其他值,然后mov给eax,或者直接赋值eax为0E7h等。无需关注之前的,我们通过x64dbg修改返回值。

    【破解】010editor9.0.2 64位注册破解

     

     

    最后修改如下。我们再次进行补丁保存。

    【破解】010editor9.0.2 64位注册破解

     

    运行010editor_patched.exe,发现不会再弹注册窗口,直接进入 软件,完美破解。

     

     

    emmm,刚破解完两天,发现补丁失效了,看提示应该是进行了网络验证,因为提示我输入的序列号是无效的,但我序列号校验函数已经bypass了,应该不是本地校验的。

    【破解】010editor9.0.2 64位注册破解

     

     

     

    根据提示发现字符串在IDA里查找

    【破解】010editor9.0.2 64位注册破解

     

     

    往上翻会发现是之前注册校验的一个分支条件跳转。

    【破解】010editor9.0.2 64位注册破解

     

     

    仔细观察条件判断,发现一共是三个分支,第三个进行注册校验。

    【破解】010editor9.0.2 64位注册破解

     

     

     

    根据第一个分支条件提示,这个分支应该是判断网络不通。

    【破解】010editor9.0.2 64位注册破解

     

     

    而第二个分支应该是判断网络校验失败

    【破解】010editor9.0.2 64位注册破解

     

     

     

    为了让网络校验bypass,最终这里只能跳转到第三个分支注册校验,前两个分支都是失败。我们先找分支跳转前,查看是根据哪个函数判断结果进行跳转的。

    在0000000140707AD7处找到一个函数,这个我之前分析的时候进行改名了,确定是个网络校验函数。仔细观察条件判断,jns判断eax是否非负,jnz判断eax是否为0,如果有跳转到第三个分支,那么返回值eax一定要大于0。

    【破解】010editor9.0.2 64位注册破解

     

    这里其实可以整理下

    a = lzInetCheck

    if a <= 0:

    网络不通

    if a == 0:

    网络校验失败

    else:

    进行序列号校验,则可以bypass

     

     

    我们在仔细看下这个函数。

    通过一些字符串拷贝,可以看到这个函数很可能会跟www.sweetscape.com也就是010editor的官网进行通信校验。

    【破解】010editor9.0.2 64位注册破解

     

     

    在函数最后有个if判断,其实这里v2恒等于0,只能跳转到else分支。

    【破解】010editor9.0.2 64位注册破解

     

    v2是通过参数a2赋值。a2是 32位 uint

    【破解】010editor9.0.2 64位注册破解

     

    【破解】010editor9.0.2 64位注册破解

     

     

    看下这个函数调用前的传参,根据x64的调用约定,rcx传入第一个参数,rdx传入第二个参数,而这里edx异或,就是将edx清零了,所以最终v2只能等于0。

    【破解】010editor9.0.2 64位注册破解

     

    所以我们只需要关注这个函数里第二个else分支就行。通过分析,j_http_open返回值如果不等于0,则v49就等于False(0),则直接返回0xFFFFFFFF(-1),否则返回值由j_network_check决定。根据之前的分析,如果返回值为-1,则跳转到网络不通提示,很容易判断j_http_open会用来判断网络连通性。并且经过OD动态调试,在网络不通的时候,v49就等于0,所以就可以确定j_http_open会用来检查网络连通性。(这个函数没有细究,不过确实会发送web请求,请求结果应该传给j_network_check做校验了)

    【破解】010editor9.0.2 64位注册破解

     

     

     

    进入j_network_check函数,可以看到里面有ERROR(这个因为之前被改成invalid)和invalid两个字符串传入一个函数,可以猜测是用来校验HTTP请求回包里是否包含ERROR和invalid这两个字符串。invalid应该是判断验证无效,ERROR应该是请求验证出错之类的。

    【破解】010editor9.0.2 64位注册破解

     

     

    emmm,这个分析他字符串解析过程会比较麻烦,所以在这里,我尝试修改这两个字符串,让HTTP请求回包里不可能包含这两个字符串,这样就会让程序误以为校验是通过的,从而正常通过校验。

     

     

    之前一直是静态分析,为了快速和动态调试的地址对应起来,而010editor又开了ASLR,无法直接通过绝对地址对应,这个可以通过修改PE文件的Nt Headynamic_baseder->Optional Header->DllCharacteristics->DYNAMIC_BASE,让该标志位置0。

    【破解】010editor9.0.2 64位注册破解

     

    这两个字符串的地址为000000014197AEDC、0000000141AE5090

    【破解】010editor9.0.2 64位注册破解

     

    【破解】010editor9.0.2 64位注册破解

     

     

    通过x64dbg在内存区域,找到该字符串,然后修改

    【破解】010editor9.0.2 64位注册破解

     

    【破解】010editor9.0.2 64位注册破解

     

     

    【破解】010editor9.0.2 64位注册破解

     

    【破解】010editor9.0.2 64位注册破解

     

     

    最后补丁保存即可。

    【破解】010editor9.0.2 64位注册破解

     

    如上操作,就可以绕过网络验证了。

     

     

     

    0x02 总结

    010editor的破解较其他软件要简单的多,通过失败提示字符串入手,找到相关的检测函数,分析注册检测逻辑。

    第一个破解方式,将跳转无效化,但会有弹窗,第二个是修改序列号算法函数的返回值,从而达到无需弹窗注册,完美破解。

    打了补丁的exe,可以直接拷贝到其他未破解的010editor安装目录下,直接运行即可。

    上述是本地校验,后面发现还存在网络校验,会导致之前的破解无效,所以还需要bypass网络校验,通过修改网络校验失败所检查的字符串error和invalid,使之无效,即可绕过网络校验。

     

    0x03 参考

    https://bbs.pediy.com/thread-247708.htm

     

     

     


    Security , 版权所有丨如未注明 , 均为原创丨
    转载请注明原文链接:【破解】010editor9.0.2 64位注册破解
    喜欢 (0)