观世正宗 发表于 2015-11-8 21:41

安卓抓包&破解的2个实例

本帖最后由 观世正宗 于 2015-11-8 21:43 编辑


最近逆向的几个安卓应用,爆破点都是通过抓包找到的。
所以写一遍安卓抓包、逆向的文章,谨供小菜参考,大虾们别见笑~



用到的工具:电脑端:Androidkiller,Charles
                     手机端:就是Android手机1台

抓包工具我就用过Fiddler和Charles,后者好像好用点,所以本文用到的工具是它。
0x0 安卓抓包&逆向前准备--环境搭建电脑端操作:
1.安装Charles。
端口默认8888,记下,备用。

2.确认电脑的IP地址:
运行--cmd--输入ipconfig--回车

记下IP地址,备用。

手机端操作:
1.手机连接wifi后,进行"修改网络配置"操作,如下图。

2.手动设置代{过}{滤}理,如下图。
注意代-理主机填刚才记下的电脑IP地址,端口保持与Charles上的一致,即8888


之后用数据线连接手机和电脑,电脑打开Charles,手机打开个网页测试是否成功。


0x1安卓抓包&逆向例子1--以假乱真
例子是之前发布了的O2听书。
先通过以下修改,令返回值为"真",即可变成vip版:
纯文本查看 复制代码
?

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
.method public static b(Landroid/content/Context;)Z
    .locals 3

    .prologue
    .line 250
    invoke-static {}, Lcom/anysoft/tyyd/g/a;->e()Ljava/lang/String;

    move-result-object v0

    const-string v1, "is_vip_member"

    const/4 v2, 0x0

    invoke-static {p0, v0, v1, v2}, Lcom/anysoft/tyyd/g/b;->b(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Z)Z

    move-result v0

    const/4 v0, 0x1
    #返回真
   
    return v0
.end method






然而打开vip书籍,还是要付费!

可能我的计谋被服务器识破了,它知道我是冒牌vip,还要我付费。
所以还得修改。(其实已经是本地vip了)

----------------------------------抓包1-----------------------------------

打开某本会员区的小说后,我们观察Charles上的数据。如下图。
通过点击红色圈的选项,我们可以直接在Charles上看页面内容。

链接为:好长的网址。你们也可以打开看看。
我截取了一部分:
纯文本查看 复制代码
?

1
2
<audio id="637246" name="越女剑03" length="334" isFree="true" price="0.1" readPoints="10" pointScore="500" isUpdate="0" lrcUrl="" OrderId="3" isLive="0" liveAudioSDT="" liveAudioEDT="">...</audio>
<audio id="637247" name="越女剑04" length="359" isFree="false" price="0.1" readPoints="10" pointScore="500" isUpdate="0" lrcUrl="" OrderId="4" isLive="0" liveAudioSDT="" liveAudioEDT="">...</audio>






可以看出"isFree"是关键点。


----------------------------------逆向1-----------------------------------


