前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ios逆向-app登录协议逆向分析破解

ios逆向-app登录协议逆向分析破解

作者头像
吾爱小白
发布2021-11-16 16:48:58
2.8K0
发布2021-11-16 16:48:58
举报
文章被收录于专栏:小白技术社小白技术社

某app登录协议逆向分析

设备

  • iphone 5s
  • Mac Os
  • app:神奇的字符串57qm5Y2V 本文主要通过frida-trace、fridaHook、lldb动态调试完成破解相应的登录算法,从达到登录成功,并根据该步骤完成ios逆向分析,文中所有涉及的脚本都已经放在github上面。
  • 弟弟建了一个ios逆向学习交流群,互相学习交流。

抓包分析

之前文章已经进行了详细的抓包教程。iOS系统抓包入门实践之短链[1]

2021110908203975.png

从上图中可以看到ydtoken、请求响应以及该接口涉及到的mobile为要破解的内容。

请求参数分析

这里涉及到的frida相关环境安装配置可以参考ios逆向-frida&环境&破解appSign算法[2]

ydtoken

通过砸壳以及ida分析

加密是通过yd_md5:方法进行加密,继续追踪。

调用CC_MD5进行加密。通过trace命令:frida-trace -UF -i "CC_MD5",可以很快速的破解该app的ydtoken算法。frida默认trace是不能打印入参的,更改之后如下:

代码语言:javascript
复制
{
  onEnter(log, args, state) {
    log('CC_MD5()--arg[0]='+args[0].readUtf8String());
  },
  onLeave(log, retval, state) {
    log('CC_MD5()--return--=');
    var md5_digest = hexdump(retval,{length:16});
    var hexified = " ";
    var raw_array = md5_digest.split("\n");
    for (var a=0; a<raw_array.length; a++)
    {
      var line_array = raw_array[a].split(" ");
      for (var b=1; b<line_array.length-1; b++) 
      {
        if (line_array[b].length === 2)
        {
          hexified += line_array[b];
          hexified = hexified.trim();
        }
      }
    }
    log(hexified+"\n");
  }
}

参数显示出来了

2021110908271340.png

Mobile

在ida分析之后,发现该算法是属于des加密。

使用默认的CCCrypt继续trace:frida-trace -FU -i CCCrypt

更改之后的trace脚本代码较长,放在了github。https://github.com/zhaoboy9692/dailyanalysis[3]

响应分析

这里主要是针对响应内容无法正常看到信息,目前通过Mac的日志控制台定位发现,这里其实定位了好久,直到最后才通过日志找到算法位置。

接口返回信息失败这块的日志定位到该响应解密的位置parseStringByRule:

这里其实是对后台的数据做了一个映射。sohoFilteredInfo是把映射key和value做成字典。

这里的数字对应ASCII的值,那要解密响应内容,只需要获取该key、value的映射关系即可。这里使用fridaHook、lldb进行获取该映射关系。

fridaHook

确定到算法位置之后,使用frida进行hook。

代码语言:javascript
复制
var className = "ADAuthenticationRule";
var methodName = "- parseStringByRule:";
var hooking = ObjC.classes[className][methodName];
Interceptor.attach(hooking.implementation, {
    onEnter: function (args) {
        var obj  = ObjC.Object(args[0]);
        console.log('sohoFilteredInfo',obj.sohoFilteredInfo()) #调用映射方法。
    },
    onLeave: function (returnValues) {

    }
});

file

lldb

debugserver处理

  • 将未经处理的debugserver从iOS拷贝到macOS中的,scp root@iOSIP:/Developer/usr/bin/debugserver ~/debugserver
  • 瘦身 lipo -thin arm64 ~/debugserver -output ~/debugserver iphone5s是arm64
  • 给debugserver添加task_for_pid权限/opt/theos/bin/ldid -Sent.xml debugserver 或者 codesign -s - --entitlements ent.plist -f debugserverentitlements.plist[4]
  • 将经过处理的debugserver拷回iOS scp ~/debugserver root@iOSIP:/usr/bin/debugserver
  • 在iOS上用debugserver来attach进程 : ssh连接手机之后,使用debugserver localhost:1234 -a pid

lldb调试

在mac终端执行lldb。

使用iproxy 端口转发 iproxy 1234 1234

在lldb中执行process connect connect://localhost:1234 链接手机debugserver

动态调试需要知道基地址+偏移。查看macho基地址:image list -f -o,红色框就是基地址

计算需要下断点的地址:

下断地址=0x0000000000638000+0x0000000100104EF0=0x10073CEF0 此处地址是映射方法返回的值,也就是解密需要的映射表。b 0x10073CEF0 下断点 运行app

停到了断点位置,读取x0的值,映射函数返回值给了x0寄存器。po $x0

c app继续运行。更多命令可以 help 查看。

效果

小结

该app用来练手最好不过,没有特别复杂的算法,又需要一定的耐心跟踪。在后边的映射中,要是更懂oc的语法,可能会更加上手。文中涉及脚本github地址(喜欢可以点小星星):https://github.com/zhaoboy9692/dailyanalysis[5]

参考文章

https://iosre.com/t/debugserver-lldb-gdb/65 https://www.jianshu.com/p/6e6bb0d0ee78

参考资料

[1]

抓包分析: http://zhaoxincheng.com/index.php/2021/03/14/ios%e7%b3%bb%e7%bb%9f%e6%8a%93%e5%8c%85%e5%85%a5%e9%97%a8%e5%ae%9e%e8%b7%b5%e4%b9%8b%e7%9f%ad%e9%93%be/

[2]

ios逆向-frida&环境&破解appSign算法: http://zhaoxincheng.com/index.php/2020/11/21/ios%e9%80%86%e5%90%91-frida%e7%8e%af%e5%a2%83/

[3]

https://github.com/zhaoboy9692/dailyanalysis: https://github.com/zhaoboy9692/dailyanalysis

[4]

entitlements.plist: http://zhaoxincheng.com/wp-content/uploads/2021/11/entitlements.plist_.zip

[5]

https://github.com/zhaoboy9692/dailyanalysis: https://github.com/zhaoboy9692/dailyanalysis

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白技术社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 某app登录协议逆向分析
    • 设备
      • 抓包分析
        • 请求参数分析
          • ydtoken
          • Mobile
        • 响应分析
          • fridaHook
            • lldb
              • debugserver处理
              • lldb调试
              • 效果
            • 小结
              • 参考文章
                • 参考资料
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档