百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python脚本动态混淆Unity与OC的通信接口

off999 2024-11-08 12:47 20 浏览 0 评论

在Unity项目中接入第三方SDK时,需要在Plugin中加一部分原生接口代码(这里仅针对iOS平台),并且在C#层通过DllImport("__Internal")去声明对应的方法实现通信,与此同时在导出Xcode工程中,Unity会将C#代码转换成C++并生成在Classes/Native目录下,如你提包也需要混淆这部分接口。

这里介绍并实现个小脚本,帮助你动态找出这类方法,并且实现混淆,规避一些4.3等常规的扫描(当然只是其中一个细节,还需要结合其它的混淆处理,以后再逐一分享)。

1、首先定位到Classes/Native目录下找出类似的接口方法分析其特征。

例如上面代码中的这部分,就是我们需要找的函数Login()

extern "C" void DEFAULT_CALL Login();

2、我们只需要读入CPP文件,正则去匹配对应的函数名,这里注意不同工程可能有些不一样函数或返回值定义,例如这里的void还可能存在其它的类型,需要自行兼容形如bool/int/char等等。参考的正则可以这么写:

extern\s+\"C\"\s+(?:void|double|bool|int|char\*)\s+DEFAULT_CALL\s+([\w]+)\(.*\)\;

3、已经找好函数,这个时候只需要组织一下生成混淆或组合词来替换原来的函数名就可以了。这里建议用宏替换的方式编译时自动替换,而不需要去修改c++源代码。找到pch文件加入:

#define Login newLogin

4、有些点需要注意的是,上述简单介绍基本逻辑,实际使用时会匹配出许多不同的函数或接口,需要做特殊处理,例如有接入谷歌广告SDK,需要排除一些GAD相关的函数,不然混淆后会有各种函数调用异常。

附参考实现(Python):

#!/usr/bin/env python
# coding=utf-8

import os
import getopt,sys
import re
import random

def getRandomString(length):
    '''
    生成随机字符串 \n
    length 字符串长度
    '''
    name = ""
    for i in range(0, length):
        name+=chr(random.randint(97, 122))
    return name

def confuseExternDefaultCall(projectPath):
    '''
    混淆C++与OC通信接口
    '''
    nativePath = os.path.join(projectPath, "Classes/Native")

    if not os.path.isdir(nativePath):
        print("目录不存在:%s" % nativePath)
        return

    # 默认固定
    externMethods = []
    fileList = os.listdir(nativePath)
    for p in fileList:
        path = os.path.join(nativePath, p)
        
        with open(path) as f:
            for line in f.readlines():
                match = re.match('extern\s+\"C\"\s+(?:void|double|bool|int|char\*)\s+DEFAULT_CALL\s+([\w]+)\(.*\)\;', line)
                if match:
                    method = match.groups()[0].strip()
                    if not(method in externMethods):
                        externMethods.append(method)
            f.close()
    
    # 添加到pch文件
    if externMethods:
        pch = os.path.join(projectPath, "Classes/Prefix.pch")
        with open(pch) as f:
            content = f.read()
            f.close()

        code = []
        for method in externMethods:
            # 不需要的可在这里加判断排除
            regex = re.compile('\#define\s+.*%s\s+.*' % method)
            match = re.findall(regex, content)
            if match.__len__() > 0:
                for m in match:
                    content = content.replace(m+"\n", "")
            
            newMethod = "New%s" % getRandomString(6) # 自行调整
            code.append('#define %s %s' % (method, newMethod))

            print("replace %s => %s" % (method, newMethod))
                
        code = "\n".join(code)

        with open(pch, "w") as f:
            f.write("%s\n\n%s" % (content, code))
            f.close()

if __name__ == "__main__":
    projectPath = None
    opts, args = getopt.getopt(sys.argv[1:], "p:")

    if opts.__len__()==0:
        print(os.path.basename(__file__)+" 参数说明:\n-p 指定项目路径")
        exit()

    # 参数解析
    for args in opts:
        if args[0]=="-p":
            projectPath = args[1]

    if os.path.isdir(projectPath):
        confuseExternDefaultCall(projectPath) 

相关推荐

传奇盒子平台大全(传奇盒子赚钱)

在996传奇盒子中,会员玩家可以在“我的游戏”中通过“云玩”进入之前体验过的传奇游戏,开启挂机模式后,就能在“云多开”系统里观察到自己的云设备和正在进行云游戏状态的传奇游戏,如果点进手机后台,还能看到...

pdf查看软件(查看pdf格式的软件)

