首先是安装和使用dump:

  下载dump地址

  1.选择class-dump-3.5.dmg 下载;

  2.下载之后,点击打开,复制class-dump文件,

  3.shift+command+G 打开finder 的路径,输入/usr/local,并把class-dump粘贴到 /bin 这个文件中,(这个文件是隐藏的文件夹)

这样就可以开始玩dump了,

  4.找个项目(跑过真机的)拿到app包(或包里的可执行文件),

  5.在桌面创建一个文件夹,用于存放反编译出来的头文件;

  6.终端:class-dump -H 项目包路径 -o 解析出来的文件路径

  7.之后就会见到有多个.h文件被解析出来,如果没有做代码混淆的话,可以看到项目中的很多属性/方法都可以看到,

再来说一下代码混淆:

  1.创建一个新的项目,Class-dump-Test

  2.为项目创建一个 .pch文件,并为pch文件配置路径,$(SRCROOT)/Class-dump-Test/pch文件名.pch

  3.终端:cd 项目路径;

  4:touch confuse.sh

  5:touch func.list 为项目创建2个文件,并添加到项目中,

  6:为脚步文件confuse.sh设置路径,

  

  7.创建codeObfuscation.h 在这个文件中可以看到混淆后的代码,并声明到.pch文件中

  其中如果手动选择要混淆的方法或属性,就把方法/属性写到func.list中,例如:

  其中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"
 
#/* 针对特殊字符的代码混淆**/
CONFUSE_FILE="$PROJECT_DIR/Class-dump-Test"
HEAD_FILE="$PROJECT_DIR/Class-dump-Test/codeObfuscation.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 "/^wq_/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 Demo_codeObfuscation_h
#define Demo_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
 

编译一下:

这就算是成功了,自己可以反编译一下,看看还能不能开到明文的方法/属性

  遇到的问题:在为脚本文件设置好路径后,编译出错:Permission Denied。要获取脚步权限,

  终端:chmod 755 scriptname.sh  再次编译就没事了!

  

  如果有什么不对的,可一定要告诉我一下哈!

代码混淆和dump的更多相关文章

  1. Android项目代码混淆

    http://coolshell.info/blog/2015/03/Android-studio-prefrence.html 什么是Gradle Gradle是一种依赖管理工具,基于Groovy语 ...

  2. ProGuard 代码混淆

    简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...

  3. iOS安全攻防(二十三):Objective-C代码混淆

    iOS安全攻防(二十三):Objective-C代码混淆 class-dump能够非常方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完好的程序给同行留下笑柄. 所以 ...

  4. android studio 实现代码混淆

    =======本文章属于转载==========原文章地址:http://my.oschina.net/aibenben/blog/370985 这篇文章等是跟大家分享一在Android studio ...

  5. Android Studio 代码混淆

    新建一个项目,Android Studio默认关闭代码混淆开关,在build.gradle文件中,如下图所示的minifyEnabled 开关,因此如果需要混淆代码,需将false改为true,然后在 ...

  6. Android Studio环境下代码混淆+签名打包

    Android Studio环境下代码混淆+签名打包 作者 Mr_冯先生 关注 2016.08.21 01:10 字数 1040 阅读 734评论 5喜欢 34 注:本文使用的Android Stud ...

  7. iOS安全攻防之代码混淆

    iOS 代码安全之代码混淆实践: 前言: 在8月份的时候写了个关于 class-dump 反编译的文章(使用 Class-dump 反编译),利用 class-dump 工具可以反编译出工程的头文件, ...

  8. iOS 代码混淆

    一般做了防调试的话,被调试进程会退出的,是防动态分析措施. 代码混淆加花这些是防静态分析措施. 反调试是防动态分析措施. 混淆的方法方法名混淆其实就是字符串替换,有2个方法可以,一个是#define, ...

  9. iOS 初探代码混淆(OC)

    iOS 初探代码混淆(OC) 前言 自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了.但是最近,客户方面提出了代码安全的要求.说是要做代码混淆,这 ...

随机推荐

  1. shell特殊字符汇总【转】

    Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好 ...

  2. es6 vs commonjs

    'use strict' export function showMe() { alert("es6"); }; class logging { constructor() { a ...

  3. QT跟VC++结合来进行插件的验证机制

    由于最近公司要开发一个以C++插件机制为主的,主要有一个问题就是C++的二进制兼容性的问题.一旦类使用虚函数,只要随便改动下增删查改下头文件的虚函数,就会导致程序在跑的时候进行乱跳,因为这个时候exe ...

  4. TOJ 3744 Transportation Costs

    描述 Minya Konka decided to go to Fuzhou to participate in the ACM regional contest at their own expen ...

  5. 关于GitHub在VS中出现“已经存在master版本,无法……”的错误解决方案

    引用:http://www.cnblogs.com/SmallZL/p/3637613.html(这篇已经很详细说明如何使用Vs+GitHub),我这里做补充: VS2013已经集成了Git一部分控件 ...

  6. ElasticSearch 2.1.1学习及总结

    Install & Up cd elasticsearch-2.1.1/bin ./elasticsearch ./elasticsearch --cluster.name my_cluste ...

  7. 面试题-Java设计模式举例

    面试题-Java设计模式举例 1.适配器模式 涉及三个角色:Target目标接口.Adaptee源角色.Adapter适配器:Adapter将源接口适配到目标接口,继承源接口,实现目标接口. Java ...

  8. Nginx+Keepalived配置

    1. Nginx安装 (1) 环境:分别在2台服务器上部署nginx且步骤一致: 如192.138.86.1和192.138.86.2 (2) 下载官网最新稳定版,地址:https://nginx.o ...

  9. 中文输入法无法在 QtCreator(Linux) 中输入汉字

    中文输入法无法在 QtCreator(Linux) 中输入汉字 环境 system: Deepin 15.7 Qt Creator 4.7.0 (GCC 5.3.1) 解决方法 下载 fcitx-qt ...

  10. 白话SpringCloud | 第六章:Hystrix监控面板及数据聚合(Turbine)

    前言 前面一章,我们讲解了如何整合Hystrix.而在实际情况下,使用了Hystrix的同时,还会对其进行实时的数据监控,反馈各类指标数据.今天我们就将讲解下Hystrix Dashboard和Tur ...