开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 73695|回复: 173
收起左侧

[交流] 实战:动态调试APK,以宝宝树为例.

  [复制链接]
发表于 2015-8-4 21:40:12 | 显示全部楼层 |阅读模式   浙江省杭州市
本帖最后由 adslxyz 于 2015-8-5 09:44 编辑

#####0x01.准备工具
1. IntelliJ IDEA
2. baksmali
3. AndroidKiller
4. IDA6.6
5. Fiddler
6. 一台Android真机(或者模拟器)
7. eclipse
#####0x02.抓包
手机连上`wifi`,与电脑处于同一局域网,然后设置好Fiddler,具体步骤不详述。
打开`宝宝树孕育6.2.1`版本,进入`登陆`窗口,输入账号密码点登陆,在电脑查看封包。
可以得到请求`URL`:
        
        http://www.babytree.com/api/muser/login
        
方式:`POST`

参数:

        android_id=d77c45cb6182db0e&build_serial=mmmm&local_ts=1438682239&source_channel=pc_pregnancy_tongyong_app_140729&longitude=122.535462&latitude=35.582332&phone_number=buROv8rMh50AdCj7mYdAZwWv9YEpsIR2mClGrO43QK6E5GHko7aEZwtZMT%2F2nvyuUCYsFtx%2Bkz1kwpthbRlpZecGXjkbyaaeIE4ocYjolDyLXLduydRCjnG%2Bk9OEfBr3QCShaiJ2Z%2BeDQIeqgTssdlzZqzFfpHzsg3oWpdF3RbMLF3O93RzGWntJgkgvzjzK7BfwvRF8p8o6Se2l7mX7malpYrn35H2kh4mEAaLaBGoj2naCxcSXCn6X6w9za6hofkhogCtB7PpY6pulzY%2BOhejwG1jdoCpqRxcctRcsFPWNz72SD8Mmqkq6wRVeLYX5ZIoWNafwEJuPobuRtmvhQzg%3D%3D&version=6.2.1&imei=90000451032112&secret=b8a310e750c8af5187197c279a7e0241&email=zLkZURsmEpT8fGCGGNADu2KAZ79zkZI3b%2FMBDh5i1vCAbvFmKoGu7L4nBPsOvnzzsnWtuOJipiITnoRQ5w%2FNTy%2FvEx%2BX%2FO8Ff8jcU2qBAXTzGgd0x1lZ8PsGuan0944ax5n1douoaTC370Hv4A%2F58IhP8rhcQWnO4FzFol8FC%2FXQ%2Fd1%2FoAQOycwdLeBUm0JJ5tRKiaT2nBwD1z7Dn1CShswWCNN2zDCvYgtJ7Ig3JIQipUahL9OaR%2FQnzUzk%2BmaC%2Fm6iRr1q4wkiz9lexJkXFHf1g5VuFqshCNgxdgeDw%2BZHuagedfj5MakZD96Lj%2BtZtRf6GhaLbY29tSL65EdSgsg%3D%3D&password=AhOxbuypr6JYDgpP%2Fw%2BLhVlfzwusSMOaE0137YBOvOAZkk%2BbCHwzfduzqsjasx6zrhZUkZv3aoZ27HDIFAebdgsRS9lh2eeuxXiIxZdkaVPy47UNMdLHo1fFnuUEOCbE144H%2FL%2B2EeY%2BjbE8Ebjg0gXuZ7ziNZ%2Bmrgt4%2FrN8YbizcbyCx7A%2Fue3GD3p58GV3ztnlxWp9d4D1IlMT5V%2B8qxi3VDpQMr0Ghi4MaDTkH%2FV8fcRSCBqutHTDsEs%2F5AfBgksHFT6Dcxl3tpBIIfdgEmU4EZ%2BpqLqVxVFLdjPA0MJOhzE36P8NqTPiKEXzTuJcmaaS5qU34d2dHGYP2wc7Dg%3D%3D&client_type=android&app_id=pregnancy&mac=5c%3A51%5A57%3A55%3A26%3A4d&client_baby_status=1&bpreg_brithday=2100-01-01



