首页
社区
课程
招聘
[原创]记某app内购破解 – 安卓逆向菜鸟的初体验
发表于: 2018-4-15 20:57 41205

[原创]记某app内购破解 – 安卓逆向菜鸟的初体验

2018-4-15 20:57
41205

  因为某个机缘,我拿到一个赛车app,玩了一会想买个装备,居然要我掏钱包,作为一名cracker,我觉得我的尊严受到了严重的蔑视(无奈钱包空空),我觉得要捍卫我那脆弱的玻璃心(钱包),所以,开干吧。我搜索了网上相关的帖子,发现这个apk的破解都是讲了关键点都在哪里,没有具体的关键点查找思路,所以我重新自己破解了一次,中间多次误入歧途,我把自己的详细思路发在这里,与所有的菜鸟共勉。

   Android killer v1.3.1.0  -- 用于搜索字符串和重打包,下文使用缩写AK

   Apktool Box v1.6.4 – 用于获取调试启动命令,下文使用缩写AB

   小米5 MIUI9.5.1.0 android7.0 – 用于运行apk

   Android Studio 2.3.3(安装 smalidea-0.0.5插件) – 用于调试smali源码,下文使用缩写AS

   Jadx-gui 0.7.1 – 用于查看smali反编译源码,其实AK也有反编译功能,但是AK的反编译有的地方没有jadx好看,我发现switchcase结构AK总是翻译成ifelse结构。

  使用AS调试smali需要apk设置调试标识(不然AS会显示错误:Unable to open debugger port (localhost:7800): java.net.SocketException "connection reset"),用AK打开apk,从工程管理器栏打开文件androidmanifest.xml,在application项添加如下代码:

  如下图:

   

  然后选择菜单android->编译,重打包APK。并安装到米5里面。

  使用AB打开apk,点击启动命令按钮生成调试启动命令,

  


  将上图中下面的命令拷贝到cmd中,启动apk,手机中apk会停在调试启动界面。然后查看apk的进程PID,



  然后使用adb命令转发调试到tcp端口8700,如下:



接下来,使用AS建立smali源码的工程,并配置调试端口,这部分内容网上有现成的教程,这里就不多说了,建立完了之后,点击调试按钮,AS下面显示日志如下表示启动调试成功:


到此,调试环境搭建成功,下面开始破解。


老思路,先是试用一下。点击游戏的购买,会弹出一个购买的框,需要输入手机号和验证码,这里随便输入一个手机号和验证码,点击确认支付,不出意外会失败,并弹出一个提示框:



好了,这是我的第一个第一个失败点。我的思路是,既然它给了这个错误提示,那么显示这个错误的地方肯定有支付成功和失败的逻辑,那么我修改了这个逻辑,就可以了。OK,下面就是如何找到这个判断的逻辑。没错,字符串查找,最传统的方法,在android里面搜字符串,不能直接搜汉字,需要将它转为unicode码,然后将“短信验证码验证失败”转换为unicode码,则为“\u77ed\u4fe1\u9a8c\u8bc1\u7801\u9a8c\u8bc1\u5931\u8d25 ”,结果没有找到,好吧,是不是字符串拼接出来的呢,短一点,搜“短信验证码”,然后有了搜索结果



不好意思,我是小菜看不懂smali,将其转换为java源代码,


  

原函数太大了,这里只贴了一部分,看着逻辑真不像,那么到底是不是这个逻辑呢?验证的办法很简单,在这里下个断点,然后,没有断下来。那么在函数入口下个断点,还是没有来。好吧,这个思路以失败告终。后来跟踪代码我才知道这个支付框是从so里面弹出来的。呜呜。。

     

之前搜过类似的帖子,帖子说是搜字符串“支付成功”,所以我将字符串转化为unicode码,到AK里面去搜索,然后搜索到三个结果:



同样,验证这里是不是判断是否支付成功的逻辑代码,在每个字符串所在的函数头部设置断点,这里没有在字符串所在的位置设置断点是因为我是不会掏钱包的,所有的操作都是支付失败的操作,支付成功的代码逻辑肯定是不会来的,所以在函数头部设置断点,然后,点击确认支付没有断下来,但是当我点击关闭按钮时,却成功的断在了第一个函数中。这是意外的惊喜。然后使用jadx查看这个函数的逻辑:



