转载:as3加密入门-1使用alchemy进行代码混淆

5G手机里的安全卫士:拆解NAS和AS层如何用AES、ZUC保护你的通话与数据 本文深入解析5G手机中NAS和AS层如何利用AES、ZUC算法保护通话与数据安全。从4G到5G的安全演进,详细介绍了加密算法、完整性保护和校验机制的升级,以及这些技术如何提升用户体验和安全性。特别强调了ZUC算法在5G中的低延迟和高效率优势。 阅读详情

as3加密入门-1使用alchemy进行代码混淆

from:http://bbs.9ria.com/viewthread.php?tid=47088

最近在考虑SWF安全方面的技术,看到一些关于这方面不错的技术文章,记录下来方便查阅.以下为转载内容:

声明:这里所讨论的(以及后续相关的as3加密教程)所有方法都来自网络和我个人试验,
如果有错误,还请大家赐教,所有其它内容均为个人观点,若有不同意见,也可提出讨论。
所列举方法与代码引用了许多其它资料,在此可能不会一一列举出,相关作者如有需要注明来源,可以自行联系我(回帖或邮件都可)。
另外,这几篇加密入门教程其实也可以看成普通教程,只不过披件“加密”外衣而已。
比如,alchemy混淆可以看成简单的alchemy调用as3函数教程,跳转指令混淆可以看成as3c的hello world级入门教程。
为什么要加密?
1保护游戏数据,防止外挂作弊
2客户要求
3老板要求
4保护个人权利

之前对swf加解密没有研究,也不太感兴趣。一月份有位朋友同我探讨这一问题,才开始关注,也学到不少相关东西,空余也做了几个加壳、混淆试验。虽然商业的swf加密、破解软件已很成熟,网上关于这方面的资料却不多,这里总结了一下几个实际中常用as3代码混淆方法。
如果说加壳是对swf化装,那么混淆就是整容,不,更确切的说是毁容,对破解者来说是才是整容。俗话说,毁容容易整容难,这就是混淆的优势。这里总结几个常见的方法,来把你的swf毁个面目全非。

据我了解,实际中as3程序员对代码保护基本上都是手动混淆(修改变量名)。强制使用非法变量名完全可以保护住代码,尤其是源代码比较长,类文件比较多时。反编译出的东西基本没可用性。很少有人去用加密软件,即时用加密软件,基本上也就混淆一下代码,深度加密(加壳,随机跳转指令等)会降低flash运行效率,并很容易带来一些不可预知错误,甚至有时多次调试都发现不了,得不偿失。
所以这里首先推荐强制使用非法变量名混淆方法。另外,我认为alchemy是flash10最有用、最有意义的东西(3D API目前就是个鸡肋,pixel bender实现的功能太弱,其他新功能也没见对flash有何惊人改变),
alchemy的出现同时也给所有的swf反编译软件带来了一次“危机”。
这里第一部分是一个简单的alchemy混淆代码教程(其实就是alchemy调用flash函数教程)。对alchemy不感兴趣的朋友可直接跳到第二部分-强制使用非法变量名。

第一部分 使用alchemy混淆as3代码(选用)
为什么要用alchemy?
1.C语言是程序员的老本行,alchemy使用C/C++写代码,对多数程序员来说要比用as3更加得心应手。
2.Alchemy代码效率高,使用一些优化指令,尤其对计算速度提升明显。Joa Ebert给过一个极端的例子:纯as3的fps3~5,使用Alchemy优化指令编译后fps飙到200多。当然一般来说速度不会这么大幅改进。我的Bengine引擎最初是纯as3写的,fps0~5,使用Alchemy后可达到8~40.
3.Alchemy代码移植性好,尤其对纯bitmapdata操作的试验,可很方便地与allegro,sdl程序代码互相转换。
目前没有反编译软件可导出使用Alchemy写的源C/C++代码。Alchemy使用C/C++直接生成AS3字节码,目前反编译软件只能针对as3代码反编译,而且编译生成swc就自动加入c标准库,直接导致源文件变大,导致破解难度加大。
我估计以后也很难有反编译软件可以导出alchemy源C/C++代码,引用一段asv作者Burak关于反编译alchemy的评论"For Alchemy some new bytecode instructions were introduced to AVM2 (see Scott Petersen slides PDF). I'm not sure what this will mean for ASV. If we will be dealing with a full featured optimizing C/C++ compiler, decompiling back to C/C++ will be really hard work for us, that I can say..."(一些新的bytecode指令因alchemy而引入AVM2,我不敢肯定这对asv意味着什么。如果我们要面对的是一个全功能优化的C / C + +编译器,反编译回C/C++对我们来说将是非常困难的,我可以说…)

