前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【问题解决】破译黑客加密:场景模拟还原数据的完整过程

【问题解决】破译黑客加密:场景模拟还原数据的完整过程

作者头像
sidiot
发布2024-11-04 09:37:50
600
发布2024-11-04 09:37:50
举报
文章被收录于专栏:技术大杂烩

严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。

背景

请选⼿获取当前的系统的权限后分析⽂件共享服务器,还原被⿊客加密的客⼾实名信息数据,并将还原数据中⽣⽇为:11⽉2号,姓名为:严旭的身份证号码作为答案提交。

  1. 通过弱口令登录到文件共享服务器的后台。
  2. 上传一句话木马 <?php @eval($_POST[2]);?> 获取到当前的系统权限。
  3. 发现在 C:/Users/Administrator/Downloads/ 目录下存在 FileEnc.exe 程序,猜测是黑客用来加密数据的程序。
  4. 同时在 C:/phpstudy_pro/WWW/files/real name information/ 目录下发现被加密的文件。
d0.png
d0.png

逆向加密程序

浅浅尝试一下这个加密程序,发现 -E 可以进行加密,-D 可以进行解密。

e1.png
e1.png

以加密 hacker.jpg 文件为例,在实现 .\FileEnc.exe -E -I .\in\ -O .\out\ 指令后,发现 in 目录下多出了两个加密过程文件:

代码语言:javascript
复制
hacker.jpg
hacker.jpg.tmp1
hacker.jpg.tmp2

同时,out 目录下会生成一个加密后的文件 hacker.jpg.02,但经过对比发现,hacker.jpg.tmp2hacker.jpg.02 是同一个文件。

e0.png
e0.png

但当我们通过 -D 指令实现解密时,发现被没有对文件进行解密,话不多说,直接根据已知的信息找到两个解密函数:

e5.png
e5.png
e4.png
e4.png

发现它们并没有实现解密,因此接下来我们需要根据加密函数逆推解密。

先来分析加密函数 byte_add_num 函数,它的作用就是在原先的数值基础上再加114:

e3.png
e3.png

再分析 enExchangeBte 函数,将文件二进制流中的两两字节进行互换,即 ab 换成 ba,同时对于奇数长度的文件,会对最后一个字节进行特殊处理:

e2.png
e2.png

最终编写解密脚本:

代码语言:javascript
复制
import os

def decode_img(input_dir, output_dir):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    for name in os.listdir(input_dir):
        with open(f"{input_dir}/{name}", "rb") as f:
            file = f.read()

        temp1 = [(byte - 114) % 256 for byte in file]
        if len(temp1) % 2 == 0:
            temp1[::2], temp1[1::2] = temp1[1::2], temp1[::2]
        else:
            temp1[0:-1:2], temp1[1:-1:2] = temp1[1:-1:2], temp1[0:-1:2]

        with open(f"{output_dir}/{name[:-3]}", "wb") as f:
            f.write(bytearray(temp1))

运行结果:

d1.png
d1.png

虽然我们成功解密了数据,但是还有一个问题,这里有四千个身份证信息图片,如果我们用眼睛一个一个去筛查,那直接老眼昏花,因此需要编写一个 OCR 脚本。

OCR 身份信息

由于需要识别的信息比较常规,因此使用 tesseract 足矣,编写脚步如下所示:

代码语言:javascript
复制
def process_image(file, bar):
    try:
        image = Image.open(file).convert("L")

        enhancer = ImageEnhance.Contrast(image)
        image = enhancer.enhance(2)

        image = image.point(lambda x: 0 if x < 140 else 255)

        text = pytesseract.image_to_string(image, lang='chi_sim')

        if "严旭" in text:
            tqdm.write(f"\nFile: {os.path.basename(file)}")
            tqdm.write(text)

        image.close()

    except Exception as e:
        tqdm.write(f"Error processing {file}: {e}")

    finally:
        bar.update(1)

上述代码主要是将图片转为灰度图,然后增强对比度,再进行二值化处理,最后使用 tesseract 识别图中的信息。

这里由于目标识别数量较多,因此使用 tqdm 来实现进度条统计,同时,可以显著加速任务执行。使用 ThreadPoolExecutor 实现并发处理,可以显著加速任务执行。

代码如下所示:

代码语言:javascript
复制
if __name__ == '__main__':
    decode_dir = "decode"
    files = [os.path.join(decode_dir, file) for file in os.listdir(decode_dir)]

    with tqdm(total=len(files), desc="Processing images") as progress_bar:
        with ThreadPoolExecutor() as executor:
            for file in files:
                executor.submit(process_image, file, progress_bar)

运行结果:

r1.png
r1.png

最终根据图片 ID 找到这张身份证(注意识别身份信息为模拟数据):

r2.png
r2.png

后记

以上就是 破译黑客加密:场景模拟还原数据的完整过程 的所有内容了,希望本篇博文对大家有所帮助!欢迎大家持续关注我的博客,一起分享学习和成长的乐趣!✨

严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 逆向加密程序
  • OCR 身份信息
  • 后记
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档