pdf当然可以有查找功能:1、第一步:首先我们要使用WPSOffice打开PDF文档。2、第二步:我们需要依次点击“开始”--->“查找”(或使用快捷键“Ctrl+F”)。3、第三步:我们在查...

中国象棋下载安装(下载中国象棋官方版)

不用刻意下载个中国象棋APP,只需要下载一个QQ游戏,里头就有中国象棋玩了,里头点开后,自动下载,还可以连接其他玩家,一起玩,切磋棋艺。你这问题太模糊了。。。是你有一个象棋游戏,想放到桌面上,双击就可...

手机bt下载软件哪个好(手机有什么下载bt的软件)

磁力下载app推荐黑科技APP,这个好用黑科下载器APP也是一款功能强大且使用的下载类工具应用,它支持磁力以及种子文件的下载。还可以把下载的的文件转存到云盘,并支持在线的云播预览功能,无需等待能直接边...

狂野飙车9下载(狂野飙车9下载入口)

您可以在AppStore搜索“狂野飙车9”或者直接使用Safari等浏览器搜索“狂野飙车9官方下载”,进入官网下载页面,点击下载按钮并根据提示进行下载安装即可。在下载前请确保您的苹果设备已连接稳定...

免费相册视频制作软件(怎么把拍的照片做成视频)
免费相册视频制作软件(怎么把拍的照片做成视频)

电脑端1.会声会影会声会影上手简单而且做出的相册的效果也很不错,很适合新手使用,x7以前的版本都是可以自己去免费用的。2.premiere(pr)pr是一款比较专业的视频剪辑制作软件,用它来做电子相册也是很不错的,做出的效果很高大上,如果只...

2026-01-17 21:43 off999

图片文字修改神器免费(手机无痕修改图片文字软件)

首先区分是完整图片导入还是ai软件自己编写的文字,如果导入的图片无法修改,只能像ps一样去修图,如果是软件编写的,无法选取先要解锁,方法:上面任务栏对象-选择全部解锁。然后修改。修改方法:如果对方编组...

开户最忌三个证券公司(随便哪个证券公司开户都一样吗)

在不同的证券公司开户,确实存在一些区别。首先,不同的证券公司提供的交易品种和交易费用可能不同,有些公司可能提供更广泛的投资选择,而有些公司则可能提供更低的佣金率,这直接影响到您的投资成本和收益。其次,...

农行手机银行app下载(中国农业银行App下载)

自己下载的农行手机银行是能转账的,只是额度可能会要低一些,比如一类卡,在农行网点注册下载并开通手机银行,一天转账的额度是有十万,而自己下载注册开通的手机银行额度则只有5万,自己是可以下载农行手机银行是...

下载本机手机管家(手机管家华为专用版下载)

可以在手机的应用商店中下载就可以了你看看有没有办法把他弄到桌面上,比如刷新桌面,如果影响使用的话,建议恢复出厂设置吧,我以前也出现过这种情况,刷机之后就好了电脑管家目前是不支持手机终端登录的所以无法...

街机游戏平台(街机游戏平台官网)
  • 街机游戏平台(街机游戏平台官网)
  • 街机游戏平台(街机游戏平台官网)
  • 街机游戏平台(街机游戏平台官网)
  • 街机游戏平台(街机游戏平台官网)
侠盗飞车下载(侠盗飞车下载手机版)
  • 侠盗飞车下载(侠盗飞车下载手机版)
  • 侠盗飞车下载(侠盗飞车下载手机版)
  • 侠盗飞车下载(侠盗飞车下载手机版)
  • 侠盗飞车下载(侠盗飞车下载手机版)
广州疫情最新消息(广州疫情最新消息通知)

 当然可以,深圳去广州的交通发达也便捷,可以乘坐大巴车、火车、高铁、自驾车均可到达广州的各大客运站、火车站、城市地标,到站后还可以乘坐公交车、地铁、打车到你想去的目的地。 深圳...

大型网络游戏排行榜前十(目前大型网络游戏排行)

最热门的有很多的,每个人的标准都不一样的,但是只要自己喜欢就好,无有传齐所有职业都有四个被动技能,游侠的四个技能分别是:游猎者、梦魇、鹰眼术和原动力。作用分别是对减速单位额外造成伤害,暴击是额外提高伤...

苹果15(苹果15pro)

1、屏幕机身方面:iPhone15配有黑色、白色、红色、绿色、蓝色五款颜色,配备6.1英寸超视网膜XDR显示屏,支持HDR显示、原彩显示、广色域(P3)、2000000:1对比度(典型)...

取消回复欢迎 发表评论: