JuiceSSH是一款免费的远程ssh客户端,感觉是一款挺优秀的软件,里边有一些高级功能需要购买高级版才能使用,这里便对其对高级功能的破解进行分析。
本文仅用于学习交流使用,请尊重作者,勿在网上肆意发布其破解版
这里以v2.12版为例,目的是解锁其代码片断的功能(可以把一些长的命令储存在里边,用的时候不用手打了)。
1、控制台代码片段功能解锁
未解锁之前代码片断是灰色的,无法点击。
首先通过“保持屏幕常亮”对此Dialog的代码进行定位
通过keep_screen_on再进行定位
通id定位到smali文件中
明显修改地方位于这个Activity里。然后打开此smali文件,可以看到id出现的地方
是创建一个ContextMenu,然后查阅java源码:
定位到onCreateContextMenu方法
接着看里边的内容
关键是这个setEnable方法,设置了菜单项不能点击,并且上边有个字符串拼接的句子拼接的结果是(XXXX)可以想到是未解锁前的(仅高级用户可用)这样就可以对这个if判断取反了,回到smali里边:
定位到onCreateContextMenu,然后向下找:
可以看到(和)并且有个if-eqz,直接取反改为if-nez.
然后还需要解锁管理代码片断的功能
没解锁的话点击会跳转到购买页面,那么就想到会有一个Activity的跳转,而且设置页面一般采取的是Preference。
直接去xml文件夹找,发现了setting.xml
很容易知道上边两个上锁的item是前两个,而且是自定义的Preference组件,俩个都是com.sonelli.juicessh.views.ActionPreference,直接用包名找到文件,查看源码:
看到里边有个onClick方法,并且会开启PurchaseActivity,所以对上边的if取反,回到smali文件:
把if-nez改为if-eqz,让它直接返回,不开启购买页面。
但是这样修改之后安装发现点击被锁住的菜单项不会弹出购买但是也没有反应,应该还有验证的地方,再回到ActionPreference的java源码:
发现他实现了一个接口,并且从名字就可以看出是与购买高级版有关、
进入接口发现只有一个方法,然后再回到PurchaseActivity里寻找:
看到上边有个判断,将点击的监听事件设置为了null,可以断定验证在这。
回到smali文件:
可以找到代码在这,然后修改if-eqz 为 if-nez;
这样就完成了所有的破解的工作。