最近想把某flash游戏的1代和2代下载下来玩,但是都有域名验证,于是只好搬出decompiler
1代没有加密,结果是这么判断的
if(_url.indexOf("http://") != -1){
// ok
}else{
// error
}
当然直接爆破就好了
2代加了密,而且好像是swfencypt的模式,一开始是想放弃了,但是一想其实那个swfencrypt只是插了段恶心的tag,代码其实没有变,所以想碰碰运气
于是接着看1代的raw code,如下
//96 0e 00 08 00 07 01 00 00 00 08 01 07 0f 00 00 00
_push "http://" 1 "" 15
//22
_getProperty
//96 02 00 08 02
_push "indexOf"
//52
_callMethod
//96 05 00 07 ff ff ff ff
_push 4294967295
//49
_equals2
//12
_not
//4c
_dup
//12
_not
//9d 02 00 23 00
_if true goto #21
原来得到_url是靠压一个0f进栈,然后调22
然后拿ue去2代的swf里搜0f 00 00 00 22,只有一处,我晕,然后往后看,很多都和1代代码相似,只是'indexOf'的位置不一样,所以push的值也有少许区别。
由于判断的是!=,所以一般会有个not,结果不远处果然有个 12 9d, 然后把12改成01。
然后竟然就能玩了。。。
感想是:
1.swfencrypt的加密某种方面来说还是很弱
2.写代码时注意安全才是最重要的 -- 但是给程序员带来了而外的麻烦。。。
3.今天运气不错~~
1代没有加密,结果是这么判断的
if(_url.indexOf("http://") != -1){
// ok
}else{
// error
}
当然直接爆破就好了
2代加了密,而且好像是swfencypt的模式,一开始是想放弃了,但是一想其实那个swfencrypt只是插了段恶心的tag,代码其实没有变,所以想碰碰运气
于是接着看1代的raw code,如下
//96 0e 00 08 00 07 01 00 00 00 08 01 07 0f 00 00 00
_push "http://" 1 "" 15
//22
_getProperty
//96 02 00 08 02
_push "indexOf"
//52
_callMethod
//96 05 00 07 ff ff ff ff
_push 4294967295
//49
_equals2
//12
_not
//4c
_dup
//12
_not
//9d 02 00 23 00
_if true goto #21
原来得到_url是靠压一个0f进栈,然后调22
然后拿ue去2代的swf里搜0f 00 00 00 22,只有一处,我晕,然后往后看,很多都和1代代码相似,只是'indexOf'的位置不一样,所以push的值也有少许区别。
由于判断的是!=,所以一般会有个not,结果不远处果然有个 12 9d, 然后把12改成01。
然后竟然就能玩了。。。
感想是:
1.swfencrypt的加密某种方面来说还是很弱
2.写代码时注意安全才是最重要的 -- 但是给程序员带来了而外的麻烦。。。
3.今天运气不错~~
Comments