美文网首页副本相关
马甲包混淆方案

马甲包混淆方案

作者: 咖喱luya | 来源:发表于2018-07-10 14:32 被阅读186次
    • iOS
    • 马甲包
    • 混淆

    马甲包是利用各大市场规则漏洞,通过技术手段,多次上架同一款产品的方法。马甲包和主产品包拥有同样的内容和功能,除了icon和应用名称不能完全一致,其他基本一致。这种还比较能理解,市场上还有另一种马甲包是内容和功能完全不合规,壳子本身功能正常是为了能通过审核,而一旦审核通过,大部分都会直接成为一个web展示内容,包括:赌博、色情、以及其他(我司是网赚平台)

    对于我们开发人员来说,要做的就是怎么让马甲包能够通过苹果爸爸的审核,以我的经验,在通常情况下(排除同一个审核人员审核了你上的相同的包恰巧就在近期或者ta记性很好)审核人员是无法从肉眼分辨一个应用是否是重复的(UI、数据都一样),很多马甲包都是被卡在 机审 这一步,因此我们要做的就是在代码层面做一些手脚,下面介绍的就是我司使用的混淆方案

    混淆方案组合一 混淆调用树

    本项目源码地址 : https://github.com/HikariObfuscator/Hikari

    其实他是基于 obfuscator 进行了Xcode9的适配

    开始

    install

    下载 Hikari

    mkdir build

    cd build

    cmake -DCMAKE_BUILD_TYPE=Release ../Hikari/

    make -j7

    setup

    $ cd /Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/
    $ sudo cp -r Clang\ LLVM\ 1.0.xcplugin/ Obfuscator.xcplugin
    $ cd Obfuscator.xcplugin/Contents/
    $ sudo plutil -convert xml1 Info.plist
    $ sudo vim Info.plist
    
    

    change:

    <string>com.apple.compilers.clang</string> -> <string>com.apple.compilers.obfuscator</string>
    <string>Clang LLVM 1.0 Compiler Xcode Plug-in</string> -> <string>Obfuscator Xcode Plug-in</string>
    

    Then:

    $ sudo plutil -convert binary1 Info.plist
    $ cd Resources/
    $ sudo mv Clang\ LLVM\ 1.0.xcspec Obfuscator.xcspec
    $ sudo vim Obfuscator.xcspec
    

    Change:

    <key>Description</key>
    <string>Apple LLVM 9.0 compiler</string> -> <string>Obfuscator 4.0 compiler</string>
    <key>ExecPath</key>
    <string>clang</string> -> <string>/$(install步骤里面的build文件路径)/bin/clang</string>
    <key>Identifier</key>
    <string>com.apple.compilers.llvm.clang.1_0</string> -> <string>com.apple.compilers.llvm.obfuscator.4_0</string>
    <key>Name</key>
    <string>Apple LLVM 9.0</string> -> <string>Obfuscator 4.0</string>
    <key>Vendor</key>
    <string>Apple</string> -> <string>HEIG-VD</string>
    <key>Version</key>
    <string>9.0</string> -> <string>4.0</string>
    

    Then:

    $ cd English.lproj/
    $ sudo mv Apple\ LLVM\ 9.0.strings "Obfuscator 3.4.strings"
    $ sudo plutil -convert xml1 Obfuscator\ 3.4.strings
    $ sudo vim Obfuscator\ 3.4.strings
    

    Change:

    <key>Description</key>
    <string>Apple LLVM 9.0 compiler</string> -> <string>Obfuscator 4.0 compiler</string>
    <key>Name</key>
    <string>Apple LLVM 9.0</string> -> <string>Obfuscator 4.0</string>
    <key>Vendor</key>
    <string>Apple</string> -> <string>HEIG-VD</string>
    <key>Version</key>
    <string>7.0</string> -> <string>4.0</string>
    

    Then:

    $ sudo plutil -convert binary1 Obfuscator\ 3.4.strings
    

    使用

    Build Settings -> Compiler for C/C++/Objective-C -> Obfuscator 4.0

    Build Setting -> Enable Index-While-Building Functionality -> 'default' change to 'No'

    关闭 bitcode

    关闭编译优化 Build Settings -> OPTIMIZATION_LEVEL -> 0

    开启混淆, Build Settings -> OTHER_CFLAGS -> -mllvm -enable-cffobf -mllvm -enable-bcfobf

    此方式修改了你的编译器,使得在编译时在代码中添加混淆代码(在不影响应用本身逻辑的前提下),上面的步骤只需要一次就行,如果更新了系统有可能导致失效,只需要从setup再来一遍即可,下面做了一个测试,反编译一个使用了混淆与不使用混淆的ipa包,查看调用树形图可以看到对比:

    屏幕快照 2018-04-04 下午3.42.30.png
    屏幕快照 2018-04-04 下午3.44.55.png

    混淆方案组合二 混淆方法名,类名

    提供两个文件:func.list、confuse.sh

    func.list

    罗列出需要混淆的类名、方法名

    confuse.sh

    脚本文件

    使用:

    将要混淆的方法名、类名 填入func.list 文件里面。项目里不要引入func.list文件

    Build Phases 点击'+',new run script , Run Script -> add $PROJECT_DIR/confuse.sh

    command + B 将生成的 codeObfuscation.h加入项目

    PS:我们使用这套方案,(2种)目的是为了混淆我们的SDK(当然了,这个SDK对苹果爸爸来说是不合规的),目前暂未出现因为机审不过的情况,通常是因为马甲本身的功能不够丰富。另外方案一有可能导致当前项目无法使用xib以及无法继承自定义类的情况,暂时无法解决,发生几率不高,但是还是建议在工程做完之后再修改编译方式。

    相关文章

      网友评论

      本文标题:马甲包混淆方案

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