APP安全之代码混淆防止反编译查看真实的头文件函数声明
现在有的公司对自己的爱屁屁(APP)安全上有重视,所以本篇讲一下代码混淆,即使别人反编译出来,也看不出来头文件的信息.
上菜:
1.首先安装class-dump,下载地址:http://stevenygard.com/projects/class-dump
下载完打开后

把class-dump写入到usr/bin,发现提示:
Operation not permitted后来发现原因是不可写,有解决办法,但是没用,踩过的坑就不说了,下面直接上
打开终端输入:open usr/local/bin
然后把class-dump 拖进去
终端输入:sudo chmod 777 /usr/local/bin/class-dump 更改权限
再输入:class-dump 如果出现下图,说明成功:

开始测试:
新建一个工程,cd到工程路径下,然后创建两个文件:一个confuse.sh、一个func.list:

然后打开工程,应该是这样:

添加到工程里面:

一定要添加工程目录下,添加完之后一定是这样:

再重申一下,成功添加点击 confuse.sh(confuse.sh,和func.list必须添加到CodeConfusion目录下),现在要在confuse.sh上加上代码了:
#!/usr/bin/env bash TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="func.list"
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
export LC_CTYPE=C #维护数据库方便日后作排重
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 | tr -cd 'a-zA-Z' |head -c
} rm -f $SYMBOL_DB_FILE
rm -f $HEAD_FILE
createTable touch $HEAD_FILE
echo '#ifndef CodeConfusion_codeObfuscation_h
#define CodeConfusion_codeObfuscation_h' >> $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
注意点:箭头指向的位置是你工程的名字

添加pch文件,一定要设置pch的路径, 不会的自行百度. 在pch 文件添加 #import "codeObfuscation.h"

配置 Build Phase:添加 Run Script

添加脚本路径:

配置好 Run Script然后再回到终端,同样先 cd 到工程目录下,接着我们要打开刚才 .sh 这个脚本文件的运行权限,因为默认是没有这个权限的,在终端输入以下指令:

如果不执行命令,发现会报错的. 在ViewController里面定义几个方法:
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (nonatomic,copy)NSString *test1; - (void)cdm_method;
- (void)cdm_testStr:(NSString *)string cdm_number:(NSUInteger)num;
- (void)cdm_aaaaaa; @end
在 func.list 文件里,写入待混淆的函数名:

列出需要混淆的,大功告成!现在 command + b 运行一下,然后在哪里看结果呢,请看这里:

查看codeObfuscation.h,你会发现,多了好多宏定义,其实就是我们刚才的字段来的:
文件所在位置:

多出的宏定义:

1,show in finder 拖进iTunes,生成app

把ipa拿出来,放到桌面

修改后缀名字:把ipa修改为zip:

解压zip

打开文件夹:使用一下命令:
-H 后面是上面wenjian的路径 -o 后面是自己随便起的文件夹名字. Code文件夹在HOME下(就是你电脑上面的
APP安全之代码混淆防止反编译查看真实的头文件函数声明的更多相关文章
- Android 代码混淆 防止反编译
为了防止代码被反编译,因此需要加入混淆.混淆也可以通过第三方进行apk混淆,也可以用android中的proguard进行混淆. 混淆步骤: 1.配置混淆文件,名字可以随意,在这里使用proguard ...
- Android: apk反编译 及 AS代码混淆防反编译
一.工具下载: 1.apktool(资源文件获取,如提取出图片文件和布局文件) 反编译apk:apktool d file.apk –o path 回编译apk:apktool b path –o f ...
- android 混淆 与 反编译
1, 文件 project.properties 修改: target=android-14proguard.config=${sdk.dir}/tools/proguard/proguard-and ...
- Android混淆、反编译以及反破解的简单回顾
=========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...
- 爬虫app信息抓取之apk反编译抓取
之前也抓过一些app,数据都比较好取,也没有研究的太深,毕竟还有android 模拟器+ appium 的方法.直到遇见了一款app ,具体名字就不说了,它安装在模拟器上竟然打不开 !!第一次遇见上网 ...
- winform代码反编译后图片等资源文件恢复解决方案
用Reflector工具反编译的winform代码,图片等资源文件不能很好的反编译成功. 这里有一个笨的解决方案.首先我们要了解图片资源当初加入到工程的几种方式,及他们所在的位置. 一般winform ...
- .Net的混淆防反编译工具ConfuserEx--2(转)
给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...
- Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密 二.利用加密算法DES实现java代码加密 传统的C/C++自动带有保护机制,但java不同,只要 ...
- 给大家推荐一个.Net的混淆防反编译工具ConfuserEx
给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...
随机推荐
- c++中子类转父类,父类转子类
#include <iostream> using namespace std; class Father { public: virtual void show() { cout< ...
- Centos6.5 恢复误删的系统面板
在CentOS6.5下往面板上拖应用程序时,手贱了,点了"Delete This Panel".结果就悲剧了~面板不见了! 从网上搜了一下解决方法,列举一下. 1.新建面板 如果下 ...
- 从wiresharp看tcp三次握手
我们知道,传输层是OSI模型中用户进行数据传输的分层,目前仅有TCP和UDP两种协议可用.TCP为了进行传输控制,引入了三次握手机制,以确保通信连接的建立.道理很简单,我们跟别人打电话聊天时,对方拿起 ...
- 『备忘录』elasticsearch 去重分页查询
一开始数据结构设计的很复杂,又是父子关系又是嵌套关系,结果发现不能通过简单的查询得到想要的结果:比如一个商店只出现一件符合条件的商品,弄得查询语句就变成这样了 curl -XPOST http://l ...
- Mysql中的GROUP_CONCAT使用
SELECT res.ITRId Id, res.ITRResourceName ResourceName, res.ITRSupplierName SupplierName, res.ITRDept ...
- CMapStringToPtr添加与释放
// 创建MapStringToPtr CMapStringToPtr m_prjFiles; CStringList m_fileList; m_fileList.AddTail(_T(" ...
- python下很帅气的爬虫包 - Beautiful Soup 示例
先发一下官方文档地址.http://www.crummy.com/software/BeautifulSoup/bs4/doc/ 建议有时间可以看一下python包的文档. Beautiful Sou ...
- Java程序员之JS(一) 之 JQuery.ajax
背景:紧着现在项目的需要,先从JQuery.ajax出发,主要需求是通过 js 调用Java 代码,从而适应现在的项目. 先从几个概念开始讲解: 一. 什么是Deferred Deferred 对象 ...
- [转]SVN 乱码问题
以下来自:http://godchenmeng.iteye.com/blog/797727 最近研究SVN.发现在创建补丁包的时候出现这种情况. 在文件顶部不论是什么代码都会变成乱码.在文件中如果有注 ...
- 强大的NCBI接口
刚才小玩了下,不错,.net确实很方便,很强大 Using Entrez Utilities Web Service with C# and MS Visual Studio 2005 Updated ...
使用一下命令:
-H 后面是上面wenjian的路径 -o 后面是自己随便起的文件夹名字. Code文件夹在HOME下(就是你电脑上面的