
功能界面是这样的

这是我从闲鱼拿到的一个APP,这个APP是用来刷量的,市面上很多此类软件,软件授权是一机一卡。(一个手机一个卡密)
这个软件的特点是未加固、未混淆,所以今天就来拆解它。

用到的工具:
1.雷电模拟器
2.MT管理器
1.先用MT管理器看看dex

从上面的图可以看出一些关键信息:e4a.runtime、主窗口、公用模块
根据这些信息就可以判断出,这个APP是E4A开发,别问我为什么知道,因为刚接触安卓自动化APP开发的时候,我就买了E4A的会员,E4A是全中文安卓应用开发,但是然并卵。

点进“主窗口”,看到这一堆的引用库,就更确定这是一个E4A开发的APP了
调用这么多库,能省不少时间,开发者只要专注写逻辑就可以了。

这里在主窗口.java的源码中找到了非常关键的信息,这里直接暴露了接口和请求参数,我只能尝试请求下这个接口,看看返回什么?
POST请求的结果:

输出的是:-81004 这个貌似是一个接口的错误码
再试试GET请求:

输出的是:文心云网络验证 支持任意编程语言对接的WebApi验证
这貌似是一个网络验证平台,也就是开发者对接这个平台,自己不用管收费卡密这块的事情,由这个平台处理,平台仅提供接口和调用文档供开发者调用,平台则按比例收取开发者费用或者由开发者预充值。
这大概就是网络验证平台的一个盈利模式,扯远了,继续回来分析。
经过一番搜索,找到了这个网络验证的登录页面:


emmm……原来这个验证平台是免费的,牛啊


我在平台中找到了这两个API的使用文档,这个授权接口有4个参数和源代码中的参数一致。
String str = 加密操作.取MD5值(转换操作.文本到字节(this.手机1.取IMEI码() + this.手机1.取手机型号(), “UTF-8”));
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
StringBuilder sb3 = new StringBuilder();
StringBuilder sb4 = new StringBuilder();
StringBuilder sb5 = new StringBuilder();
sb5.append(“Softid=” + 公用模块.全局软件标识); //softid 是软件标识
sb5.append(“&Card=”); //card 是软件的卡密
sb4.append(sb5.toString());
sb4.append(this.编辑框_单码卡密.内容());
sb3.append(sb4.toString());
sb3.append(“&Version=1.0″); //version 是软件的版本号,这里是固定的
sb2.append(sb3.toString());
sb2.append(“&Mac=”); // mac 是软件的机器码,也就是一机一码的标识。
sb.append(sb2.toString());
sb.append(str);
现在该思考了:
验证平台是免费的,那么我是不是可以直接替换授权信息,就可以给自己发卡了。
在代码中找到软件标识初始化的地方了

通过前面的代码,可以看出,关键点就是softid,如果替换softid,是不是就成功呢?
那就试试吧

这里就是我刚添加的一个软件,
我的软件标识(softid):4S6S7W1P5F2E7X9O
原来的软件标识(softid):0H3V0A2U4E2G2S3N
这里直接用MT管理器修改重新打包签名试试看

用自己的账号,在平台发了一个卡密,软件上就验证成功了。
这个方法在圈子里叫山寨法,软件还是正品软件(我们没有修改软件的任何逻辑代码),只是替换了授权人(softid)。
至此,XX音乐人助手就算是和谐了。
总结:
1.安卓APP没有加固,很容易被反编译。
2.安卓APP代码没有混淆,很容易被反编译。
3.免费验证平台,没有对数据进行校验,很容易被山寨。

评论(0)