Javascript流程混淆器JSCFO介绍

JSCFO当前版本号2.8。实现功能如下:
1、可同时对多个文件进行操作。
2、格式化代码。
3、合并文件。
4、变量名混淆(选择变量名混淆后会随机在if、for、while、dowhile中插入混淆用的判断)。
5、流程混淆。可选择打乱流程时进行分块的行数。(由于Javascript中没有goto,所以打乱代码后用for或while配合if或switch保证代码执行顺序。for或while和if或switch的配合有一定随机性,较难被找到规律。此功能会造成代码增大,不过没有办法)
6、字符串混淆。(目前方法较简单,后期考虑用压缩替代混淆)
7、数字混淆。(用数学表达式替代常数)
8、压缩。(简单的方法,Pack2的那种)
9、格式化和混淆时自动修正结尾没有加分号的情况。
10、修改正则表达式的写法,避免所有代码在同一行时发生错误。
界面如下:

试用版中ObfuscateOptions(混淆选项)不可设置,默认使用了变量混淆、流程混淆、字符串混淆、数字混淆;流程混淆时Lines(方块的行数)默认为1,压缩也不启用。Format Only(仅格式化)和Merge(合并)选项可自由设置。

使用方法:1、用File菜单下的Add和Remove菜单项增加删除文件。2、混淆选项可以不用选择,如果需要合并多个文件则钩选Merge,如果仅需要格式化代码请钩选Format Only。3、点击Obfuscate菜单下的Go进行混淆。如果Output Folder(输出目录)中有与源文件同名的文件,则在混淆后的文件名前加“Obfuscated_”。4、双击Files(文件列表)中的项可以在新窗口中显示所选择的JS文件格式化后的代码。

混淆前的代码:

var x = 0;
var z = false;

