请选择 进入手机版 | 继续访问电脑版
phpchina phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 新增登录提醒插件 - 用至我的站点 地图任务一定要做 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

MIUI手机主题设计大赛,奔驰大奖等你拿! 想加薪?!蓝色理想招聘提供你更多机会 悬赏答疑,赚取积分兑奖品!

查看: 1534|回复: 18

[AS3] 考考大家,为什么可以用数字做变量名 [复制链接]

newlyj 楼主
帖子
337
体力
548
威望
8
发表于 2009-6-13 13:28:41 |显示全部楼层
有编程常识的都知道变量名是不能以数字开头的,但我做这个swf里面的变量全是纯数字,不信用破解精灵看里面的代码,

里面的部分代码:
  1. public var 121:uint;
  2.         public var 123456789:Number;
  3.         public var 987654321:Number;
  4.         public var 321:int;
  5.         public var 88:Sprite;
复制代码
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

flash023

版主

帖子
13411
体力
27007
威望
10
居住地
重庆市 永川市
发表于 2009-6-13 13:36:30 |显示全部楼层
楼主用的苹果系统
我的博客 http://space.flash8.net/space/?591172 AS2&AS3   ASP&PHP ACCESS&mySQL XML&JS
帖子
247
体力
848
威望
0
居住地
浙江省 温州市
发表于 2009-6-13 13:37:42 |显示全部楼层
文件大N倍
newlyj 楼主
帖子
337
体力
548
威望
8
发表于 2009-6-13 13:59:58 |显示全部楼层

回复 2# flash023 的帖子

非也,也是windows

3#你是不是看错了,是702字节,不是702k
帖子
153
体力
336
威望
0
发表于 2009-6-13 15:13:01 |显示全部楼层
直接修改abc里面的string pool不就好了..
本来multiname就可以用任何string啊..
只是编译的时候为了不和那些特殊字符串冲突才做的限制

flash023

版主

帖子
13411
体力
27007
威望
10
居住地
重庆市 永川市
发表于 2009-6-13 16:10:26 |显示全部楼层
哦,想起来了
楼主就是混淆AS的高人
PFPF
我的博客 http://space.flash8.net/space/?591172 AS2&AS3   ASP&PHP ACCESS&mySQL XML&JS
moondy 

叶飞雪

银牌会员 手机认证 

帖子
541
体力
1140
威望
3
居住地
广东省 深圳市
发表于 2009-6-13 17:32:11 |显示全部楼层
这样做有什么用吗

膝盖中箭

超级版主 手机认证 

帖子
3050
体力
13210
威望
76
发表于 2009-6-13 18:13:17 |显示全部楼层
AS1可以使用数字...
珍惜生命,远离IT
newlyj 楼主
帖子
337
体力
548
威望
8
发表于 2009-6-13 19:27:48 |显示全部楼层

回复 5# 321321321 的帖子

正解.
可以说无论用什么操作系统,都不能用数字做变量名的,如果那样的话编译器将无法区别普通数字和变量了.
当编译成swf后,变量名放在了Constant pool中的string块,数字放constant pool的前3个块:int,uint,double.当avm2去解析调用时,他们分属于不同区块,在这里变量名和数字不会有分不清的情况.
所以在这里,变量名只要和同一块的其他string不重复,可以改成任意字符.
混淆时把他们改成数字开头后接"乱码"破解后基本上没法看懂了,而且导出源文件后,无法正常再编译,还需要手动把所有名字的改成正常

我说的变量名通指包括方法名,类名等这些标识符.
ps:上次混淆as比较复杂,要考虑好多正则逻辑,而且也只能混私有字段.
如果混淆swf的话可以比较轻松的混淆所有自定的标识符,但是这些标识符和系统内部标识符(如:Sprite),普通字符串都混在一起,目前还无法区分他们 ,还需继续分析.. .
帖子
153
体力
336
威望
0
发表于 2009-6-13 19:49:33 |显示全部楼层
DoABC就是这种方法混淆的,但是貌似效果不太好,反射问题不大好解决

春叶飘零

高级会员

