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后面补了一些空格,这样在输入激活码界面随便输入一点内容就能过了验证开始安装了。
最后,去掉断点,运行,成功安装!
irsetup
找不到CommandLine 和irsetup.dat 文件怎么处理?
Jarvis
成功断在CreatePorcessA了吗?成功的话在参数识别里面会有啊
tonaifo
setup factory9.5 里面提示内存小于8G 就不让安装了 怎么破
Jarvis
现在小于8G内存的机器很少了吧?