Jarvis's Blog

白帽子、全栈、IoT安全专家、嵌入式系统专家

Setup Factory 7.0 绕过安装密码解包方法

最近在网上下了一个程序,用的是Setup Factory 7制作的安装包,安装需要输入激活码,但是由于作者已经放弃这个软件很久了,所以我想使用连机会的没有,当然,作为一个二进制黑阔当然不能就这样算了,不就一个安装程序吗,当然要尝试绕过密码,安装界面如图:

网上找了一圈,发现有能直接解包Setup Factory 5.0~6.0的工具,但是7.0以上貌似没有直接解包的工具,看来没办法走捷径了,自己逆吧。

IDA打开静态分析一下:

貌似打开之后会在临时文件夹里解压出一个irsetup.exe的文件,所以等程序跑起来之后,到temp目录下找到irsetup。exe,拷出来,咦,根本运行不了?

难道需要命令行参数?后来网上查了点资料,大概是说setup factory在7.0之后,安装过程是使用脚本来控制逻辑的,irsetup.exe只是一个脚本解释器,脚本文件压缩后存在原安装包里,所以直接打开irsetup.exe根本没用,那么怎么确定命令行参数?那就动态跟踪一下原始程序吧,打开OD,下断点在CreateProcessA,断下来之后看一下栈:

这里就能看出运行参数了,记下CommandLine参数,然后我们直接用这个参数运行irsetup.exe就行。

这时候irsetup.exe就能正常跑出界面来了,这时候我们下断点在CreateFileA,关心安装程序产生的文件,发现F9几次之后,在irsetup.exe的目录下会产生一个irsetup.dat,这个文件在安装界面跑起来就会删除,用记事本打开看了一下,这个就是脚本文件了,里面还有不少不可见字符,找到关键的地方:

— 获取用户输入的序列号
local strSerial = SessionVar.Expand(“%SerialNumber%”);

— 你想要使用的序列号列表的名称,如:“序列号列表 1”
— (使用 nil 来仔细搜寻所有的序列号)
local strListName = nil;

— 来自 _SUF70_Global_Functions.lua:
— 在指定序列号列表中仔细搜寻匹配项
local bSerialIsValid = g_IsSerialNumberInList(strSerial, strListName);

— 如果用户输入了有效的序列号,则进入下一个屏幕
— 否则显示错误信息,并检查剩余重试次数
if(bSerialIsValid) then

— 进入下一个屏幕
Screen.Next();

这里其实只要bSerialIsValid给硬编码成1就可以了,我这里直接改成这样:

if(1            ) then

— 进入下一个屏幕
Screen.Next();

为了保持文件大小不变,我在1后面补了一些空格,这样在输入激活码界面随便输入一点内容就能过了验证开始安装了。

 

最后,去掉断点,运行,成功安装!

 

解决MATLAB在linux下无法使用hardware openGL的问题

上一篇

【百年阿里673期】(全开源)搞事情之电子工程师的百阿之旅——玩转电子设计之手把手教你制作水平旋转LED显示屏

下一篇
评论
发表评论 说点什么
5236
4

    浙公网安备 33011002014706号