【其他技术】如何防止app被破解

[复制链接]
查看3794 | 回复12 | 2021-10-13 01:50:41 | 显示全部楼层 |阅读模式
来来来!我教兄弟们[滑稽]

破解的方法一般在防破解里面

对于个人开发者或者某些小企业开发者而言,App 被破解始终是一件让人非常难受的事情;我曾经也因为轻视了保护 App 的重要性而吃到了苦头。近来时常听到传闻某些 App 被破解而产生了一些很不愉快的事情,其实我曾经在 从“去除签名验证”说起 谈论过 App 保护的问题,今天我将从一个框架开发者(专业破解者?)的角度来进一步聊聊如何保护 App。

在继续讨论之前,我们必须承认:没有绝对的安全。如果对于一个攻击者来说,攻破你的系统所需要花费的成本比攻破之后获取的收益要高很多很多,那么就可以认为你的系统是相对安全的。具体来说,如果一个 Cracker 破解你的软件之后收益(如直接经济利益,个人满足感等等)比它破解所需要花费的时间和精力小很多,那么你的软件就是安全的。

一般来说,破解一个 App 通常的方式有两种:

直接修改 App 的安装包里面,通过静态插桩的方式修改代码,修改之后重新打包然后签名。这种方式的原理与太极·阴相同。

不直接修改 App 的安装包,而是在 App 运行起来之后,动态修改 App 的目标进程内存,从而修改应用的逻辑。这种方式的原理与一般的游戏修改器、Xposed 框架类似。

对于方法一来说,它的重点在于重新打包之后一定需要重新签名,因此攻防双方的焦点在于如何破解/保护签名。对于方法二来说,其重点在于进程中会加载不明来源的目标代码。

在 从“去除签名验证”说起 中我们谈论过签名相关的原理以及一些防护办法,那么,对于一个破解者来说,如何去绕过签名检测呢?或者换个方式说,如何保护签名?

获取应用签名最基础的方法是通过 PackageManager 的  getPackageInfo 方法返回的 PackageInfo.signatures / signinginfo。因此最简单的防护方式是通过此 API 在运行时获取自己应用的签名然后与自己的固有签名做比对,如果不一致则代表应用被修改。不过这种验证方式在当下很容易被绕过,比如 VirtualXposed 可以通过动态代理 package 这个 binder service,某些工具甚至提供了一件破除签名的功能。

既然系统的 API 已经被玩坏了,那么我们得找找别的办法。本质上讲,签名信息是存在于应用的安装包中的,系统的签名 API 不过是系统帮我们完成了签名信息解析的过程。我们可以自己去解析这个签名信息,从而自己去验证签名。简单来说,就是直接读取应用自己的安装包文件,通过签名的格式(V1/V2/V3) 去解析签名信息,然后计算签名。实际上很多应用,包括常见的 QQ 都用了这种方式做签名验证。不过很可惜,这种方式也有办法去破解和绕过。这个过程的重点在于,我们需要把安装包读取并解析,如果这个过程被干预,后续的信息就不可靠。比如,如果我们从 ApplicationInfo.sourceDir 去获取安装包路径,那破解者可以修改这个变量让指向一个破解前的安装包路径,这样你如何验证都是正确的。即使我们获取的安装包路径是对的,别人也可以干预「读」这个过程,偷梁换柱地让你以为自己在读正确的路径,实际上读到了被改过的内容。具体来说,可以拦截 openat 这个系统调用。

Java 层的 File 类 API 或者 NDK 中提供的文件接口,实际上最终用了 bionic libc 中的 open 函数,这个函数是系统调用 openat 的简单封装。如果我们用这些接口去读文件,那么只需要拦截 libc 中的 open 方法,就可以轻松破解。

既然这些接口都不靠谱,那么我们可能需要自己用系统调用跟内核打交道来读文件。具体来说,我们可能需要根据构架的不同,用汇编的方式去实现 open 系统调用,然后用我们自己的汇编代码来读文件。当然这个过程你完全可以 copy & paste Android 源码中的实现。做到了这一步是不是就天衣无缝了呢?

答案是否定的,因为这个过程也可以被修改。比如说,arm 构架下,系统调用的实现依赖 svc #0 这个指令,那么,别人可以搜索整个内存,在发现 svc #0 并且系统调用号是 openat 之后直接给你修改掉。

为了应对这种直接搜索内存然后 patch 的方式,我们可能需要做一些额外的工作,让它们不那么轻易地搜索到我们。比如说,我们不要直接把汇编代码编译进程序当函数调用,而是采用动态 mmap 的方法,在运行时分配内存填入代码,然后调用;这样可能会让搜索指令不那么容易。另外,我们也可以启动 native 子进程,在子进程中执行这部分操作;因为通常别人可能关注不到这个过程。
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
无量科技 | 2021-10-13 08:54:07 | 显示全部楼层
好帖必须得顶起
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

liqiang24 | 2021-10-13 16:05:31 | 显示全部楼层
看看村长这是什么东东
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

天镜盗梦 | 2021-10-13 20:30:46 | 显示全部楼层
秀起来~
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

梦影 | 2021-10-13 21:10:11 | 显示全部楼层
看起来不错
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

半度微凉 | 2021-10-13 22:19:42 | 显示全部楼层
无论是不是沙发都得回复下
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

yichong | 2021-10-15 09:19:15 | 显示全部楼层
我了个去,顶了
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

大司命 | 2021-10-15 15:17:15 | 显示全部楼层
元芳你怎么看?
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

伴我多久 | 2021-10-15 17:32:58 | 显示全部楼层
撸过
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

68079330 | 2021-10-15 22:55:44 | 显示全部楼层
支持,楼下的跟上哈~
aaaa
村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科技平台,参与或发布项目定制各种软件就来村长黑科技平台
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则