Crackme011

Crackme011 的逆向分析

1.程序观察

clipboard.png

能够看到,程序只有让输入的地方,没有确认按钮什么的。
在程序左侧,写着 Status: UNREGISTRIERT。git

猜测:github

  1. 程序会根据输入框的变化事件来判断是否正确(实际上是不正确的,到后面就知道了)。
  2. 输入正确的序列号程序旁边的 Status 会改变。

2.简单查壳

clipboard.png

使用 VB 编写的程序,没有壳。算法

3.程序分析

使用 OD 载入程序,搜索字符串。
clipboard.png函数

能够看到有不少的很类似的字符串,还有不少个 "REGISTRIERT"。spa

咱们也不知道这是什么东西,随便双击一个进入代码。
clipboard.png3d

能够发现,这代码和 009 和 010 很是相像。
都是先求得输入的长度,而后创建循环,最后再进行比较。
可是这里,一个代码块有不少的这样的组合。code

这是为何呢?
咱们先在比较函数处下断点。
clipboard.pngblog

咱们没有进行任何操做,程序就马上中断了。
猜测程序可能使用了定时器。咱们使用 VB Decompiler 加载程序
clipboard.png事件

能够看到有4个定时器。
每一个定时器代码块,里面都是不少个上面那样的代码。
clipboard.png
clipboard.pngip

先分析程序的算法
clipboard.png
clipboard.png
clipboard.png
clipboard.png

  1. 程序先计算出咱们输入的序列号的长度
  2. 创建循环,循环次数是序列号的长度
  3. 在循环中,程序取得咱们输入序列号的前两个字符,将其转化为浮点数,保存在内存中
  4. 而后程序依次取得序列号的单个字符,将其转化为使用10进制表示的 ASCII 码
  5. 将上述两个值相加,再转化为十六进制
  6. 将每一个字符和前两个字符相加的值链接起来

最后程序将这个字符串和一串字符串相比较,相同就注册成功。
因为咱们输入的序列号最后转化的字符串是十六进制表示的,因此相比较的字符串也应该是在 0-9,A-F 范围内的,这样咱们很容易就肯定了真正的用来比较的字符串:"081 7E 74 7D 7A 7D 7C 7F 82 83 6D 74 74 7A 7F 7E 7B 7C 7D 82 6D 8H 7E 7B 7C"。

因为最后生成的字符串,是和咱们输入的序列号的前两位息息相关的。
前两位越大,最后每一个字符相对应的也就越大。
前两位不同,最后每一个数字相对应的也就不同。

根据正确的比较码,咱们能够反推出正确的序列号:

74*3032589#**0541238#7412

clipboard.png

相关文件在个人 Github

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息