iOS非越狱逆向工程

这几天一直在研究iOS的安全,也动手搞了一下iOS的逆向工程微信。有两个成果吧。一个是拦截了信息;另外一个就是拦截了定位,这样附近的人等需要用到经纬度功能的地方都可以自定义自己想要的经纬度。例如可以定位到日本,去看看日本的美眉。哈哈。。(大家可以关注我的博客,有的文章还没来得及移过来的flyoceanfish博客传送门)

由于之前的iOSOpenDev已经不维护,所有网上有个大神对此做了一个升级,最主要是可以傻瓜式使用了,dylib注入、打包等等一系列自动化。iOSOpenDev

虽然都是自动化了,不过本人还是尝试了手工dylib注入、打包等功能。首先让我们先看看这个<font color='red' size='4'>非越狱神器</font>的神奇之处,让我先体验一把。(安装的话自己对照官网安装即可,我这里就不啰嗦了!)

尝试自动化工具

大家首先按照官网的教程新建一个MonkeyApp工程,我这里新建的是WeiXin,接下来我们需要一个已经敲掉壳的ipa文件,如果你自己按照教程一步一步的搞也可以,不过还有更省事的方法,就是通过pp助手在越狱应用中下载一个越狱版微信即可,放到指定路径下。

编写代码

写代码的地方有好几个文件其实都是可以写的,只是不同的语法而已。比如.xm后缀的就是支持Logos语法,例如%hook%orig等语法。不过本人写在WeiXinDylib.m这个文件里,这个文件其实最后会生成一个动态包名WeiXinDylib,这个包就是我们需要注入到APP中的。

  • 微信消息拦截

WeiXinDylib.m这个文件的最后加上以下代码

@interface CMessageWrap
@property (nonatomic, strong) NSString* m_nsContent;
@property (nonatomic, assign) NSInteger m_uiMessageType;
@end
CHDeclareClass(CMessageMgr)
CHMethod2(void, CMessageMgr, AsyncOnAddMsg, NSString*, msg, MsgWrap, CMessageWrap*, msgWrap){
    NSString* content = [msgWrap m_nsContent];
    if([msgWrap m_uiMessageType] == 1){
        NSLog(@"收到消息: %@", content);
    }
    CHSuper2(CMessageMgr, AsyncOnAddMsg, msg, MsgWrap, msgWrap);
}
CHConstructor{
    CHLoadLateClass(CMessageMgr);
    CHClassHook2(CMessageMgr, AsyncOnAddMsg, MsgWrap);
}

这样的话我们就拦截到了微信收发消息,在Xcode控制台则会打印出我们所收发的消息。

  • 微信自定义定位(大家比较期待的功能,想撩哪里的美眉都可以哟!)

同样找到WeiXinDylib.m这个文件然后在最后加如下代码

CHDeclareClass(CLLocationManager)
CHMethod(0,void,CLLocationManager,startUpdatingLocation){
    NSLog(@"定位被拦截");
    CHSuper(0,CLLocationManager, startUpdatingLocation);

    CGFloat lat = 35.707013;
    CGFloat lng = 139.730562;
    CLLocation *tokyoLocation = [[CLLocation alloc] initWithLatitude:lat longitude:lng];
    CLLocation *cantonLocation = [[CLLocation alloc] initWithLatitude:30.231695 longitude:120.283835];
    [NSThread sleepForTimeInterval:4];
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self.delegate locationManager:self didUpdateToLocation:tokyoLocation fromLocation:cantonLocation];
    });
#pragma clang diagnostic pop
}
CHConstructor{
    CHLoadLateClass(CLLocationManager);
    CHClassHook(0,CLLocationManager, startUpdatingLocation);
}

我这里是写死的经纬度,其实大家也可以弹出一个框然后输入也是可以的。代码里拦截到了方法之后我将现场sleep了4秒。主要是如果不sleep我发现这时候回调不起作用的。

总结:其实动态注入的本质就是通过运行时进行method swizzling,进行了方法的替换而已。

