【原创】某音设备注册加密so文件破解

笔者最近在学习使用ida动态破解so文件,刚好想找个项目来练练手,在破解某音的时候,发现某音用了2个so文件对其发送请求的数据进行加密,所以笔者就从这两个开始下手,并且笔者选择了一个比较简单的ttEncrypt.so文件进行解密


前面对某音的源码进行分析,就能发现它加密的地方在ttEncrypt.so,笔者在这里就不在重复了,如果看到此文章的朋友想破解的话,建议先从源码开始看起,然后慢慢找到这个文件加载的地方,然后再进行破解,不能直接就开始破解so喔。好了废话了这么多,我直接开始吧!

一、动态调试环境

使用终端打开,连接真机!!(之前笔者在使用模拟器破解的时候,发现是失败的!我也不知道为什么,没有查,如果知道的朋友可以留言讨论一下)

AppledeMacBook-Pro:~ space$ adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully
6d16cfb7d440  device
AppledeMacBook-Pro:~ space$ adb shell
santoni:/ $ su
santoni:/ # getenforce
getenforce
Permissive
santoni:/ # setenforce 0
setenforce 0
santoni:/ # cd /data/local/tmp
cd /data/local/tmp
santoni:/data/local/tmp # ./android_server
IDA Android 32-bit remote debug server(ST) v1.22\. Hex-Rays (c) 2004-2017
Listening on 0.0.0.0:23946...

紧接着要进行端口转发

AppledeMacBook-Pro:~ space$ adb forward tcp:23946 tcp:23946

最后打开ida,笔者这里是32位的

