记一个手游app数据文件的破解

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

出于一些非常猥琐的须要,同一时候自己也想做一些新奇的尝试,周末用了大半天时间破解了某款手游的数据文件。

过程比我预想的要顺利,主要原因还是我们开发者的懈怠。咳咳。

步骤例如以下:

  • 下载安装包,解压,发现几个XXX.db文件,最感兴趣的是一个50多M的XXX.db
  • 用UltraEdit打开XXX.DB文件,没有不论什么线索。仅仅发现这几个文件有同样的文件头
  • 搜索.DB文件可能是什么文件。发现了开源库sqlite,这是一个轻量级的数据库组件,IOS就用了这个,顿时眼前一亮
  • 下载sqlite的命令行工具。发现打不开.DB文件
  • 自己存了一个sqlite的数据库文件做測试,发现根本就是明文存储的
  • 是时候祭出神器IDA pro了。反汇编libXXX.so,发现大量sqlite3_XXX函数,.db文件应该是sqlite数据库文件没错
  • 搜索sqlite加密的相关信息。官方的加密实现是须要授权的,但有一个wxsqlite的开源实现。私下猜測该app用了wxsqlite
  • wxsqlite是AES算法加密的。必须找到密匙,否则无法解密,心里凉了半截
  • 继续看反汇编,找到keySqlite函数,发现key就明文写在代码里,是一串1....。额
  • 下载wxsqlite。写了几行代码进行測试,发现依旧打不开。

    自己创建了一个加密数据库文件。发现跟app的db文件区别非常大。

  • 阅读wxsqlite的代码。发现加密算法是在sqlite3Codec函数中调用的。在汇编中找到sqlite3Codec,发现它调用了一个My_Encrypt_Func(呵呵)
  • 阅读My_Encrypt_Func的汇编代码,发现就是按字节取反(呵呵呵)
  • 写个小程序。将db文件按字节取反。再用UltraEdit打开。看到了熟悉的明文信息
  • 这回数据文件能够用sqlite命令行打开了,dump成txt文件。得到表结构和全部的数据
  • 最后是那个50多M的db文件。

    打印出表结构发现是一个字符串name和一个二进制对象。

    写个小程序,遍历全部表项,将二进制对象存成png文件。任务完毕


收获:
  • 假设是用wxsqlite加密实现,而且密匙是通过网络获取的。那就得先想办法在执行时hook api截获密匙。破解难度会上升一大截...
  • 加密函数的arm汇编看上去效率非常低....让我好生奇怪。写了一段相同的代码自己编了一下,发现该lib是debug的。这....
  • 加密相关的函数名暴露在动态库中是非常危急的,给函数声明加上static。export符号表中没有了。我们就仅仅能看到一个地址跳转啦

反汇编出来的加密函数,跟自己写的并用debug编译出来是一样的
.text:002C46E0                 EXPORT My_Encrypt_Func
.text:002C46E0 My_Encrypt_Func                         ; CODE XREF: sqlite3Codec+11Cp
.text:002C46E0                                         ; sqlite3Codec+190p
.text:002C46E0
.text:002C46E0 var_3C          = -0x3C
.text:002C46E0 var_38          = -0x38
.text:002C46E0 var_34          = -0x34
.text:002C46E0 var_30          = -0x30
.text:002C46E0 var_28          = -0x28
.text:002C46E0 var_20          = -0x20
.text:002C46E0 var_4           = -4
.text:002C46E0
.text:002C46E0                 STR     R11, [SP,#var_4]!
.text:002C46E4                 ADD     R11, SP, #4+var_4
.text:002C46E8                 SUB     SP, SP, #0x1C
.text:002C46EC                 STR     R0, [R11,#0x20+var_30]
.text:002C46F0                 STR     R1, [R11,#0x20+var_34]
.text:002C46F4                 STR     R2, [R11,#0x20+var_38]
.text:002C46F8                 STR     R3, [R11,#0x20+var_3C]
.text:002C46FC                 MOV     R3, #0
.text:002C4700                 STR     R3, [R11,#0x20+var_28]
.text:002C4704                 B       loc_2C473C
.text:002C4708 ; ---------------------------------------------------------------------------
.text:002C4708
.text:002C4708 loc_2C4708                              ; CODE XREF: My_Encrypt_Func+68j
.text:002C4708                 LDR     R3, [R11,#-0x10]
.text:002C470C                 LDRB    R3, [R3]
.text:002C4710                 MVN     R3, R3
.text:002C4714                 STRB    R3, [R11,#-9]
.text:002C4718                 LDR     R3, [R11,#-0x10]
.text:002C471C                 LDRB    R2, [R11,#-9]
.text:002C4720                 STRB    R2, [R3]
.text:002C4724                 LDR     R3, [R11,#-0x10]
.text:002C4728                 ADD     R3, R3, #1
.text:002C472C                 STR     R3, [R11,#-0x10]
.text:002C4730                 LDR     R3, [R11,#-8]
.text:002C4734                 ADD     R3, R3, #1
.text:002C4738                 STR     R3, [R11,#-8]
.text:002C473C
.text:002C473C loc_2C473C                              ; CODE XREF: My_Encrypt_Func+24j
.text:002C473C                 LDR     R2, [R11,#-8]
.text:002C4740                 LDR     R3, [R11,#-0x14]
.text:002C4744                 CMP     R2, R3
.text:002C4748                 BCC     loc_2C4708
.text:002C474C                 MOV     R3, #0
.text:002C4750                 MOV     R0, R3
.text:002C4754                 SUB     SP, R11, #0
.text:002C4758                 LDR     R11, [SP+0x20+var_20],#4
.text:002C475C                 BX      LR
.text:002C475C ; End of function My_Encrypt_Func

用release编译的,执行效率怎么也得差几十倍

.text:00001D88 ; My_Encrypt_Func(unsigned char *, unsigned int, unsigned char *, unsigned int)
.text:00001D88                 EXPORT _Z15My_Encrypt_FuncPhjS_j
.text:00001D88 _Z15My_Encrypt_FuncPhjS_j
.text:00001D88                 MOVS    R3, #0
.text:00001D8A                 B       loc_1D94
.text:00001D8C ; ---------------------------------------------------------------------------
.text:00001D8C
.text:00001D8C loc_1D8C                                ; CODE XREF: My_Encrypt_Func(uchar *,uint,uchar *,uint)+Ej
.text:00001D8C                 LDRB    R2, [R0,R3]
.text:00001D8E                 MVNS    R2, R2
.text:00001D90                 STRB    R2, [R0,R3]
.text:00001D92                 ADDS    R3, #1
.text:00001D94
.text:00001D94 loc_1D94                                ; CODE XREF: My_Encrypt_Func(uchar *,uint,uchar *,uint)+2j
.text:00001D94                 CMP     R3, R1
.text:00001D96                 BNE     loc_1D8C
.text:00001D98                 MOVS    R0, #0
.text:00001D9A                 BX      LR
.text:00001D9A ; End of function My_Encrypt_Func(uchar *,uint,uchar *,uint)





本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5138271.html,如需转载请自行联系原作者

目录
打赏
0
0
0
0
56
分享
相关文章
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
122 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
166 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
2月前
|
【Azure App Service】对App Service中CPU指标数据中系统占用部分(System CPU)的解释
在Azure App Service中,CPU占比可在App Service Plan级别查看整个实例的资源使用情况。具体应用中仅能查看CPU时间,需通过公式【CPU Time / (CPU核数 * 60)】估算占比。CPU百分比适用于可横向扩展的计划(Basic、Standard、Premium),而CPU时间适用于Free或Shared计划。然而,CPU Percentage包含所有应用及系统占用的CPU,高CPU指标可能由系统而非应用请求引起。详细分析每个进程的CPU占用需抓取Windows Performance Trace数据。
102 40
uni-app:demo&媒体文件&配置全局的变量(三)
uni-app 是一个使用 Vue.js 构建多平台应用的框架,支持微信小程序、支付宝小程序、H5 和 App 等平台。本文档介绍了 uni-app 的基本用法,包括登录示例、媒体文件处理、全局变量配置和 Vuex 状态管理的实现。通过这些示例,开发者可以快速上手并高效开发多平台应用。
123 0
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
这篇文章介绍了在CentOS 7系统中安装Docker时遇到的两个常见问题及其解决方法:用户不在sudoers文件中导致权限不足,以及yum被锁定的问题。
74 2
linux异常一:feng 不在 sudoers 文件中,此事将被报告。yum提示Another app is currently holding the yum lock; waiting for
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
7月前
|
【Azure Function】Function App代码中使用Managed Identity认证获取Blob数据时遇见400报错
【Azure Function】Function App代码中使用Managed Identity认证获取Blob数据时遇见400报错
【Azure Function】Function App代码中使用Managed Identity认证获取Blob数据时遇见400报错
【Azure Logic App】在中国区的微软云服务上,使用逻辑应用是否可以下载SharePoint上的文件呢?
【Azure Logic App】在中国区的微软云服务上,使用逻辑应用是否可以下载SharePoint上的文件呢?
【Azure Logic App】在中国区的微软云服务上,使用逻辑应用是否可以下载SharePoint上的文件呢?

热门文章

最新文章

  • 1
    MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
    231
  • 2
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
    20
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    17
  • 4
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    9
  • 5
    【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
    4
  • 6
    1688APP 原数据 API 接口的开发、应用与收益
    19
  • 7
    PiliPala:开源项目真香,B站用户狂喜!这个开源APP竟能自定义主题+去广告?PiliPala隐藏功能大揭秘
    7
  • 8
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    11
  • 9
    语音app系统软件源码开发搭建新手启蒙篇
    9
  • 10
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    4
  • 1
    【Azure Storage Account】利用App Service作为反向代理, 并使用.NET Storage Account SDK实现上传/下载操作
    12
  • 2
    【02】微信支付商户申请下户到配置完整流程-微信开放平台申请APP应用-微信商户支付绑定appid-公众号和小程序分别申请appid-申请+配置完整流程-优雅草卓伊凡
    18
  • 3
    【Azure App Service】App Service 是否支持HostName SNI 证书?
    19
  • 4
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    14
  • 5
    2025同城线下陪玩APP开发/电竞游戏平台搭建游戏陪玩APP源码/语音APP开发
    24
  • 6
    flutter3-wetrip跨平台自研仿携程app预约酒店系统模板
    29
  • 7
    通过外部链接启动 Flutter App(详细介绍及示例)
    24
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    55
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    48
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    40
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等