美文网首页代码v2panda的技术专题iOS
一步一步实现iOS微信自动抢红包(非越狱)

一步一步实现iOS微信自动抢红包(非越狱)

作者: east520 | 来源:发表于2016-03-23 19:45 被阅读143223次
    微信红包

    前言:最近笔者在研究iOS逆向工程,顺便拿微信来练手,在非越狱手机上实现了微信自动抢红包的功能。

    题外话:此教程是一篇严肃的学术探讨类文章,仅仅用于学习研究,也请读者不要用于商业或其他非法途径上,笔者一概不负责哟~~

    好了,接下来可以进入正题了!

    此教程所需要的工具/文件


    是的,想要实现在非越狱iPhone上达到自动抢红包的目的,工具用的可能是有点多(工欲善其事必先利其器_)。不过,没关系,大家可以按照教程的步骤一步一步来执行,不清楚的步骤可以重复实验,毕竟天上不会掉馅饼嘛。

    解密微信可执行文件(Mach-O)


    因为从Appstore下载安装的应用都是加密过的,所以我们需要用一些工具来为下载的App解密,俗称砸壳。这样才能便于后面分析App的代码结构。

    首先我们需要一台已经越狱的iPhone手机(现在市面上越狱已经很成熟,具体越狱方法这里就不介绍了)。然后进入Cydia,安装OpenSSHCycriptiFile(调试程序时可以方便地查看日志文件)这三款软件。

    PS:笔者的手机是iPhone 6Plus,系统版本为iOS9.1。

    在电脑上用iTunes上下载一个最新的微信,笔者当时下载的微信版本为6.3.13。下载完后,iTunes上会显示出已下载的app。

    iTunes

    连上iPhone,用iTunes装上刚刚下载的微信应用。

    打开Mac的终端,用ssh进入连上的iPhone(确保iPhone和Mac在同一个网段,笔者iPhone的IP地址为192.168.8.54)。OpenSSH的root密码默认为alpine

    ssh

    接下来就是需要找到微信的Bundle id了,,这里笔者有一个小技巧,我们可以把iPhone上的所有App都关掉,唯独保留微信,然后输入命令 ps -e

    微信bundle id

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

    cycript
    • 编译dumpdecrypted
      先记下刚刚我们获取到的两个路径(Bundle和Documents),这时候我们就要开始用dumpdecrypted来为微信二进制文件(WeChat)砸壳了。
      确保我们从Github上下载了最新的dumpdecrypted源码,进入dumpdecrypted源码的目录,编译dumpdecrypted.dylib,命令如下:
    dumpdecrypted.dylib

    这样我们可以看到dumpdecrypted目录下生成了一个dumpdecrypted.dylib的文件。

    • scp
      拷贝dumpdecrypted.dylib到iPhone上,这里我们用到scp命令.
      scp 源文件路径 目标文件路径 。具体如下:
    scp
    • 开始砸壳
      dumpdecrypted.dylib的具体用法是:DYLD_INSERT_LIBRARIES=/PathFrom/dumpdecrypted.dylib /PathTo
    dumpdecrypted

    这样就代表砸壳成功了,当前目录下会生成砸壳后的文件,即WeChat.decrypted。同样用scp命令把WeChat.decrypted文件拷贝到电脑上,接下来我们要正式的dump微信的可执行文件了。

    dump微信可执行文件


    • 从Github上下载最新的class-dump源代码,然后用Xcode编译即可生成class-dump(这里比较简单,笔者就不详细说明了)。

    • 导出微信的头文件
      使用class-dump命令,把刚刚砸壳后的WeChat.decrypted,导出其中的头文件。./class-dump -s -S -H ./WeChat.decrypted -o ./header6.3-arm64

    导出的头文件

    这里我们可以新建一个Xcode项目,把刚刚导出的头文件加到新建的项目中,这样便于查找微信的相关代码。

    微信的头文件

    找到CMessageMgr.hWCRedEnvelopesLogicMgr.h这两文件,其中我们注意到有这两个方法:- (void)AsyncOnAddMsg:(id)arg1 MsgWrap:(id)arg2;- (void)OpenRedEnvelopesRequest:(id)arg1;。没错,接下来我们就是要利用这两个方法来实现微信自动抢红包功能。其实现原理是,通过hook微信的新消息函数,我们判断是否为红包消息,如果是,我们就调用微信的打开红包方法。这样就能达到自动抢红包的目的了。哈哈,是不是很简单,我们一起来看看具体是怎么实现的吧。

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

      删除autoGetRedEnv.h文件,修改autoGetRedEnv.m为autoGetRedEnv.mm,然后在项目中加入CaptainHook.h

      因为微信不会主动来加载我们的hook代码,所以我们需要把hook逻辑写到构造函数中。

    __attribute__((constructor)) static void entry()
    {
        //具体hook方法
    }
    

    hook微信的AsyncOnAddMsg: MsgWrap:方法,实现方法如下:

    //声明CMessageMgr类
    CHDeclareClass(CMessageMgr);
    CHMethod(2, void, CMessageMgr, AsyncOnAddMsg, id, arg1, MsgWrap, id, arg2)
    {
        //调用原来的AsyncOnAddMsg:MsgWrap:方法
        CHSuper(2, CMessageMgr, AsyncOnAddMsg, arg1, MsgWrap, arg2);
        //具体抢红包逻辑
        //...
        //调用原生的打开红包的方法
        //注意这里必须为给objc_msgSend的第三个参数声明为NSMutableDictionary,不然调用objc_msgSend时,不会触发打开红包的方法
        ((void (*)(id, SEL, NSMutableDictionary*))objc_msgSend)(logicMgr, @selector(OpenRedEnvelopesRequest:), params);
    }
    __attribute__((constructor)) static void entry()
    {
        //加载CMessageMgr类
        CHLoadLateClass(CMessageMgr);
        //hook AsyncOnAddMsg:MsgWrap:方法
        CHClassHook(2, CMessageMgr, AsyncOnAddMsg, MsgWrap);
    }
    

    项目的全部代码,笔者已放入Github中。

    完成好具体实现逻辑后,就可以顺利生成dylib了。

    重新打包微信App


    • 为微信可执行文件注入dylib
      要想微信应用运行后,能执行我们的代码,首先需要微信加入我们的dylib,这里我们用到一个dylib注入神器:yololib,从网上下载源代码,编译后得到yololib。

      使用yololib简单的执行下面一句就可以成功完成注入。注入之前我们先把之前保存的WeChat.decrypted重命名为WeChat,即已砸完壳的可执行文件。
      ./yololib 目标可执行文件 需注入的dylib
      注入成功后即可见到如下信息:

      dylib注入
    • 新建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>123456.com.autogetredenv.demo</string>
        <key>com.apple.developer.team-identifier</key>
        <string>123456</string>
        <key>get-task-allow</key>
        <true/>
        <key>keychain-access-groups</key>
        <array>
            <string>123456.com.autogetredenv.demo</string>
        </array>
    </dict>
    </plist>
    

    这里大家也许不清楚自己的证书Teamid及其他信息,没关系,笔者这里有一个小窍门,大家可以找到之前用开发者证书或企业证书打包过的App(例如叫Demo),然后在终端中输入以下命令即可找到相关信息,命令如下:
    ./ldid -e ./Demo.app/demo

    • 给微信重新签名
      接下来把我们生成的dylib(libautoGetRedEnv.dylib)、刚刚注入dylib的WeChat、以及embedded.mobileprovision文件(可以在之前打包过的App中找到)拷贝到WeChat.app中。

      命令格式:codesign -f -s 证书名字 目标文件

      PS:证书名字可以在钥匙串中找到

      分别用codesign命令来为微信中的相关文件签名,具体实现如下:

      重新签名
    • 打包成ipa
      给微信重新签名后,我们就可以用xcrun来生成ipa了,具体实现如下:
      xcrun -sdk iphoneos PackageApplication -v WeChat.app -o ~/WeChat.ipa

    安装拥有抢红包功能的微信


    以上步骤如果都成功实现的话,那么真的就是万事俱备,只欠东风了~~~

    我们可以使用iTools工具,来为iPhone(此iPhone Device id需加入证书中)安装改良过的微信了。

    iTools

    大工告成!!


    好了,我们可以看看hook过的微信抢红包效果了~

    自动抢红包

    哈哈,是不是觉得很爽啊,"妈妈再也不用担心我抢红包了。"。大家如果有兴趣可以继续hook微信的其他函数,这样既加强了学习,又满足了自己的特(zhuang)殊(bi)需求嘛。

    教程中所涉及到的工具及源代码笔者都上传到Github上。
    Github地址

    特别鸣谢:
    1.iOS冰与火之歌(作者:蒸米)
    2.iOS应用逆向工程

    相关文章

      网友评论

      • ec97905b4fbd:写的啥呀看不懂,看不懂的点我赞
      • adc785d915f4:大神 我找iOS APP上架 求联系:2109163307@qq.com
      • e7ce730f9b78:楼主能留个联系方式吗
      • Blutter:怎么可以没有它 MDRouter https://github.com/Modool/MDRouter
        支持参数扩展,支持结果输出,支持异步处理,支持容错处理,支持scheme,host,port筛选过滤,支持适配器分组模式,支持目标解决方案
      • 正_文:怎么防止微信检测,我的账号被限制了,提示“如果再使用第三方app,就会被永久封号”
        汩汩汩汩:把自动抢的逻辑设置个概率进入,然后不要立刻抢,延迟时间抢。腾讯应该就很难检测了
      • 马戏团小丑:你好 能够给个ipa包 谢谢 358246689@qq.com
      • 左佑南:手机没有越狱可以吗?
      • 1d40096f035a:大神,我也想当一次伸手党,求发ipa包,894794320@qq.com
      • 丨Majestic灬磊:求原谅,也做一次伸手党,求个ipa安装包,290138645@qq.com 谢谢啦
      • f830256059bd:不懂啊!不过感觉高大上啊!能给个4s用的安装包吗大神!402150424@qq.com
      • 郭超_bf29:拷贝到WeChat.app中。这句话中的WeChat.app是怎么来的?
      • 沐有墨鱼丸:求个ipa包 谢谢博主 ssc1015036236@163.com
      • 14438b5b7bbd:大神啊!请原谅我数学英语考试从来不及格,做一个伸手党!可以给我发一个ipa安装包吗?383627287@qq.com
      • 7dcb92025a1d:有偿求ipa
      • f38038c19732:大神,能不能给安装包,646833506@qq.com
      • 8c9b20173f07:膜拜大神 可以给我一个吗 1119844144@qq.com
      • 阳光小镇少爷:大神,求一个安装包啊。 1090489629@qq.com
      • 一只代码狗:有个问题想问楼主?您用的是企业证书么?个人开发者证书可以用么?
      • 开发界的白小白: 大神,我也想当一次伸手党,求发ipa包,1312656992@qq.com
      • 星星杨:请问下,Entitlements.plist在哪里创建啊
      • d2b4bef87b2d:大神,能不能原谅我一次伸手党 求一个ipa安装包。13690869@qq.com
      • xx_Coding:我上面的流程全部通过之后,在启动地球页面闪退,求问是什么原因?
      • 725acd8ef4b7:大佬能否求一个ipa安装包啊,2631356325@qq.com
      • 数据通信:推荐这家百分百好评-Q(123115909)绝对靠谱
      • 小小外星人:现在微信好像把那些方法做了处理的 不能自动抢红包了
      • 小小外星人:博主 我想请教下 打开红包的参数你是从哪儿看的啊
      • 0无敌小宋0:有没有抢红包的插件看法的指导
      • 是花落呀:问个题外的问题哈:请问下这个termina的theme叫什么名字呀? :)
      • ba7fc5937070:是否可以商业化 可以的话请加我QQ 767872
      • 很花花:大神,能不能原谅我一次伸手党 求一个ipa安装包。675088496@qq.com
      • 小明大神:已成功,用的6.3.1的包,谢谢大神!
        Jody526:@小明大神 为什么我没有找到.app包的?我是ituns下载下来的
        小明大神:@桀杉 重签名用的,放到打好的.app包里面
        Jody526:请问 新建Entitlements.plist 那一步有什么用 放哪里
      • d938431b8e38:大神可以给一伸手党吗543051902@qq.com
        谢谢
      • 6aaa48ed2020:在新版微信好像失效了,越狱手机上有个插件WXAutoGetRedEnvelops貌似在新版微信还可以使用
      • lynch0571:已收录《千赞专题》,欢迎关注:http://www.jianshu.com/collection/032a478c3dbf
      • 653e53d1f4e2:大神 求原谅伸手党 微信15081997314
      • 5c2ad94c9daf:楼主 我不改源码 只改plist版本号也需要砸壳按照这个步骤来吗?
      • 学无边界:请大神求个ipa-769159094@qq.com
      • 1dbdc3054b28:改了应用的 bundle id,再打开应用应该会被后台识别出来吧?装了自动抢红包插件的,是怎么被识别出来的呢
      • f303da3cb969:大神,能不能原谅我一次伸手党 求一个ipa安装包。1906068778@qq.com
      • _悟了个空:我在签名WeChat.app的时候报这个问题,请问怎么解决呢?
        WeChat.app: replacing existing signature
        WeChat.app: resource fork, Finder information, or similar detritus not allowed
      • _Erica:求大神ipa包谢谢121700354@qq.com
      • ebcd0a81f2e1:为什么我生成ipa包后安装的时候总是失败,验证到40%的时候
        ebcd0a81f2e1:有没有人也遇到过的,回复我一下~不知道问题出在哪里了
      • 01ce4e199c57:都成功了,安装打开后。没有生效呢。什么情况。:sweat_smile:
      • 52b616f6d9d4:哎,没有越狱的iphone,搞不了,来个安卓的例程就好了:pray:
      • 57b81b290840:我最终闪退,现在只想知道可以用开发证书还是用发布证书,还是都可以的?
      • Thebloodelves:楼主一生平安,祝你事业顺心,心想事成。
        超_iOS:@Thebloodelves 666
        Thebloodelves:441299296@qq.com
      • 封楼:工具太多 我害怕我的Air 腰不好 只求ipa 894800206@qq.com
      • 追赶阳光:大神,求个ipa包,好人一生平安 616064236@qq.com
      • e452afa0b94b:请问wechatwatchnative.app这些extentions不用去壳吗,我看文章中没有提到
      • 不会骑名字:您好,现在微信防止自动抢红包,增加了timingIdentifier字段,请问您有找到怎么生成这个字段吗?
      • 幽烛:完全不是略叼,是非常叼:+1:
      • 郡王丶千夜:卧槽,真的假的,这牛逼了
      • a24b6718d698:Yololib 一编译就报错,main 函数里传的为空,是什么原因啊,大神
      • 21132765f25b:现在想做一个模拟点击 微信的交易记录的 原理一样么?

      • 7f98687686d2::+1: iOS微信自动抢红包(非越狱)神器在线授权微Hack989:v:
      • 7b77e6e820c6:ssh 我没有找到weichat....感觉显示的都是不对。

        比如:
        0:12.65 /System/Library/PrivateFrameworks/StreamingZip.framewo
        ,大神为啥啊
      • 指尖猿:可以把终端命令 罗列出来吗?
      • 61568f5b87bf:本人有这个软件可控制红包大小尾数 绝对能用

        744325626
        在Q的签 名 档 上 有免费下的网址,绝对能用,本人有这个软件可控制红包大小尾数 绝对能用

        744325626
        在Q的签 名 档 上 有免费下的网址,绝对能用,
      • 指尖猿:原谅我,我也求个安装包 xiewenjian_92@163.com
      • e8bc461285c9:大神,能不能原谅我是个伸手党 求ipa安装包。邮箱:765665290@qq.com :yum: 收到后我会过来打赏
      • Bear_HJ:马化腾会不会报警啊
      • a4c72f4f7514:请教个问题,我不用yololib注入的话重签名后可以安装启动(证明重签名没问题),注入了之后安装了之后打开闪退,这个会是什么问题呢?
      • 0a22377f43f7:楼主啊,能不能让我也做一次伸手党。ipa包发我邮箱啊1373577937@qq.com
      • 疼哥:./yololib 目标可执行文件 需注入的dylib这一步总是失败 提示-bash: ./yololib: No such file or directory
        github上的yololib 是会崩溃的
      • H了个L:一个下午重复了五遍, 安装没问题, 就是抢不到红包, 最后用楼主的tools里面的也是不行, 不知道哪出错了
      • 一个脱离了高级趣味的人e:找Documents 路径用楼主的没找到,后来用[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
        inDomains:NSUserDomainMask][0] 找到了,mark 记录一下,供后来者参考
      • 2f37b96db822:支持楼主
      • 7dfce4c3a4dc:现在还可以么?
      • 7bb14cf50ef8:大神 跪求ipa安装包。QQ邮箱:1348843995@qq.com 谢谢🙏
      • 0271fb6f797c:感觉自己干的是开发吗?怎么不一样呢,很怀疑:joy:
      • 极速临时工:刚刚测试了下,不注入.dylib文件,直接把下载的越狱的微信ipa解压,删掉PlugIns和Watch ,在重新签名是可以安装打开的,【但是】把.dylib注入到微信后,在签名-安装-打开就闪退了!!。我觉得应该是 注入文件那里出了问题,还有一个就是 安装了以后,之前的微信会显示无法连接服务器 (未连接)的状态,想请教一下楼主问题在哪里,纠结了半天了:sweat:
        极速临时工:之前的微信就是老的微信 安装的微信是新的,一共两个,安装了新的老的就无法连接服务器了
      • jacinzhang:Jacin: `cycript -p WeChat`,这个命令一执行,shell就卡住不动了
      • 阿晟哥:楼主可以发个IPA包吗
      • 5239bf890dc9:大神, 求一个安装包啊, virtuecai@163.com
      • e68a250615af:感谢楼主,好教程,已安装成功
        但还有一个问题就是:您github上的libautogetRedEnv 是给自己发信息“打开红包插件” 打开。我想改为给特定的人发特定的消息应该怎么改? 我尝试改了autoGetRedEnv.mm文件,但重新编译后dylib文件只有30k,您的有87k,我把30k的注入到WeChat在用同样方法安装就会闪退,请问是什么问题?谢谢
      • wuferzZ:首先 还是需要一个越狱的手机....
      • 吴钧泽:666 神器
      • MirL:为什么我class-dump导出头文件是空的呢?
      • huang_weijian:不是说非越狱的吗?怎么需要越狱的手机。。。
      • 231471376154:长时间的hook微信的消息 不会被封吗
      • 4762b6f375d3:用这种方法在6.5.3版微信中已经被检测到然后踢掉线
        3a971dbbfab9:请问你你还可以重签6.5.3吗?我这里6.5.3不注入没问题,一旦注入了,重签一步不通过,显示: invalid or unsupported format for signature
        4762b6f375d3:想知道楼主如何分析API的方法
      • 85e2b6745a70:请问下大神,敲壳的时候[+] Opening WeChat.decrypted for writing.
        [-] Failed opening: Permission denied,遇到这个权限错误怎么解决啊,求帮忙
        ChasonTse:加上sudo试试
      • 大生活家:照这样看,也可以在微信里做些别的事啦~~不止是抢红包咯
        54454a5c9cee:大神,我也想当一次伸手党,求发ipa包,283236859@qq.com
      • 云画的跃光:嘖嘖嘖,我會試一下的,畢竟年會快看了,紅包又滿天飛了
      • fece6e6ae3fa:大神,请问能否获取大家抢红包抢到的钱的记录
      • 31b84e25da6b:厉害了我的哥
      • 菊上一枝梅:现在Xcode8了还有效不
      • 448f0fc48a24:大神您好 请教下 全部搞完,用itools安装,提示验证失败,无法安装
        我从App Store上下载 微信 6.5.2.ipa 131.3 MB 按照上面步骤做出来的是WeChat.ipa 100.7M 求大神指教
      • SharsBin:这个签名的时候 得一个个文件签名么 是否可以 直接 整个 app 包签名 还有就是 您是否遇到过 codesign 一直提示我 no identity found这个问题 期待回复
        神秘的小形:证书输入的不对
      • 点亮橘子树:必须得越狱手机吗
      • ADELEX:为啥在ios10 下无法安装
      • skylor:标题上说非越狱设备,正文内容怎么说要越狱呢?
      • ADELEX:搞了半天你终于好了
        ADELEX:@贪妄 除了yololib这个库的代码需要改下
        ADELEX:@贪妄 没写代码,,,就是楼主发的,,直接用,,注意下细节就好了
        贪妄:@ADELEX 大神能把完成后的源码分享下不
      • ADELEX:安装后无法打开微信,一点就闪退
      • ADELEX:yololib运行报错怎么搞?Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString'
        *** First throw call stack:
      • 槛外人_:Info.plist文件里面的Bundler ID 不用改的吗?

      本文标题:一步一步实现iOS微信自动抢红包(非越狱)

      本文链接:https://www.haomeiwen.com/subject/vmfllttx.html