iOS开发/App安全/代码自动混淆笔记

最近接触银行类项目,对app安全才有了些认识...比较尴尬,除了之前经常做的网络参数加密解密,以及防止数据重放之外,还提到了防范反编译的风险,其实Apple算比较安全的了,反编译过来也就看到.h文件....但把代码混淆还是会比较好些。

一、在项目根目录下新建confuse.sh 和 gbFunc.list 文件

说明:

confuse.sh 文件在编译过程中会执行gbFunc.list 用于自动混淆代码时,存放过滤出来需要混淆的方法名

touch confuse.sh

touch gbFunc.list

二、新建GBConfuse.h

说明:

GBConfuse.h 是在自动混淆代码时,将会把自动生成的字符串定义成宏,存放在此文件,也便于查看。

注意:需要把.h文件移到项目文件外,因为放项目文件中,到时被反编译过来,还是能得到GBConfuse.h里面的东西的,就能通过比对,得到方法。(后面用class-dump反编译过来就明白了...)

三、在confuse.sh中添加如下代码

#!/usr/bin/env bash

TABLENAME=symbols

SYMBOL_DB_FILE="symbols"

#func.list路径

STRING_SYMBOL_FILE="$PROJECT_DIR/GBFunc.list"

#项目文件路径

CONFUSE_FILE="$PROJECT_DIR/Safedemo"

#Confuse.h路径

HEAD_FILE="$PROJECT_DIR/GBConfuse.h"

export LC_CTYPE=C

#取以.m或.h结尾的文件以+号或-号开头的行 |去掉所有+号或-号|用空格代替符号|n个空格跟着<号 替换成 <号|开头不能是IBAction|用空格split字串取第二部分|排序|去重复|删除空行|删掉以init开头的行>写进func.list

grep -h -r -I  "^[-+]" $CONFUSE_FILE  --include ‘*.[mh]‘ |sed "s/[+-]//g"|sed "s/[();,: *^/{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk ‘{split($0,b," "); print b[2]; }‘| sort|uniq |sed "/^$/d"|sed -n "/^GBSAFE_/p" >$STRING_SYMBOL_FILE

#维护数据库方便日后作排重,以下代码来自念茜的微博

createTable()

{

echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE

}

insertValue()

{

echo "insert into $TABLENAME values(‘$1‘ ,‘$2‘);" | sqlite3 $SYMBOL_DB_FILE

}

query()

{

echo "select * from $TABLENAME where src=‘$1‘;" | sqlite3 $SYMBOL_DB_FILE

}

ramdomString()

{

openssl rand -base64 64 | tr -cd ‘a-zA-Z‘ |head -c 16

}

rm -f $SYMBOL_DB_FILE

rm -f $HEAD_FILE

createTable

touch $HEAD_FILE

#这里也要做修改

echo ‘#ifndef GBConfuse_h

#define CodeConfuse‘ >> $HEAD_FILE

echo "//confuse string at `date`" >> $HEAD_FILE

cat "$STRING_SYMBOL_FILE" | while read -ra line; do

if [[ ! -z "$line" ]]; then

ramdom=`ramdomString`

echo $line $ramdom

insertValue $line $ramdom

echo "#define $line $ramdom" >> $HEAD_FILE

fi

done

echo "#endif" >> $HEAD_FILE

sqlite3 $SYMBOL_DB_FILE .dump

需要修改的代码在于文件路径:

四、添加 Run Script

五、添加 PCH 文件

六、在ViewController中添加以"GBSAFE_"为前缀的测试方法

七、测试

运行报错如下:

原因是.sh文件没有权限,所以需要去开启权限。

在confuse.sh文件目录下,执行命令:

chmod 755 confuse.sh

运行成功!

先打包一个.ipa安装包进行测试!

先不进行代码混淆:

把.ipa文件类型改成.zip,解压得到.app文件

新建Hear文件夹用于保存反编译后得到的文件:

用class-dump进行反编译

class-dump -H 要破解的可执行文件路径 -o 破解后的头文件存放路径

得到没有进行代码混淆的文件:

可以看到都是项目中一些.h文件,打开可以看到完整的方法名....

然后客户说测试公司说不安全...

需要进行代码混淆...

在PCH文件中,引用GBConfuse.h:

重新打包..就可以得到混淆后的.ipa..

下面就是混淆后的结果。

总结:

