有出错提示,但查找参考字符串不可行。
关键跳在0040125F,可爆破。
1、在函数GetDlgItemTextA()下断,F9运行
2、输入验证码11-22-33-44-55后,断在地址00401188
3、单步,程序读取5段验证码,随后就是算法,入口0040124F
4、进入算法,0040149C和004014AA处的两个call,获取时间进行闰年等一些判断,细节没搞太清,怀疑有一部分是烟雾弹
5、F8跳过以上两处call,真正的验证码的生成和判断开始于004014C8
6、验证码为:(year xor 0x7C5)-(month xor 0x2)-(day xor 0x6)-(hour xor 0x5)-(minute xor 0x14)
7、验证码与当前系统时间有关,每分钟对应一个注册码,与用户名无关。
生成验证码算法本身很简单,前面两个call费了不少时间!
总结:单步跟踪时,不要想一次就搞定,采用递进分析。
可以按照call的层级来,第一次F7第一层的call,再深的层级F8跳过;第二次F7第二层的,依次类推,直到搞清楚!