代码的逻辑很清晰,检查参数resultCode的值,然后判断是否支付成功,所以这里很有可能就是我要的关键代码逻辑。验证一下,把所有的switch结构都改成到case1分支。Smali代码的语法是把所有的case放到一块,如下



上面代码的意思是将switch里面的值与1比较,结果为0则跳转到pswitch_0标号,结果为1则跳转到pswitch_1执行,所以这里把所有的标号都改为pwtich_0,并在下面添加一行,这样默认情况也会跳转到pswtich_0,即三种不管resultCode为何值,都会跳转到成功的分支,如下:



最后,编译重打包,安装测试,成功,OK。至此,成功破解了这个app的内功功能。


其实,当初我并没有按下支付框的关闭按钮,所以我走的是另一条思路,如果看到这里你还有耐心,可以看下我的弯路,哈哈。


思路三:我的弯路


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-2-2 10:00 被admin编辑 ,原因: 上传图片
收藏
免费 2
支持
分享
最新回复 (21)
雪    币: 16
活跃值: (477)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
支持一下马哥
2018-4-16 09:48
0
雪    币: 91
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
此文写的方法很详细,思路也较多。学习就应该这样从不同的角度思考问题。
2018-4-16 11:25
0
雪    币: 57
活跃值: (461)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
实测内购成功
2018-4-16 11:59
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2018-4-16 23:20
0
雪    币: 94
活跃值: (333)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
6
2018-4-17 09:28
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
7
  smalidea-0.0.5  插件在AS中总是崩溃的问题,楼主是如何解决的?
2018-4-17 22:07
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
支持,学习
2018-4-18 00:49
0
雪    币: 163
活跃值: (677)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
仙果 smalidea-0.0.5 插件在AS中总是崩溃的问题,楼主是如何解决的?
我没有遇到崩溃的情况,我的版本是AS2.3.3  X64  win7,可能是版本的不同吧。
2018-4-18 18:43
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
购买框里的支付方式  有话费,支付宝,微信,这个手机号和验证码的界面是怎么进来的呢
2018-4-20 12:51
0
雪    币: 163
活跃值: (677)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
lishiyoujiu 购买框里的支付方式 有话费,支付宝,微信,这个手机号和验证码的界面是怎么进来的呢[em_1]
我的开发机里没有QQ,没有微信,没有支付宝,没有电话卡
2018-4-21 14:01
0
雪    币: 9
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
qiantang 我的开发机里没有QQ,没有微信,没有支付宝,没有电话卡[em_19]
大神,我点购买的时候显示无可用支付方式,怎么破
2018-4-24 16:53
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
重新打包apk,安装的时候,提示签名不一致,安装不成功。荣耀9的手机,这个是不是和安卓系统有关系啊?
2018-5-3 22:35
0
雪    币: 163
活跃值: (677)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
冷别赋 重新打包apk,安装的时候,提示签名不一致,安装不成功。荣耀9的手机,这个是不是和安卓系统有关系啊?
删掉原来的,重装
2018-5-4 15:05
0
雪    币: 20
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
apktoolbox可以分享一下吗
2018-5-6 16:21
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
楼主NB,弱弱的问下楼主能破解安卓协议吗?  有偿破解    wx1132833044
2018-5-9 22:29
0
雪    币: 239
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
这app没做混淆也没做加固的么?  这代码看着这么清晰
2018-5-10 14:26
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢, 很详细, 思路很好. 
2018-6-28 14:48
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
學習留名 -- 這是第一篇學習安卓破解的文章
2018-11-11 16:34
0
雪    币: 229
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
楼主可以帮忙破解一个app吗 
2020-1-14 19:16
0
雪    币: 229
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
有偿求破解 加我qq2780695185
2020-1-14 19:18
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
谢谢分享,路过留个mark
2020-1-14 19:24
0
游客
登录 | 注册 方可回帖
返回
//