• as3加密入门3降低反编译代码可读性的代码书写习惯


    这里不推荐源代码中使用无意义的变量名,如

    1. var asd=new Sprite();function asdf();
    复制代码

    源代码中尽量使用有意义的变量名,然后使用第二部分方法混淆即可。
    我推荐的书写习惯(针对代码混淆):

    1.object vs class
    尽量少声明class,绝大多时候,一个object对象({})就完全够用了:
    使用类:

    1. public class mySprite extends Sprite
    2. {
    3. public var vx;
    4. public var vy;
    5. public function mySprite()
    6. ...
    7. }
    8. var myinstc=new mySprite();
    复制代码

    使用object(等价写法):

    1. function newmySprite()
    2. {
    3. var mySprite=
    4. {vx:,vy:,cavans:new Sprite()};
    5. return mySprite;
    6. }
    7. var myinstc=newmySprite();
    复制代码

    2.include vs import
    include是我最喜欢用的关键字
    少写类,我们就可以多用include预编译指令。
    一个极端的做法是只写一个类“public class Main extends Sprite”,使用object代替class,将所有函数、变量作为Main类的类函数、属性。将相关联的函数、变量分别写进一个独立的.as文件中,最后在Main.as中将这些.as文件include进来。这样编译出的swf只有一个类文件,
    反编译出的代码也就一个超长的Main.as文件,可能含有几十个变量和函数,极不便于阅读,从而达到混淆效果。而如果声明很多类,那反编译出的代码结构就会很清晰,各个包、类一目了然,很容易被破解者重复利用。
    include.png


    3.[]语法(By Zevan)
    不推荐使用,有可能降低swf运行效率。但如果该部分代码只运行一次,对效率要求不高,可尝试一下:

    1. graphics.lineStyle(0,0);
    2. graphics[["drawEllipse", "drawRect"][int(Math.random()*2)]](Math.random()*400, Math.random()*300, Math.random()*100,Math.random()*100);
    复制代码

    (可将"drawEllipse", "drawRect"赋值给自声明的变量达到混淆效果):

    1. var drawEllipse="drawRect";
    2. graphics[drawEllipse] (Math.random()*400, Math.random()*300, Math.random()*100,Math.random()*100);
    复制代码

    正常写法

    1. var xp:Number, yp:Number, w:Number, h:Number;
    2.   graphics.lineStyle(0,0);
    3.     xp = Math.random()*400;
    4.     yp = Math.random()*300;
    5.     w = Math.random()*100;
    6. h = Math.random()*100;
    7. var choice:int= int(Math.random()*2)];
    8. if(choice=0)graphics.drawEllipse (xp, yp, w, h);
    9. else
    10. graphics.drawRect(xp, yp, w, h);
    复制代码

    其实[]语法是as3比较强大的一种功能,在很多时候使用起来是非常方便的。
    []语法让我们可以使用字符串来调用as3函数,我们甚至可以利用[]语法写一个as3代码解释器,让as3代码不经编译而直接运行于swf中,
    仿佛在flashplayer中运行了一个自定义的flashplayer,而这个自定义的flashplayer可以使用自己定义的语法,混淆效果当然没得说(当然执行效率也会很低)。
    附件AS3Player.swf就是这样一个简单的例子。
      AS3Player.swf (2.64 KB)

  • 相关阅读:
    简单两步 ~ 绕过 "Paused in debugger"
    Python3 与 C# 并发编程之~ 线程篇
    【翻译】七个习惯提高Python程序的性能
    Jupyter-Notebook 远程访问
    Ubuntu18.04下给Jupyter-NoteBook设置默认工作路径(附Win设置和pip版)
    Python3 与 C# 并发编程之~ 进程篇
    Python3 与 C# 并发编程之~进程先导篇
    交叉编译调试qemu_guest_agent
    OVN简单部署
    OVN学习(三)
  • 原文地址:https://www.cnblogs.com/keng333/p/2301910.html
Copyright © 2020-2023  润新知