使用alchemy混淆代码简单例子(源代码见附件):
其实反编译器对HaXe生成的代码支持也不好。直接用HaXe写,代码反编译出,绝大多数不能编译,但一般代码结构还很清楚。如果项目比较大,使用HaXe写基本也用不着去加密。
不喜欢使用HaXe原因:1.已有了Alchemy,2.HaXe资料少。

基本思想,代码关键部分使用alchemy写(其实只有某一重要的小部分用alchemy也可以),as3部分只写一个class Main extends Sprite作容器。
下面代码给了一个简单例子,其实as3部分还可以减少,转为alchemy部分。
(项目文件以打包提供下载,见附件)
代码(as3部分):

  1. package {
  2. import cmodule.Bengine.CLibInit;
  3. import flash.display.*;
  4. import flash.events.*;
  5. [SWF(width="300", height="300", backgroundColor="#123456")]
  6. public class Main extends Sprite {
  7. public var cLibInit : CLibInit;//alchemy库
  8. public var alcLookupLib:Object;
  9. public function Main()
  10. {
  11. cLibInit = new CLibInit();
  12. alcLookupLib = cLibInit.init();//初始化alchemy库
  13. addChild(new Sprite())//添加一个空Sprite对象到舞台
  14. addEventListener(Event.ENTER_FRAME,enterFrame)// 添加帧循环
  15. }
  16. public function enterFrame(e):void
  17. {
  18. removeChildAt(0)
  19. addChild(alcLookupLib.initialize())//添加alchemy生成的Sprite对象到舞台
  20. }
  21. }
  22. }
复制代码

代码(C部分):

  1. #include "AS3.h"
  2. int r=0;//
  3. AS3_Val initialize(void* self, AS3_Val args)
  4. {
  5. AS3_Val spNS = AS3_String("flash.display");//取得命名空间
  6. AS3_Val spClass = AS3_NSGetS(spNS, "Sprite");//取得Sprite类
  7. AS3_Val emptyParams = AS3_Array("");//Sprite类参数
  8. AS3_Val sp = AS3_New(spClass, emptyParams);//声明一个Sprite对象
  9. AS3_Val gpc= AS3_GetS(sp, "graphics");//取得该Sprite对象graphics属性
  10. AS3_CallTS("beginFill", gpc, "IntType",0xffffff*rand());//使用随机颜色填充
  11. AS3_CallTS("drawRect", gpc, "IntType, IntType, IntType, IntType",-100,-100,200,200);
  12. //画一个方形
  13. r+=5;//旋转角度增加
  14. AS3_Val ro = AS3_Int(r);//转换C-Int为AS3-Int
  15. AS3_SetS(sp,"rotation",ro);//设置当前Sprite对象旋转角度
  16. AS3_Release(ro);
  17. AS3_Val xy = AS3_Int(150);
  18. AS3_SetS(sp,"x",xy); //设置当前Sprite对象x位置
  19. AS3_SetS(sp,"y",xy); //设置当前Sprite对象y位置
  20. AS3_Release(xy);//释放无用变量
  21. return sp;// 返回当前Sprite对象
  22. }
  23. int main()
  24. {
  25. AS3_Val initializeMethod = AS3_Function( NULL, initialize);
  26. AS3_Val result = AS3_Object("initialize: AS3ValType",initializeMethod);
  27. AS3_Release( initializeMethod );
  28. AS3_LibInit( result );
  29. return 0;
  30. }//end of int main
