这周一直在逆向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年后我也不用看代码了。

取巧方式无限制试用Source insight3.5相关推荐

  1. Source Insight3.x注册码

    Source Insight3.x 官方下载地址: http://www.sourceinsight.com/distribute/Si3563Setup.exe 官方网站: http://www.s ...

  2. Source Insight3.5主题设置

    授人以鱼不如授人以渔 文章目录 前言 一.效果图 二.使用步骤 1.CF3源文件导入 2.自定义主题配置 1.主界面配置 2.项目窗口配置 3.标志栏修改 4.小结 总结 前言 Source Insi ...

  3. C# 连接SQL Server数据库的几种方式--server+data source等方式

    本文转载自忙碌的布谷鸟  如何使用Connection对象连接数据库? 对于不同的.NET数据提供者,ADO.NET采用不同的Connection对象连接数据库.这些Connection对象为我们屏蔽 ...

  4. Source Insight3.5软件使用及配置

    Source Insight Marco研究(语法篇) Source Insight Marco研究(语法篇) Source Insight宏语法与C相似,编写好的宏以.em文件存储.要使用宏先需要把 ...

  5. linux shell 执行 几种方式区别 bash source .

    bash xx.sh 或者sh xxx.sh 脚本没有可执行权限或没有指定解析器,使用的方法. 会产生一个子shell来执行脚本,脚本执行完毕后再返回父shell,所以脚本里面的变量获取不了. /xx ...

  6. source insight3.5显示中文_Doxygen 中文文档

    Doxygen 中文文档 原文:http://doxygen.nl/manual 本文档摘取重点进行了介绍. Getting started doxygen是解析源文件和生成文档的主要程序.详细使用方 ...

  7. 解决source insight3.5的下面窗口丢失的方法

    source insight默认下面会有两个窗口,左边:内容窗口context window,右边:工程文件窗口project window. 有时候不知点了哪,下面两个窗口都消失了. 度娘搜搜到的都 ...

  8. source insight教程:常用设置、快捷键、附带source insight3.5和4的对比

    本篇内容基于source insight4版本,最后会说明source insight4相比3.5的改进. 前言 兜兜转转,发现还是source insight对于浏览代码来说几乎是最好的选择.特别是 ...

  9. 轻松实现深度Clone | Source Generators方式

    前言 在开发中,我们经常需要创建某个类型实例的副本. 常用的方式,是继承ICloneable接口,然后自行实现Clone(),这会耗费一定的开发时间:或者使用序列化/反序列化方式变相实现,但是性能不高 ...

最新文章

  1. IDEA配置maven报错解决方案
  2. Asp.Net 之 通过调用 WScript.Shell 启动本地 exe 程序时产生“ automation服务器不能创建对象 ”的错误...
  3. hadoop学习--单表关联
  4. adg类似于mysql半同步机制_MySQL基准测试异步复制和半同步复制延迟对比
  5. mysql 交叉统计_统计知识——交叉分组表
  6. VXWORKS 几种定时机制
  7. iphone无线充电充电测试软件,瞎折腾星人的测评 篇一:想体验iPhone的无线充电?这可能是最具性价比的选择了!...
  8. STL中的multimap---顺便说说如何查找同一关键字对应的所有值
  9. C++ opengl GL_LINE_LOOP的绘制
  10. 趣谈 | Python为什么受欢迎的本质,知道的人寥寥无几?
  11. android中上拉下滑布局,3年以上勿进!最简单的Android自定义ListView下拉刷新与上拉加载,代码直接拿去用~...
  12. ffmpeg之YUV420P转RGB24
  13. 二维旋转矩阵公式推导
  14. Oracle 12c RAC--安装grid
  15. 应力循环次数60ant_齿轮应力循环次数公式
  16. ios12完美深色模式插件_那些好玩的插件 iOS 12(十七)
  17. 微信扫码下载APP,苹果,安卓多码合一,微信下载pdf报告,文件解决方案
  18. 反向代理和正向代理的概念
  19. 【2020-11-26】不扣JS系列之某医保服务平台数据获取
  20. arduino tft 方向_arduino 控制TFT液晶显示屏,在屏幕上画了四个按键,如何检测是否被按下和释放呢?...

热门文章

  1. 外卖行业评价管理解决方案:最新饿了么/美团外卖差评解决办法,请收好!
  2. 【题解】4879. 【NOIP2016提高A组集训第11场11.9】少女觉
  3. 注册微信公众号,原来如此简单
  4. RabbitMQ安装和管理界面设置
  5. [实用软件推荐] GIF截图软件 ScreenToGif
  6. 计算机一级用英语翻译,江苏省计算机一级B 翻译成英语
  7. SPI 转 CAN 接口
  8. libwebsockets的学习
  9. 我为什么会喜欢《莺莺传》
  10. 学习《Linux就该这么学》第九课