Androidkiller反编译并搜索"isFree",再做如下修改即可:
纯文本查看 复制代码
?

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
iget-object v0, p1, Lcom/anysoft/tyyd/http/jc;->a:Ljava/util/HashMap;

    const-string v1, "isFree"

    invoke-virtual {v0, v1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Ljava/lang/String;

    invoke-static {v0}, Ljava/lang/Boolean;->valueOf(Ljava/lang/String;)Ljava/lang/Boolean;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z

    move-result v0
   
    const/4 v0, 0x1
    #返回真
   
    iput-boolean v0, p0, Lcom/anysoft/tyyd/http/ch;->h:Z






回编译--测试--成功!所有会员书籍免费了。

0x2 安卓抓包&逆向例子2--狸猫换太子
例子是之前发布的Windows桌面

精品主题要50魔豆,好贵,所以改一下。----------------------------------抓包2-----------------------------------

我们打开某个已经购买了的主题,观察Charles上的数据。如下图。


为方便起见,把链接复制下来:
http://www.moban.com/tools/GetThemeDetail.aspx?id=56599&UserName=52spguangz
然后用浏览器打开:

关键是
<modou>50</modou>
<status>buy</status>
一个是主题需要的魔豆数,一个是购买的状态。可是通过各种修改后,还是要付费。
所以我换了个思路:把UserName换掉,会怎么样?
即通过把
http://www.moban.com/tools/GetThemeDetail.aspx?id=56599&UserName=52spguangz
换成其他的链接,观察<modou>和<status>的变化。
通过几次修改发现,当UserName叫"1"或者叫"2"时(或者其他),
即改为
http://www.moban.com/tools/GetThemeDetail.aspx?id=56599&UserName=1
打开后变为
<modou>0</modou>
<status/>
对,免魔豆了,可能这个"1"是作者的系统号。


----------------------------------逆向2-----------------------------------
因为其他诸如modou,status等变量会随着username的改变而改变
那么修改username就行了吧。
Androidkiller反编译并搜索username=

看到这个BuyTheme(购买主题),点进去看看。
果然是这里,修改如下:
纯文本查看 复制代码
?

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# virtual methods
.method public onClick(Landroid/content/DialogInterface;I)V
    .locals 8
    .param p1, "dialog"    # Landroid/content/DialogInterface;
    .param p2, "whichButton"    # I

    .prologue
    .line 2662
    new-instance v0, Ljava/lang/StringBuilder;

    sget-object v1, Lcom/mobilewindowcenter/Setting;->WebRoot:Ljava/lang/String;

    invoke-static {v1}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    const-string v1, "tools/BuyTheme.aspx?username="

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    iget-object v1, p0, Lcom/mobilewindowcenter/DecorCenter$7;->val$act:Landroid/app/Activity;

    invoke-static {v1}, Lcom/mobilewindowcenter/Setting;->getUserInfo(Landroid/content/Context;)Lcom/mobilewindowlib/data/UserInfo;
    #获取用户信息
   
    move-result-object v1

    iget-object v1, v1, Lcom/mobilewindowlib/data/UserInfo;->mUserName:Ljava/lang/String;
    #读取用户名字
   
    const-string v1, "1"
    #令用户名为"1"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v1, "&themeid="

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    iget-object v1, p0, Lcom/mobilewindowcenter/DecorCenter$7;->val$info:Lcom/mobilewindowcenter/DecorCenter$PayInfo;

    iget-object v1, v1, Lcom/mobilewindowcenter/DecorCenter$PayInfo;->id:Ljava/lang/String;
    #读取主题id

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v1, "&modou="

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    iget-object v1, p0, Lcom/mobilewindowcenter/DecorCenter$7;->val$info:Lcom/mobilewindowcenter/DecorCenter$PayInfo;

    iget v1, v1, Lcom/mobilewindowcenter/DecorCenter$PayInfo;->modou:I
    #读取魔豆数量

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2
   
    //省略
   
    return-void
.end method






回编译--测试--成功。所有主题免费了。




本文结束,写得有点简陋了。感谢观看。
ps:待会记得把手机上的代-理改为"无",否则手机就上不了网了undefined
原帖网址    **** Hidden Message *****

神話丶 发表于 2015-11-8 21:45

沙发~,谢谢教程--,虽然会一点--

LYQingYe 发表于 2015-11-8 21:53

膜拜会 玩安卓的大牛

Bu弃 发表于 2015-11-8 22:31

膜拜。表示看不懂。。。

mst丶奇侠 发表于 2015-11-8 22:58

安卓大神,小弟完全看不懂是什么意思{:5_118:}

弑神 发表于 2015-11-9 00:36

膜拜楼主好腻害

小范 发表于 2015-11-9 08:31

挺牛逼的哈,感谢分享

雪里红 发表于 2015-11-9 10:07

谢谢了,不错的教程,正在看

s5688 发表于 2015-11-9 10:28

虽然是转的贴,但也不错啊

无坚不破 发表于 2015-11-9 11:17

好牛逼的技术啊,我是看不懂了
页: [1] 2 3 4 5 6 7
查看完整版本: 安卓抓包&逆向的2个实例