探探逆向之旅
一阵子下来才明白,逆向其实会上瘾,尤其是我这种~ 天生就爱搞破坏的坏孩子来讲
探探是一个社交APP, 似乎不少人在上面找到另一半的. 这种卡片社交简单,背后隐藏的推荐逻辑,筛选逻辑才是它能如此盛名的原因.
要重点说明,这些需求是我一产品的同学给我提的, 绝非个人偏好~ 我不是那种人…
梗概
先上下图
(功能入口在 新手引导->探探怎么玩-> ):

这是目前逆向后我给它新增的功能,因为工作也比较忙,就没有新增过多的需求,但是整个App的架构逻辑其实已经很清晰了, 基本可以合理的新增一些需求在里面, 这也说明探探的开发架构逻辑挺棒的.
功能简介

下方是一个简单的tableview, 功能的启动都在这里,当然功能是有互斥和优先级的,
- 同时开启无条件选妹和选妹子onlyStudent, 无条件选妹子优先.
- 为了更好的效果在主页的地方选妹子,我最后采取的是模拟点击likeButton,在NSTimer中执行,当刷的人对已拉取用户求余==0的时候停止, 如果不想停止就把infinite打开,这是一个疯狂的爬取,没有停止的线性条件,除非杀APP. 为什么这么做呢, 因为我把自动拉取的信息默认是保存到Document/cache.txt里面, 主要是照片的url和部分简介
- 自动尬聊采用的是图灵的API, 你拿到源码后需要替换为您的key, 谷歌搜索”图灵机器人”,打开后进入到某个想聊天的窗口, 它如果收到信息会自动跟她尬聊.
- 上方是用Mapkit,新增Mapview在上方,用来更改定位,然后下面的打开(不过测了下证明这块功能还有点问题的,有兴趣的哥们继续挖掘下)
开始调试
调试工具
- 依然是最酷的 MonkeyDev
- FLEX (reveal过期了,这是一个很棒的替代品), 下载后编译一下, 然后按照monkeyDev中wifi加入第三方库的方式操作即可
- frida-ios-dump 还是庆哥出品,砸壳后顺带把整个APP导出
- 其它的全程是cycript+LLDB调戏 就不累述了…

#import
// open it in here
[[FLEXManager sharedManager] showExplorer];
导入库之后,在注入成功的这个通知回调里,启动这个方法
调试遇到的问题
探探是有反调试的, 用的是sysctl. 很强
那么你调试的时候需要讲MonkeyDev里面的打开, 这个反反调试检测默认是关闭的,原因注释上有

从需求粗发的debug
逆向App,我一般的套路都是酱紫.
设计需求 -> 需求在哪里会展示 -> 从view到Controller-> controller方法猜测 -> 结合monkeyDev进行方法trace -> 确认需求方法 -> hopper找方法地址 -> LLDB调试下断点 -> 查看调用栈(bt) -> 然后开始埋点尝试hook

用笔记在记录每次你发现的新宇宙(虽然开始的很早,实际没有时间弄它…)