复制代码

编译过程:C部分:打开cygwin->cd /cygdrive/f/alchemy/ALCSWF/lib
source /cygdrive/f/alchemy/alchemy-setup
alc-on
gcc ALCSWF.c -O3 -Wall -swc -o ALCSWF.swc
生成ALCSWF.swc
AS3部分:打开ALCSWF.as3proj->build project

CryptoDemo--Flex(AS 3.0)加密算法工具 资源是Flex工程,下载后解压,新建一个flex工程然后把src目录中的所有文件复制到新建工程的src目录下即可运行示例 立即下载

相关推荐

as3代码混淆,生成无用代码。

可以生成一个包含无用代码的swc文件,你只要在自己的项目中包含这个swc,然后再实例化其主类就可以。使用之前先把flexsdk的bin目录路径加入系统路径,并设置SetupSDK.bat中的sdk路径。xRandomSWC.bat中可以设置主类名称,类文件数目等。

AS加密技术的实战应用与解析

在信息安全领域中,AS加密技术以其独特的加密机制,为数据的安全传输提供了强有力的保障。本章节将简要介绍AS加密技术的基本原理,以及其在现实场景中的应用。AS加密技术以其独特的加密机制和广泛的应用场景,为数据的安全传输提供了强有力的保障。本章节通过对AS加密技术的实现过程、实战应用案例的介绍和分析,展示了其在信息安全领域中的重要性和作用。未来,随着技术的不断发展和应用场景的不断拓展,AS加密技术将继续发挥其重要作用,为信息安全领域的发展贡献更多力量。👇热门内容👇。

anananajiushiwo的博客 946

Flash AS3代码混淆

irrFuscator是一个obfuscator的柔性开发。这将保护应用,以及他们的源代码,非常快,并提供良好的效果。irrFuscator可用于命令行,但还带有一个方便的图形用户界面前端。

【5G安全系列】AS层PDCP完整性保护与加密流程

文章目录PDCP完整性保护与加密流程一、PDCP密钥的衍生二、PDCP算法和密钥的配置流程2.1 初始AS 安全的激活2.2 AS 安全更新三、PDCP加密与解密流程3.1 加密与解密的应用范围3.1 加密与解密算法参数介绍四、PDCP完整性保护与校验流程4.1 完整性保护与校验的应用范围4.1 完整性保护与校验算法参数介绍 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客内容主要围绕:  &nb

从善若水的博客 9853

高速PCB差分对布线仿真实战案例

差分对布线是高速PCB设计的关键环节,直接影响信号完整性与EMI性能。本文结合实际项目,详解等长控制、阻抗匹配、间距优化等核心技巧,并通过仿真工具验证眼图、串扰和时序裕量,助力工程师规避常见高速pcb设计陷阱。

weixin_29092787的博客 349

手把手教你用STM32CubeMX配置I3C通信(含动态地址分配实战)

本文提供了一份基于STM32CubeMX配置I3C通信的实战指南,重点讲解了动态地址分配的实现步骤。通过详细的工程配置、从设备枚举、CCC命令使用及数据读写示例,帮助开发者快速掌握这一高效通信协议,以替代传统的I2C或SPI接口,满足多传感器连接与低功耗设计需求。

c8d9e0f1的博客 543

Keil MDK工程配置:ARMCLANG编译器下启用C++14特性全攻略

现代C++标准通过引入auto类型推导、constexpr编译期计算、lambda表达式等特性,显著提升了代码的表达力与安全性。其核心原理在于在编译期完成更多工作,减少运行时开销,同时通过RAII等机制增强资源管理。在嵌入式开发领域,这些特性能够帮助开发者编写更简洁、更安全的代码,尤其适用于STM32等资源受限但功能复杂的应用场景。然而,在Keil MDK这类传统以C为中心的IDE中,默认配置往往无法支持C++11/14等新标准,需要针对编译器选型、标准库链接、内存布局等进行系统性的工程配置。本文基于ARM

