NXIANG

抖音 iOS端逆向<一>

2020-04-09  本文已影响0人  洧中苇_4187

前言:网上关于微信逆向的文章很多,而关于抖音的就相对较少,主要原因是在逆向Hopper分析的时候,里面大多是函数调用地址,不知道具体的方法直线,笔者研究了几天之后,有些小心得与各位分享.

逆向需求:实现评论功能,模拟不同的用户评论.

开发环境:脱过壳的抖音IPA(Aweme.app), Xcode(安装MonkeyDev), Hopper(解析执行文件), 导出抖音所有头文件

1>运行MonkeyDev,查看抖音的层级结构,先找到评论的控制器 AWECommentListViewController

评论的控制器

搜索头文件,看看里面有什么有用的属性,replyComment:这个可能是回复评论时候生成的模型,model:,listManager:可能是用来处理评论逻辑的,- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2:点击发送评论,这个应该是关键方法,随便发一条评论,在该方法下一个断点,进行验证

函数调用栈

确实来到了这个方法,而且这个方法是由 AWECommentListInputView 这个View来调起的,猜想这个View应该是文本输入框的View,而且评论控制器实现了这个View的代理方法- (_Bool)commentInputViewShouldReturn:(id)arg1,代理方法里面调用了评论控制器的- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2方法, 所以理论上我们可以手动调用这个方法,能实现发送评论,

2>在评论控制器添加一个按钮,按钮的点击事件设为- (_Bool)userTappedSendWithContent:(id)arg1 inputView:(id)arg2 这个方法,看是否能够评论成功,

添加按钮并主动调用上面说到的方法

验证评论可以发送成功,

3>继续跟进方法调用,查看是哪个类来发送的评论请求,我们需要了解必须上送什么参数,以及请求路径. 打开Hopper 寻找突破口,搜索AWECommentListViewController userTappedSendWithContent,找到三个可疑的方法,点进去跟进

userTappedSendWithContent方法实现

实现这三个方法,分别打入断点,运行Xcode,当发送一条评论时,会进到-sendCommentContent 这个方法,进到这个方法里面,看到一条有用信息

评论调用的内部方法

点进这个方法,发现一个熟悉的味道 AWECommentListManager,方法是属于它的,还记不记得在文章开始的那个listManager,就是它,惊不惊喜,还原成控制器的调用就是 [self.listManager commentWithContent: replyId: replySubCommentID: replySubCommentAuthorID: extraInfo: referString: completion:], 顺藤摸瓜,继续往下走,最终跟进到+(void)commentAwemeItemWithID:(void *)arg2 content:(void *)arg3 replyCommentID:(void *)arg4 replySubCommentID:(void *)arg5 extraInfo:(void *)arg6 sticker:(void *)arg7 referString:(void *)arg8 completion:(void *)arg9 这个方法之后,就无法再跟进了;于是转换思路,看看listManager里面会不会调用其他方法,我的做法是将里面的所有方法都打上断点,来到了_cmd 对应的这个方法,看到了传入的那个字典,aweme_id 是评论的id,就是你当前刷的这条抖音,text是我评论的内容,"https://aweme.snssdk.com/aweme/v1/comment/publish/"是发送端口路径.

postWithURLString:(id)arg1 params:(id)arg2 modelClass:(Class)arg3 completion:(id)arg4

在调试过程中,我发现评论完的请求发送完成之后,又会发一个交易,通过

heartbeat

看到了一个关键词heartbeat,当我定在这个断点,会发现评论会失败,这应该是抖音的某种机制,这个心跳包如果不对,那么你的评论就会失效.

4>思路:(1).发送评论肯定得知道用户的信息,比如userid,昵称,头像路径,这样才能区分是谁发的评论,找到这个"https://webcast.amemv.com/webcast/room/live_room_id/?version_code=9.2.0&pass-region=0&pass-route=0&js_sdk_version=1.43.0.1&webcast_sdk_version=1330&app_name=aweme&vid=019C3DD5-08D3-49B6-AF5B-939154B6B148&app_version=9.2.0&language=zh-Hans-US&device_id=40613784883&channel=pp&mcc_mnc=46011&aid=1128&effect_sdk_version=5.8.0&screen_width=414&openudid=02a6db71a7ae780f226b95032b116da6852f13e8&webcast_language=zh&os_api=18&ac=WIFI&os_version=12.4.6&webcast_locale=zh-Hans_CN&device_platform=iphone&build_number=92013&iid=110910203440&device_type=iPhone%206%20Plus&idfa=25D32F6D-CBC3-42E9-9A7C-2D72277497D4",   它是一个POST请求 请求参数 就是aweme_id=6812025407865425166&channel_id=0&text=%E4%BD%A0%E8%AF%B4%E7%9A%84%E5%AF%B9,这三个,接下来就得看请求头里面有没有我们需要的信息,只有iid=110910203440这个参数比较可疑,

评论完成后返回的数据

5>查看一下评论的模型信息,点进个人主页,查看userId的格式是怎么样的---待续...

上一篇下一篇

猜你喜欢

热点阅读