初探iOS逆向工程

何为逆向工程?

逆向工程,指的是通过分析一个程序或系统的功能、结构或行为,将它的技术实现或设计细节推导出来的过程。当我们对一个软件的功能很感兴趣,却又拿不到它的源代码时,往往可以通过逆向工程的方式对它进行分析。

推荐的书籍:

推荐的书籍
推荐的书籍

iOS逆向交流论坛:http://iosre.com/

开始尝试简单的微信抢红包

应用脱壳:

准备工作

  1. 一台已越狱的iPhone5s以上机器(已安装OpenSSH和Cycript,砸壳用)
  2. 砸壳工具dumpdecrypted.dylib
  3. PP助手(建议安装,非常方便)

我们知道,App Store里的应用都是加密了的,直接拿上来撸是不正确的,所以在此之前一般会有这么一个砸壳的过程,其中用到的砸壳工具就是dumpdecrypted.dylib。 打开Mac的终端,用ssh进入连上的iPhone(确保iPhone和Mac在同一个网段,笔者iPhone的IP地址为192.168.8.54)。OpenSSH的root密码默认为alpine。
这里写图片描述

接下来就是需要找到微信的Bundle路径了,可以把iPhone上的所有App都关掉,唯独保留微信,然后输入命令 ps -e

这里写图片描述

这样我们就找到了微信的可执行文件Wechat的具体路径了。接下来我们需要用Cycript找出微信的Documents的路径,输入命令cycript -p WeChat


这里写图片描述

拷贝dumpdecrypted.dylib到iPhone上,这里我们用到scp命令.
scp 源文件路径 目标文件路径 。具体如下(也可以使用PP助手):


这里写图片描述

开始砸壳

dumpdecrypted.dylib的具体用法是:DYLD_INSERT_LIBRARIES=/PathFrom/dumpdecrypted.dylib /PathTo


这里写图片描述

当前目录下会生成砸壳后的文件,即WeChat.decrypted。同样用scp命令把WeChat.decrypted文件拷贝到电脑上,接下来我们要正式的dump微信的可执行文件了。(这边原文写的不完善,不过后来用PP助手文件管理器直接就导出来了,非常方便)
电脑端可以通过otool命令再次验证是否砸壳成功:

> otool -l WeChat.app/WeChat | grep -B 2 crypt
          cmd LC_ENCRYPTION_INFO
      cmdsize 20
     cryptoff 16384
    cryptsize 40534016
      cryptid 0
--
          cmd LC_ENCRYPTION_INFO_64
      cmdsize 24
     cryptoff 16384
    cryptsize 43663360
      cryptid 0

otool可以输出app的load commands,然后通过查看cryptid这个标志位来判断app是否被加密。1代表加密了,0代表被解密了

编写Hook代码:

新建一个dylib工程,因为Xcode默认不支持生成dylib,所以我们需要下载iOSOpenDev,安装完成后(Xcode7环境会提示安装iOSOpenDev失败,请参考iOSOpenDev安装问题),重新打开Xcode,在新建项目的选项中即可看到iOSOpenDev选项了。


这里写图片描述

编写代码(就贴出了部分代码):

//红包参数
                NSMutableDictionary *params = [@{} mutableCopy];
                
                [params setObject:parameters[@"msgtype"]?:@"null" forKey:@"msgType"];
                [params setObject:parameters[@"sendid"]?:@"null" forKey:@"sendId"];
                [params setObject:parameters[@"channelid"]?:@"null" forKey:@"channelId"];
                
                id getContactDisplayName = objc_msgSend(selfContact, @selector(getContactDisplayName));
                id m_nsHeadImgUrl = objc_msgSend(selfContact, @selector(m_nsHeadImgUrl));
                
                [params setObject:getContactDisplayName forKey:@"nickName"];
                [params setObject:m_nsHeadImgUrl forKey:@"headImg"];
                [params setObject:[NSString stringWithFormat:@"%@", nativeUrl]?:@"null" forKey:@"nativeUrl"];
                [params setObject:m_nsFromUsr?:@"null" forKey:@"sessionUserName"];
                
                if (kCloseRedEnvPlugin != HBPluginType) {
                    //自动抢红包
                    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
                    NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:[docDir stringByAppendingPathComponent:HBPluginDelaySettingFile]];
                    if (dict){
                        HBPluginDelay = ((NSNumber *)dict[HBPluginDelayKey]).floatValue;
                    }
                    if (HBPluginDelay<0) {
                        HBPluginDelay=0;
                    }
                    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(HBPluginDelay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                        ((void (*)(id, SEL, NSMutableDictionary*))objc_msgSend)(logicMgr, @selector(OpenRedEnvelopesRequest:), params);
                    });

