首页
论坛
课程
招聘
[原创][我的代码传]更改FastStoneCapture使用期限
2020-11-5 23:47 2273

[原创][我的代码传]更改FastStoneCapture使用期限

2020-11-5 23:47
2273

往昔

依稀还记得那段在记忆中逐渐模糊的大学时光:那天是某个月的周四晚上。
“哎呀,明天就得交实验课作业的,交报告就算了怎么报告还要截图。”我满脸疑问的说着。
“是啊,太诡异,明明有原件还要搞个复印件,这是搞个球。”舍友一边赶着报告一边附和着。
“话说这报告怎么截,我三页子呢,就算按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较为顺畅的写下了些代码:

1
2
3
4
5
6
7
8
9
WORD getResult(WORD year, WORD month, WORD day) {
    WORD from1980 = year - 1980//现在到1980的差值
    WORD encodeYear = from1980 << 9;
    WORD encodeMonth = month << 5;
    WORD encodeDay = day;
    WORD result = encodeYear | encodeMonth | encodeDay;
    cout << "结果为:" << result << endl;
    return result;
}

毕竟都知道数据格式了,位运算即可,最后盛上源码和成品:
点击我进入到gayhub.com
成品:
https://share.weiyun.com/CHS2PWGq

 

使用方法:找到C:\Users\用户名\AppData\Local\FastStone\FSC目录,将该exe放在下面并运行即可。

 

ps:使用前请自行备份fsc.db


【看雪培训】《Adroid高级研修班》2022年夏季班招生中!

收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 3972
活跃值: 活跃值 (1021)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
arab 活跃值 2020-11-6 00:44
2
0

有没有试一下把这个图里的0x6EC221, 0x6EC243和0x6EC266三个0x1E都改成其它值比如0x64,可惜0x6EC243那里最大值也只能是0xFF

最后于 2020-11-6 01:48 被arab编辑 ,原因:
雪    币: 3972
活跃值: 活跃值 (1021)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
arab 活跃值 2020-11-6 00:47
3
0
顺便说一句,那个日期格式我们以前叫 DOSDate
雪    币: 3509
活跃值: 活跃值 (3058)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
psycongroo 活跃值 2 2020-11-6 16:24
4
0
arab 顺便说一句,那个日期格式我们以前叫 DOSDate
原来是一种储存格式,受教了。使用日期增加没试过改,待会儿试试
雪    币: 9217
活跃值: 活跃值 (34258)
能力值: (RANK:105 )
在线值:
发帖
回帖
粉丝
Editor 活跃值 2020-11-10 17:21
5
0
楼主文笔风趣~
雪    币: 3509
活跃值: 活跃值 (3058)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
psycongroo 活跃值 2 2020-11-10 18:17
6
0
Editor 楼主文笔风趣~
哈哈哈,谢谢版主兄dei的赞许
雪    币: 20492
活跃值: 活跃值 (3997)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ninebell 活跃值 2020-12-7 17:13
7
1

其实只要是有心总结,制造各种一招必杀技破敌都是很轻松的。
例如,已知注册码21位这就是道命题:cmp eax,21一招定位, Ctrl+A,Ctrl-返头返1,爆破成功。

最后于 2020-12-7 17:20 被ninebell编辑 ,原因:
雪    币: 20492
活跃值: 活跃值 (3997)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ninebell 活跃值 2020-12-7 17:15
8
0
又比如某软件费劲爆破各种功能限制,改了一大通。
后来得知记号源于注册表键值,那就简单了,瞄准定位就不让你写键。一分钟爆破,天下太平。
游客
登录 | 注册 方可回帖
返回