查壳,无壳。
直接运行程序,发现程序界面还是挺有意思的,输入框无法直接输入,只能通过点击下方的按钮实行输入操作。
这里可以先大致猜测下,激活方式可能是直接通过点击按钮输入指定的字符来完成激活,也可能是先输入指定的字符是输入框的状态变为可编辑,此时再直接输入特定的字符完成激活。
载入OD,
搜索字符串,
发现有很多地方都在计算是否激活,
现在从第一个判断处分析,
会段首下断,
获取输入的字符串的长度
获取当前字符的十六进制的数值
将第一个字符直接转换成十进制并加到上面的数值中(如字符为1,则加上十进制的1,注意不是十六进制)
将所有的字符都按照上面方式进行操作。
然后将最后计算出来的数据和0817E7......比较,这里有一个东西要注意看,字符串中有大于F的字符,对于十六进制中最大能显示的字符就是F,所有含有大于F的字符肯定是不可能通过上述方式计算出来的。
继续分析第二个激活方式,
和第一组激活方式对比,有两个地方不一样,第一个是
此时需要加的数据改为了前两个字符的十进制(如字符是“12”,则加上12),
第二个地方
判断条件也不同了。
继续分析其他的激活方式,发现都是这两个地方在发生变化,
需要增加的数据按照规律:第一次加第一个字符,第二次加第一个和第二构成的字符。。。。依次加到有全八个字符构成的数据,然后在依次递减。
现在直接通过搜索的字符来判断哪个地方才有可能激活成功(判断条件:不能含有大于F的字符存在),
查询所有的字符串,只有第14处才是可以激活的字符串(图中标示处),也就是说只存在一组数据可以正确激活程序。第14处的激活增加的数值就是前两个字符构成的数据。
根据前两个最终的值81 7E可以计算出前两个字符是7和4,需要增加的数值是74,
最终计算出来的激活码是74*3032589#**0541238#7412。
最终激活的状态。