weixin_30387799的博客 484

Doris副本修复实战:从状态机到手动修复的完整指南

在分布式数据库系统中,多副本机制是实现高可用与数据一致性的核心技术。其原理是通过在不同节点存储数据的多个拷贝,确保部分节点故障时服务仍可继续。这项技术的核心价值在于保障数据可靠性,并支撑在线分析处理(OLAP)等对数据一致性要求高的应用场景。当副本出现损坏、丢失或版本不一致时,系统通常依赖自动修复机制,但在元数据损坏、多副本同时故障等复杂场景下,自动修复可能失效,需要深入理解副本状态机并借助手动工具介入。本文将聚焦Doris数据库,解析Tablet副本状态流转(如BAD、VERSION_ERROR),并详细

weixin_32288959的博客 460

AS3 加解密的隐藏常用方式分析

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

u011408719的博客 813

景观格局指数计算方法及代表的生态学意义(待补充)

景观指数 斑块密度(PD) 斑块密度(PD)表现某种斑块在景观中的密度,可反映出景观整体的异质性与破碎度[17],公式为PD=NP/A(1)式中NP———斑块数量,个A———景观或斑块的总面积,hm2PD———斑块密度,个/hm2 最大斑块指数(LPI) 最大斑块指数(LPI)用于确定景观中的优势斑块类型,间接反映人类活动干扰的方向和大小,公式为LPI=amaxA×100%(0≤LPI≤100%)(2)式中amax———景观或某一种斑块类型中最大斑块的面积,hm2LPI———最大斑块指数,% 凝聚

soderayer的博客 13万+

从TM1到TM9:手把手教你用Wireshark抓包分析LTE下行调度与传输模式切换

本文详细解析了如何使用Wireshark抓包分析LTE下行调度中的传输模式切换,从TM1到TM9的动态调整过程。通过实战案例,包括小区边缘移动、高速场景和多用户调度,揭示eNodeB如何基于信道质量指标(如RSRP、SINR)动态切换传输模式,并提供关键信令解析和优化建议,助力网络工程师提升LTE网络性能。

weixin_42651748的博客 315

[转]as3的abc文件及as3代码混淆的一点方法

首先先说说as的abc文件 从下面的am2框架图可以看出abc文件所处的位置 abc文件abc文件就是flashplayer可以直接解释执行的的字节码,该文件中的内容会直接嵌入到swf文件的doABC标签下。源码的asc包就是处理abc格式的。通常在编译AS项目时,as3脚本文件都会被编译成abc文件然后再生成doABC标签。手工编译as3到abc文件在flash sdk的l...

dengxiao9180的博客 368

PyTorch实战(12)——图神经网络(Graph Neural Network,GNN)

在本节中,我们首先简要概述了图神经网络 (Graph Neural Network, GNN) 的核心概念与应用,GNN 通过构建计算图分层聚合节点特征,解决了传统神经网络处理图数据时的四大局限:信息深度不足、节点顺序敏感、动态扩展困难和特征稀疏性问题。了解了不同类型的图学习任务(包括节点级、边级和图级三大类)。接着我们研究了几种流行的 GNN 模型,包括:GCN (通过权重共享实现图卷积)、GAT (引入注意力机制区分邻居重要性)和 GraphSAGE (采用随机采样应对大规模图)。

盼小辉丶的博客 3642

Alchemy环境的搭建

使用Alchemy,可以用C/C++开发Flash库,这样做的好处: (1)高性能。比as3性能高,但比c/c++要低。adobe承诺下个版本的Alchemy可以达到C/C++性能的80%。拭目以待吧。 (2)同一份代码基础可以用于多个项目,非Flash项目也能够用; (3)不用操心加密和混淆,破解难度比用as3写的要大。 ==== 主要参考这篇文章:《...

