功能界面是这样的

这是我从闲鱼拿到的一个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.免费验证平台,没有对数据进行校验,很容易被山寨。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。