![![模块.png](https://upload-images.jianshu.io/upload_images/11633123-3c8067b324566123.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](https://upload-images.jianshu.io/upload_images/11633123-b87ebf829105c6a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

注意:如果使用模拟器的话pc指针会直接掉到最下面

二、开始动态调试

首先你需要自己构造一个apk,里面调用你需要破解的so文件,当然,你要会hook,把调用的输入参数获取和结果获取,你就知道输入了什么和得到什么。还有就是你需要知道输入是什么才能对加密进行破解是吧!

这个so文件调用了一个native方法是叫handleData(bytes [] bytes, int len );传进去一个字节数据和一个长度,好好分析一下吧!

首先你需要做的是找到你要调试的那个so文件,这里笔者是自己构造的,所以搜索ttEncrypt就能找到自己添加的内容了。

[图片上传中...(ttEncrypt.png-ea0603-1537953335293-0)]

搜索结果:

ttEncrypt.png
ttEncryptFunction.png

结果是这样的,很清晰的看到他加载了什么内容,这里有好几个,作者在看静态汇编代码的时候发现函数在handleData的地方调用了ss_encrypt和ss_encrypted_size所以笔者决定在handleData里面打断点

[图片上传中...(handleDataARM.png-63994e-1537953407572-0)]

双击handleData,就可以看到这个结构图,按空格就能转成arm汇编代码

handleDataARM.png

然后就可以在这里打一个断点,准备进行调试

breakpoint.png
begin.png

打好断点之后就可以开始跑了

IMG_0828.JPG

这是我自己做的apk,调用了ttEncrypt.so内部的方法,我看这个应该没有签名检验,所以直接就能调用了,据我所知,某音的另一个加密文件cms.so的签名检验巨多,所以过两天我都打算开始破解那个文件了!废话不多说,

直接按F8进行调试,注意!F7是单步调试

r3.png

看到了么,这个R3你觉得像什么,这个应该就是长度,还记得么,这个native函数传入字节数组和数组的长度是吧!我们接着往下走,因为笔者的macos打开ida调试的时候容易奔溃,所以就不截那么多图,有关键的地方才截图吧!

继续往下走,发现调用了initKey,暂时不知道有什么用,先看寄存器

initKey.png

这里可以F7跳进去看,但是笔者之前已经进去看过了,发现只是初始化一些字节,而且在ida静态代码可以查看,大家可以去自己看一下

initkeyFunc.png

接着这个顺序继续往下走,发现调用了这个ss_encrypted_size大家觉得会有什么用呢?

ss_encrypt_size.png

当笔者看到这个R0的值的时候,你会发现!这不就是输出结果的长度吗???所以计算返回长度的算法就在这里,这里笔者就不再进去看了,具体算法大家可以自行去查看,因为这里涉及某公司的利益,笔者就不放出来了。

size_20.png

继续按下面往下走,看见了到了调用了ss_encrypt这个函数,笔者点击F7进入了这个函数内部,因为如果直接往下走到话,你会发现很快就跳出handleData的函数了,所以笔者认为加密的地方就在里面,所以跳进去看了一下

ss_encrypt.png

这里就是ss_encrypt的实现,看到PUSH.W {R4-R9,LR}那么R0-R3干什么去了呢?大家看上面的图,是不是前面几句给R0-R3进行了赋值?这时候大家可以去看看寄存器里面的内容,下面就带大家看一下吧!

f7ss_encrypt.png

点击查看R0的内容,看到了么?这个不就是我们的输入吗?R0指着第一个地址下面连续的都是我们的字节,R1大家觉得存的是什么?存的是9,正正是它的长度,然后R3呢?R3存的是0x14,是16进制,翻译成10进制就是20,这不就是返回的长度么?这就明摆着是加密的地方啊

ss_encryptRo.png

尾部

到这里了,大家可以自己继续往下走下去看它的逻辑了,笔者就不带着大家继续看了!因为笔者的苹果使用ida的时候,疯狂奔溃,所以做着难受,这里就不再带大家走下去了,下面我在简单说一下它实现的逻辑吧!

首先大家记得之前我们有一串key吗?走下去发现这个key应该是个混淆代码,如果你传入的字节流长度不是16的倍数,这个算法会自动帮你补全16位,当然补全用的是它的密钥数组,存在程序的某个地方因为涉及某公司的利益,作者就不放出来了,大家自行寻找吧 使用你每个字符作为偏移量在密钥数组里面取值,取值之后程序就会对你这个字节流再做一次操作,按照你的长度来进行循环操作,每16位进行一次操作,首先取字节流的最高4位进行右移32位然后和给定的密钥(自行查找)进行异或操作的到一个新的32位二进制再转成16进制填入,然后取5-8位进行24位的右移再与一个密钥(自行查找) 进行异或操作的到新的32位二进制再转成16进制填入,然后取9-12位进行16位的右移再与一个密钥(自行查找) 进行异或操作的到新的32位二进制再转成16进制填入,然后取13-16位进行8位的右移再与一个密钥(自行查找) 进行异或操作的到新的32位二进制再转成16进制填入。并且循环,最后的到结果就是正确的结果了。

最后再说一下,笔者在这里已经完成了这个ttEncrypt.so的解密,不得不过这个小小的加密流程居然这么复杂,如果不耐心进行分析,还真不好的到,笔者在这里学到了挺多东西的!希望有兴趣的朋友可以自己研究一下,相信大家完成后会受益良多的!

转载必须得到作者同意,否则将会追究责任,本文仅仅进行学术研究,没有损害公司的利益,如果有损害公司的利益,请联系作者,笔者会将其删除

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容

  • 艺术市场正在迎来区块链技术带来的巨大变化。区块链提出了关于艺术市场关键绊脚石的决定,例如出处,透明度,版权,所有权...
    艺术区AET阅读 199评论 0 0
  • 瞧我们这一家 杨乐生/文图 狗年中秋,28人成群集伴、恭领老人之命先后回到青衣坝家中。平时冷清的院坝,早摆起...
    杨乐生阅读 159评论 0 0
  • 2018.2.14 嗨 214,西方的情人节,恰逢小年夜(地方风俗:大年夜前一天是小年夜)。现在回顾起214,真是...
    陆娴1983阅读 162评论 0 0
  • 1.初读小说通过网剧改编《所罗门的伪证》,对编剧的逻辑分析很好奇,才决定读书的!一般很少看了电视剧再会去读书!或者...
    莫熙轩煜阅读 357评论 0 0