分析可知:

`phone_number`,`password`,`email`,`secret`四个参数为加密,其他参数均为固定或者地理位置信息等参数。

所以此次目标就为这`4`个参数

#####0x03分析调试
1. 先把apk拖入AndroidKiller进行分析,可知无壳。
2. 根据先前分析,可在AndroidKiller中搜索相应字符串查找我们感兴趣的函数
搜索`muser\login`,可知登陆的函数在`com.babytree.platform.api.muser`中的`login.smali`中。
由图可知


Login.java的父类是ApiBase,可以猜想,所有Api的请求所公共的函数都会在此类中生成。
关键地方找一个就行,本次分析主要还是以动态调试为主.
3. 用baksmali将apk反编译成.smali文件
4. 然后打开IntelliJ IDEA,创建一个java工程.将上一步反编译出的smali文件导入到src文件夹中。如图:
5. 然后打开eclipse,切换到DDMS视图,选中手机,查看其端口,如图:

图上可以看到,目标应用的端口为8631.
6. 切换到IntelliJ IDEA,选择Run-Configurations.
7. 然后新建一个Remote,填写端口为8631,然后选择source using module's classpath为我们之前创建的项目,点击OK
8. 接下来在IntelliJ IDEA中打开Login.smali,快速浏览一下,选择一个感兴趣的地方下断点,这里我选择.method protected a()Ljava/lang/String;
在函数起始处下断点后,在手机中输入账号密码,点击登陆,可以看到断点成功断下,如图所示:

从图中可以看到,左下角为函数的调用堆栈,从 登陆按钮 按下(OnClick),到api.user.login整个的调用过程。
展开右下角的p0,可以看到此时已经生成了3个参数,

说明在断点之前,参数已经生成好了。
所以我们按照函数的调用栈,挨个查看调用过的函数。
查阅一番后可以发现。Login对象是在
LoginActivity中的.method public a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V方法创建的。
在new-instance v0, Lcom/babytree/platform/api/muser/Login;处下断点,重新点击登陆按钮,如图:

