iOS加固保护新思路

这篇具有很好参考价值的文章主要介绍了iOS加固保护新思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前有写过【如何给iOS APP加固】,但是经过一段时间的思考,我找到了更具有实践性的代码,具体可以看下面。

技术简介

iOS加固保护是基于虚机源码保护技术,针对iOS平台推出的下一代加固产品。可以对iOS APP中的可执行文件进行深度混淆、加固,并使用独创的虚拟机技术对代码进行加密保护,使用任何工具都无法直接进行逆向、破解。对APP进行完整性保护,防止应用程序中的代码及资源文件被恶意篡改。

技术功能

目前iOS加固主要包含逻辑混淆、字符串加密、代码虚拟化、防调试、防篡改以及完整性保护这三大类功能。通过对下面的代码片段进行保护来展示各个功能的效果:

- (void) test {
	if (_flag) {
	    test_string(@"Hello, World!",@"你好,世界!","Hello, World!");
	} else {
	     dispatch_async(dispatch_get_mian_queue(), ^{
	            do_something( );
	      });
	}
	int i=0;
	while (i++ < 100) {
	       sleep(1);
	       do_something( );
	}
}

将代码编译后拖入IDA Pro中进行分析,可以得到这样的控制流图,只有6个代码块,且跳转逻辑简单,可以很容易地判断出if-else以及while的特征:
iOS加固保护新思路

将其反编译为伪代码,代码逻辑及源代码中使用的字符串均清晰可见,与源代码结构基本一致,效果如下

void __cdecl -[ViewController test](ViewController *self, SEL a2)
{
   signed int v2; // w19
   __int64 v3;  //x0

   if ( self->_flag )
      sub_100006534 ( CFSTR("Hello, World!"),CFSTR("你好,世界!"), "Hello, World!" );
   else
      dispatch_async ( &_dispatch_main_q, &off_10000C308 );
   v2 = 100;
   do
   {
       v3 = sleep( 1u );
       sub_100006584( v3 );
       --v2;
    }
    while ( v2 );
}

1 代码逻辑混淆

通过将原始代码的控制流进行切分、打乱、隐藏,或在函数中插入花指令来实现对代码的混淆,使代码逻辑复杂化但不影响原始代码逻辑。

对代码进行逻辑混淆保护后,该函数的控制流图会变得十分复杂,且函数中穿插了大量不会被执行到的无用代码块,以及相互间的逻辑跳转,逆向分析的难度大大增强:
iOS加固保护新思路

若开启防反编译功能,则控制流图会被完全隐藏,只剩下一个代码块,且无法反编译出有效代码(如下图所示),这对于对抗逆向分析工具来说非常有效,包括但不限于(IDA Pro, Hopper Disassembler, Binary Ninja, GHIDRA等)
iOS加固保护新思路

void __cdecl -[ViewController test](ViewController *self , SEL a2)
{
    JUMPOUT (__CS__, sub_100005A94(6LL, a2));
}

2 字符串加密

把所有静态常量字符串(支持C/C++/OC/Swift字符串)进行加密,运行时解密,防止攻击者通过字符串进行静态分析,猜测代码逻辑。

对代码中的字符串进行加密之后,所有的字符串都被替换为加密的引用,任何反编译手段均无法看到明文的字符串。你好,世界!,Hello, World!等字符串原本可以被轻易的反编译出来,但保护之后已经看不到了:

void __cdecl -[ViewController test](ViewController *self, SEL a2)
{
   __int64 v2;  //x0
   __int64 v3;  //x0
   signed int v4; // w19
   __int64 v5;  //x0

   if ( self->_flag )
   {
      v2 = sub_100008288();
      v3 = sub_10000082E8(v2);
      sub_100008228(v3);
      sub_100007FB0( &stru_100010368, &stru_10001038, &unk_100011344);
   }
   else
      dispatch_async ( &_dispatch_main_q, &off_100010308 );
   }
   v4 = 100;
   do
   {
       v5 = sleep( 1u );
       sub_100008004( v5 );
       --v4;
    }
    while ( v4 );
}

3 代码虚拟化

将原始代码编译为动态的DX-VM虚拟机指令,运行在DX虚拟机之上,无法被反编译回可读的源代码,任何工具均无法直接反编译虚拟机指令。

采用代码虚拟化保护后,对函数进行反编译将无法看到任何与原代码相似的内容,函数体中只有对虚拟机子系统的调用:

void __cdecl -[ViewController test](ViewController *self, SEL a2)
{
     SEL v2;  // x19
     __int64 v3;  //  x21

     v2 = a2;
     v3 = sub_10000C1EC;
     (( void (* )(void))sub_10000C1D8)();
     sub_10000C1D8( v3, v2);
     sub_10000C180( v3, 17LL);
}