体验各种手工工具

  • Hopper Disassembler是Mac上的一款二进制反汇编器,跟IDA功能一样
  • Cycript 是一款脚本语言,是混合了objective-c与javascript语法的一个工具,让开发者在命令行下和应用交互,在运行时查看和修改应用。与lldb有点类似
  • class-dump(http://stevenygard.com/projects/class-dump/) 能够将工程里边所有的方法提取出来,生成一个.h文件
  • iReSign APP重签名,我们也可以使用命令一步一步来签名,这个工具帮我们把命令集成了写了一个界面
  • yololib 将dylib动态包注入到APP中
  • ios-deploy 一个非越狱版远程lldb调试工具

这些工具的安装我就不啰嗦了,大家要不就去官网看怎么安装,要不就自行百度了。

我这里可以说一下有的工具下载下来之后,如果使用有时候我们的终端先cd到对应的文件下,然后才能使用相应的命令。其实这样也是比较繁琐的。这里我们可以把他们的路径加到.bash_profile文件中,这样在终端则可以直接使用了。

例如我将cycript加到这个文件里,我在终端就可以直接使用了。


1672149F-06C6-4A6A-82C7-8911DA07DB8D.png

工具使用

使用的话我也只是简单给大家演示一样,起个抛砖引玉的作用,其实每个工具都非常的强大的。

class-dump

class-dump -H 解压完成的APP的文件路径/weixin.app -o /Users/xxxx/Desktop/指定生成文件路径

这样就可以生成很多.h文件了。直接看起来比较费事,大家可以新建一个Xcode工程,然后把文件复制进去,这样看起了就比较舒服了。

通过这个工具我们可以找到我们感兴趣类的方法,这样就可以做对应的拦截修改了。

yololib

yololib 可执行文件 要被注入的.dylib

例如

./yololib WeiXin.app libWeiXinDylib.dylib

注:这样写的话要保证yololib、WeChat、WeChat.app处于同一目录下。

将我们注入的dylib文件放到WeChat.app目录下。

cp hook.dylib WeChat.app/

iReSign

首先我们要对我们的dylib动态包进行签名

codesign -f -s "iPhone Developer:xxxx" WeiXin.app/libWeiXinDylib.dylib

然后点击iReSign直接点击运行对ipa包签名


7E58DAD9-8A11-4461-A9E4-E8C3179380E4.png

选一下对应文件的路径然后点击重新签名即可。那个entitlements.plist文件不选的话也可以成功。不过最好自己新建一个,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
     <key>application-identifier</key>
     <string>com.aa.aa.weixin</string>
     <key>get-task-allow</key>
     <false/>
     <key>keychain-access-groups</key>
     <array>
         <string>com.aa.aa.weixin</string>
     </array>
 </dict>
 </plist>

大家把com.aa.aa.weixin改成自己的bundle id即可。然后复制新建一个文件就可以啦。

Cycript
  • 找到进程ID

ps -e | grep WeChat

  • 钩住进程

cycript -p 12435

cycript -r ip:6666

接下来可以干我们想干的事情了,使用任何oc代码。

cy# alertView = [[UIAlertView alloc] initWithTitle:@"注入" message:@"Cyript" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil]

cy# [alertView show]

其实我们在逆向工程的时候,大部分是用的内存地址调用

cy# [#0x108840380 show]

调用方式就是#内存地址,我们可以借助Xcode的Debug View Hierarchy这个工具获取

1DDDB54A-8837-4BE0-8D2D-C1D91FED3E8F.png
效果图.PNG
ios-deploy

这个工具与Cycript有点类似的。首先就是安装ios-deploy

ios-deploy --debug --bundle WeiXin.app

运行完之后就可以像Xcode控制器内置的lldb一样,可以在终端执行任意lldb命令啦。比如断点等等

Hopper disassembler

这个工具使用起来简单,但是也是非常的强大的。我们打开这个工具,直接将.app拖到这个工具里就可以了。

接下来我们可以搜索全局的方法、类等。甚至可以直接修改指令的,然后再生成对应的APP

结论

这一篇主要是理论,让大家有个大体的了解。下一篇来个实战,教大家如果根据内存地址动态打断点,如何获取微信当前的视图控制器的名字,这样我们结合Hopper或者class-dump出来的.h文件进行修改或拦截了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容