好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 zhj777 于 2024-10-8 20:53 编辑
.net系列教程:
.net程序的破解实践与理解一、爆力破解篇:改代码(写给新手,超详细)https://www.52pojie.cn/thread-1954009-1-1.html
.net程序的破解实践与理解二、代码分析篇1:启动验证(写给新手,超详细)https://www.52pojie.cn/thread-1955144-1-1.html
今天给大家带来的是第三篇:.net程序破解实践与理解三、代码分析篇:时间限制(写给新手,超详细)
在上一篇的“代码分析篇”中,版主“爱飞的猫”提醒“文章漏掉了从序列号文字到过期时间的映射”。那这一篇咱就来聊一聊程序注册码中关于时间限制的部分。
书接上回:程序重起后加密内容解密出来,然后把解密后的字符串切割成5段放入数组中,第三、四、五段即关于年、月、日的字符串被分别赋值给了gtyear、gtmonth、gtday变量。
有的小伙伴可能发现当程序走过这三行后,下面局部变量窗口中怎么没发现有这三个变量啊?而走过riht=array[0]和left=array[1]时能看到right和left里面存了第一段和第二段的字符串。
在下面分析器窗口中点读取于左边的三角。 来到下面的地方,在string gtyear=RegData.gtyear;这一行下断。 点F5(继续),断下来后,点F10往下走,走过这一行后,在下面的局部变量窗口中可以看到gtyear变量被放进了“2025”,gtmonth中是“03”,gtday中是“18”,正好是前面5段字符串中的第三、四、五段。 如果当前时间超过期限,则显示“本软件使用期已过。请与***联系......”。 来自于mspaibzd735.dll,而这个dll文件是注册成功时建立的,dll文件中存的机器码来自注册窗口中的机器码,那时间应该来自于注册码。点停止调试, 删掉mspaibzd735.dll,点“启动”,程序运行起来,点帮助-注册-输入假码-确定,显示“注册码不对”。根据 .net程序的破解实践与理解一、爆力破解篇:改代码(写给新手,超详细)中方法找到以下位置 在bool flag3=.......这一行下断。程序运行到此处,这里判断注册码是不是15位。是15位,跳过“注册码不对”,继续往下跟,下图显示截取注册码中的第5位放到text5中,第6位放到text6中 然后通过下面的下面的判断和后面的语句转换成数字1或2, 再通过下面的语句连接成年,上面注册码中是CF,转换后就是2025年。 然后,将得到的年转变成数值后放到变量num3中,月放到num4中,日放到num5中,年小于2021或大于2036或小于当前年份,或者是月小于1或大于12,或者日小于1或大于31,程序就会显示“注册码不对”。
否则会先判断从注册码(放在text3中)截取的1到4位和9到12位连成的新字符串text4长度是否是0,若不是则通过yanzheng()函数对通过机器码算出的数值和text4进行比较,
(和重启验证过程一样都是调用funcGetZhucema()函数) 结果一样就注册成功,不一样就显示注册码不对。注册成功后会把这个日期存到mspaibzd735.dll中,程序重启后进行启动验证是否过期。注册码的最后一位可以是1,也可以是2. 2、若是15位,则再判断年是否是2021-2036之间(包括两端),月是否是1-12月,日是否是1-31日或年是否是小于当前年或当前年中小于当前月,否则注册码不对。 3、若是,则从机器码中换算出字符串和注册码中截取并连接成的新字符串比较,若一样就注册成功。 4、注册成功后,机器码、步骤3中的字符串及注册码中的年、月、日保存到dll中,程序重启时验证是否是注册版,时间则用来验证是过期。 写在最后: 其实分析别人的程序不只是为了破解程序,更重要的是对别人编程思路的一种学习,是一个自我提升的过程。当然提醒各位全新的小伙伴,要想能有更大的提高,还是要掌握一门编程语言,不但有利于读懂别人和程序,在探索的过程中也可以写出个注册机。程序已经分析透了,那下一篇就剩下写注册机了,大家可以自己先写个注册机试一试。
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|