发新帖

【Android逆向教程】针对于APP积分限制的逆向思路+逆向实例

[复制链接]
56007 23
原软件下载地址:http://pan.baidu.com/s/1pJ7Gs47
软件介绍:
Easy Touch是一个像iPhone的AssistiveTouch的按钮, 它漂浮在你的手机屏幕(在任何APP之上), 你可以将它移动到任何地方.

功能
★ 快速设置(如:打开Wifi,调节屏幕亮度,手机网路开关等).
★ 打开你常用的应用.
★ 回到主屏幕
★ 锁屏
★ 应用列表与搜索(加入中文拼音快速搜索,如搜索"dx"则可快速找到“简讯”)
★ 最近任务切换(双击Touch按钮)
★ 自定义设置

开关包括:
-
屏幕亮度
-
静音模式
-
蓝牙
- WiFi
- GPS
- APN(2G/3G/
移动网路)
-
自动旋转
-
闪关灯
-
飞行模式
看完介绍下载软件,安装完发现还不错,唯一的缺点就是需要积分,本人最讨厌积分的东西了。所以就准备把他Aruba掉。
-----------------------------------------------↑前言
工具:apkide、bluestacks
首先下载软件,我明明的是easytouch.apk
用APKIDE反编译apk
然后编译apk,打开APK进行体验。点击app-主题,发现的有一部分主题是需要收费的。那我们随便点击一个看看
点击以后发现提示“您的金币不足”,我们将这个提示进入IDE搜索,搜索到唯一一个数值:
我们点进入以后发现了这一行信息:
   <string name="toast_error_coin_not_enough">您的金币不足</string>
这是一个针对弹窗的定义信息,那我们搜索他的string name
搜索后发现出现了好多的结果,经过仔细查看后除了第一个结果是public以外其他都是string,也就是我们之前搜索到的信息以不用的语言形式表达出来而已。
我们点开第一个结果:
   <public type="string"name="toast_error_coin_not_enough" id="0x7f0b0168" />
得到了这个对应的public定义,我们搜索岛:0x7f0b0168
找到了两个结果:
点进去line229: const v2, 0x7f0b0168{对应的10进制代码为:2131427688},查看java代码:
我们看到2131427688是出现在-1-2判断之外的,-2指的是金币获取失败,-1指的是金币获取中。
思路来了,一般情况下,积分软件兑换东西,是走一下几个流程的:
获取积分-取商品积分数-判断积分是否大于-{大于}购买-{小于}购买错误提示-结束
那么我们只需要将【判断积分是否大于】这一个部分的判断改为强制跳转到大于即可。
通过smali代码我们可以找个这个判断
-------------------------------------------------↓
:pswitch_0
    iget-object v1, p0, Lcom/shere/easytouch/ee;->b:Lcom/shere/easytouch/ed;

    iget-object v1, v1,Lcom/shere/easytouch/ed;->a:Lcom/shere/easytouch/ThemeShopFragment;

    invoke-static {v1},Lcom/shere/easytouch/ThemeShopFragment;->d(Lcom/shere/easytouch/ThemeShopFragment;)I

    move-result v1

    iget v2, v0, Lcom/shere/assistivetouch/b/a;->l:I

    if-lt v1, v2, :cond_0   //判断v1小于v2为真就跳转到cond_0,即积分不够则跳

····
--------------------------------------------------↑
我们修改时候将这个判断删掉就好了。
保存够安装查看效果。
发现点击后还是这个效果:
是我们改的不对?NO,我们该对了,但是我们没有改全!别忘了我们一共搜出了两个结果,我们才改了第一个。下面我们进入第二个,并查看java代码:
我们发现关键跟上一个差不错,那就再次修改吧。
根据图片中的方框,我们需要修改三个跳转才能够到达下载皮肤的地步!
首先最大的判断:if-gev1, v4, :cond_0  //v1大于等于v4,就跳转到cond_0
修改为:goto:cond_0
接着第二个if((com.shere.assistivetouch.h.a.a != null) && (com.shere.assistivetouch.h.a.a.size()> 0))
根据这个话找到该判断:   :cond_0
    sget-object v1,Lcom/shere/assistivetouch/h/a;->a:Ljava/util/HashMap;
    if-eqz v1, :cond_2  //对应com.shere.assistivetouch.h.a.a!= null
    sget-object v1, Lcom/shere/assistivetouch/h/a;->a:Ljava/util/HashMap;
    invoke-virtual {v1}, Ljava/util/HashMap;->size()I
    move-result v1
    if-lez v1, :cond_2  //对应com.shere.assistivetouch.h.a.a.size()> 0
在java中0x0表示为false或者null或者0,这里表示的是null
修改:将if-eqz v1, :cond_2 改为goto :cond_2
强制进入cond_2以后我们查看代码:
   :cond_2
    if-eqz v3, :cond_3 //对应java代码中的 if (i != 0),如果v3=0就跳到cond_3,反之不跳。
   iget-object v1, p0,Lcom/shere/easytouch/ui350/au;->b:Lcom/shere/easytouch/ui350/at;
    iget-object v1, v1,Lcom/shere/easytouch/ui350/at;->a:Lcom/shere/easytouch/ui350/ThemeShopActivity;
···
goto/16 :goto_1
-----------------------------------
修改:将if-eqz v3, :cond_3删掉即可正常下载皮肤。
编译打包查看效果。
已经可以下载了呢,好开心的说,去积分就这么简单。
最后说一下中心思路:获取积分-取商品积分数-判断积分是否大于-{大于}购买-{小于}购买错误提示-结束
修改判断积分是否大于才是关键!
                                  By Sarkozy

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复

精彩评论23

wgz001    发表于 2014-11-22 19:04:26 | 显示全部楼层
抢个沙发  :lol

举报 使用道具

回复 支持 反对
737672679    发表于 2014-11-22 19:04:55 | 显示全部楼层
这个必须要顶啊。

举报 使用道具

回复 支持 反对
vxzv    发表于 2014-11-22 19:07:46 | 显示全部楼层
法总就是牛气!

举报 使用道具

回复 支持 反对
哆啦B梦    发表于 2014-11-24 21:01:19 | 显示全部楼层
谢谢分享

举报 使用道具

回复
datecf123456    发表于 2014-11-25 10:25:38 来自手机  | 显示全部楼层
谢谢分享!!??

举报 使用道具

回复
lies2014    发表于 2014-11-29 03:35:17 | 显示全部楼层
谢谢教程,讲解很详细

举报 使用道具

回复 支持 反对
JackIO    发表于 2014-12-1 09:53:07 | 显示全部楼层
不错的帖子,顶一个。

举报 使用道具

回复 支持 反对
亚塔    发表于 2014-12-1 17:02:53 | 显示全部楼层
好像不错呢,学习了……

举报 使用道具

回复 支持 反对
xbing9    发表于 2014-12-9 19:23:59 | 显示全部楼层
学习Android逆向教程

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表