APP安全之代码混淆防止反编译查看真实的头文件函数声明

时间:2022-10-26 23:25:05

现在有的公司对自己的爱屁屁(APP)安全上有重视,所以本篇讲一下代码混淆,即使别人反编译出来,也看不出来头文件的信息.

上菜:

1.首先安装class-dump,下载地址:http://stevenygard.com/projects/class-dump

下载完打开后

APP安全之代码混淆防止反编译查看真实的头文件函数声明

把class-dump写入到usr/bin,发现提示:

Operation not permitted

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

APP安全之代码混淆防止反编译查看真实的头文件函数声明

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

APP安全之代码混淆防止反编译查看真实的头文件函数声明

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

APP安全之代码混淆防止反编译查看真实的头文件函数声明

添加到工程里面:

APP安全之代码混淆防止反编译查看真实的头文件函数声明

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

APP安全之代码混淆防止反编译查看真实的头文件函数声明

再重申一下,成功添加点击 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

注意点:箭头指向的位置是你工程的名字

APP安全之代码混淆防止反编译查看真实的头文件函数声明

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

APP安全之代码混淆防止反编译查看真实的头文件函数声明

配置 Build Phase:添加 Run Script

APP安全之代码混淆防止反编译查看真实的头文件函数声明

添加脚本路径:

APP安全之代码混淆防止反编译查看真实的头文件函数声明

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

APP安全之代码混淆防止反编译查看真实的头文件函数声明

如果不执行命令,发现会报错的.

在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 文件里,写入待混淆的函数名:

APP安全之代码混淆防止反编译查看真实的头文件函数声明

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

APP安全之代码混淆防止反编译查看真实的头文件函数声明

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

APP安全之代码混淆防止反编译查看真实的头文件函数声明

多出的宏定义:

APP安全之代码混淆防止反编译查看真实的头文件函数声明

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

APP安全之代码混淆防止反编译查看真实的头文件函数声明

把ipa拿出来,放到桌面

APP安全之代码混淆防止反编译查看真实的头文件函数声明

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

APP安全之代码混淆防止反编译查看真实的头文件函数声明

解压zip

APP安全之代码混淆防止反编译查看真实的头文件函数声明

  
打开文件夹:
APP安全之代码混淆防止反编译查看真实的头文件函数声明 使用一下命令:
APP安全之代码混淆防止反编译查看真实的头文件函数声明 -H 后面是上面wenjian的路径 -o 后面是自己随便起的文件夹名字. Code文件夹在HOME下(就是你电脑上面的

APP安全之代码混淆防止反编译查看真实的头文件函数声明的更多相关文章

  1. Android 代码混淆 防止反编译

    为了防止代码被反编译,因此需要加入混淆.混淆也可以通过第三方进行apk混淆,也可以用android中的proguard进行混淆. 混淆步骤: 1.配置混淆文件,名字可以随意,在这里使用proguard ...

  2. Android&colon; apk反编译 及 AS代码混淆防反编译

    一.工具下载: 1.apktool(资源文件获取,如提取出图片文件和布局文件) 反编译apk:apktool d file.apk –o path 回编译apk:apktool b path –o f ...

  3. android 混淆 与 反编译

    1, 文件 project.properties 修改: target=android-14proguard.config=${sdk.dir}/tools/proguard/proguard-and ...

  4. Android混淆、反编译以及反破解的简单回顾

    =========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...

  5. 爬虫app信息抓取之apk反编译抓取

    之前也抓过一些app,数据都比较好取,也没有研究的太深,毕竟还有android 模拟器+ appium 的方法.直到遇见了一款app ,具体名字就不说了,它安装在模拟器上竟然打不开 !!第一次遇见上网 ...

  6. winform代码反编译后图片等资源文件恢复解决方案

    用Reflector工具反编译的winform代码,图片等资源文件不能很好的反编译成功. 这里有一个笨的解决方案.首先我们要了解图片资源当初加入到工程的几种方式,及他们所在的位置. 一般winform ...

  7. &period;Net的混淆防反编译工具ConfuserEx--2(转)

    给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...

  8. Java代码加密与反编译(二):用加密算法DES修改classLoader实现对&period;class文件加密

    Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密 二.利用加密算法DES实现java代码加密 传统的C/C++自动带有保护机制,但java不同,只要 ...

  9. 给大家推荐一个&period;Net的混淆防反编译工具ConfuserEx

    给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...

随机推荐

  1. CodeForces 279D The Minimum Number of Variables 题解

    题目大意: 有一组n个不相同的数字组成数串:a1,a2,a3-an. 1.一个数组b. 2.第一个操作我们将b0的值赋为a1.之后我们有n-1个操作,第k次操作我们将by=bi+bj(y,i,j可能相 ...

  2. 另类vs2015&plus;xamarin 的android界面乱码 解决

    text.Text += "验证key 验证出错! 请在 AndroidManifest.xml 文件中检查 key 设置"; 代码就上面一行,单步走之前text.Text里面是汉 ...

  3. 好推二维码如何通过应用宝微下载支持微信自动打开APP下载?

    好推二维码 官网 http://www.hotapp.cn 1. 为什么使用应用宝微下载? APP下载二维码,通过微信扫描下载的时候,微信目前只支持应用宝微下载,才能在微信里直接打开下载,否则就需要在 ...

  4. hdu1757 A Simple Math Problem

    Problem Description Lele now is thinking about a simple function f(x).If x < 10 f(x) = x.If x &gt ...

  5. mybatis多对一关联的两种方式

    第一个种是Address找到自己的user_id,扔给User,让User自己去再查一次,即使在有缓存的前提下,每遇到一个新的user_id,就会查一次,对比hibernate的话,相当于多对一eag ...

  6. 通过URLHttpConnection方式来取得图片,并且显示在ImageView上

    界面: 代码xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...

  7. Protel封装库

    一.目录下面的一些封装库中,根据元件的不同封装我们将其封装分为二大类:一类是分立元件的封装,一类是集成电路元件的封装 1.分立元件类: 电容:电容分普通电容和贴片电容: 普通电容在Miscellane ...

  8. 关于win8开发的一点小总结

    我今天做画面的时候,发现了一点小问题. 我在xmal文件里面加了一个CheckBox控件,设置IsChecked属性为True,并添加了Checked事件.Checked事件里面有对另外一个TextB ...

  9. 运行一个android程序,直接访问某个网站

    package android.com.youtube; import android.app.Activity; import android.content.Intent; import andr ...

  10. uniGUI试用笔记(七)

    uniGUI的文件下载由于TUniSession的存在而变得非常简单,最典型的一个例子就是将列表中的所有数据导出到Excel中.服务器上采用TMS FlexCel控件,先将数据集中的记录导入到Exce ...