Posted on

CString::MakeLower(),微软想的啥?

         最近打算把MDecoder迁移到VS2005上,修改了greta的几个地方后终于编译过去了。运行的时候还是有些莫名的错误,比如:“An invalid argument was encountered”,发现是在CString::MakeLower()这个函数里抛的异常,一路跟下去,在

errno_t __cdecl _mbslwr_s_l(
        unsigned char *string,
        size_t sizeInBytes,
        _locale_t plocinfo
        )

有这么一段:

        for (cp = string, dst = string; *cp != NULL; ++cp)
        {
            if (_ismbblead_l(*cp, _loc_update.GetLocaleT()))
            {
 
                int retval;
                unsigned char ret[4];
                if ((retval = __crtLCMapStringA(
                                _loc_update.GetLocaleT(),
                                _loc_update.GetLocaleT()->mbcinfo->mblcid,
                                LCMAP_LOWERCASE,
                                (const char *)cp,
                                2,
                                (char *)ret,
                                2,
                                _loc_update.GetLocaleT()->mbcinfo->mbcodepage,
                                TRUE )) == 0 )
                {
                    errno = EILSEQ;
                    _RESET_STRING(string, sizeInBytes);
                    return errno;
                }

,当碰到字符0x247时就会返回errno = EILSEQ,然后在ATLMFC_CRT_ERRORCHECK(::_mbslwr_s(_Str, _SizeInChars));里面就抛了个异常出来。OMG,我只是个菜鸟,微软何必这么折磨我呢?我看不懂上面的啥__crtLCMapStringA,我也不想看。

         拿关键字:MakeLower() EILSEQ 去google,在这个链接里微软的人这么说:This issue is actually by design.这个问题就是这么设计的。

         我靠,这么设计的???!!!

         我只不过我要把字母都转成小写的而已,你抛个异常干毛啊?把能转成小写的转成小写的得了。汗,猜不透微软咋想的。可有大牛路过的给个指点?或许我可以用别的方法解决转换为小写的问题,可是指不定别的地方又冒出这种异常来,这不搞死我么。

Posted on

MDecoder V0.2

懒惰了N久后,更新鸟,改用VC写,^_^,以下是更新说明:
         1,增强解密功能。增加对base62,htmlship,MSsrenc等的解密,不过一般应该不用关心这个,使用默认的AUTO就可以解密大部分网马了。
         2,增加自动模式。使用MDecoder.exe -auto来进入自动解密模式。输入命令似乎有点麻烦,不过我想不出在哪里添加界面了,建议经常使用这种模式的人添加一个快捷方式吧,里面带上参数。
         3,关于页面里增加检查更新的功能。最近老改,BUG和新想法层出不穷,指不定哪天就更新了,为了方便,增加了检查更新的功能。
        4,模仿Freshow增加了替换和翻转的选项,还有HEX解密时输入KEY。不过似乎一般不用输入KEY,AUTO解密的时候我会暴力查找KEY并解密。
        5,其他的零碎:wdomain.ini中有过滤链接时会去掉的域名,你可以在里面自己添加删减,每行一个域名就可以了。自动解密模式会自动丢弃重复的链接。

下载地址:http://mtian.org/down/MDecoder.zip

后续计划:
         这个只是我个人业余时间写的小东西,恩,还有许多打算做而没有做的事,比如AUTO模式中线程的限制,目前是有多少发多少线程的。还有配置文件啊,打算将解密的一些参数放配置文件里。解密功能还得继续增强,一些网马分多文件,需要要拼起来解密的,目前就是一个文件按一个文件看的,那个暴力提取shellcode只能暂时挡一挡需求。不过这种MDecoder的静态解密似乎不能从根本上解决问题,网马终究是给浏览器的HTML页面(呃,或者flash,pdf等),所以有空的话,研究下firefox和chrome的源码也是有必要的。呃,这些都是想法,想法而已,我并不承诺以后一定会做的。

感谢:
        感谢glacier_lk对我一如既往的支持。
        感谢SJF帮我改BUG,初学VC,总是有各种菜菜的问题,o(∩_∩)o…哈哈。
       感谢所有即将使用这个小东东的同学,你们才是我最终的动力(我靠,我真会说话)。

截图:
base62解密(这种压缩算法的官方似乎就是这么命名的):

base62
base62

htmlship解密(我瞎起的名):

htmlship
htmlship

MSsrcenc解密(我瞎起的名,too):

MSscrenc
MSscrenc

vbs_char解密(呃,名字同上):

vbs_char
vbs_char

暴力提取shellcode解密,包含在自动解密中,如其名,很暴力,效率低,而且我不能保证他的准确性,但有些时候还需要他,哈哈:

暴力提取shellcode
暴力提取shellcode

最后是一张自动解密的图:

自动解密
自动解密