逆向探探

    探探逆向之旅

    一阵子下来才明白,逆向其实会上瘾,尤其是我这种~ 天生就爱搞破坏的坏孩子来讲
    探探是一个社交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

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

    Dec 18, 2017
    reverseEngineering