as3加密入门-4使用avm2内嵌式汇编指令混淆简介
2011-02-20 12:12
302 查看
(p.s.这篇教程也可以看做as3c的入门教程)
这里主要是使用avm2跳转指令Jump,在在源代码中写入asm进行跳转,两个跳转中间插入大量无用代码(不会被执行,但反编译出的文件中看得到)
asv对跳转反编译不好,会出现“//unresolved jump”字样,sothink反编译出代码也无法实现原跳转。
重编译后,无用代码会被执行。总之,使用跳转指令后,as3代码基本上可以混淆到无法还原,要想破解,只能手动进行(人工翻译pcode),
所以只要你的原始代码够长,没人愿意去翻译/破解你的代码。
跳转指令好处就是大量无用代码不会被执行,混淆不会降低运行效率。
不太推荐跳转指令或asm混淆,因为内嵌汇编写东西比较麻烦(主要是现在avm2没有一个像as2时代的flasm那样好用的工具)。
当然,如果你能研究透avm2指令,使用asm像as3一样熟练,优化代码、加密、破解都不在话下。
as2可以用flasm直接操作(编译/反编译)bytecode,这是高手们作优化、加密、游戏作弊、破解甚至逆向工程的一件利器。
可惜flasm没再更新,只支持到flash8。不过幸好我们还有其继承者,Joa Ebert 的As3c,虽然可能使用起来不如flasm那么方便。
推荐工具:As3c
简单的跳转混淆:
1. 到As3c项目地址http://code.google.com/p/as3c/source/browse/#svn/trunk/bin/Release
下载As3c.exe,As3c.pdb,SwfLibrary.dll,SwfLibrary.pdb,zlib.net.dll几个文件,
以及所需as3类文件http://code.google.com/p/as3c/source/browse/#svn/trunk/src/as3/AsmLibrary/src/de
(下载整个de文件夹)
将As3c.exe,As3c.pdb,SwfLibrary.dll,SwfLibrary.pdb,zlib.net.dll几个文件和de文件夹保存到C:/as3c
附件中已包含以上文件,可直接下载附件。
2.写好待混淆代码:
package {
import flash.display.*;
import flash.text.*;
public class Jump extends Sprite {
var Bruce_Jawn_Encrypt= new TextField();
Bruce_Jawn_Encrypt.text="跳转指令";
Bruce_Jawn_Encrypt.textColor=0xff0000;
Bruce_Jawn_Encrypt.scaleX=10;
Bruce_Jawn_Encrypt.scaleY=10;
addChild(Bruce_Jawn_Encrypt);
}
}
复制代码
3.原代码中插入asm跳转指令,并用注释分割
package {
import flash.display.*;
import flash.text.*;
import de.popforge.asm.Op;
import de.popforge.asm.__asm;
public class Jump extends Sprite {
__asm(Op.jump('.text'));//跳转到.text位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text:'); // .text位置
var Bruce_Jawn_Encrypt= new TextField();
__asm(Op.jump('.text2')); //跳转到.text2位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text2:'); // .text2位置
Bruce_Jawn_Encrypt.text="跳转指令";
__asm(Op.jump('.text3')); //跳转到.text3位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text3:'); // .text3位置
Bruce_Jawn_Encrypt.textColor=0xff0000;
__asm(Op.jump('.text4')); //跳转到.text4位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text4:'); // .text4位置
Bruce_Jawn_Encrypt.scaleX=10;
Bruce_Jawn_Encrypt.scaleY=10;
__asm(Op.jump('.text5')); //跳转到.text5位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text5:');// .text5位置
addChild(Bruce_Jawn_Encrypt);
__asm(Op.jump('.text6')); //跳转到.text6位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text6:');// .text6位置
}
}
复制代码
4.在//********** 处随便复制插入大量混淆用代码。
5.编译Jump.as得到Jump.swf,复制到C:/as3c文件夹(此时asm跳转指令未编译,运行swf会发现混淆代码将被执行)
6.使用as3c编译asm跳转指令
运行dos命令符,cd到C:/as3c文件夹
as3c.exe -inline Jump.swf
7.再次测试Jump.swf,跳转成功,混淆代码不被执行。
上面的例子比较简单,要想达到更好跳转混淆效果,可以把跳转加到循环,嵌套函数,条件判断…语句中,并打乱代码顺序,使用多次折返跳转而非例子中的顺序跳跃。
as3c.zip (157.61 KB)
这里主要是使用avm2跳转指令Jump,在在源代码中写入asm进行跳转,两个跳转中间插入大量无用代码(不会被执行,但反编译出的文件中看得到)
asv对跳转反编译不好,会出现“//unresolved jump”字样,sothink反编译出代码也无法实现原跳转。
重编译后,无用代码会被执行。总之,使用跳转指令后,as3代码基本上可以混淆到无法还原,要想破解,只能手动进行(人工翻译pcode),
所以只要你的原始代码够长,没人愿意去翻译/破解你的代码。
跳转指令好处就是大量无用代码不会被执行,混淆不会降低运行效率。
不太推荐跳转指令或asm混淆,因为内嵌汇编写东西比较麻烦(主要是现在avm2没有一个像as2时代的flasm那样好用的工具)。
当然,如果你能研究透avm2指令,使用asm像as3一样熟练,优化代码、加密、破解都不在话下。
as2可以用flasm直接操作(编译/反编译)bytecode,这是高手们作优化、加密、游戏作弊、破解甚至逆向工程的一件利器。
可惜flasm没再更新,只支持到flash8。不过幸好我们还有其继承者,Joa Ebert 的As3c,虽然可能使用起来不如flasm那么方便。
推荐工具:As3c
简单的跳转混淆:
1. 到As3c项目地址http://code.google.com/p/as3c/source/browse/#svn/trunk/bin/Release
下载As3c.exe,As3c.pdb,SwfLibrary.dll,SwfLibrary.pdb,zlib.net.dll几个文件,
以及所需as3类文件http://code.google.com/p/as3c/source/browse/#svn/trunk/src/as3/AsmLibrary/src/de
(下载整个de文件夹)
将As3c.exe,As3c.pdb,SwfLibrary.dll,SwfLibrary.pdb,zlib.net.dll几个文件和de文件夹保存到C:/as3c
附件中已包含以上文件,可直接下载附件。
2.写好待混淆代码:
package {
import flash.display.*;
import flash.text.*;
public class Jump extends Sprite {
var Bruce_Jawn_Encrypt= new TextField();
Bruce_Jawn_Encrypt.text="跳转指令";
Bruce_Jawn_Encrypt.textColor=0xff0000;
Bruce_Jawn_Encrypt.scaleX=10;
Bruce_Jawn_Encrypt.scaleY=10;
addChild(Bruce_Jawn_Encrypt);
}
}
复制代码
3.原代码中插入asm跳转指令,并用注释分割
package {
import flash.display.*;
import flash.text.*;
import de.popforge.asm.Op;
import de.popforge.asm.__asm;
public class Jump extends Sprite {
__asm(Op.jump('.text'));//跳转到.text位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text:'); // .text位置
var Bruce_Jawn_Encrypt= new TextField();
__asm(Op.jump('.text2')); //跳转到.text2位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text2:'); // .text2位置
Bruce_Jawn_Encrypt.text="跳转指令";
__asm(Op.jump('.text3')); //跳转到.text3位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text3:'); // .text3位置
Bruce_Jawn_Encrypt.textColor=0xff0000;
__asm(Op.jump('.text4')); //跳转到.text4位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text4:'); // .text4位置
Bruce_Jawn_Encrypt.scaleX=10;
Bruce_Jawn_Encrypt.scaleY=10;
__asm(Op.jump('.text5')); //跳转到.text5位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text5:');// .text5位置
addChild(Bruce_Jawn_Encrypt);
__asm(Op.jump('.text6')); //跳转到.text6位置
//==============================
//==============================
//**********此处随便插入大量混淆用代码(不会被执行)
//==============================
//==============================
__asm('.text6:');// .text6位置
}
}
复制代码
4.在//********** 处随便复制插入大量混淆用代码。
5.编译Jump.as得到Jump.swf,复制到C:/as3c文件夹(此时asm跳转指令未编译,运行swf会发现混淆代码将被执行)
6.使用as3c编译asm跳转指令
运行dos命令符,cd到C:/as3c文件夹
as3c.exe -inline Jump.swf
7.再次测试Jump.swf,跳转成功,混淆代码不被执行。
上面的例子比较简单,要想达到更好跳转混淆效果,可以把跳转加到循环,嵌套函数,条件判断…语句中,并打乱代码顺序,使用多次折返跳转而非例子中的顺序跳跃。
as3c.zip (157.61 KB)
相关文章推荐
- as3加密入门-4使用avm2内嵌式汇编指令混淆简介
- as3加密入门-1使用alchemy进行代码混淆
- as3加密入门-1使用alchemy进行代码混淆
- 转载:as3加密入门-1使用alchemy进行代码混淆
- as3加密入门-1使用alchemy进行代码混淆
- as3加密入门-2使用非法变量名
- 转载:as3加密入门-2使用非法变量名
- as3加密入门-2使用非法变量名
- Java爬虫入门简介(一) —— HttpClient请求及其使用方法
- 《转》加密入门(三):TrueCrypt使用
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- Python程序设计入门(5)类的使用简介
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
- J2EE入门视频教程第七讲——JDBC技术简介及使用
- WTK使用简介——使用入门
- 每天学一点Swift——Swift简介以及Xcode入门使用
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建