- 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加入项目
网友评论