文章目录
- 去除install4j学习版生成的安装程序和主程序的neg弹窗的解决思路
- 概述
- 笔记
- 打补丁之前
- 打补丁之后
- 效果
- 备注
- END
去除install4j学习版生成的安装程序和主程序的neg弹窗的解决思路
概述
最近可能有修改openpnp源码并打包的需求。
openpnp2.2 用 install4j 10.0.5 来打包,有install4j的工程。
官方现在已经11.x了,为了保险,还是下载官方的10.x的最后版本,版本为 10.0.9. 打开编译10.0.5的install4j的工程应该没问题。
安装完官方的install4j 10.0.9, 去网上找了10.0.8的注册机,注册完,使install4j 10.0.9 成为学习版。
查看关于菜单,可以看到表面上已经是正式版了。
关于对话框这里,只判断主要规则,所以就看到合规的注册码。
但是实际上,install4j还有后手,还会判断注册码中的细节。
在打包时,会打进带弹窗(提醒大家去买正版)的启动EXE, 会导致使用安装程序的人和用户都会遇到弹窗警告。
-
安装程序启动时,会有弹窗(提醒大家要掏钱).
-
安装完后,启动桌面上主程序时,会有弹窗(提醒大家要掏钱).
这2个弹窗的问题,估计遇到的人都会有想法将他去掉。但是网上没啥人将思路放出来。
网上的技术流大神,一般只关心注册码,将注册流程搞定后,他们就不管了。因为他们不是软件的最终用户,所以他们也发现不了作者还有后手。
那剩下的这2个弹窗,怎么弄?如果我以后要用install4j打包了自己实现的软件来卖钱,这2个弹窗不能接受的。
对于这2个弹窗,我感觉作者的路子有点歪。
用install4j做完的打包,已经是用户自己的东西了,你作为厂家,怎么能在用户的东西上标记自己的出处?那用户自己想将你做的标记撕下来行不?
如果是在install4j上做文章,让使用install4j的软件时,让学习版和正式版有价值的区别,感觉这样比较合适,也让install4j的用户能接受一些。且不影响打包后的程序,作者的路子为啥那么招人恨啊?
去买授权?不太现实,我很想自己搞他一下,干不过再考虑其他方法(如果干不过,大概率是忍了)。
对于软件学习来说,干不过也没损失,也学了东西。算是在网上大神给出注册工具基础上的二次烹饪。
笔记
install4j打包是做的windows程序来启动java的gui框架,然后干活。
看过安装程序和安装后的主程序,也就是在WinMain()中加入了一段无害的弹窗代码, 这种窗口的作用就是烦用户,让试用版的用户跪下买东西。
如果是在install4j打包完成后,再去patch安装程序和安装后的程序,这样就本末导致了,不可行。
最好的方法,是在install4j打包前,就能搞定这个事情。
俺主要搞c++, 对java不是很熟,又想搞他,咋弄?看完c++的DLL, 没发现明显线索。
那我只能当作自己是install4j的作者,如果我想在启动java的gui框架的启动程序中想弹窗,我会怎么干?
那我可能会准备一个模板程序(嵌在exe里面,或者放在数据目录中),在需要的时候,操作PE(这个很成熟,库很多),将需要的东西换了(图标,版本啥的),那么这个弹窗的代码,也可以重新编译链接成一个新程序(隐藏命令行),这也不难。
作者具体咋弄的,只能去install4j程序本身的目录去观察和猜测,如果能在.jar, .dll, exe中能看到一些线索就更好。
实际上,我确实没找到线索。
但是我根据自己的编程经验,在install4j目录中找到了作者的大致实现思路。
我先安装好install4j, 然后将install4j备份成.7z, 拷贝到自己的学习目录,解压开,也是可以正常运行的,功能都在。
翻了install4j的目录,没发现啥gcc之类的编译器,只有java的JRE. 这说明启动的EXE模块有可能不是编译出来的,更像是在一个固定模板上改出来的东西。
这说明,好像这启动的EXE是个模板,也许注册版和学习班分别有1个模板也说不定,那我就有更换模板的机会了。
在install4j/resource目录下看到了可疑的东西。
x.bin, x.bin.64, svc.bin 这些咋这么像自己分析思路中的启动EXE的模板呢?
打开看了一下,果真,都是EXE.
因为install4j可以打包x86, x64, 服务,所以有这些不同种类的EXE模板。
莫非正式版和非正式版的区别除了厂家会卖授权,还会提供一个单独的安装包么(在安装包内换上无弹窗的EXE模板)?
因为咱也不可能看到正式版程序是啥样子,所以,就事论事,尝试改这几个EXE模板试试。
经过试验,如果打x64的包,只需要改2个EXE模板。
winins.bin.64 是安装程序的exe模板
winln.bin.64 是安装后的主程序的exe模板
打补丁的方法可以参考另外一个笔记(IDM 6.40.11.2 弹窗的解决思路).
打补丁的点都一样,都在winMain中,很容易就翻到地方,如下:
打补丁之前
打补丁之后
将jnz loc_14001B178改为 jmp loc_14001B178
这个判断在弹窗之前,用图形化方式看的很清楚,改完之后,就不走neg弹窗流程了
改完之后,再用图形化窗口看就看不清了,用文本方式看。
效果
改完之后,原有的install4j工程不用修改,直接打包就ok.
打包完的安装程序,直接运行,不会弹框,会正常将程序安装完。
运行安装完的主程序,会直接进入GUI和逻辑,不会弹框。
备注
DIY的思路每个人都不一样,也不是每个人都能想出DIY实现的思路。
有了思路之后,DIY都不难.
如果自己真的想DIY, 但是自己思路不好使,也不损失啥,当学习了。