[MRP记录]冒泡V5图标解密逻辑获取过程 | 祭夜の咖啡馆
  • 公告

[MRP记录]冒泡V5图标解密逻辑获取过程

MRP 祭夜の咖啡馆 4周前 (03-08) 75次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

前言

最近整了一个MRP下载站点直达

但是,对于应用这东西总该有图标吧。。

搞了几张冒泡V5图标,加密(压缩?)了,没找到解码方法临时放弃;

过几天,群成员@无尽时空☆发了一些图标,是他一个个用软件处理的(在此感谢)。

我突然想到可不可以反编译处理软件,来获取处理逻辑,实际实践可行,于是记录。

相关软件

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

[MRP记录]冒泡V5图标解密逻辑获取过程

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

dnSpy

反编译效果:

[MRP记录]冒泡V5图标解密逻辑获取过程

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

重点来了 #(太开心)

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

[MRP记录]冒泡V5图标解密逻辑获取过程

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

于是在dnSpy 中搜索SKBM

[MRP记录]冒泡V5图标解密逻辑获取过程

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

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

[MRP记录]冒泡V5图标解密逻辑获取过程

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

[MRP记录]冒泡V5图标解密逻辑获取过程

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

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

[MRP记录]冒泡V5图标解密逻辑获取过程

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

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

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

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

<?php

/**
 * 冒泡V5图标解密代码
 * 
 * 移植于:2020年3月5日15点35分
 * 移植者:祭夜
 * 
 * @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;
}

运行,文件生成成功
[MRP记录]冒泡V5图标解密逻辑获取过程

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

 

完— #(真棒)


祭夜の咖啡馆 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:[MRP记录]冒泡V5图标解密逻辑获取过程
喜欢 (0)
[1690127128@qq.com]
分享 (0)
发表我的评论
取消评论
OwO表情
贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址