“以无厚入有间”,只要找到关键,切入主要,问题往往能迎刃而解。
与003相比同样是VB程序,但这里加了浮点汇编的相关指令。惯例,先运行它,看一下注册机制与003没有什么不同,也无壳。查字符串,从push ebp开始往下分析。
下面的分析比较分散,捡重点讲。
首先我们测试用的Name“imypp”; Serial“43214321”结果是“Try again!”不通过。
在上图push ebp处下断,单步往下分析
004081F5_vbaLenBstr取用户名长度len=5
0040820D rtcAnsiValueBstr取Name的首字符“i”的ASCII和0x6C818相加,等于0x6C881
无关的汇编代码略过。。。
004082E9 _vbaR8Str字符串转换浮点数444545.00
fld fdiv fstsw faddp ….均是浮点指令集,在此不过多陈述,以后单独开篇细讲。
ST0浮点寄存器将ST0除以一个常数,得到的结果加上Key的值,形成一个新的Key
ST0/5.0=2.0在faddp中再将已转换成浮点数的444545.00加上2.0,等于444547.00
00832D _vbaStrR8将浮点444547.00转换字符串——》UNICODE ”444547”
再往下,需要特别注明,否则新手朋友可能看不太明白。
上面计算的Key是’444547”,经过004083FB的fmul之后,发现ST0= 1333641.00
那么倒推,444547*??=1333641.00答案是3.0所以在此处是Key*3.0=1333641.00
00408404做了个减法Key-2.0=1333641-2.0=1333639.00
此处与乘3.0的操作相同,倒推得1333639+15.0= 1333654,加数是15.0
往下继续走,004085F1有一个序列号与key的除法操作。
最后一处:
注册机实现:
微信扫一扫,关注公众号“Cracker之家”
领取专属 10元无门槛券
私享最新 技术干货