前言

最近整了一个MRP下载站点直达,但是,对于应用这东西总该有图标吧。搞了几张冒泡V5图标,加密(压缩?)了,没找到解码方法临时放弃;过几天,群成员@无尽时空发了一些图标,是他一个个用软件处理的(在此感谢)。我突然想到可不可以反编译处理软件,来获取处理逻辑,实际实践可行,于是记录。

相关软件

处理图片的软件MRP编辑器(由Space大佬于2011年编写的1.7.6.3版本)

用到的编译软件是我前段时间无意中发现的dnSpy ,并且这玩意儿是开源的

「渗透分析」冒泡V5图标解密逻辑获取过程插图

反编译效果:

「渗透分析」冒泡V5图标解密逻辑获取过程插图1

感觉真不错的 #(真棒) #(受虐滑稽) 。

重点来了 #(太开心)

  • 那….那反编译后的代码这么多,这么找到想要的部分呢?
  • 哈,我想到了!这个图片的头部一定是特殊的(别问我为什么。。)

    使用MiniHex 查看图片文件,发现前四个字节是固定SKBM

    「渗透分析」冒泡V5图标解密逻辑获取过程插图2

    于是在dnSpy 中搜索SKBM

    「渗透分析」冒泡V5图标解密逻辑获取过程插图3

    没结果 #(疑问) 一定是我的搜索方式不对。。 #(受虐滑稽)

    「渗透分析」冒泡V5图标解密逻辑获取过程插图4

    更改搜索类型为 数字/字符串 GET!!

    代码分析(直接贴注释了):

    「渗透分析」冒泡V5图标解密逻辑获取过程插图5

    63行分配内存,并且填入部分数据,在77行之后又销毁了,因此中间应该对图像进行处理,

    而明显69行处理的关键部分,于是转到定义:

    「渗透分析」冒泡V5图标解密逻辑获取过程插图6

    观察不难发现,18行创建了一个bitmap变量,对其进行一系列处理后塞给了pctMrp.Image

    基本上可以确定是解密部分了。

    编写PHP代码(这玩意儿简单,而且电脑上正好有环境 #(cos滑稽) )

    说实话这就是翻译的事儿。。。没什么挑战性。。

    <?php
    
    /**
     * 冒泡V5图标解密代码
     * 
     * 移植于:2020年3月5日15点35分
     * 移植者:Eswink
     * 
     * @description: 处理过程源代码来自于反编译后的  MRP编辑器1.7.6.3(由space编写)
     * 
     * 通过本次编写,我意识到,斯凯处理图片有两种方式:
     * 1.游戏图标加密(不可直接解密,需要手动调整图片宽度与高度)
     * 2.冒泡V5图标加密(可直接解密)
     * 
     */
    
    // 获取冒泡V5图片
    $file = file_get_contents('test/icon/9JKK.ico');
    // 获取图片高度值
    $width = hexdec(bin2hex(substr($file, 4, 1)));  //"40"
    // 获取图片宽度值
    $height = hexdec(bin2hex(substr($file, 6, 1)));  //""
    
    // 似乎没什么用处,但似乎又有用处???
    $newImg = substr($file, 8, strlen($file) - 8);
    // 处理图片
    $ret = WidthChange($newImg, $width, $height, false);
    // 保存图片到路径
    imagebmp($ret, 'test/icon/1.bmp');
    
    
    function WidthChange($file, $width, $height, $IsSPR)
    {
        $num = strlen($file) / 2 / $width;
        $height = $num;
    
        $newImg = imagecreatetruecolor($width, $height); //创建画布
        imagesavealpha($newImg, true); //背景透明
        $background = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
        imagefill($newImg, 0, 0, $background); //背景透明
    
        // 处理图片
        $num2 = 1;
        if ($IsSPR) {
            $num2 = 0;
        }
        $num3 = 0;
        $num4 = $height - 1;
        $num5 = $num3;
        for (;;) {
            $num6 = $num5;
            $num7 = $num4;
            if ($num6 > $num7) {
                break;
            }
            $num8 = 0;
            $num9 = $width - 1;
            $num10 = $num8;
            for (;;) {
                $num11 = $num10;
                $num7 = $num9;
                if ($num11 > $num7) {
                    break;
                }
                $num12 = ($num5 * $width + $num10) * 2;
                // $b = Bytes[$num12 + $num2];
                $b = hexdec(bin2hex(substr($file, $num12 + $num2, 1)));
                // $b2 = Bytes[$num12 + 1 - $num2];
                $b2 = hexdec(bin2hex(substr($file, $num12 + 1 - $num2, 1)));
    
                // 计算RGB
                $red = $b - $b % 8;
                $green = $b % 8 * 32 + $b2 / 32 * 4;
                $blue = $b2 % 32 * 8;
                // 根据RGBA生成颜色值
                $color = imagecolorallocatealpha($newImg, $red, $green, $blue, 0);
                // 将颜色值填充进画布
                imagesetpixel($newImg, $num10, $num5, $color);
                $num10++;
            }
            $num5++;
        }
        return $newImg;
    }
    

    运行,文件生成成功

    接下来就可以批量处理图片了 #(太开心)


    ESWINK , 版权所有丨如未注明 , 均为原创

    原文标题:「渗透分析」冒泡V5图标解密逻辑获取过程

    Eswink原创声明