依稀还记得那段在记忆中逐渐模糊的大学时光:那天是某个月的周四晚上。
“哎呀,明天就得交实验课作业的,交报告就算了怎么报告还要截图。”我满脸疑问的说着。
“是啊,太诡异,明明有原件还要搞个复印件,这是搞个球。”舍友一边赶着报告一边附和着。
“话说这报告怎么截,我三页子呢,就算按PtrSc也只能...”还没等我说完,一个煞笔舍友说了:“用FastStone啊,滚动截图。”
“这么神奇还滚动截图,你赶紧发过来给我试试...不是啊,你怎么发的怎么还是正版的,大哥。”
“管他呢,你点试用不就好了,你写个报告要30天那么久?用完就泄啦。”
就这样在说不出具体的日期里,FastSone的滚动截图深深的留在我的脑海里,以至于我毕业设计的报告也是使用的它...
如今也毕业两年了,直到最近看到有人发的FastStone的注册码分析过程我才又回想起来,我开始反思既然我那么深爱着这个软件,我能为它做点什么呢?
看着试用期30天剩余日期一天天的减少,就像当时数着倒计时高考以及大学毕业一样,心中倍感交加,于是对于正在学习逆向工程的我,下定了决心要把时间倒流。
说是要倒流试用时间,可谈何容易呢?该不会右下角更改系统时间就好了吧...我对自己这种忽然袭来的惊为天人的想法感到可笑和难堪,心想不应该这么容易吧...
草,成了,原本做好面对重重困难的心里准备的我,突然感到一丝难过,我的帖子是不是就这么终结了呢?
既然这样,我就改它的安装时间好了,这样应该会显得更加的“高级”一点,于是我又重新振奋了起来,屁颠屁颠地查了壳并打开了x32dbg,随手搜了30。
万万没想到又直接出来了,很好,非常好,很有精神,然后我们直接来到提示语附近的汇编代码,轻轻往上滑,一个刺眼的跳转出现在了眼前:
这也太直接了吧,我甚至一看到1E就知道这里肯定就是关键跳了。因为1E的十进制就是30,试用期期限的30,那很明显,eax肯定就是一个当前第几天的计数值了,也就是天数差(当前日期减去安装日期)。
我长叹一口气,用着工地英语说道:“Thats so great!”我开始搞不懂我自己了,难道简单快速的解决问题不好吗?我为什么还要对没有如期而至的困难感到难过呢?这不就是吃饱了撑着吗?
这一刻我释怀了,我吹着口哨,网抑云不再抑郁。随后经过一番过于简单的运行,我找到了时间差值来源的call:
在进去之前,为了防止有大量的未被识别的系统函数,我轻快地点开了IDA,并把delphi的相关符号加载,这样Faststone就会显得越来越亲切,对,就像妈一样。
在x32dbg里跟进了call,习惯性的滚动了滚轮,一看,哎呀我的妈,它糊了!
从开始的更改系统时间,查壳,字符串搜索都那么顺利,为什么要这里就糊了。我仔细思考着这些诡异的过程,缓缓说出了一个让我自己也感到充满水平的四字成语:欲盖弥彰。
这里其实就是一个简单的花指令,其实我们不要动滚轮就行了,亦或者把前面的垃圾数据改成0:
当然,我们也可以在IDA里看,这样也是十分清楚的。我们得清楚自己不能被一时的花招所扰乱,遵循自己的原则,先把这层的call都跑过一次,看能不能得出什么信息。
这次结合了IDA,又经过一次算不上困难回溯,发现三个call的功能也十分明显:
注意时间的返回会记录在浮点寄存器中,第一个call返回的便是安装的时间。可以说在使用了IDA并加载对应的符号文件后真的是事倍功倍唷。
整个过程其实就是跟踪值来源,分析call功能,跟踪值来源...这样一个反复且颇有枯燥的过程,继续跟进第一个call,使用上述的方法我们最后到达了一个call里:
此时的我粗略一看,哎呀妈呀全是shr,and位运算心里突然起了毛。可冷静下来仔细一想,有什么加密是全得位运算的,运算类型的单一不就是暗示了什么吗?
经过一顿分析,我得出了答案:这里其实是拿取eax的高16位,通过位运算得出ax年,dx月,cx日,也就是说,这个高16位eax存储了年月日,并通过位移的方法提取出来。
那事情就很简单的,就拿例中eax的高16位为5163h来说,他的二进制是101 0001 0110 0011,根据算法,前6位(101000)再加上7BC(1980标准校对时间)就是年,后4位是月,再后面是日:
当我分析出来的时候,无不为自己的聪明才智所折服。天哪,这么简单我怎么看了那么久...
接下来的事情显而易见了,只要找到这个eax高16位的来源就可以了,最后通过层层回溯我们来到了一个神秘的地方:
当然,得通过IDA和x32dbg共同调试才能看清很多函数...话说回来,当我看到这个长得那么像路径的字符串的时候,我已经猜测十有八九的这个安装日期是不是藏在里面:
果然是这样,我拍着桌子大声的呐喊,不知情的人以为我都疯了。这看上去似乎是个配置文件,我也搜到了目标值(这里被我改了)。
到这里,我长叹了一口气,看来是到了结束的时候呢。无论上学的时光多么美好,该来的还是得来了。
小时候渴望成为大人,想买什么就买什么。大学的时候渴望早点毕业,期盼甩开作业,无限期暑假的那一天的到来。如今我只想回到过去,在那充满欢声笑语煞笔舍友的宿舍里,哈哈大笑。
锵锵锵,问题来了,不想手动修改文件怎么办呢?这时候我诞生了一个惊奇的想法,用一个工具修改成当前天数,这样时间就会永远定格在30天。于是我打开了vs较为顺畅的写下了些代码:
毕竟都知道数据格式了,位运算即可,最后盛上源码和成品:
点击我进入到gayhub.com
成品:
https://share.weiyun.com/CHS2PWGq
使用方法:找到C:\Users\用户名\AppData\Local\FastStone\FSC目录,将该exe放在下面并运行即可。
ps:使用前请自行备份fsc.db
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!