借鉴实现或数据
来源:互联网 发布:淘宝seo 猪八戒网 编辑:程序博客网 时间:2024/05/03 01:47
==============================================================================
解决什么问题
对于某个业务需求(比如用什么方式来录制视频、用什么参数来传递数据,等等)竞品是怎么实现的?
对于竞品正在使用的数据(比如图像、音频文件等),能否批量拿到?遇到加密或者需要token等情况又如何应对?
解决的问题只有一个:把自己的代码写到目标程序中运行,改变目标程序的执行行为。
==============================================================================
怎么解决
在iOS平台上来做这件事,利用一些已有的经验。
一般按照下面几个步骤可以解决这个问题,或者拿到自己想要的东西。
1. 拿到目标应用的ipa即安装文件。不同版本的ipa的行为不一样,比如下载下来的文件v1.0不有加密,到了v2.0就加密了,又或者逻辑发生了改变。
选择一个好破解的。如果把不到ipa,也可以从appstore上下载安装,再通过Cluth工具或iTunes工具,转换出来。
2. 使用class-dump或class-dump-z把ipa翻译出头文件。做到这一步,就已经可以看头文件,看出这个应用使用什么技术手段了。如果只是大概参考一下
别人的实现,做到这一步就够了。
3. 把自己的代码写到目标程序中。方法是写一个dylib即动态库,再拷贝到手机目录中:
scp xxx.dylib root@111.1.1.1:/Library/MobileSubstrate/DynamicLibraries/
生成dylib的办法:可以直接用gcc或clang编译出来,但这样的dylib一般只能在目标程序运行时加载运行一下,并不能注入到目标程序的特定函数中。
另一个办法,是使用xcode并且安装插件iosOpenDev,然后就可以编写hook代码(一般要猜测目标类与函数--从之前拿到的头文件入手,再写hook确认)。
拷贝dylib在手机,也可以通过xcode在profiling时做到,但需要在xcode上设置ip,同时也要给手机安装相应的命令程序(后继文章可提及)。
如果通过xcode拷贝dylib在手机DynamicLibraries目录,那要注意它会同时拷贝一个plist文件(在项目中可以找到)进去,这个plist里面的Filter字段是指定只在哪
些程序启动时才加载这个dylib。为了避免目标应用启动时dylib没有启动,最简单的做法是删除掉这个字段,或者直接删除掉这个plist(不拷贝到手机),
这样任何应用启动都会加载这个dylib。
4. 观察hook的结果。在hook代码里面直接用UIAlertView来弹框提示是一个办法,但明显影响执行流程,所以在批量执行时是不可取的。
还可以写文件,观察文件的内容即可。但最直接的是使用NSLog,这个输出会写到syslog--使用ssh登陆到手机,然后
socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
再watch,即可实时看到log的输出。观察syslog也要先在手机上安装命令(后继文章可提及)。
5. 定位目标代码,完成自动(避免手动点击,改变目标程序的逻辑)或批量(可建立http服务接受请求或循环执行)处理。
a. 不同类间的函数不能互相调用,如果要达到这个目的,可以使用全局变量来控制,一个函数设置变量,另一个函数while循环等待执行。
b. 需要读取当前类的成员变量值,可以使用MSHookIvar,比如:
int curlevel = MSHookIvar<int>(self, "_Level");
如果要修改则需要调用相应的接口,比如重写setXxx。
c. hook代码可以建立一个http服务,对外提供数据。
==============================================================================
后续
* hook常用的命令。
* 如何绕过加密。
* hook实际例子。
解决什么问题
对于某个业务需求(比如用什么方式来录制视频、用什么参数来传递数据,等等)竞品是怎么实现的?
对于竞品正在使用的数据(比如图像、音频文件等),能否批量拿到?遇到加密或者需要token等情况又如何应对?
解决的问题只有一个:把自己的代码写到目标程序中运行,改变目标程序的执行行为。
==============================================================================
怎么解决
在iOS平台上来做这件事,利用一些已有的经验。
一般按照下面几个步骤可以解决这个问题,或者拿到自己想要的东西。
1. 拿到目标应用的ipa即安装文件。不同版本的ipa的行为不一样,比如下载下来的文件v1.0不有加密,到了v2.0就加密了,又或者逻辑发生了改变。
选择一个好破解的。如果把不到ipa,也可以从appstore上下载安装,再通过Cluth工具或iTunes工具,转换出来。
2. 使用class-dump或class-dump-z把ipa翻译出头文件。做到这一步,就已经可以看头文件,看出这个应用使用什么技术手段了。如果只是大概参考一下
别人的实现,做到这一步就够了。
3. 把自己的代码写到目标程序中。方法是写一个dylib即动态库,再拷贝到手机目录中:
scp xxx.dylib root@111.1.1.1:/Library/MobileSubstrate/DynamicLibraries/
生成dylib的办法:可以直接用gcc或clang编译出来,但这样的dylib一般只能在目标程序运行时加载运行一下,并不能注入到目标程序的特定函数中。
另一个办法,是使用xcode并且安装插件iosOpenDev,然后就可以编写hook代码(一般要猜测目标类与函数--从之前拿到的头文件入手,再写hook确认)。
拷贝dylib在手机,也可以通过xcode在profiling时做到,但需要在xcode上设置ip,同时也要给手机安装相应的命令程序(后继文章可提及)。
如果通过xcode拷贝dylib在手机DynamicLibraries目录,那要注意它会同时拷贝一个plist文件(在项目中可以找到)进去,这个plist里面的Filter字段是指定只在哪
些程序启动时才加载这个dylib。为了避免目标应用启动时dylib没有启动,最简单的做法是删除掉这个字段,或者直接删除掉这个plist(不拷贝到手机),
这样任何应用启动都会加载这个dylib。
4. 观察hook的结果。在hook代码里面直接用UIAlertView来弹框提示是一个办法,但明显影响执行流程,所以在批量执行时是不可取的。
还可以写文件,观察文件的内容即可。但最直接的是使用NSLog,这个输出会写到syslog--使用ssh登陆到手机,然后
socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
再watch,即可实时看到log的输出。观察syslog也要先在手机上安装命令(后继文章可提及)。
5. 定位目标代码,完成自动(避免手动点击,改变目标程序的逻辑)或批量(可建立http服务接受请求或循环执行)处理。
a. 不同类间的函数不能互相调用,如果要达到这个目的,可以使用全局变量来控制,一个函数设置变量,另一个函数while循环等待执行。
b. 需要读取当前类的成员变量值,可以使用MSHookIvar,比如:
int curlevel = MSHookIvar<int>(self, "_Level");
如果要修改则需要调用相应的接口,比如重写setXxx。
c. hook代码可以建立一个http服务,对外提供数据。
==============================================================================
后续
* hook常用的命令。
* 如何绕过加密。
* hook实际例子。
0 0
- 借鉴实现或数据
- 借鉴prototype.js实现继承
- 借鉴
- 借鉴
- 借鉴
- 借鉴
- 借鉴
- 数据迁移不停服设计借鉴
- laravel实现按月或天或小时统计mysql数据
- 利用异或方法实现数据交换
- 【经典算法】--异或实现数据交换
- 借鉴借鉴!
- 产品实现途中的可借鉴处
- iOS 本地缓存实现 方案借鉴
- 【借鉴】Java或Web中解决所有路径问题
- 将位图数据读入离屏表面.(初学者借鉴)
- 一个“玩”数据前辈的职业规划,值得学习和借鉴
- 美国数据经纪对我们有什么借鉴意义?
- Python面向对象编程-封装
- nodejs+HBase数据库使用方法
- 解决Fiddler查看Get方法传递URL参数中文乱码问题
- caffe各层总结
- 网页
- 借鉴实现或数据
- ReLu(Rectified Linear Units)激活函数
- java类的生命周期
- 几组图让你明白C/C++程序运行中的堆、栈
- 中国网络水军调查新闻
- (4.5.1.1)将Eclipse代码导入到Android Studio的两种方式
- python文件读写操作
- avascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
- jQuery的ajax,当async为false时,同步操作失败。解决方案