帖子
473
体力
864
威望
1
发表于 2009-6-13 22:56:11 |显示全部楼层
这种很难有通用的工具进行混淆

这就是为什么用SWF Encrypt工具混淆一些文件后,文件坏损的原因。

它也只是在 cpool里进行查询替换的,外加个内置方法变量名的排除.
我要威望....>
newlyj 楼主
帖子
337
体力
548
威望
8
发表于 2009-6-14 09:43:56 |显示全部楼层
初步分析完了constant pool,发现只能排除字符串,内部标识和自定标识还是无法区分 ,莫非也只能用排除法,还好能区分谁在谁的命名空间(主要是包)中,排除的话只要搜集全部内部包名以及顶级域的所有东西,工作量还算比较少.
继续研究后面的内容看有什么启发
帖子
153
体力
336
威望
0
发表于 2009-6-14 11:08:38 |显示全部楼层
系统包里的东西是完全可以排除的
但是如果代码里用到反射就没办法了
因为你把类、属性、方法的名字全换了
而反射是通过字符串来取的,而这些字符串却没有被替换
  1. function getClass(str:String):Class{
  2.     return getDefinitionByName("test."+str) as Class
  3. }
  4. trace(getClass("Test"));
复制代码

还有通过this[str]这种来取属性和方法的也不行
newlyj 楼主
帖子
337
体力
548
威望
8
发表于 2009-6-14 12:34:16 |显示全部楼层
楼上说的我也考虑过,初步判定可能要结合abc指令,先找到付给getDefinitionByName的参数index,然后将它一起改了.很麻烦了 .
至于this[ ]你就多虑了,里面的字符串会跟着变的.如果你这样
this["haha"];当你混淆haha属性为12时,它也会变this["12"].初步测试是这样的.
帖子
153
体力
336
威望
0
发表于 2009-6-14 14:17:02 |显示全部楼层
看来你还没明白,我想说的是一个是编译时一个运行时
编译时的字符串你可以取到没有问题,但是运行时是没办法的
getDefinitionByName("Test"+i);
mc["child"+id];
这时候如果你把mc["child12"]变成mc["12"],那个mc["child"+id]会跟着变吗?

而且就算你改字符串也不应该直接改cPool里面的,而是另外增加string然后修改multiname
因为cPool里面的字符串是所有地方都在用的,如果你随便改动
刚好有个textField.text="xxx",或者其他地方也用到这个字符串那就出错了
newlyj 楼主
帖子
337
体力
548
威望
8
发表于 2009-6-14 14:34:11 |显示全部楼层

回复 15# 321321321 的帖子

粗心了,忽略了表达式的写法 .
晚上再研究了...
newlyj 楼主
帖子
337
体力
548
威望
8
发表于 2009-6-14 21:08:07 |显示全部楼层
感谢321321321的提醒
可惜现在还不知道如何分清类名和方法属性名,如能分清,遇到里面有getDefinitionByName之类的东东,就别混类名了
至于this[表达式]只能判断abc指令后再想办法了
newlyj 楼主
帖子
337
体力
548
威望
8
发表于 2009-6-15 01:01:45 |显示全部楼层
多测了几个文件,内部类可以区分了,类名和方法属性名的区别应该在Trait块中,暂时还没分析到那里.
之前还有一个因素忘考虑了,swf为了节省空间,同样的标识符或字符串放在同一个地址,如果有个自定类用了和内部类同样的方法属性名那就不好了,这些同名标识符只能建立排除数据来排除不混淆他们了,这应该是比较轻松的.
帖子
11
体力
38
威望
0
发表于 2009-6-15 10:42:58 |显示全部楼层
= =
其实可以不用hack swf的strig pool用
unicode转码就可以了

另外 支持
增加string然后修改multiname
的做法

就算换StringPool
也应该分析 Trait块以后 只换该换的

[ 本帖最后由 blueshell2008 于 2009-6-15 11:23 编辑 ]
您需要登录后才可以回帖 登录 | 注册


Archiver|手机版|blueidea.com ( 京ICP备05002321号 )    

GMT+8, 2012-6-23 00:38 , Processed in 0.203263 second(s), 7 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部