运行之,观察下,发现序列号错误了,程序会清除文本框信息,没有任何弹窗和文本提示,果断放弃MessageBox,Showwindow等常用断点函数
观察程序线程,发现在点击Check按钮后,程序会新启动一个线程,然后瞬间结束,
据此,猜测程序会新启动一个线程来处理序列号,于是下断CreateThread函数,点击Check按钮,逐步运行到了线程的处理代码
逐步跟进之,发现在这里,右侧寄存器中出现了我们输入的序列号,于是猜测这里估计序列号处理的核心位置
发现内存串比较代码,还有后面紧跟一个判断代码
运行到判断代码,然后在右侧修改0标记,强制改变判断代码的流程,
修改流程后,直接F9运行,发现程序界面终于发生变化了,于是可以确定这里就是序列号处理函数!但是显示出来的提示是乱码,不要紧,这里估计是提示字符串被用正确的序列号加密了,我们的序列号错误,所以解密出来的提示是乱码。
很明显,如果程序想要在此处判断正确,则上面的内存串比较函数就得一样。换句话说,这段代码对我们输入的序列号做了某种处理之后,然后在和程序内的一串内存串比较,如果相同,则序列号正确。
经过跟踪,发现了加密函数
可以看出加密函数很简单,就是对序列号做了异或和加和处理,完全可逆,我们用刚才说的那段用了比较的内存串,经过逆运算之后,便可得到序列号。
KEY{B4xhvwBvXwgsVA5l3HAh}
输入之后,点击Check,程序提示You Got it
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务