weixin_34410662的博客 97

SAP 权限配置(复合角色)

复合角色创建步骤:业务场景:通常单一角色权限颗粒度划分比较细,当需要分配单一角色权限A、B(多个单一角色)给某账号用户Y时,可以先建立一个复合角色C,将A、B绑定到复合角色C中,再将角色C分配给账号Y即完成权限配置。 业务模拟: 1、PFCG创建复合角色: 2、在角色页面添加子角色 在角色分页内添加子角色,点击“菜单”分页中的“读菜单”即可导入子角色中的菜单: 3、将用户分配给...

willieyuan的博客 7087

OpenOCD入门到精通:第28章 综合实战:RISC-V 调试

RISC-V调试实战摘要 本文介绍了RISC-V调试规范及其在OpenOCD中的实现。主要内容包括: RISC-V Debug规范的两个版本(0.11和0.13)及其差异,OpenOCD通过自动检测DTMCS寄存器版本号选择对应驱动实现。 RISC-V调试架构的分层设计,包含DTM、Debug Module、Program Buffer等核心组件,以及三种内存访问方式(progbuf、sysbus、abstract)。 以GD32VF103为例的实战调试配置,包括硬件连接、OpenOCD配置文件编写和GDB

从事嵌入式linux android驱动开发,拥有全栈能力 282

as3加密入门-1使用alchemy进行代码混淆

声明:这里所讨论的(以及后续相关的as3加密教程)所有方法都来自网络和我个人试验, 如果有错误,还请大家赐教,所有其它内容均为个人观点,若有不同意见,也可提出讨论。 所列举方法与代码引用了许多其它资料,在此可能不会一一列举出,相关作者如有需要注明来源,可以自行联系我(回帖或邮件都可)。 另外,这几篇加密入门教程其实也可以看成普通教程,只不过披件“加密”外衣而已。 比如,alchemy混淆可

maikforever 的专栏 1336

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

加密与解密

加密将防止数据被查看或修改,并在原本不安全的信道上提供安全的通信信道,它达到以下目的: 保密性:防止用户的标识或数据被读取。 数据完整性:防止数据被更改。 身份验证:确保数据发自特定的一方。 基本概念: 1、散列(HASH)函数 散列(HASH)函数H也称哈希函数或杂凑函数等,是典型的多到一的函数,其输入为一可变长x(可以足够的长),输出一固定长的串h(一般为128位、160位,

wenzheng_wz的专栏 806

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

flex项目和组件等

open-source project : Flex Adobe APIs 主要包含corelib, mappr, flickr, youtube及加密等类库. http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries as3awss3lib 与 Amazon S3 交...

weixin_30697239的博客 371

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

AS2.0的MD5加密函数

AS2.0的MD5加密函数[包括处理UTF-8] 此函数将保证服务器加密内容和客户端加密内容一致,比较强悍的哦,挖哈哈<br /> 再也不用为加密中文后内容不一致担心了..function md5(string) { var x = Array(); var k, AA, BB, CC, DD, a, b, c, d; var S11 = 7, S12 = 12, S13 = 17, S14 = 22; var

斗战圣Q 1829

aes加密算法简单说明

里面简要介绍了aes的补齐规则和ecb,cbc模式

tusong86的博客 8314

头条as,cp,_signature加密解析

只说下思路吧,毕竟把加密代码公开对别网站不好,最后结果如下图。如有权益问题可以发私信联系我删除,或q:1847858794 as,cp就不说了,简单,网上也有一大堆教程,这里主要说下_signature的加密。 找到加密代码直接抠出来js,然后用python调用,效果图: 思路: 加密代码生成位置(搜索:"Function(function("  得到加密位置): 这个加密和知乎...

qian123shuai的博客 2550
上一篇: as3crypto RSA加密
下一篇: 转载:as3加密入门-2使用非法变量名
jamesjun
博客等级 码龄19年 25粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值