编写完代码,直接XCODE运行跑一遍,就可以生成你自己的dylib了。接下来要做的就是让微信来执行你的dylib。

重新打包微信App

准备工具:

  1. dylib注入神器:yololib
  2. 自动注入打包神器:iInjection.app
  3. 证书!没有证书什么都白搭。

有了以上3个,那就可以快速进行重新打包了。~!
Warning:打包之前记得删除微信APP包里的Watch文件夹以及Plugins文件夹里的东西~!

这里写图片描述

如图,这个工具支持的功能很全面。
Tips:如果需要定制个性版的微信(自定义微信图标,自定义微信APP显示名字,比如图标改成网易新闻的图标,名字改成网易新闻~你想用这个微信来干啥都不会有人怀疑啊)。可以在打包APP之前找两张120120 180180的png格式图片
这里写图片描述

名字改为AppIcon60x60@2x.png和AppIcon60x60@3x.png替换原app文件夹里的图片即可~改名则是通过上面的APP打包神器更改显示名字即可。
打包出来的ipa文件直接拖入PP助手就能快速安装了~

参考链接:

一步一步实现iOS微信自动抢红包(非越狱)
非越狱环境下从应用重签名到微信上加载Cycript
iOS 破壳 反编译 黑客技术大揭秘

工具下载:

我的github

进阶之路

这边就简单介绍几个工具。。

这里写图片描述

一款可以查看你是否注入成功的工具

这里写图片描述

这里写图片描述

这里写图片描述

这个厉害了。反编译APP,能显示汇编代码(无奈看不懂。),但是看不懂也没关系。。他能生成相应的伪代码。

这里写图片描述

这里写图片描述

越狱手机 上可以查看 任何APP的UI结构。

class-dump:

可导出APP的所有.h文件。

总结

网上现在教程也挺多,也能搜到很多前人先好的hook代码,如果真要自己去想实现一个功能从头到尾自己做还是非常难的!而且最近微信对于抢红包,多开微信的查处力度也在不断加强,微信那边简简单单加一句检测代码,逆向就可能要分析好久才能找到对应方法。(如果能拿到微信源代码那该多爽啊!)。
总之逆向非常坎坷,中途总会遇到莫名其妙的错误,只能不断的尝试当然最后成功的喜悦也是不言而喻的!希望大家都可以尝试尝试~

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

推荐阅读更多精彩内容

  • 逆向工程的目的 1)分析竞品的最新研究或者产品原型(包括所用的技术,所使用的框架)2)学术/学习目的。3)破解应用...
    90后的思维阅读 6,934评论 3 14
  • 前言:最近笔者在研究iOS逆向工程,顺便拿微信来练手,在非越狱手机上实现了微信自动抢红包的功能。 题外话:此教程是...
    曾柏超阅读 1,823评论 0 2
  • 前言:最近笔者在研究iOS逆向工程,顺便拿微信来练手,在非越狱手机上实现了微信自动抢红包的功能。 题外话:此教程是...
    nongjiazhen阅读 16,845评论 1 0
  • 逆向工具集的安装和使用 iOS 逆向工程的工具分类 检查工具如:Reveal(界面分析工具)、tcpdump(抓包...
    Yochi阅读 5,630评论 1 5
  • 虚拟的娱乐,那是无关的感受,我们渴望的是真正的心灵舒畅,真正的关爱带来的美妙感受,真实的社交带来的人与人之间的互动...
    中黄志气阅读 352评论 0 1