4 防调试

防止通过调试手段分析应用逻辑,开启防调试功能后,App进程可以有效地阻止各类调试器的调试行为:
iOS加固保护新思路

5 防篡改,完整性保护

防止应用程序中的代码及资源文件被恶意篡改,杜绝盗版或植入广告等二次打包行为。

以上是根据顶象的加固产品操作指南出具的流程,如需要更详细的说明,可以自行前往用户中心~文章来源地址https://www.toymoban.com/news/detail-468230.html

到了这里,关于iOS加固保护新思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 加固数据安全:Java助力保护Excel文件,让数据无懈可击

    摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 Excel文件保护是常用的一种功能,文件保护主要有三种: 添加密码,如果没有密码不允许打开文件。 添加密码,如果没

    2024年02月07日
    浏览(49)
  • 【教程】iOS Swift应用加固

    🔒 保护您的iOS应用免受恶意攻击!在本篇博客中,我们将介绍如何使用HTTPCORE DES加密来加固您的应用程序,并优化其安全性。通过以下步骤,您可以确保您的应用在运行过程中不会遭受数据泄露和未授权访问的风险。 本文将指导您如何通过改变编译方式、处理静态库、解决

    2024年01月23日
    浏览(49)
  • 铁路关基保护新规发布!铁路软件供应链安全洞察与治理思路

    ​ 更多网络安全干货内容: 点此获取 ——————— 近日,国家铁路局发布《铁路关键信息基础设施安全保护管理办法》,《办法》第十四条提到: “运营者应当加强 铁路关键信息基础设施供应链安全保护 , 优先 采购安全可信的网络产品和服务 。运营者采购网络产品和

    2024年01月25日
    浏览(45)
  • pycharm如何查看之前的运行结果

    谁能懂用pycharm跑了一夜的代码,早上起来,电脑突然关机了!!!!!!!!!!气死我了!!!! 不过正是因为遇到的一个又一个的问题,才能探索未知的东西,就比如昨天某位小李同学,让我做PPT的放大镜效果,嘿,这学习机会不就来了吗,贵宾们是否也想知道放大镜

    2024年02月02日
    浏览(39)
  • 运行配置停止之前未连接应用程序服务器, 原因: java.io.1OException:Failed to retrieve RMIServer stub:javax.naming. ServiceU

    直接修改JMX端口可以直接解决 win+r输入cmd,然后输入 netstat -aon|findstr 1099 回车 输入 taskkill -f -pid 18280 这里的18280换成你查询的,然后就成功终止了在1099上的进程。打开tomcat就会成功。

    2024年02月06日
    浏览(39)
  • git如何回滚,返回到之前的记录

    连续提交四次,注意每次commit都要加备注 2.1测试,回滚到第二次提交 2.1.1首先使用git log命令查看commit记录 使用git reset --hard commitID git reset --hard 4ba182e 这里commitID可以只写一部分 2.1.2查看结果. 可以发现已经回滚到第二版。 2.1.3回滚结果提交到远程 以上操作只是在自己的本地仓

    2024年01月16日
    浏览(36)
  • Visual Studio如何打开之前已有项目(超详细)

    目录 一.第一步  二.第二步 1.打开单个项目  2.打开多个项目 请大家多多支持,一起加油呀!  点击文件——打开 分两种情况: 点击上图数字1所示项目/解决方案,找到自己保存项目的文件夹  点击进入,找到自己要打开的项目文件 点击进入,找到.sln文件打开即可   点击第

    2024年02月05日
    浏览(50)
  • 如何在上架App之前设置证书并上传应用

    在上架App之前想要进行真机测试的同学,请查看《iOS- 最全的真机测试教程》,里面包含如何让多台电脑同时上架App和真机调试。 P12文件的使用详解 注意: 同样可以在Build Setting 的sign中设置证书,但是有点麻烦,建议就在General中设置证书,比较方便,还可以查看错误的地方

    2024年02月07日
    浏览(53)
  • git提交后如何回退到之前的版本

    如果我们已经使用git commit把代码提交 并且推送到了远程仓库中,那么使用几下几个命令可以 回退到指定版本 1 git log 使用这个命令查看提交的记录 这个时候会出现好几次的提交记录 每次后面都有如上的commit 编号 我们想回退到哪个版本 就把当前的commit编号复制 然后使用如

    2024年02月11日
    浏览(48)
  • 【Docker】如何查看之前docker run命令启动的参数

    个人主页 :金鳞踏雨 个人简介 :大家好,我是 金鳞 ,一个初出茅庐的Java小白 目前状况 :22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客 :这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包