此时v1.v2.v3寄存器分别出现了加密的结果,由上可知,分别对应`phone_number`,`password`,`email`三个参数。
所以加密的函数应该就在上面。
往上下断点,重新来一次观察一下加密的过程。
可知:
iget-object v0, p0, Lcom/babytree/apps/pregnancy/activity/LoginActivity;->u:Ljava/lang/String;
这一句函数调用之后,v0是一串固定字符串。
invoke-static {p1, v0}, Lcom/babytree/apps/pregnancy/h/a;->a(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
调用之后,v1为加密结果。查看a函数:

为RSA加密,所以之前的v0就是RSA的pubKey了。
在a函数中下断点,看一看加密的参数是什么:

一切尽收眼底。由此可知`phone_number`,`password`,`email`三个参数的算法。
9. 接下来找`secret`的算法。
回到AndroidKiller搜索关键字,定位到com/babytree/platform/api/ApiCommonParams;
大致看一下,这个是API通用参数生成的类。且加载了一个so:api_encrypt.so
在`secret`关键字附近看一下,调用了so的invoke-static {v1, v2}, Lcom/babytree/platform/api/ApiCommonParams;->nativeGetParam(Landroid/content/Context;Ljava/util/List;)Ljava/lang/String;方法。
我们先在这句上面下个断点,看看传给so函数的是什么参数。
断点断下后,看到传递给so的参数是一个List,POST参数中除`secret`之外的所有参数。
参数知道了,调用点知道了。分析一下so,看看需不需要动态调试。
载入ida,找到调用的nativeGetParam函数。大致看一下,发现又调用了java的md5函数,好了,调试so的步骤剩下了。
回到IntelliJ IDEA,在getMD5Str处下断点,继续调试:

很快我们可以知道,p0中就是进行md5的参数啦。
分析一下可知,`secret`就是 MD5(时间戳+所有参数排序+&asdf12341dfas!@#$%()(Ujjlasdflasdfj;asjdf23412313kljajsdflasjdflasjdflajsdf;lajsdf2342234sdfsdfffds)
#####0x04.总结

动态调试apk的方式让我们了解apk运作的过程,通过动静结合的分析方式,快速找到想要的东西~
        


点评

kat
大神,手下我的膝盖   浙江省台州市  发表于 2016-4-20 14:26

评分

参与人数 11好评 +11 精币 +30 收起 理由
idomine + 1 + 2 支持开源~!感谢分享
birdmanxp + 1 + 5 感谢分享,很给力!~
温xun + 1 + 4 感谢分享,很给力!~
yshell + 1 + 2 感谢分享,很给力!~
睿思Online + 1 + 4 支持开源~!感谢分享
Farmer° + 1 + 3 奉上小小红包希望笑纳
20380200 + 1 + 1 感谢分享,很给力!~
空之影 + 1 + 2 奉上小小红包希望笑纳
菜鸟寻找虫子 + 1 + 1 求工具下载地址,谢谢
无语凝噎 + 1 + 1 能多一些这样的教程就太好了
半夏时光 + 1 + 5 感谢分享,很给力!~

查看全部评分

本帖被以下淘专辑推荐:

发表于 2023-12-11 22:32:08 高大上手机用户 | 显示全部楼层   广东省深圳市
厉害
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 8 天

发表于 2020-12-18 08:56:35 | 显示全部楼层   福建省宁德市
大神。要是能录个视频就好了
回复 支持 反对

使用道具 举报

结帖率:98% (48/49)

签到天数: 5 天

发表于 2020-11-16 11:14:16 | 显示全部楼层   山西省太原市
6666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2020-11-9 21:10:26 | 显示全部楼层   浙江省杭州市
不错 下载下来学习学习
回复 支持 反对

使用道具 举报

发表于 2020-9-19 04:15:03 | 显示全部楼层   湖北省武汉市
非常6666666666
回复 支持 反对

使用道具 举报

发表于 2020-8-22 18:05:27 | 显示全部楼层   河南省开封市
学习了,自己还是有很多欠缺啊
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 2 天

发表于 2019-12-8 11:46:41 | 显示全部楼层   江西省南昌市
666666666666
回复 支持 反对

使用道具 举报

结帖率:59% (17/29)
发表于 2017-6-21 17:21:11 | 显示全部楼层   广东省广州市
搜索中的secret算法是一样的吗
http://api.babytree.com/api/mobile_search_new/search_topic?source_channel=huawei&device_model=KNT-AL20&query=%E4%BB%80%E4%B9%88%E5%A5%B6%E7%B2%89%E5%A5%BD&latitude=23.135433&client_baby_status=3&build_serial=TWGDU17321002845&client_type=android&secret=b4468fb6887b9e2acfdaa12f57932547&version=7.4.0&mac=&bpreg_brithday=2017-06-17¤t_baby_id=-1&disable=&pg=4&login_string=&local_ts=1497842601&imei=863603037647481&android_id=362684d661f57167&bbtid=362684d661f57167&app_id=pregnancy&longitude=113.343471 HTTP/1.1
GET http://api.babytree.com/api/mobile_search_new/search_topic?source_channel=huawei&device_model=KNT-AL20&query=%E4%BB%80%E4%B9%88%E5%A5%B6%E7%B2%89%E5%A5%BD&latitude=23.135433&client_baby_status=3&build_serial=TWGDU17321002845&client_type=android&secret=1853b8a570a53bd7a9a36b39b88a56eb&version=7.4.0&mac=&bpreg_brithday=2017-06-17¤t_baby_id=-1&disable=&pg=5&login_string=&local_ts=1497842602&imei=863603037647481&android_id=362684d661f57167&bbtid=362684d661f57167&app_id=pregnancy&longitude=113.343471 HTTP/1.1
Host: api.babytree.com
回复 支持 反对

使用道具 举报

发表于 2016-11-26 15:43:56 | 显示全部楼层   北京市北京市
初来乍到,逛逛论坛,多谢多谢~
回复 支持 反对

使用道具 举报

发表于 2016-11-11 16:26:38 | 显示全部楼层   广东省广州市
大神,收下我的膝盖
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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