最近一段时间,本人一直咳嗽发烧,为了研究个二代抽取加密脱壳机,一星期都在生病熬夜中。。。。有一段时间什么都没发,就发个大理论指导《有服务器逆向六大思路》,还被人无端骂,实在是。。。反正还望见谅吧。不废话了,这次我来和大家谈谈微信红包辅助这个东西。貌似最近微信辅助特别火,无论是自动群发的微++,还是红包辅助,都卖到2000一个,实在是天价。不过微信肯定已经采取措施了,以后自动群发营销可能不好做了。继续回到微信红包辅助,顾名思义,就是微信中抢红包的辅助,注意:这种辅助确实存在,但绝对不是那种几百K就能实现的病毒木马,很多什么600K的抢红包辅助都是拦截马,锁机。其实,只要注意一点,就知道这种辅助软件在安装时是不需要“屏幕密码规则”权限和“发短信”权限的,还请各位注意。 一开始,我对于这个3.7MB的小软件并不在意,特别看到它的界面以后,很简单,只有两个界面,一个注册界面,另一个功能界面。可后来慢慢跟下去才发现,这东西做的还是不错的,从它相对复杂的类,和一个2MB多的so中就可以看出,确实花了一些功夫。先来看看界面(这个软件是我修改的,红色部分为原软件界面中控件名称):
很多朋友可能看到如此清爽简单的界面,会暗自高兴,只要修改XML中的入口点跳过注册界面,或者爆破下注册码就可以。很抱歉,这个开发商还是比较不错的,两种办法都无法实现,如果你强行爆破,得到的第二个界面是白屏,也就是什么内容都没有。为什么会这样?我们后面再说,这个软件说起来可能分支较多,为了条理清楚,本文分三个部分阐述,分别为如何快速达到破解这个软件的目地、软件功能界面加载和软件注册原理、微信红包辅助该如何实现。 一、 软件快速破解 稍微分析可以知道,短时间内想通过注册码或者跳过界面是不可能快速破解的,很多人想到这个软件可以试用,于是想无限试用行不行,答案肯定是可以的。当这个软件在试用次数多了以后,就会出现“试用次数过多。。。”。很多朋友又会搜索这个字符串,当然一无所获。这个字符串隐藏很深,在so中那个位置,有大概几十种case情况,所以还是会把人误导想简单。于是,又有朋友想去搞这个按钮点击事件,跟跟就发现,这个界面有2个按钮,只有1个onclick按钮点击事件,代码差不多几页,于是又哭了。。。。其实根本不用这么麻烦,我们思考下,凡是试用,其实原理都是获取设备的信息,两条路,一个就是利用软件修改设备信息,另一个就是到代码处修改获取设备信息函数,让它永远返回是新机。先到入口点,直接看oncreate()方法: 我们非常清楚地看到了一句获取设备代码,而稍微看下,就知道tlib类,实际上是基于那个2MB的libtlib.so的,反正就是so里的东西。我们选择第一条思路下手,很简单,做一个基础XPOSSED框架的一键新机修改设备信息就可以,网上很多,我做的如下: 二、 软件功能界面加载和软件注册原理 上述说到,利用无论是入口点爆破,还是注册码爆破,得到的功能界面都是白屏,很多人想不明白,这是为什么。我们到功能界面的oncreate()方法中去寻找答案: 这个又出现个三个类:T_RuntimeManager,Utils和tlib。最后一句代码刚刚已经分析过,又获取一次设备信息,来判断是不是新机。T_RuntimeManager有1个加载功能界面的属性,我们认为这个类中存在答案。进去一看,发现一个文件夹/t_reg_cache/: 由此,我们知道了这个软件的功能界面根本不在一般情况下的布局XML里,软件里根本不存在功能界面的布局,当试用成功或注册成功后,才会加载布局,而这个文件夹中,main.twin文件其实相当于1个布局XML文件,里面写着功能界面的布局: 可以看出,如果注册码不是真的注册成功,那么功能界面都是白屏,而大家可以自己搜索tap.rc文件和intermediate.tis这两个加密的类似的脚本文件,都是和注册相关的文件。下面再来说说注册的原理,上面说了,在注册界面有2个按钮,却只有1个onclick方法,看来不得不对它分析了。其实并不是只有这2个按钮共享这个onclick方法,连“解绑”和“清除注册”的点击也是这个方法。 这里清晰的有1个函数startScript函数,看来比较注册码的是利用了很复杂的函数,类似于脚本。到此,我们终于找到了注册码的方法,下图我标红色的代码,就是主要的注册码验证方法了,它的主要方法是将输入的注册码inputregcode放到libtlib.so的fundownscript函数中比较。有兴趣朋友可以好好看看这个so,这个so确实写得不错。这里再提一下, this.executeFloat = ((Button)findViewById(2131427336))这句代码,是用于功能界面开启悬浮窗,所以函数中含有floatactivity的大多是与悬浮窗功能有关。而 initialProj("")函数,实际上是启动1个抽取工程,也就是实现加载功能界面的。与之对应有1个reloadProj()函数,我们继续分析:
三、 微信红包等抢红包辅助如何实现 我们回到注册界面的oncreate()方法,发现如下代码,可以看出,它的运行需要一个jar包,而我认为这个软件最出彩的就是使用这个jar包,这个jar中包含的就是微信红包辅助的关键实现。脱壳的朋友都很熟悉,这是加固初级最常用的手段,虽然这个jar包没有做的加密,但能有这个意识,已经是非常不错了,而且确实,这个软件为了实现抢红包还有了inject注入的功能。并且,从代码也能看出,抢红包软件需要su。 这个jar包的名字叫foo.jar,利用ZIP查看,立刻知道,这个jar包非常类似于1个APK,而抢红包辅助实现的关键代码应该就是在这个jar包中的dex里。 非常清楚,这个jar的版本号是5.1,正好对应了上述oncreate()方法中的 updataJar函数后面的参数“5.1”。我们也就知道,libFigurecolorEx.so这个so文件就是实现抢红包辅助的so,而上述那个libtlib.so这个so文件主要是实现注册验证的so文件。至此,我们对于这个软件的整个框架思路就已经结束了,脉络完全理清,有兴趣的朋友可以模仿,改造等等了。资料下载: http://pan.baidu.com/s/1i30dHkh
|