周末睡个懒觉,起来看到有个好友请求,备注:FreeShutterCount
有点眼熟 又忘了是什么,愣了一会,想到了是之前破解过的查单反快门次数的软件。
之前的文章是:佳能快门次数检测工具破解教程
本来想着找下原来的破解文件直接丢过去的,因为整理了几次服务器的目录,我也忘了破解文件还在不在。
我记得这个软件破解难度不大,还有之前的破解教程呢,这不是有手就行吗
直接上官网:https://www.freeshuttercount.com/ 下载最新版安装
有手就行的方式:
参照之前写的教程,一步一步看
之前教程中的关键点:
当前最新版:
两个的关键点不一样,跟之前的方法也都不一样。
emmmm 这貌似有点打脸了。。 软件貌似重写了整个注册逻辑。
那还是花点时间,看看它新版的破解难度有没有提升?
首先呢,.net的程序,还是先要用de4dot处理下代码反混淆的问题,否则你会看到一些有特殊符号和一些看不懂的函数名之类的,不利于分析。
然后找一个切入点,如何找软件的破解点呢?:
程序启动该的时候是否验证了注册,如果验证了注册,那么这里是不是可以动手脚?
我看了main类中的main_load这个方法的这几行代码 隐约觉得这就是注册关键点
程序界面注册的关键点,在程序中哪些时候会调用?
那么注册的时候是一定要输入邮箱和KEY的,那么反编译出来的purchase类中有这样两句代码,很像获取邮箱和KEY,要验证这个切入点就需要动态调试
上面是2个思路,今天只讲其中一个,那就是启动破解,就是上面main类中的main_load方法进行分析
为了更快的验证和分析,直接上动态调试工具:dnSpy
因为是动态调试,所以可以直接对关键点直接下断:
private void main_Load(object sender, EventArgs e) { //判断是否为首次访问 配置文件中的FIRSTVISIT VALUE=True this.method_2(); //读取配置文件中的"REGISTERED" "EMAIL" string string_ = Class9.smethod_3(Class5.smethod_0(-638218425), Class5.smethod_0(-638218410), string.Empty); //读取配置文件中的"REGISTERED" "KEY" string string_2 = Class9.smethod_3(Class5.smethod_0(-638218425), Class5.smethod_0(-638218406), string.Empty); //判断是否注册 if (Class10.smethod_5(string_, string_2)) { //已注册 Class10.object_0 = true; this.Text = Class5.smethod_0(-638221994); this.vmethod_12().Visible = false; } //未注册 ....... }
通过逆向分析出来,确定这几句代码就是软件启动时判断注册的关键点,那么如何破解?
关键点在这里:Class10.smethod_5(string_, string_2) 只要这个方法返回TRUE 那么就是已注册,否则就是未注册
先跟进这个函数看看
在这个函数中,很明显result这个变量就是破解的关键点,中文伪代码:
bool result; 如果(邮箱或KEY没有数据) { //未注册 result=false; (修改为:result=true; ) } 否则 { 带上邮箱和KEY,请求服务器验证是否已注册 如果(比较(请求结果,比较值)==0) { 注册成功 result=true; } } 返回结果 return result;
破解最简单的方法就是将这个变量值在返回前设置为TRUE,软件就破解了。
这个软件还是有手就行,收工!