function Test()
{
    
for(var i=0; i<x; i++)
    {
        
if(z)
        {
            
var s = "Today's date is: ";
            
            
var d = new Date();
            s 
+= (d.getMonth() + 1+ "/";            //Get month
            s += d.getDate() + "/";                   //Get day
            s += d.getYear();

            alert(i
+ ":" + s);
        }
    }
}

= 10;
= true;
Test();

混淆后的代码(未压缩):

var $_A, x, z, $_E;
function Test()
{
    
for(var i = ((0x36 * 0x0+ 0x0); i < x; i++)
    {
        
if(z)
        {
            
var s, d, $_D;

            $_D 
= 0;
            
for(var $_D = 5; $_D >= 0; $_D--)
            {
                
if($_D == ((0x22 * 0x3- 0x66))
                {
                    alert((i 
+ $_A("%3B")) + s);
                }
                
if($_D == ((0x4f * 0x3- 0xec))
                {
                    s 
+= d.getYear();
                }
                
if($_D == ((0x3 * 0x3- 0x4))
                {
                    s 
= $_A("e%C3%D3%C5%DA%A0%9A%93%84%C5%D5%D9%85%89%DC%ADZ");
                }
                
if($_D == ((0x42 * 0x7- 0x1cc))
                {
                    s 
+= (d.getDate() + $_A("0"));
                }
                
if($_D == ((0x26 * 0x2- 0x49))
                {
                    s 
+= ((d.getMonth() + ((0x8 * 0x2- 0xf)) + $_A("0"));
                }
                
if($_D == ((0x1d * 0x7- 0xc7))
                {
                    d 
= new Date();
                }
            }
        }
    }
}
$_A 
= function ($_B)
{
    
var $_C;
    $_B 
= unescape($_B);
    $_C 
= String.fromCharCode($_B.charCodeAt(0- $_B.length);
    
for(var i = 1; i < $_B.length; i++)
    {
        $_C 
+= String.fromCharCode($_B.charCodeAt(i) - $_C.charCodeAt(i - 1));
    }
    
return $_C;
};

$_E 
= 5;
while($_E > 0)
{
    $_E
--;
    
if($_E == ((0x3a * 0x7- 0x193))
    {
        z 
= false;
    }
    
if($_E == ((0x30 * 0x0+ 0x1))
    {
        z 
= true;
    }
    
if($_E == ((0x0 * 0x2+ 0x0))
    {
        Test();
    }
    
if($_E == ((0x1e * 0x3- 0x56))
    {
        x 
= ((0x27 * 0x5- 0xc3);
    }
    
if($_E == ((0x26 * 0x2- 0x4a))
    {
        x 
= ((0x55 * 0x1- 0x4b);
    }
}

压缩后的代码如下:

eval(function(e,d){e=e.replace(new RegExp('\\b\\w+\\b','g'), function($0){return d[$0]});return e;}('0 $1=2($3){$3=4($3);0 $5=6.7($3.8(9)-$3.10);11(0 12=13;12<$3.10;12++){$5+= 6.7($3.8(12)-$5.8(12-13));}14 $5;};0 $15,$16;2 17(){11(0 12 = (18*19-20);(12 < $15) && !(21.$22>23);12++){24($16){0 $25,$26;$25 = $1(\"27%28%29%30%31%32%33%34%35%30%36%37%38%39%40%41\");$26 = 42 43();$25 += (($26.44() + (45*18-46)) + $1(\"9\"));$25 += ($26.47() + $1(\"9\"));$25 += $26.48();49(((12 + $1(\"%50\")) + $25));}}}$15 = (51*52-53);$16 = 54;$15=(55*18-56);$16=57;17();''var|_A|function|_B|unescape|_C|String|fromCharCode|charCodeAt|0|length|for|i|1|return|_D|_E|Test|0x2|0x4|0x8|this|_F|2|if|_G|_H|e|C3|D3|C5|DA|A0|9A|93|84|D5|D9|85|89|DC|ADZ|new|Date|getMonth|0x4b|0x95|getDate|getYear|alert|3B|0x52|0x3|0xf6|false|0x12|0x1a|true'.split('|')));

目前的流程混淆利用while或for配合if或switch控制打乱后代码的正常执行顺序,希望有朋友能提出更好的建议。字符串的加密也让人感到头疼。
混淆后的代码较原有代码增大不少,主要原因是针对每一行代码都进行了打乱并且没有进行压缩处理。进行压缩处理之后,还是可以接受的。

后期目标如下:
1、支持包含<Script language="javascript"></script>标记的文件。(暂定为此标记)
2、用压缩算法替代现在那个简单的字符串混淆方法。
3、尝试寻找新的流程混淆方法。
4、考虑是否加入函数名混淆。(个人目前认为函数名混淆的意义不大)
5、加入混淆排除选项。
6、考察是否有更高效的压缩算法,以替代Pack2目前的方法。

PS:
之前版本有用Themida加壳,发现很多朋友用ESET,故不用Themida,已更新。请想试用的朋友放心,绝无病毒。
至于有人说我不放源码的问题,这个似乎没有规定吧。我这个还只是给大家试用,并没有说要收钱干啥的。所以对源码有意见的请自己保留吧
准备开始新版本的工作,旧版本暂停下载。

posted @ 2008-04-23 03:20 陈鹏(偶是坏人) 阅读(1995) 评论(21)  编辑 收藏 网摘 所属分类: JavaScript代码保护

  回复  引用    
#1楼2008-04-23 08:15 | checkit[未注册用户]
文件 http://files.cnblogs.com/cp800614/jscfo.rar
可能是 Win32/Packed.Themida 应用程序 的变种
连接中断 - 已隔离

  回复  引用  查看    
#2楼2008-04-23 08:17 | 李战      
http://www.cnblogs.com/Emoticons/yoyocici/223852199.gif" alt="" />路过,学习
  回复  引用  查看    
#3楼[楼主]2008-04-23 08:19 | 陈鹏      
1楼老兄的杀软果然强悍。不知你用的是什么杀软?我自己用红伞都不报。
我是用Themida壳了一回。

  回复  引用    
#4楼2008-04-23 08:37 | 鄙视楼主[未注册用户]
有病毒
  回复  引用  查看    
#5楼2008-04-23 08:38 | 萧寒      
ESET Smart Security 报;
2008-4-23 8:35:54 HTTP 过滤器 文件 http://files.cnblogs.com/cp800614/jscfo.rar" target="_new">http://files.cnblogs.com/cp800614/jscfo.rar 可能是 Win32/Packed.Themida 应用程序 的变种 连接中断 - 已隔离 SADFOJE01203903\Administrator 通过应用程序访问 web 时检测到威胁: C:\Program Files\Internet Explorer\iexplore.exe.

  回复  引用  查看    
#6楼2008-04-23 08:41 | good man      
学习,支持
  回复  引用    
#7楼2008-04-23 08:49 | 鄙视楼主[未注册用户]
没有源码还上首页,下去吧,无耻!
  回复  引用  查看    
#8楼2008-04-23 09:12 | 阿牛 - 专注OOP      
--引用--------------------------------------------------
鄙视楼主: 没有源码还上首页,下去吧,无耻!
--------------------------------------------------------
说得对.

  回复  引用  查看    
#9楼[楼主]2008-04-23 09:44 | 陈鹏      
我好像没说发布源码,也没说不发布源码。希望人帮我测试一下也不行吗?
不见得这年头什么都只有发了源码才能给人看吧?

  回复  引用  查看    
#10楼2008-04-23 09:56 | Jeffrey Zhao      
@陈鹏
支持你,不用理某些人。

  回复  引用  查看    
#11楼2008-04-23 10:16 | 杨正祎(阿一)      
@陈鹏
我赞同楼主对开源的说法,自己的劳动,自己决定没有错。

但是希望楼主能对报毒进行回答。谢谢。

  回复  引用  查看    
#12楼2008-04-23 10:24 | dangjian      
@陈鹏
支持,我试用后,效果好极了。

  回复  引用  查看    
#13楼2008-04-23 10:44 | C#学习路      
效果一般,用下心,很快就能排除干扰
  回复  引用  查看    
#14楼2008-04-23 11:50 | Beginor      
还是用rhino保险
  回复  引用  查看    
#15楼[楼主]2008-04-23 11:56 | 陈鹏      
@杨正祎(阿一)
我说了。之前是因为Themida加壳的问题,导致一些铭感的杀毒软件报毒。我已经去掉了。所以不会有这样的问题了。

@C#学习路
不知老兄是如和很快排除干扰的?能否说一下,我会努力改进。谢谢。
其实任何混淆,只要用心,都可以还原,希望和你探讨一下你是如何还原的。

  回复  引用  查看    
#16楼2008-04-23 12:49 | 留恋星空      
支持
  回复  引用  查看    
#17楼2008-04-23 13:55 | 镜涛      
呵呵,代码的问题属于个人意向,支持搂主!
  回复  引用  查看    
#18楼2008-04-23 21:09 | 平常心成大事      
哎呀,还是开源的好了!
  回复  引用  查看    
#19楼2008-04-23 22:50 | peace      
顶哈了
  回复  引用  查看    
#20楼[楼主]2008-04-24 01:28 | 陈鹏      
准备开始新版本,暂停下载。
已下载试用的朋友如果发生错误,麻烦通知一声,以便我尽快修改。
谢谢。

  回复  引用  查看    
#21楼2009-05-19 20:15 | 爱在戏院前      
能不能发旧版本的发一份给我试用?
谢谢了
我的email是hh13774978@126.com




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1166628




相关文章:

相关链接: