首先是安装和使用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  再次编译就没事了!

  

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

最新文章

  1. 1526. Martian Plates
  2. mysql replication
  3. uC/OS-II邮箱(mbox)块
  4. c#之Redis队列
  5. Android Configuration change属性
  6. C#- WinForm获取 当前执行程序路径的几种方法
  7. Linux 普通用户su命令切换控制
  8. 转:IIS请求筛选模块被配置为拒绝超过请求内容长度的请求
  9. C#中的正则 Regex类
  10. Filter基金会
  11. javascript中document.form[formName][]的意思
  12. 自定义工作流活动报错:您无法登陆系统。原因可能是您的用户记录或您所属的业务部门在Microsoft Dynamics 365中已被禁用。
  13. TiDB初步概念
  14. 数据库(mysql)相关知识
  15. NanoFabric-ServiceFabric 操作手册
  16. ElasticSearch5.4.1 搜索引擎搭建文档
  17. Ex 6_16 旧货销售问题_第七次作业
  18. 5月17 AJAX返回类型-------JSON和XML
  19. 更精确的判断对象类型js方法
  20. Eclipse使用Git管理项目

热门文章

  1. JAVA实体类不要使用基本类型,基本类型包含byte、int、short、long、float、double、char、boolean
  2. spark第二篇:Application Submission Guide
  3. mysql 流程函数
  4. AUTO Uninstaller【教程】AUTODESK系列软件MAYA,3DSMAX,CAD,INVENTOR,REVIT修复卸载工具 Windows x64位
  5. Oracle 系统常用命令
  6. 牛客网Java刷题知识点之UDP协议是否支持HTTP和HTTPS协议?为什么?TCP协议支持吗?
  7. css样式查找遇到的问题汇总
  8. 在 Azure 中创建静态 HTML Web 应用
  9. css3轮播渐显效果 2016/11/29
  10. DJango小总结一