iOS 逆向实践记录(非越狱)

参考地址
https://github.com/Urinx/iOSAppHook
https://github.com/TKkk-iOSer/TKTweakDemo
微信自动抢红包
学习文章合集

1、逆向第一步,应用的脱壳

由于本人没有越狱的机器使用PP助手,版本为6.6.6

.ipa后缀改为.zip进行解压

2、应用签名

代码签名探析中对codesign说的比较详细。
iOS签名原理
a、使用下面命令,可以查看一些信息

 codesign -vv -d WeChat.app

b、验证是否签名成功

codesign --verify Example.app

这里具体的原理不深究,我使用开源的工具进行重签名
AppResign,
将下载好的AppResign 拷贝到Payload目录中使与WeChat.app在同一目录中,如下图

AppResign.png

cd到Payload目录中执行./AppResign -h查看使用帮助

Version: 2.2.1

Usage:
./AppResign [-options] [INPUT] [OUTPUT]

Options:
-h   help
-v   verbose mode, print all logs
-c   certificate
-p   provisioning profile
-b   bundle id
-n   display name, '*' means default name

Example:
./AppResign xxx.ipa xxx-out.ipa
./AppResign -v xxx.ipa xxx-out.ipa
./AppResign -v -c 'iPhone Developer: XXX XXX (ABCDE12345)' -p 'iOS Team Provisioning Profile: com.xxx.xxx (ABCDE12345)' -b 'com.xxx.xxx' -n '*' xxx.ipa xxx-out.ipa

由于我这边使用的证书我描述文件不支持Watch,所有需要删除Watch相关还有Plugs,


显示包内容.png

Watch删除.png

Plugins.png

使用AppResign进行重签名

./AppResign WeChat.app WeChat.ipa

首先选择签名的证书、然后选择相应的描述文件、设置应用名称等

使用Xcode来安装重签名的.ipa,使用如下截图

testIpa.png

安装成功并且成功打开了,证明重签名成功。

3、iOSOpenDev的安装

安装使用教程,安装成功后新建一个dylib工程如下图

8B01D233-1EA3-45E9-9354-B9B0A6FB9D87.png
,命名为HookDemo,在HookDemo.mm中添加如下代码

#import <Foundation/Foundation.h>
#import "CaptainHook/CaptainHook.h"
#import <UIKit/UIKit.h>
#include <notify.h> // not required; for examples only

// Objective-C runtime hooking using CaptainHook:
//   1. declare class using CHDeclareClass()
//   2. load class using CHLoadClass() or CHLoadLateClass() in CHConstructor
//   3. hook method using CHOptimizedMethod()
//   4. register hook using CHHook() in CHConstructor
//   5. (optionally) call old method using CHSuper()


CHDeclareClass(UIApplication);
CHDeclareClass(MicroMessengerAppDelegate);

CHOptimizedMethod2(self, void, MicroMessengerAppDelegate, application, UIApplication *, application, didFinishLaunchingWithOptions, NSDictionary *, options)
{
    CHSuper2(MicroMessengerAppDelegate, application, application, didFinishLaunchingWithOptions, options);
    
    NSLog(@"## Start Cycript ##");
    
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"大杰哥很丑" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"关闭", nil];
    [alert show];
    
    
//    CYListenServer(CYCRIPT_PORT);
}


CHConstructor {
    @autoreleasepool {
        CHLoadLateClass(MicroMessengerAppDelegate);
        CHHook2(MicroMessengerAppDelegate, application, didFinishLaunchingWithOptions);
    }
}

注意需要记得导入UIkit框架,然后编译工程,拷贝HookDemo.dylibPayload目录下

B9EE76D6-EB5B-41F0-810F-3CEB53D9870F.png

拷贝后的目录信息如下图
17151F09-6C30-48B5-BA43-FA97540AAE27.png

使用yololib工具对对二进制文件进行dylib的注入,将编译好的yololib也同样拷贝到Payload目录中去,然后执行下面的命令

./yololib WeChat.app/WeChat HookDemo.dylib

使用MachOView查看,动态是否注入成功,查看Load Commands的数据段中,可以看到我们注入的HookDemo.dylib如下

964511EF-0F35-4CE1-9886-4A8F21B935EC.png

最后记得我们还需要将我们注入的dylib文件放到WeChat.app目录下。

cp HookDemo.dylib WeChat.app/

这里我们注入了HookDemo.dylib,需要重新签名

./AppResign WeChat.app WeChat.ipa

安装WeChat.ipa到手机中,打开App出现如下图的弹窗证明成功

IMG_0855.PNG

使用idevicesyslog查看手机日志(注意这里需要手机连接电脑),安装教程,使用方法如下

 idevicesyslog | grep WeChat

就能查看详细消息

推荐阅读更多精彩内容