首页
社区
课程
招聘
[原创]取巧方式无限制试用Source insight3.5
发表于: 2019-3-22 11:36 3124

[原创]取巧方式无限制试用Source insight3.5

2019-3-22 11:36
3124
    这周一直在逆向Si3.5(版本号3.5.66.0),加密算法被还原出来了,但是因为懒惰,不想写注册机。没有注册机,其实等于没有破解SI,于是,我尝试各种取巧的办法可以无限制使用si。
    以试用方式激活si后,每次启动时,都会显示剩余的试用天数:
红字部分应该是形如"Trial License expire in %d days"的字符串常量,打开IDA,可以搜索这串字符:
顺藤摸瓜,找到引用该字符的代码片:
.text:004A7263 loc_4A7263:                             ; CODE XREF: sub_4A7077+1D1↑j
...
.text:004A72AC                 mov     eax, totalTrialDays  ;si3.5试用版设定的试用天数
.text:004A72B1                 sub     eax, trialDays  ;已经试用的天数
.text:004A72B7                 mov     [ebp+remainDays], eax
.text:004A72BD                 push    0FFh            ; color
.text:004A72C2                 push    [ebp+hdc]       ; hdc
.text:004A72C5                 call    ds:SetTextColor    ;设置字体颜色
.text:004A72CB                 mov     [ebp+color], eax
.text:004A72D1                 cmp     [ebp+remainDays], 0
.text:004A72D8                 jle     short loc_4A72F6
.text:004A72DA                 push    [ebp+remainDays]
.text:004A72E0                 push    offset trialRemainDays ; "Trial License expires in %d days."
.text:004A72E5                 lea     eax, [ebp+String]
.text:004A72EB                 push    eax             ; char *
.text:004A72EC                 call    _sprint
si调用_sprint格式化字符串,而指令
.text:004A72DA                 push    [ebp+remainDays]
正好将变量[ebp+remainDays]作为占位符%d的参数。恰好,修改变量[ebp+remainDays]的语句就在附近:
.text:004A72AC                 mov     eax, totalTrialDays  ;si3.5试用版设定的试用天数
.text:004A72B1                 sub     eax, trialDays  ;已经试用的天数
.text:004A72B7                 mov     [ebp+remainDays], eax
注意,totalTrialDays和trialDays是全局变量,位于数据段:
.data:005E6F8C trialDays       dd ?                    ; DATA XREF: sub_445B93:loc_445BC4↑r
.data:005E6F8C                                         ; sub_448894+185↑w ...
.data:005E6F90 totalTrialDays  dd ?                    ; DATA XREF: sub_445B93+36↑r
我尝试着用OD修改了一把04A72B1处的减法指令,然后让si运行,本来已经超期的si居然又显示还有35天的试用期:
=>
嗯,其实,到这步已经算是成功破解了。但是每次打开si总显示还有几十天,总给人一种软件马上要过期的压迫感。既然这样,再改一把,让剩余可用天数变大。这是小学算术知识了,无外乎改减数trialDays和被减数totalTrialDays。用IDA比较了一下软件对totalTrialDays/trialDays的引用数量,发现totalTrialDays被引用的次数相对较少,于是,我决定拿它开刀。
再次查看totalTrialDays的引用,发现一个显眼的指令,"mov totalTrialDays,23":
23不就是10进制的35吗?这不就是source insight3.5总的试用期吗?好,就把这个立即数改大,改成100年吧,反正100年后我也不用看代码了。

.text:004A7263 loc_4A7263:                             ; CODE XREF: sub_4A7077+1D1↑j
...
.text:004A72AC                 mov     eax, totalTrialDays  ;si3.5试用版设定的试用天数
.text:004A72B1                 sub     eax, trialDays  ;已经试用的天数
.text:004A72B7                 mov     [ebp+remainDays], eax
.text:004A72BD                 push    0FFh            ; color
.text:004A72C2                 push    [ebp+hdc]       ; hdc
.text:004A72C5                 call    ds:SetTextColor    ;设置字体颜色
.text:004A72CB                 mov     [ebp+color], eax
.text:004A72D1                 cmp     [ebp+remainDays], 0
.text:004A72D8                 jle     short loc_4A72F6
.text:004A72DA                 push    [ebp+remainDays]
.text:004A72E0                 push    offset trialRemainDays ; "Trial License expires in %d days."
.text:004A72E5                 lea     eax, [ebp+String]
.text:004A72EB                 push    eax             ; char *
.text:004A72EC                 call    _sprint
si调用_sprint格式化字符串,而指令
.text:004A72DA                 push    [ebp+remainDays]
正好将变量[ebp+remainDays]作为占位符%d的参数。恰好,修改变量[ebp+remainDays]的语句就在附近:
.text:004A72AC                 mov     eax, totalTrialDays  ;si3.5试用版设定的试用天数
.text:004A72B1                 sub     eax, trialDays  ;已经试用的天数
.text:004A72B7                 mov     [ebp+remainDays], eax
注意,totalTrialDays和trialDays是全局变量,位于数据段:
.data:005E6F8C trialDays       dd ?                    ; DATA XREF: sub_445B93:loc_445BC4↑r
.data:005E6F8C                                         ; sub_448894+185↑w ...
.data:005E6F90 totalTrialDays  dd ?                    ; DATA XREF: sub_445B93+36↑r
我尝试着用OD修改了一把04A72B1处的减法指令,然后让si运行,本来已经超期的si居然又显示还有35天的试用期:
=>
嗯,其实,到这步已经算是成功破解了。但是每次打开si总显示还有几十天,总给人一种软件马上要过期的压迫感。既然这样,再改一把,让剩余可用天数变大。这是小学算术知识了,无外乎改减数trialDays和被减数totalTrialDays。用IDA比较了一下软件对totalTrialDays/trialDays的引用数量,发现totalTrialDays被引用的次数相对较少,于是,我决定拿它开刀。
再次查看totalTrialDays的引用,发现一个显眼的指令,"mov totalTrialDays,23":
23不就是10进制的35吗?这不就是source insight3.5总的试用期吗?好,就把这个立即数改大,改成100年吧,反正100年后我也不用看代码了。

.text:004A72DA                 push    [ebp+remainDays]
正好将变量[ebp+remainDays]作为占位符%d的参数。恰好,修改变量[ebp+remainDays]的语句就在附近:
.text:004A72AC                 mov     eax, totalTrialDays  ;si3.5试用版设定的试用天数
.text:004A72B1                 sub     eax, trialDays  ;已经试用的天数
.text:004A72B7                 mov     [ebp+remainDays], eax
注意,totalTrialDays和trialDays是全局变量,位于数据段:
.data:005E6F8C trialDays       dd ?                    ; DATA XREF: sub_445B93:loc_445BC4↑r
.data:005E6F8C                                         ; sub_448894+185↑w ...
.data:005E6F90 totalTrialDays  dd ?                    ; DATA XREF: sub_445B93+36↑r
我尝试着用OD修改了一把04A72B1处的减法指令,然后让si运行,本来已经超期的si居然又显示还有35天的试用期:
.text:004A72AC                 mov     eax, totalTrialDays  ;si3.5试用版设定的试用天数
.text:004A72B1                 sub     eax, trialDays  ;已经试用的天数
.text:004A72B7                 mov     [ebp+remainDays], eax
注意,totalTrialDays和trialDays是全局变量,位于数据段:

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//