借鉴实现或数据

来源:互联网 发布:淘宝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实际例子。

0 0
原创粉丝点击