- 浏览: 28251 次
最新评论
http://blog.csdn.net/yy405145590/article/details/41282669
主要思路是替换掉在mono里image.c的mono_image_open_from_data_with_name函数,HOOK掉加载DLL的地方,实现读取自定义的DLL文件。
检查发现在Xcode工程里的libiPhone-lib.a里存在mono的库文件,在libiPhone-lib.a下有两个CPU架构的库
[html] view plaincopy在CODE上查看代码片派生到我的代码片
lipo -info libiPhone-lib.a
Architectures in the fat file: libiPhone-lib.a are: armv7 i386
使用
[html] view plaincopy在CODE上查看代码片派生到我的代码片
lipo libiPhone-lib.a -thin armv7 -output libiPhone-lib.arm
解压出armv7的库文件
[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -t libiPhone-lib.arm
[html] view plaincopy在CODE上查看代码片派生到我的代码片
filterscpuimplvectordata.o
filterscpuimplwarp.o
filterscpumipmaps.o
filterscpupassvectordata.o
filterscpupvrtc.o
filterscpufxmapsbuffer.o
filterscpufxmapsmain.o
filterscpufxmapsdrawjob.o
filterscpufxmapsdrawqueue.o
filterscpufxmapsjob.o
filterscpufxmapspool.o
filterscpufxmapsthread.o
parsebitmap.o
parseblend.o
parseblur.o
parsechannelsshuffle.o
parsecommon.o
parsecontext.o
parsedata.o
parsedirectionalmotionblur.o
parsedirectionalwarp.o
parseemboss.o
parsefxmaps.o
parsefxmapssetcell.o
parsegradientmap.o
parsegrayscaleconversion.o
parsehsl.o
parselevels.o
parsemotionblur.o
parsenormal.o
parsesharpen.o
parsetransformation2d.o
parseuniformcolor.o
parsevectorgraphicsdata.o
parsewarp.o
apicontext.o
apihandle.o
apiversion.o
libCrashReporter-iphoneos.a-armv7-master.o
[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -t libiPhone-lib.arm | grep image.o
[html] view plaincopy在CODE上查看代码片派生到我的代码片
image.o
可以看到armv7下确实有image.o的模块
解压出image.o模块
[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -x libiPhone-lib.arm image.o
用十六进制工具搜索
[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
mono_image_open_from_data_with_name 替换成 mono_image_open_from_data_with_xxxx
自己编译一个imagehook.c的文件生成imagehook.o,内容如下
[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
#include <stdio.h>
extern int *
mono_image_open_from_data_with_xxxx(
char *data, unsigned int data_len,
int need_copy,
int *status,
int only, const char *name);
int *
mono_image_open_from_data_with_name(
char *data, unsigned int data_len,
int need_copy,
int *status,
int only, const char *name)
{
printf("call mono_image_open_from_data_with_name 0x%x 0x%x 0x%x 0x%x 0x%x %s", (int)data, (int)data_len, need_copy, (int)status, only, name);
return mono_image_open_from_data_with_xxxx(data, data_len, need_copy, status, only, name);
}
将image.o 和 imagehook.o重新打包进libiPhone-lib.arm
[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -r libiPhone-lib.arm image.o
ar -q libiPhone-lib.arm imagehook.o
重新生成libiPhone-lib.a
[html] view plaincopy在CODE上查看代码片派生到我的代码片
lipo libiPhone-lib.a -replace armv7 libiPhone-lib.arm -output libiPhone-lib.a_01
这样用新生成的libiPhone-lib.a去链接应用程序会发现调用到了我们自己的函数。
但是你会发现都是没用的,因为mono在IOS下是FULL AOT模式编译的,每个脚本dll会生成对应的.s汇编代码直接连接到可执行文件里面.
主要思路是替换掉在mono里image.c的mono_image_open_from_data_with_name函数,HOOK掉加载DLL的地方,实现读取自定义的DLL文件。
检查发现在Xcode工程里的libiPhone-lib.a里存在mono的库文件,在libiPhone-lib.a下有两个CPU架构的库
[html] view plaincopy在CODE上查看代码片派生到我的代码片
lipo -info libiPhone-lib.a
Architectures in the fat file: libiPhone-lib.a are: armv7 i386
使用
[html] view plaincopy在CODE上查看代码片派生到我的代码片
lipo libiPhone-lib.a -thin armv7 -output libiPhone-lib.arm
解压出armv7的库文件
[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -t libiPhone-lib.arm
[html] view plaincopy在CODE上查看代码片派生到我的代码片
filterscpuimplvectordata.o
filterscpuimplwarp.o
filterscpumipmaps.o
filterscpupassvectordata.o
filterscpupvrtc.o
filterscpufxmapsbuffer.o
filterscpufxmapsmain.o
filterscpufxmapsdrawjob.o
filterscpufxmapsdrawqueue.o
filterscpufxmapsjob.o
filterscpufxmapspool.o
filterscpufxmapsthread.o
parsebitmap.o
parseblend.o
parseblur.o
parsechannelsshuffle.o
parsecommon.o
parsecontext.o
parsedata.o
parsedirectionalmotionblur.o
parsedirectionalwarp.o
parseemboss.o
parsefxmaps.o
parsefxmapssetcell.o
parsegradientmap.o
parsegrayscaleconversion.o
parsehsl.o
parselevels.o
parsemotionblur.o
parsenormal.o
parsesharpen.o
parsetransformation2d.o
parseuniformcolor.o
parsevectorgraphicsdata.o
parsewarp.o
apicontext.o
apihandle.o
apiversion.o
libCrashReporter-iphoneos.a-armv7-master.o
[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -t libiPhone-lib.arm | grep image.o
[html] view plaincopy在CODE上查看代码片派生到我的代码片
image.o
可以看到armv7下确实有image.o的模块
解压出image.o模块
[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -x libiPhone-lib.arm image.o
用十六进制工具搜索
[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
mono_image_open_from_data_with_name 替换成 mono_image_open_from_data_with_xxxx
自己编译一个imagehook.c的文件生成imagehook.o,内容如下
[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
#include <stdio.h>
extern int *
mono_image_open_from_data_with_xxxx(
char *data, unsigned int data_len,
int need_copy,
int *status,
int only, const char *name);
int *
mono_image_open_from_data_with_name(
char *data, unsigned int data_len,
int need_copy,
int *status,
int only, const char *name)
{
printf("call mono_image_open_from_data_with_name 0x%x 0x%x 0x%x 0x%x 0x%x %s", (int)data, (int)data_len, need_copy, (int)status, only, name);
return mono_image_open_from_data_with_xxxx(data, data_len, need_copy, status, only, name);
}
将image.o 和 imagehook.o重新打包进libiPhone-lib.arm
[html] view plaincopy在CODE上查看代码片派生到我的代码片
ar -r libiPhone-lib.arm image.o
ar -q libiPhone-lib.arm imagehook.o
重新生成libiPhone-lib.a
[html] view plaincopy在CODE上查看代码片派生到我的代码片
lipo libiPhone-lib.a -replace armv7 libiPhone-lib.arm -output libiPhone-lib.a_01
这样用新生成的libiPhone-lib.a去链接应用程序会发现调用到了我们自己的函数。
但是你会发现都是没用的,因为mono在IOS下是FULL AOT模式编译的,每个脚本dll会生成对应的.s汇编代码直接连接到可执行文件里面.
发表评论
-
Xcode9解决exportArchive: requires a provisioning profile
2017-09-23 15:15 1178https://stackoverflow.com/quest ... -
缺少编译器要求的成员“ystem.Runtime.CompilerServices.ExtensionAttribute..ctor”
2017-09-09 15:05 1020//缺少编译器要求的成员“ystem.Runtime.Com ... -
[转]帧同步和状态同步
2017-03-06 12:22 659转自:http://www.gameres.c ... -
非对称加密和数字证书原理
2017-03-01 17:34 579http://www.cnblogs.com/JeffreyS ... -
Unity模糊查找MonoBehaviour
2016-11-23 17:32 1175using System; using System.Co ... -
Unity问题备份
2016-10-09 11:19 7361. Could not find file " ... -
链接-Unity Assetbundle使用填坑
2016-09-08 11:53 644http://www.cnblogs.com/ybgame/p ... -
协程执行顺序测试备份
2016-09-01 18:28 490using UnityEngine;using Syste ... -
[转]简单粗暴的so加解密实现
2016-08-12 17:03 820http://bbs.pediy.com/showthread ... -
[转]android解决apk编译方法数超过64k的问题
2016-08-05 20:59 505如果你是一个android开发者,你至少听说过的Dalvik的 ... -
svn 413 Entity too large
2016-06-29 20:58 774在apache配置conf文件中添加 LimitXMLRequ ... -
[转]gradle打不同渠道的包
2016-06-27 18:29 685美团Android自动化之旅— ... -
IPv4 regex
2016-06-07 12:12 451private static Regex ipv4Reg = ... -
[转]unity3d使用winphone平台的问题
2016-05-25 12:18 505最近在移植u3d的游戏到WindowsPhone8上,Wind ... -
[转]Deep link是什么
2016-05-23 12:06 701http://www.open-open.com/lib/vi ... -
苹果和google play审核时注意的问题
2016-05-16 15:18 755苹果测试沙盒充值不能用越狱手机来测 google play测试 ... -
C# MSDN地址备忘
2016-05-14 19:20 476https://msdn.microsoft.com/zh-c ... -
Windows API错误码
2016-05-14 19:19 359https://msdn.microsoft.com/en-u ... -
java 坑收集
2016-05-06 20:15 3511. Strng.getBytes() 一定要指明用的是什么编 ... -
[转]iphone不越狱抓包
2016-04-27 20:42 992Remote Virtual Interface 在iOS ...
相关推荐
在本文中,我们将深入探讨React Native(RN)的热更新技术在iOS平台上的实现,以及如何通过源码来理解和配置这一功能。React Native作为一个流行的开源框架,允许开发者使用JavaScript编写原生移动应用。热更新是RN...
在iOS应用开发中,为了提供更好的用户体验和及时修复线上问题,开发者经常需要使用热更新技术。Swift和React Native是两种非常流行的开发语言和框架,它们分别用于原生iOS开发和跨平台开发。在这个名为"Swift-react-...
在“egret之安卓热更新下载.zip”这个压缩包中,我们聚焦的是如何在Android平台上实现Egret项目的热更新功能,...通过学习和研究这个示例,开发者能够提升其Egret项目的技术实力,提供更加流畅、及时的更新体验给用户。
ILRuntime插件尤其适用于安卓和iOS平台,这两个平台由于其自身的特性,通常对应用的更新过程有着严格的限制。 Unity3D是全球广泛使用的跨平台3D游戏开发工具,它基于C#编程语言,使用Mono/.NET框架。然而,原生的...
Quick-Cocos2dx-Community 3.6.5版本发布说明是Cocos2d-x社区的一个重要里程碑,这个版本包含了官方支持的热更新功能以及其他一些关键的改进和演示项目。Cocos2d-x是一个广泛使用的开源游戏开发框架,它基于C++,并...
5. 小程序更新:微信小程序支持热更新,开发者可以通过版本控制策略来更新用户的小程序版本。 6. 微信支付:微信小程序内可以集成微信支付功能,实现商品购买等交易行为。 7. 调试和测试:微信开发者工具提供了...
开发者可以研究这些资源来了解具体的实现细节和使用方法,例如如何构建修复包,如何在应用中集成热修复机制,以及如何进行测试和调试。 总的来说,Swift HotFix为iOS开发者提供了一种在不影响苹果审核流程的前提下...
在iOS开发中,UITableView是一种非常常见的控件,用于展示数据列表。...通过研究这个示例项目,开发者可以学习到如何在iOS应用中实现复杂列表交互,这对于构建具有深度和层次感的评论系统至关重要。
这篇关于Wedjat的调研和整理文章,将深入探讨如何有效地利用SDK进行性能分析,提供最佳实践和案例研究,帮助开发者提升iOS应用的性能监控能力。通过对Wedjat SDK的学习和实践,开发者可以更好地理解iOS应用的性能...
在iOS平台上,手电筒和模拟打火机的应用开发涉及到多方面的...通过学习这个项目,开发者不仅可以了解到如何在iOS平台上实现这些功能,还可以研究如何优化性能、提高用户体验,以及如何处理各种设备和系统兼容性问题。
React的声明式编程模型使得UI的更新变得简单且高效,只需要更改数据,React会自动计算出最小化的UI变化并进行更新。 JueJinApp是知名的中文技术社区掘金的移动应用,其特点是提供技术文章、问答、项目分享等服务。...
此外,热更新是React Native的一个亮点,通过`CodePush`等服务,开发者可以在用户不更新应用的情况下推送新的JavaScript代码,提高了迭代效率。 对于测试和调试,React Native提供了模拟器和真机调试工具,如Chrome...
【Bugly热修改Demo】是一个基于Bugly平台的热修复示例项目,旨在帮助开发者理解和应用热更新技术。Bugly是腾讯推出的一款专注于移动应用稳定性管理的服务,它提供了强大的异常上报、分析以及热修复功能,使得开发者...
这个项目是一款基于iOS平台的休闲游戏,名为“气球爆破热”,通过分析其源码,我们可以了解如何在iOS上构建类似的游戏应用,以及运用Swift编程语言和UIKit框架的关键技术。 首先,项目使用了Swift作为主要的编程...
例如,Android和iOS对于应用更新的处理方式有所不同,Android支持更加灵活的热更新,而iOS则更强调通过App Store进行官方更新。因此,开发自动更新功能时,需要根据目标平台的规范和最佳实践进行适配。 总的来说,...
在iOS应用开发中,组件化路由设计是一种解决复杂项目结构和多组件交互问题的重要方法。...通过深入研究和实践,开发者可以找到适合自己项目的最佳路由设计方案,提高应用的灵活性、可维护性和用户体验。
同时,React Native也支持热更新,开发者可以无需重新安装应用即可实时更新代码。 【WeatherAppReactNative项目简介】 "WeatherAppReactNative"是一个利用React Native构建的天气预报应用,专为iOS平台设计。该...
文档还可能涉及一些对于初学者来说可能较为抽象的概念,例如信号的热(Hot)和冷(Cold)信号、信号的多播(Multicasting)和如何将响应式编程与iOS开发中的模型-视图-视图模型(Model-View-ViewModel, MVVM)架构模式...
3. 发布月度更新进行热修复和打补丁。 4. 通过发布新的iOS版本来彻底解决。 例如,在iOS v6.0 - v6.1中,存在紧急密码绕过漏洞,受影响的设备包括iPhone 5、5s、iPad及iPad 2系列。这种漏洞允许在物理访问设备并...