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 ...
随机推荐
- Java API 操作Zookeeper
一.依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookee ...
- Android 从上层到底层-----hal层
CPU:RK3288 系统:Android 5.1 功能:上层 app 控制 led 亮灭 开发板:Firefly RK3288 led_hal.c path:hardware/rockchip/fi ...
- 搭建基于hyperledger fabric的联盟社区(八) --Fabric证书解析
一.证书目录解析 通过cryptogen生成所有证书文件后,以peerOrgannizations的第一个组织树org1为例,每个目录和对应文件的功能如下: ca: 存放组织的根证书和对应的私 ...
- Appium+python自动化27-等待activity出现(android特有的wait_activity)
前言 在启动app的时候,如果直接做下一步点击操作,经常会报错,于是我们会在启动完成的时候加sleep. 那么问题来了,这个sleep时间到底设置多少合适呢?设置长了,就浪费时间,设置短了,就会找不到 ...
- java web 程序---猜数字游戏的猜了多少次的代码
思路:用setAttribute()放 ,然后直接输出 Integer str=(Integer)session.getAttribute("count"); int num3= ...
- POJ 3276 Face The Right Way(反转)
Face The Right Way Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6038 Accepted: 2 ...
- 013:Rank、视图、触发器、MySQL内建函数
一. Rank 给出不同的用户的分数,然后根据分数计算排名 (gcdb@localhost) 09:34:47 [mytest]> create table t_rank(id int,scor ...
- git 怎么上传文件到github上
1.安装git sudo apt-get install git 2.配置全局变量 git config --global user.name langhunm git co ...
- Cisco交换机配置VLAN与TRUNK
0x00前言: 今日在学校里学习了如何搭建vlan和配置等等还有trunk. 由于快下课了.尽快写. 0x01准备: Cisco模拟器 0x02正文: 要求: VLAN 10 左边的IP:192.16 ...
- openssh 在32位、64位操作系统上的安装配置
openssh是安装在windows系统上的提供SSH服务的服务端软件,可以提供安全的命令行远程连接管理.下面介绍下openssh成功安装使用的操作步骤. 工具/原料 openssh window ...