吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1044|回复: 16
上一主题 下一主题
收起左侧

[Android 原创] 某绿色图标读书app epub解密算法分析

  [复制链接]
跳转到指定楼层
楼主
ReverseJourney 发表于 2024-12-20 16:02 回帖奖励
本帖最后由 ReverseJourney 于 2024-12-20 21:50 编辑

本文章中所有内容仅供学习交流,不用于其他目的,抓包内容、敏感网址、数据接口等均已做脱敏处理。若有侵权,请联系作者删除。
一、前言
该APP难度中等,非常适合想要学习Android逆向进阶技巧的小伙伴练手,对如何快速定位关键函数以及如何调用openssl库还原算法都很有帮助。
二、准备
FrIDA
IDA
UltraEdit
Fiddler
三、分析
随便打开一本书阅读,可以看到Fiddler抓到了几个请求,粗略看一下发送内容和返回结果,说不定等下分析的时候寻找参数来源可以用到,如图所示:


1.定位so
hook fopen并打印堆栈,得知在libddlayoutkit.so里对文件进行了操作,也定位到了epub存放路径和关键解密函数,如图所示:


2.流程分析
将/storage/emulated/0/Android/data/com.dangdang.reader/files/ddReader/undefine/readbook/1901308171/1901308171.epub pull出来,解压查看文件结构,container.xml记录了文件的加密信息,如图所示:


IDA打开libddlayoutkit.so,定位到DangDrm::decrypt看下伪代码   



hook DrmImplN::encryptAdDecryptDes和DrmImplN::encryptAdDecryptAes,确认下这本书籍是走哪个分支。发现2个函数都调用了,这就很奇怪了,看伪代码要么执行DrmImplN::encryptAdDecryptDes要么执行DrmImplN::encryptAdDecryptAes,不会2个分支同时执行,得打印下堆栈进一步判断,发现DangDrm::deCryptSecretKey调用了DrmImplN::encryptAdDecryptDes,如图所示:



通过输出结果可以判断执行的是最后一个分支。
(1)分析DangDrm::deCryptSecretKey
跳转到DangDrm::deCryptSecretKey,发现可疑函数   


IDA切换到Disassembly视图


需要写Frida脚本计算类的成员函数地址,脚本如下:
[JavaScript] 纯文本查看 复制代码
calcFuncAddr();
function calcFuncAddr() 
{
  var baseAddr = Module.findBaseAddress("libddlayoutkit.so");
  console.log("baseAddr:"+baseAddr);
  var addr=baseAddr.add(0x14C220);
  Interceptor.attach(addr,
  {     
        onEnter: function(args)
        {
           var x8=this.context.x8;
           var funcAddr=x8-baseAddr;
           console.log('target funcAddr:'+ptr(funcAddr));          
        },
        onLeave:function(retval)
        {
                                  
        }
  });
}



执行脚本后输出如图所示:   


IDA跳转到0x14821C,发现是Base64解码函数


IDA伪代码,如图所示:


hook Base64::decode_cert,输出如图所示:   


lyMTr7mu!oJxwwPj7aAPixNxhv!GCxkpaMX6ByT65JpChDddhn8m9VeoMlXeofLigPLkwhrxNwKxS-LhtzK3ea==似曾相识,经过查找,在getPublishedCertificate请求返回的结果里找到该字符串


对该字符串解码,发现怎么解都解不开,匪夷所思,猜测是魔改Base64,得继续分析Base64::decode_cert,跳转到该函数查看内部逻辑,发现Base64码表被修改了



代码复现:



继续分析DangDrm::deCryptSecretKey内部逻辑,发现可疑函数DrmImplN::decryptDataByEvpPriKey  


DrmImplN::decryptDataByEvpPriKey伪代码



hook BIO_new_mem_buf



hook EVP_PKEY_decrypt_old   



调用openssl库复现


得到了16个字节bf ba b0 e5 58 bf fc 3a 16 b1 78 73 18 d8 67 e1,猜测可能是AES密钥。

(2)分析DrmImplN::encryptAdDecryptAes

DrmImplN::encryptAdDecryptAes逻辑很简单   



hook AES_set_encrypt_key和AES_cbc_encrypt,输出如图所示:





AES解密后得到明文,至此解密流程已经很清晰了。

3.解密算法

首次打开书籍时,会发送getPublishedCertificate请求到服务器,读取返回结果中的key字段,如图所示:



将该字符串Base64解码(魔改Base64),将解码后的Base64进行RSA解密得到AESKEY,AESIV为16个0,读取OEBPS目录下的加密文件进行AES CBC解密,就可以还原成正常epub,如图所示:  

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
q2212282 + 1 我很赞同!
helian147 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
猎国倾城 发表于 2024-12-24 17:04
flyer_2001 发表于 2024-12-20 18:46
膜拜大佬,什么时候分析下某东读书

https://www.52pojie.cn/forum.php?mod=viewthread&tid=1483253&highlight=%C4%B3%B6%AB%B6%C1%CA%E9我按他说的解开了某东的加密

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
flyer_2001 + 1 + 1 谢谢@Thanks!

查看全部评分

沙发
wasm2023 发表于 2024-12-20 17:43
3#
flyer_2001 发表于 2024-12-20 18:46
4#
leishe2023 发表于 2024-12-20 19:59
谢谢分享!
5#
q2212282 发表于 2024-12-20 20:51
我去找找这个绿色图书...
6#
lanbaiyuwen 发表于 2024-12-20 21:22
这是个什么绿色图书,我还以为软件名字就叫绿色图书哈哈
7#
 楼主| ReverseJourney 发表于 2024-12-20 21:45 |楼主
绿色图标是当当云阅读,蓝色图标是微信读书
8#
AppleSa 发表于 2024-12-23 18:08
感谢大佬分享
9#
wangjiankai88 发表于 2024-12-23 20:13
感谢大佬分享
10#
BrutusScipio 发表于 2024-12-24 01:21
加密只改了一个码表其他都默认实现就是中等难度了啊,深不可测
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-8 07:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表