能够看到,程序只有让输入的地方,没有确认按钮什么的。
在程序左侧,写着 Status: UNREGISTRIERT。git
猜测:github
使用 VB 编写的程序,没有壳。算法
使用 OD 载入程序,搜索字符串。函数
能够看到有不少的很类似的字符串,还有不少个 "REGISTRIERT"。spa
咱们也不知道这是什么东西,随便双击一个进入代码。3d
能够发现,这代码和 009 和 010 很是相像。
都是先求得输入的长度,而后创建循环,最后再进行比较。
可是这里,一个代码块有不少的这样的组合。code
这是为何呢?
咱们先在比较函数处下断点。blog
咱们没有进行任何操做,程序就马上中断了。
猜测程序可能使用了定时器。咱们使用 VB Decompiler 加载程序事件
能够看到有4个定时器。
每一个定时器代码块,里面都是不少个上面那样的代码。ip
先分析程序的算法
最后程序将这个字符串和一串字符串相比较,相同就注册成功。
因为咱们输入的序列号最后转化的字符串是十六进制表示的,因此相比较的字符串也应该是在 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