aLoNg3x.1分析

第6个CKme002看了一天,能力不够,独立分析不出。参考其他文章照做了一遍,那个就不写了。开始的upx壳手脱了一下,流程感觉没什么问题,但脱出来导入表修复就是不行。回头再试,而且win10下的那个导入表修复工具importREC必须要管理员权限打开才能显示OD加载的程序,否则显示不出来。

第7个拿到程序先看了下没壳。直接运行。

OK键是禁用的,一个取消键,一个帮助键,帮助键点击后提示,这个creakeme的要求是输入名称序列号正确后把两个按钮消除掉。程序是delphi写的而且没壳,直接用dede找按钮事件函数。

可以看出四个比较重要的按键OK按键,Cancel按键,name输入,Codice输入。OD里面分别下断点。

name框上随便输入,程序断到字符串输入的判断中,中间有个字符串的比较函数比较关键

比较函数,函数开头部分不截了。这一段主要是检测name字符串。首先输入长度必须大于5,判断完长度后,就开始将输入的name字符串进行计算,过程下面写了。

总的来说两个条件,一个是字符串长度>5,一个是字符串计算后结果=0x29A。把跳转修改后,运行发现OK键激活了。所以说这个检测判断是用来激活OK键的。然后把name和Codice的输入长度改成5,再看下序列号的检测。

结果发现序列号的检测和Name的检测函数是同一个。想了一下,程序破解的要求是把OK键和取消键都消除掉,那剩下的只能分析OK按键和取消按键里面的函数。我先找的OK键,OK键点击后,再次断到了序列号判断的函数中,因为调用函数一样,所以依旧把跳转改掉,但是这次改完以后,序列号的输入清空了,OK键又被禁用了。所以说,要想正常分析,OK键必须先要永久激活,那输入完以后,点击取消键试试看。

点击取消键后,大体流程也是取name和序列号,然后进入一个比较函数。这次的比较方式和之前的不一样了

比较方式:

输入字符串
取字符串第五个字符
余数=第五个字符/7
ret=余数+2

num=1           累乘到6
for(int i=1;i<ret;i++)
{
  num*=i
}
计算出num


输入的字符串的每一位ASSIC用ch表示

 tmp= ch*num

result+=tmp

result-=0xAB4130

result==0x7A69

result=0xAB4130+0x7A69

计算的流程简要来说就是:先取输入字符串的第5个字符,然后除以7得到一个余数,余数+2得到一个数,假设这个余数是4,那么结果就是6,然后用1累乘到6计算出一个数num,然后用这个数num去和输入字符串的每一位的ASSIC码ch相乘,每一位都计算出一个数tmp,这些数累加起来,得到最后一个数result,result-0xAB4130以后得到的数必须等于0x7A69。流程是这样的,但转化成代码真的够呛,所以这个cacle的按钮检测,现在我找不到正确的序列号,这里只能改了跳转。改完跳转以后,取消键消失了,并且OK键也激活了。

然后就是OK键了,当取消键消失后,再次点击OK键,会发现它不会再调用之前那个判断函数,会进入一个新的判断函数中

也就是当输入的序列号转换后得到一串大写字母,如果和输入的name相等那么就说明成功。但是这个必须是取消键消除掉后才可以,因为取消键在的时侯,OK键里面的判断不是这一个。

猜你喜欢

转载自blog.csdn.net/weixin_42489582/article/details/84975104
今日推荐