像我这样的,一天到晚都往外跑,坐车坐好久,等人等好久的。其实这些时间都是浪费的。这些时间如果能够合理分配。用来学习复习。效果还是蛮好的。
但手机上药进行学习的话也不是太方便,今天给大家带来一个软件。java学习手册。市场上评价应该是最好的java学习app了。
PS:这个软件是积分制的,里面看资料需要积分,这样当然不是我们想要的。所以xx之。
PSS:我不是来打广告的。我发的是破解版,顺带写一下破解的过程。不想看废话的请无视之,直接去楼底下载破解好的APP。
大J8有人发过破解教程。我的做法基本相同,工具略有不同。发上来大家看看,以后有需要破解app就可以自己动手之。
在此鸣谢J8的"Sundstr_m"童鞋。
现在要破解android上的APP其实难度真的越来越低了。一般的流程就是解包,反编译,修改源码,打包,签名,搞定。
我这次用到的是ApkTool+dex2jar+jd-gui的集成工具--Apk改之理。大家可以自行百度这个软件。
首先,要破,得知道破什么。对吧。打开未破的软件来看看先。
软件的UI还是挺不错的哦。
分类挺详细的,点开分类里面就有各种资料了。但是需要积分,差评之。
随便点开一篇文章,就会转到这个界面了。积分不足,要你下载别的软件获取积分or购买正式版。
于是,我们破之。
先来分析下,程序的运行流程,这里用到了eclipse了。去Android官网下载整合了sdk的eclipse即可了。
打开eclipse,第一次打用的话,window-show view。把logcat调出来.
logcat的输出信息太多,我们过滤一下,找到那个绿色的加号,添加过滤:
name随便下,Tag就是我们要过滤的标签,按照我们这个程序的运行情况来看,它是再点击文章的时候先检测你的积分。
然后积分不够的话,就会跳转到获取积分的界面,有点android基础的童鞋都知道,这些界面都是activity来的。
所以就过滤下AvtivityManager来看看Activity的跳转情况来着。
输出还是太多,点一下上面框框的info。
打开程序,再次点进文章,看看log:
当程序跳转到了获取积分的界面的时候,就跳转到了AwrdActivity这个activity上了。
下面使用xx工具,反编译软件。打开APK改之理:
软件的使用太简单,太傻瓜化了,不多说,直接打开要xx的app就会自动反编译了
我们不是查出来时跳转到了AwrdActivity了吗?
直接根据app的包名就找到了AwrdActivity的smali文件。打开之。
反编译出来呢,我们具体要修改的其实是smali文件,smali是什么东西,可以百度哦。
里面的代码看不懂?不要紧。。我也看不懂多少。我们懂java就行。
直接选择编辑,打开java源码。就会调用jd-gui来打开反编译出来的源码了。
jd-gui是一个利器啊。直接打开了AwrdActivity的源码。我们来观察下。不懂android也不要紧。还是那句,我们懂java就行。
在这里,我们有两个选择,第一,可以继续根据源码来查找时从何处开始跳转的。
因为跳转前肯定会判断你的积分是否不足,那么我们在跳转前的判断出修改判断的条件就可以达到目的。
但是我通过观察AwrdActivity这个类呢,选择了第二种方式。
在获取积分的界面呢,你可以看到有两个东西,一个需要200积分,一个需要700积分。
在AwrdActivity里面就有两个方法分别叫"init200"和"init700"。
未破解前你在软件中点那两个东东,会提示你余额不足,那么就是说,这两个方法内肯定也有判断积分是否不足的方法。
我们直接观察:
整个方法内,第二句代码就开始条件判断了,判断的条件表达式是数值,应该就是积分了。那么第一句就肯定是获取当前积分的。
那么根据这个思路,我们直接修改当前积分不是更方便咯?继续下一步。
init200方法内的第一句代码是通过另一个方法的返回值来赋值的。在AwrdActivity内找到这个方法。
这个方法只有一句代码,是调用了PointManager这个类的queryPoints方法了。
直接点击PointManager。观察它的源码。找到queryPoints方法。也是只有一句。加上一个返回值。
那么我们就直接在这里动手吧。不选择在AwrdActivity动手,是因为考虑到应该会有其他地方会调用PointManager的。所以我们在源头动手
回到APK改之理,打开PointManager的smali文件。找到queryPoints。
其他代码我们可能看不懂,但是我们查看java的源码看到他是有返回值的嘛。那么return我们总能看懂咯?上面的第一个return就是返回值咯。
v0明显应该就是被返回的返回值内容了。那么我们在其返回前修改其值即可。
怎么修改呢?还是查一下smali的语法吧。。经过百度,要赋值的语法就是图中框框的第二句了。赋值的数值是16进制的。
最后到底行不行呢?重新编译,安装,运行看看呗。
重新安装软件之后,跳转到了获取积分的界面,点激活所有模块。不再提示余额不足了。
选择确认、
所有模块激活成功。
还可以尝试去获取正式版哦。这个文本框没有做安全处理,空值和非邮箱都可以发送。差评之。。
最后看下我的积分?1000分。证明修改成功。
但是。。。但是真的修改成功了吗?
没错的。基础知识那边的所有模块现在都可以看了,不会再跳转到获取积分了。但是。这个软件还有第二页呢。。
打开第二页看看:
点上面那三个发现。。居然没破掉。。好吧,继续xx之。
根据“200积分”这个关键词搜索。不在资源文件中,那么肯定是写在了类中。
在jd-gui中搜索找到了MainActivity中,通过观察发现,它也是做了判断,也是调用了PointManager。。但是是另一个spendPoints的方法。
来到PointManager中观察spendPoints。发现和上面修改的很相似,只不过改成了布尔值。那么就好办了,同样的步骤操作之。
在smali文件中,找到spendPoints,在返回值返回前修改其值。百度smali的语法。布尔值的赋值就是如图。布尔值只能是0x0或者0x1.
改成0x1。让它一直返回真。重新编译,安装测试。
这次就可以了,全部功能可用了。
里面的面试宝典,准备面试的额童鞋可以看一看,看起来方便,其实就是张孝祥老师的java面试宝典。不过看起来比word方便啊。
还有在手机上查一下API还是超级方便的说。
最后发现,其实一开始,我就直接修改spendPoints这个方法就好了。。悲剧之。
最后就是这个APP的附件了。
http://pan.baidu.com/s/11grMP
|