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 ...
随机推荐
- 如何在CentOS系统中安装配置SNMP服务
CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,现在有一大部分服务器在使用此操作系统:SNMP(简单网络 ...
- 微信开发 api 需要 https 服务器
微信开发 api 需要 https 服务器 先建一个环境,本地的 https 服务器. 以下这篇不错,很完整. https://zhuanlan.zhihu.com/p/23640321
- 【转】VC中MessageBox与AfxMessageBox用法与区别
原文网址:http://blog.csdn.net/holybin/article/details/28403109 一.MessageBox()用法 1.函数原型 Messagebox函数在Win3 ...
- 使用Docker快速搭建ELK环境
今天由于Win系统的笔记本没带回家,其次Docker在非Linux系统下都需要安装额外的软件去镜像才行 所以感觉没有差别,先直接用Mac搭建一遍呢, 本篇部分命令和配置内容为摘抄 Mac下使用Dock ...
- java代码--------实现随机输出100个随机数,10行,0--到9的数字
总结:妹纸不是那么会表述,如有不妥之处,请提出来 package com.sads; //杰伦的世界 //实现在0-100个数中,随机输出数每行10个数,也就是10行10列,这些数在0---到9之间 ...
- Understanding OpenStack Authentication: Keystone PKI
The latest stable release of OpenStack, codenamed Grizzly, revolutionizes the way user authenticatio ...
- Hibernate 一对一、一对多、多对多注解cascade属性的总结
作用:是否级联被注解字段里面的对象.可选值:javax.persistence.CascadeType.PERSIST, MERGE, REMOVE, REFRESH, DETACH, ALL.可选其 ...
- Histogram
folly/Histogram.h Classes Histogram Histogram.h defines a simple histogram class, templated on the t ...
- jdk ssl证书
- JS实战应用之做LOL领图标任务~
说一个技术造福人类的故事,事情是这样的,我是英雄联盟的忠实玩家,在浏览官网的时候看到这样一个活动(http://lol.qq.com/act/a20161020teemo/index.html),有个 ...
使用一下命令:
-H 后面是上面wenjian的路径 -o 后面是自己随便起的文件夹名字. Code文件夹在HOME下(就是你电脑上面的