记一个手游app数据文件的破解
出于一些非常猥琐的须要,同一时候自己也想做一些新奇的尝试,周末用了大半天时间破解了某款手游的数据文件。
过程比我预想的要顺利,主要原因还是我们开发者的懈怠。咳咳。
步骤例如以下:
- 下载安装包,解压,发现几个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符号表中没有了。我们就仅仅能看到一个地址跳转啦
.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)
记一个手游app数据文件的破解的更多相关文章
- 斗牛app上架应用宝、牛牛手机游戏推广、百人牛牛app应用开发、棋牌游戏上传、手游APP优化
联系QQ:305-710439斗牛app上架应用宝.牛牛手机游戏推广.百人牛牛app应用开发.棋牌游戏上传.手游APP优化 iOS开发iPhone/iPad平台安卓手机软件开发机型覆盖范围 超过113 ...
- 网络爬虫中Fiddler抓取PC端网页数据包与手机端APP数据包
1 引言 在编写网络爬虫时,第一步(也是极为关键一步)就是对网络的请求(request)和回复(response)进行分析,寻找其中的规律,然后才能通过网络爬虫进行模拟.浏览器大多也自带有调试工具可以 ...
- 普通app自动化测试与手游app自动化测试的区别
[转载] 手游自动化测试与App自动化测试技术上的区别 手游和App的开发技术不同,导致了两者的自动化测试技术完全不同.一般来说,安卓应用是使用Android SDK开发的,利用Java编写.那么在A ...
- 如何缩减手游app安装包的大小?
包体过大对手游的影响更是诟病已久,有具体数据证明,游戏包体越大,在游戏运营推广过程中游戏用户的转化率就越低:反之,游戏包体越小,游戏用户的下载转化率就越高(如下图),所有的手机app.游戏在大版本更新 ...
- 春节宅家火了短视频,手游 APP 成最大赢家!
春节历来是APP运营者翘首以盼的火热期,但2020年的春节有些特殊, 新型冠状病毒的爆发,牵动着全国亿万人民的心.响应号召不出门,宅在家里玩手机,于是打游戏.看新闻.追剧等成为大家打发时间.疏解内心压 ...
- SQLLoader6(一个或多个数据文件按条件导入不同的表)
测试一1.创建表: SQL), col2 )); 表已创建. SQL), col2 )); 表已创建. SQL> COMMIT; 提交完成. 2.数据文件:test.txt A A A B B ...
- APP安全环节缺失,手游运营商怎样应对APP破解困境
2013年手游行业的规模与收入均实现了大幅增长,发展势头强劲.然而,在手游快速发展的同一时候,因为监管.审核等方面存在着漏洞,手机游戏软件被破解后注入恶意代码.盗取用户財产.窃取用户设备信息的现象屡见 ...
- 手游与App测试如何快速转型? —— 过来人科普手游与App测试四大区别
随着智能设备的普及和移动互联网的兴起,各家互联网巨头纷纷在往移动端布局和转型,同时初创的移动互联网公司也都盯着这个市场希望分一杯羹.在这个大环境下,互联网的重心已经慢慢从Web端转向了移动端,而移动端 ...
- 11.采集手机端app企查查上司公司数据(未成功)
---恢复内容开始--- 采集企查查手机端app数据: 1.首先手机端安装app并usb连接电脑端,fiddler监控手机请求数据对数据进行分析抓取. 手机端界面与fiddler界面参照: 2.对获取 ...
随机推荐
- 使用DiskGenius对虚拟机磁盘进行压缩
使用虚拟机的用户是否感觉到您的虚拟磁盘文件越来越大,都快把宝贵的磁盘空间(宿主机物理硬盘)占满了呢? 有人会想到,我直接启动虚拟机,然后把里面没用的数据删除了,不就行了吗?实际测试发现,这样删除后,存 ...
- setitimer()函数使用
setitimer()为Linux的API,并非C语言的Standard Library,setitimer()有两个功能,一是指定一段时间后,才执行某个function,二是每间格一段时间就执行某个 ...
- yii框架网址解析问题
转载请注明来自souldak,微博:@evagle 首先如果你在config/main.php里面没有配置urlManager的话,那么流程如下(摘自yii官网) 用户发出了访问 URL http:/ ...
- 重装系统后搭建php环境
重装系统后,不需要重新下载php,apache,mysql的程序包,只需要在命令行重新安装即可. 1.安装apache: 打开命令行 cd 程序目录\bin httpd -k install 按ent ...
- URAL 1820. Ural Steaks(数学啊 )
题目链接:space=1&num=1820" target="_blank">http://acm.timus.ru/problem.aspx? space ...
- [LeetCode] Decode Ways [33]
题目 A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A ...
- UML九种图 之 包图和对象图
前言 对象图和包图依然是对系统的静态的描写叙述.UML九种图加上包图,事实上是十幅图. 包图 1.构成 2.包中的元素 类.接口.用例.构件.其他包等.( ...
- linux查看端口和进程
查看进程 ps -aux | grep appname 杀死进程 kill pid 查看端口: netstat -ap | grep 端口号 netstat -ap | grep 进程名字 lsof ...
- 64位CentOS6.2安装erlang及rabbitmqServer
CentOS 6.2 64bit 安装erlang及RabbitMQ Server 1.操作系统环境(CentOS 6.2 64bit) [root@HAproxy ~]# cat /etc/issu ...
- 科尔尼咨询公司 - MBA智库百科
科尔尼咨询公司 - MBA智库百科 科尔尼公司简介 科尔尼管理咨询公司(A.T. Kearney)于1926年在芝加哥成立,经过80多年的发展,科尔尼咨询已发展为一家全球领先的高增值管理咨询公司,科尔 ...