首页
社区
课程
招聘
[原创]ios逆向-app登录协议分析破解
发表于: 2021-11-9 19:07 42787

[原创]ios逆向-app登录协议分析破解

2021-11-9 19:07
42787

某app登录协议逆向分析

设备

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

    抓包分析

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

2021110908203975.png

 

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

请求参数分析

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

ydtoken

通过砸壳以及ida分析

 

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

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
  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加密。
2021110908481127.png
使用默认的CCCrypt继续trace:frida-trace -FU -i CCCrypt

 

2021110908340919.png
更改之后的trace脚本代码较长,放在了github。
141K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9r3q4G2j5X3!0&6z5e0j5&6x3W2)9J5c8X3c8S2K9h3I4&6j5h3&6S2L8s2W2K6K9i4x3`.

响应分析

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

 

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

 

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

 

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

fridaHook

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

1
2
3
4
5
6
7
8
9
10
11
12
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_forpid权限/opt/theos/bin/ldid -Sent.xml debugserver 或者 codesign -s - --entitlements ent.plist -f debugserver
    [entitlements.plist](78bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4A6Z5j5h3!0^5K9h3&6U0K9r3g2F1k6#2)9J5k6h3y4G2L8g2)9J5c8Y4N6H3i4K6u0V1j5$3!0F1N6r3g2F1N6q4)9J5c8Y4g2H3L8r3!0S2k6s2y4Q4x3V1j5J5x3o6t1I4i4K6u0r3x3e0q4Q4x3V1k6W2L8Y4c8A6N6r3I4W2L8h3g2F1N6s2y4Q4x3X3g2H3L8r3W2K6N6l9`.`.
    .zip "entitlements.plist")
  • 将经过处理的debugserver拷回iOS scp ~/debugserver root@iOSIP:/usr/bin/debugserver
  • 在iOS上用debugserver来attach进程 :
    ssh连接手机之后,使用debugserver localhost:1234 -a pid
    file

    lldb调试

    在mac终端执行lldb。
    使用iproxy 端口转发 iproxy 1234 1234
    在lldb中执行
    process connect connect://localhost:1234 链接手机debugserver
    file
    动态调试需要知道基地址+偏移。
    查看macho基地址:
    image list -f -o,红色框就是基地址

2021110909290943.png
计算需要下断点的地址:
2021110909304595.png
下断地址=0x0000000000638000+0x0000000100104EF0=0x10073CEF0
此处地址是映射方法返回的值,也就是解密需要的映射表。
b 0x10073CEF0 下断点
运行app
file
停到了断点位置,读取x0的值,映射函数返回值给了x0寄存器。
po $x0
file
c app继续运行。
更多命令可以 help 查看。

效果

image.png

小结

该app用来练手最好不过,没有特别复杂的算法,又需要一定的耐心跟踪。在后边的映射中,要是更懂oc的语法,可能会更加上手。
文中涉及脚本github地址(喜欢可以点小星星):05eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9r3q4G2j5X3!0&6z5e0j5&6x3W2)9J5c8X3c8S2K9h3I4&6j5h3&6S2L8s2W2K6K9i4x3`.

参考文章

248K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6A6L8%4y4J5k6g2)9J5k6h3y4G2L8g2)9J5c8Y4c8Q4x3V1k6V1k6h3u0#2k6%4y4W2M7Y4k6W2M7W2)9J5k6r3I4D9k6r3u0Q4x3X3c8Y4k6r3u0Q4x3V1j5$3y4b7`.`.
376K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2B7K9h3q4F1M7$3S2#2i4K6u0W2j5$3!0E0i4K6u0r3M7q4)9J5c8U0k6W2y4X3u0T1x3r3b7H3k6h3f1%4z5l9`.`.

 

2021052909140282.jpeg


[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2021-11-9 19:45 被mb_aoooaosd编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 138
活跃值: (1192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
请问什么app呀?有没有原版app呀,新手想跟着练手
2022-2-8 16:56
0
雪    币: 4789
活跃值: (3024)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大佬,围观学习
2022-3-7 18:26
0
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
大佬有联系方式吗
2022-5-18 19:17
0
雪    币: 0
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
6666
2022-12-13 19:17
0
雪    币: 11
活跃值: (154)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
留个联系方式大哥,3929796
2024-3-19 15:07
0
游客
登录 | 注册 方可回帖
返回