Termius破解版修改方法
准备工作
先使用npm安装asar模块
安装命令:npm install -g asar
然后打开程序位置下的resources文件夹,将下面的app.asar反编译出来,如果没有提示任何信息就结束则已经好了。
反编译命令:
1 | asar extract app.asar ./app |
asar用法提示:
解压app.asar
1 | asar e app.asar <解压后的目录> |
打包app.asar
1 | asar p <被打包的目录> app.asar |
正式修改
本文代码针对Windows 版7.11.3,由于原作者对软件进行了混淆加密,不同版本参考思路进行修改即可。
首次欢迎界面
原样式:
Hint:由于程序经过代码混淆,请参考下面原值找到正确的位置进行修改
位置:app\js\ui-process.js
定位值:openLoginScreen:A})))))}}
搜索定位到此方法的代码出,利用括号匹配提示找到整个方法的代码
参考值:
1 | class pv extends De.Component{componentDidMount(){this.props.mounted&&this.props.onMountWelcome()}render(){const{openLoginScreen:A,onOk:e,opacityWelcome:t,translateYWelcome:r,opacityContainer:n,closeContainer:i,onClose:s,classes:o,endMount:a,mounted:B,handleTransitionEnd:c,setRef:g,setFadeOutRef:l}=this.props;return me.a.createElement("div",{className:jr()({"termius-dark-theme":!0,[o.container]:!0,[o.transitionContainer]:!0,[o[n?"opacityOn":"opacityOff"]]:!0}),onTransitionEnd:c,ref:g},me.a.createElement("div",{className:jr()({[o.loginBtnContainer]:!0,[o[B?"transition":"transitionElement2"]]:!0,[o[t?"opacityOn":"opacityOff"]]:!0,[o[r?"translateYOff":"translateYOn"]]:!0})},me.a.createElement(Ug,{onClick:()=>{A()}},"Log In")),me.a.createElement("div",{className:jr()({[o.description]:!0,[o[B?"transition":"transitionElement"]]:!0,[o[t?"opacityOn":"opacityOff"]]:!0,[o[r?"translateYOff":"translateYOn"]]:!0})},me.a.createElement(fv,null)),me.a.createElement("div",{className:jr()({[o.row]:!0,[o[B?"transition":"transitionElement3"]]:!0,[o[t?"opacityOn":"opacityOff"]]:!0,[o[r?"translateYOff":"translateYOn"]]:!0}),onTransitionEnd:a,ref:l},me.a.createElement("div",{className:o.pictureContainer},me.a.createElement("img",{className:o.image,src:Mv,alt:"welcome"}),me.a.createElement(vv,null)),me.a.createElement("div",{className:o.formGroup},me.a.createElement(av,{onOk:e,onClose:s,closeContainer:i,openLoginScreen:A},me.a.createElement(hv,{closeContainer:i,openLoginScreen:A})))))}} |
修改值:
1 | class pv {} |
此时再打开程序时,提示界面已经没有了
Preferences中的Account
原样式:
位置:app\js\ui-process.js
原值:[],{title:"Account"},{title:"Terminal"}
修改值:[],{title:"Terminal"}
方法:使用修改值替换原值
效果图:
左上方菜单栏中的Account
原样式:
位置:app\js\ui-process.js
原值:[],"Account","Terminal","Shortcuts"
修改值:[],"Terminal","Shortcuts"
方法:使用修改值替换原值
效果图:
左上方菜单栏中的Login
定位值:()}},"Login")
位置:app\js\ui-process.js
参考值:
1 | !o&&me.a.createElement(hm,{className:n.item,dense:!0,onClick:()=>{this.login(),e()}},"Login"), |
方法:根据定位值
找到此方法的代码,类似参考值,然后删除即可
提示:注意最有有个逗号也要一起删除,代码由于混淆了,不要直接搜索参考值
效果图:
菜单栏Try
原样式:
位置:app\js\ui-process.js
定位值:},"Create Account")));
参考值:
1 | ,M=me.a.createElement("div",{className:i.promoContainer},me.a.createElement("div",{className:i.tryPremiumContainer},me.a.createElement(EQ,{color:"primary",fontSize:12,bold:!0},"Try Premium for Free"),me.a.createElement("div",{className:i.infoText},"SFTP, Secure Sync, Snippets"),me.a.createElement(Ug,{className:i.createAccountButton,onClick:C,size:"xs",fullWidth:!0},"Create Account"))) |
方法:找到类似上方代码删除,最前面的逗号要删去,)))后的分号要保留。
Hint:修改后仍然显示“Sentry Logger”,这里我们可以先不用管它。
左下角Try
原样式:
位置:app\js\ui-process.js
定位值:})?null:a};
参考值:
1 | var m0=({isCompactMode:A})=>{const e=Kn(Ea),t=Kn(vO),r=On(),n=Object(De.useCallback)(()=>{r(IF(Date.now())),r(TB({promotionLocation:"Sidebar",promotionType:"Trial",trialDaysLeft:void 0}))},[r]),i=Object(De.useCallback)(async()=>{try{r(RB({promotionLocation:"Sidebar",promotionType:"Trial",trialDaysLeft:void 0})),Eh.userJustSawSuggestionToTryPremium();const A=await M0();r(nB({Source:"TryPremium",Email:A})),await iF(),await Db()}catch(A){}},[r]),s=Object(De.useCallback)(()=>me.a.createElement(I0,null),[]),o=Object(De.useCallback)(()=>me.a.createElement(EQ,{whiteSpace:"nowrap",color:"success",fontSize:10,underline:!0},me.a.createElement(Ug,{base:!0,color:"inherit",onClick:i},"Learn about the free trial")),[i]),a=Object(De.useMemo)(()=>me.a.createElement(bQ,{handleClose:n,IconComponent:s,LinkComponent:o,isCompactMode:A,description:"Try Premium for Free"}),[s,o,n,A]);return Object(De.useEffect)(()=>{D0({username:e,freeToTrialDismissTimestamp:t})||r(LB({promotionLocation:"Sidebar",promotionType:"Trial",trialDaysLeft:void 0}))},[e]),D0({username:e,freeToTrialDismissTimestamp:t})?null:a}; |
修改值:
1 | var m0=({isCompactMode:A})=>{return null}; |
方法:将方法返回为null,参考上方代码
效果图:
开启专业模式
原样式:
位置:app\js\ui-process.js
原值1:return A.user.account.pro_mode
修改值1:return true
原值2:return A.user.username
修改值2:return 'FreeUser'
效果图:
Hint:这里需要替换修改两处内容,开启专业模式后上面的Sentry longer就没了。
关于信息
位置:app\js\main-process.js
原值:Version ${this.options.version}\n\nTermius Corporation
修改值:Version ${this.options.version}\nTermius Corporation\nCracked by Oliver
Hint:为了显示破解信息故作者在关于增加此信息
打开开发者工具
位置:app\js\main-process.js
原值:this.browserWindow.loadURL(e.url)
修改值:this.browserWindow.webContents.openDevTools()
屏蔽自动更新
1、删除 resources/app-update.yml
2、去除菜单栏里的检查更新
原样式:
位置:app\js\main-process.js
定位值:)},visible:
这边定位会出现两处代码,可以看一下第一个位置,它不显示是怎么写的,如图这便混淆后要想不显示则设置的是gu()
接下来跳转至第二处定位值,注意后面应该有“About”,将这里的vu()
改为gu()
参考值:
1 | {label:"Check for Update",click(){_u("menu:check-for-update")},visible:vu()} |
修改为:
1 | {label:"Check for Update",click(){_u("menu:check-for-update")},visible:gu()} |
效果图:
总结
一定要记得每修改一处代码就要保存,打开程序是否能正常打开。如果你按照上面的方法修改后,就可以愉快的使用Termius了,提示下不要将app文件夹在打包asar文件,打包后貌似不太管用咯!