乐于分享
好东西不私藏

软件逆向入门实战:进销存管理软件快速定位一字节破解软件未注册

软件逆向入门实战:进销存管理软件快速定位一字节破解软件未注册

免责声明

本文档所有内容仅供安全研究、学术交流与技术学习使用,严禁用于任何未经授权的逆向破解、网络攻击、隐私窃取、恶意软件开发。使用者应确保已获得目标软件权利人的合法授权并自行承担因使用本文档内容所产生的一切法律责任与后果,作者不对任何直接或间接损害承担任何责任,继续阅读即视为您已知悉并同意上述全部条款。


    这是一个网友发给的一个进销存管理软件,未注册有功能限制。
首先是打开软件点击注册,随便输入假的注册码发现有错误提示
像这种有错误提示的,找关键位置就相对简单很多了。
打开调试器 Ollydbg.exe,把软件拖入调试器后运行。输入假注册码后,弹出了错误提示框。我们用堆栈法找错误位置。
可以看到,程序调用了消息函数MessageBoxA调用是程序模块地址的就双击它。
直接下断点。重新点击注册后,程序段下来
返回汇编窗口就找到了关键位置
上面就有注册成功的提示,向上翻看找跳转位置。
007C3BFA   /75 1B           jnz Xjxc.007C3C17007C3BFC   |640           push 0x40007C3BFE   |68 903C7C00     push jxc.007C3C90                                      ; 软件注册007C3C03   |68 9C3C7C00     push jxc.007C3C9C                                      ; 注册成功,本程序所有功能限制下次启动时将被自动解除,欢迎您成为我们正式版本用户!007C3C08   |8BC3            mov eax,ebx007C3C0A   |E8 1152CDFF     call jxc.00498E20007C3C0F   |50              push eax007C3C10   |E8 4F42C4FF     call <jmp.&user32.MessageBoxA>
看到这里有个JNZ跳转,上面应该就是关键的地方。我们把这里直接NOP掉不让它跳转失败试试。
修改后发现它有重启验证。把修改好的程序重新打开还是未注册。说明不是关键位置。

    软件有重启验证,肯定在启动就调用验证。 
    上面分析跳转失败的位置,前面CALL应该是比对。我们在前面的CALL进去看看,尝试下断点。重新加载程序,软件正常断了下来
0081FEC6    8B95 C8FBFFFF   mov edx,dword ptr ss:[ebp-0x438]0081FECC    8B43 14         mov eax,dword ptr ds:[ebx+0x14]0081FECF    E8 C04BBEFF     call jxc.00404A940081FED4   /75 07           jnz Xjxc.0081FEDD
这里直接就出现了真假码对比。非常惊讶,直接明码比较了!
上面对比不相对就直接跳转未注册了。 
0081FED4   /75 07           jnz Xjxc.0081FEDD0081FED6   |B3 01           mov bl,0x1
经过调试分析MOV B1,1是关键,把上面JNZ进行NOP后保存程序。程序就直接是注册版本了。程序重启也没出现试用对话框。直接是正式版。
分析注册算法也是非常简单。编写了注册机。
上面分析仅作为技术学习。总的来说是一款很优秀的国产软件,官网作者也在更新和升级的。也希望作者在下一版中对软件保护和算法进行升级。
如果喜欢这类的技术文章,请关注喜欢推荐 ♥  后续为大家更新更多实用技术文章。