其实,原理应该就是在编译过程中,把需要混淆的代码生成随机字符串进行替换....

原文地址:https://www.cnblogs.com/aibangxiansheng/p/8143187.html

时间: 2024-10-31 08:12:02

iOS开发/App安全/代码自动混淆笔记的相关文章

【好程序员笔记分享】——iOS开发之纯代码键盘退出

-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之纯代码键盘退出(非常简单)     iOS开发之纯代码键盘退出 前面说到了好几次关于键盘退出的,但是最近开始着手项目的时候却闷了,因为太多了,笔者确实知道有很多中方法能实现,而且令我影响最深的就是 EndEditing,但是因为即有textView,又有TextField而且他们各有不同的方法,虽然笔者现在搞懂了,但是不知道什么时候又不记得 了,而且虽然感觉很简单现在感觉很简单的样子,但是对于没

IOS开发 App HTTP 请求失败

IOS开发 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file. xcode自7后不再使用http,而是使用https请求,但目前很多网络请求还只是以http请求,我们可以这样解决 info.plist->添加@&quo

iOS原生App与H5页面交互笔记

iOS原生App与H5页面交互笔记 字数390 阅读2204 评论1 喜欢25 最近在做一个项目用到了原生App与H5交互,之前有做过简单的H5页面直接调用原生方法的例子,就是利用UIWebView中的代理方法 //webview每次加载之前都会调用这个方法,利用该代理方法截取JS的href来调用原生的方法 - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigatio

iOS开发之用代码实现数据库FMDB的操作

iOS开发之用代码实现数据库FMDB的操作 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000/2008, 中小企业使用较多 (2)Oracle 比较复杂, 大企业使用较多 (3)Mysql数据库, 网站使用较多 (4)sqlite: 本地数据库, 访问数据足够快, 直接访问文件 足够简单, 功能相对其他数据库软件不是特别齐全, 足够用了  足够小, 系统不超过1M, 适合在移

iOS开发 统计xcode代码行数

如果要统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 find . -name "*.m" -or -name "*.h" -or -name "*.xib" -or -name "*.c" |xargs wc -l 列出每个文件的行数 find . -name "*.m" -or -name "*.h" -or -name "*.xib" -or

IOS开发 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app&#39;s Info.plist file.

xcode自7后不再使用http,而是使用https请求,但目前很多网络请求还只是以http请求,我们可以这样解决 info.plist->添加@“App Transport Security Settings”字段->添加“Allow Arbitrary Loads”字段,并将对应的value值设置为@“YES” IOS开发 App Transport Security has blocked a cleartext HTTP (http://) resource load since it

写给IOS开发工程师的网页前端入门笔记

前言:作为IOS开发工程师,终会接触到网页前端开发,甚至可能会有 用HTML5开发IOS的app客户端的需求.比如现在上架的app就有比如理财类型的app有的就用HTML开发的,从理财类型的app需求上思考,用 HTML5确实是个不错的选择,利用了跨平台的同时,也考虑到了理财类型的app仅仅需要处理的是数据的业务逻辑,不存在较多的本地存储数据,而且涉及到 的财务信息从安全性考虑数据基本都会存储在服务器端,是不可能用于存储在本地的,再加上HTML5对各种手机屏幕的尺寸适配性非常灵活,所以这一类ap

【精通iOS开发(第7版)】读书笔记01(P1~90)

初次拿到这本书,看到目录,内容确实挺多的,阅读过程发现代码讲解也特别详实.本笔记主要是记录阅读的心得以及对当天知识的回顾,帮助自己提高理解.扯淡的话不说了,进入正题. =====================================================================================================================前面主要是对iOS开发语言以及开发环境XCode做了介绍,草草翻了下略过. 首先提到的是APP图标

iOS开发技巧 -- 复用代码片段

如果你是一位开发人员在开发过程中会发现有些代码无论是在同一个工程中还是在不同工程中使用率会很高,有经验的人会直接封装在一个类里,或者写成一个宏定义或者把这些代码收集起来,下次直接使用,或者放到xcode的代码片库里,直接使用, 从而提高开发效率: 1. 将常用代码片段封装成一个类里 当一个代码片在一个或多个工程之中经常出现时,把他封装在一个类里面,在使用时候直接传参即可实现对于功能,或者直接把这类放到另一个工程中同样使用: 使用UIAlertView举例 创建一个XF_UIKit类,对于声明文件