首页
社区
课程
招聘
趣味文件加密
2019-11-26 21:53 9899

趣味文件加密

2019-11-26 21:53
9899
  本程序异常简单,异常强大。欢迎使用。
  不用输入密码,程序从文件名获得密码,加密后只要改动文件名则密文名就被隐藏了,解密时将文件名复原就可以进行解密操作了。
  程序用的是流密码加密。得到密码后计算出种子然后用随机函数值加密或解密。
  程序虽然简单却是非常牢固的,欢迎牛人破解。
  对于极其机密的东西,你可以多次加密,甚至换名加密,但次序要记忆清楚,和堆栈类似,是最先加密的最后解密,最后加密的最先解密。
  一遍加密尚无人可破解,别说多次了。能破解的东西都是加密方式自身有缺陷,破解就像捡了个漏。

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (10)
雪    币: 5850
活跃值: (3655)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
yimingqpa 1 2019-11-27 12:36
2
0
有点简单,这加密不如对称加密坚固。
撸了一份源码。
楼主这个文件名长一点就溢出了。
最后于 2019-11-27 12:40 被yimingqpa编辑 ,原因:
上传的附件:
雪    币: 6680
活跃值: (2591)
能力值: ( LV4,RANK:52 )
在线值:
发帖
回帖
粉丝
不对 2019-11-27 13:47
3
0
个人经验来看,,不难,,
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2019-11-27 15:34
4
0
@yimingqpa   我试了文件名100字节也没见到溢出?
雪    币: 5850
活跃值: (3655)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
yimingqpa 1 2019-11-27 15:41
5
0
sjdkx @yimingqpa 我试了文件名100字节也没见到溢出?
不是,里面算key的地方.
\ 最后位置 + 文件名内容 * 内容 累加,感觉会超过int范围的样子。 
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2019-11-27 15:57
6
0
楼上,那是模运算不会溢出的。且也是对称加密。能破解才怪。
雪    币: 211
活跃值: (511)
能力值: ( LV9,RANK:172 )
在线值:
发帖
回帖
粉丝
vmtest 2019-11-27 16:44
7
0
mac电脑没有windows环境,  拿ida看了一下msvcrt里面的srand, rand。 循环到 0x22234 就出来了。  2**32的空间也不大,能接受,换成c实现更快。附件是要解密的密文。  楼主啊,能去研究真正的技术吗,整天随机随机随机,真无聊。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import chardet
import struct

dword_424A30 = 0

def msvcrt_srand(x):
    global dword_424A30
    dword_424A30 = x

    # return msvcrt.srand(x)


def msvcrt_rand():
    global dword_424A30
    dword_424A30 = 214013 * dword_424A30 + 2531011
    return (dword_424A30 >> 16) & 0x7FFF

    # return msvcrt.rand()


if __name__ == '__main__':
    with open('./baidu.com.html', 'rb') as f:
        bin = f.read()
        check_len = 128 if len(bin) > 128 else len(bin)

        for i in range(2 ** 32):
            # i = 0x22234
            msvcrt_srand(i)

            text = []
            for b in bin[0:check_len]:
                b0 = msvcrt_rand() & 0xff
                b1 = i & 0xff
                text.append(struct.pack('B', 0xff & (b - b1 - b0)))

            plaintext = b''.join(text)
            ret = chardet.detect(plaintext)

            if ret['confidence'] > 0.9:
                if ret['encoding'] in ['GBK', 'GB2312', 'utf-8', 'ascii']:
                    print(i, plaintext)
                    break

    print('end')

上传的附件:
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2019-11-27 17:01
8
0
你以为 “循环到 0x22234 就出来了”,用rand() 加密并不是直接用其数值做密钥,通常要乘一个系数,并加一个系数,不要自以为是,没有那么简单的现实。
这种简单的加密都没法破解,使其复杂化的东西多了,都还没用呢。
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2019-12-23 11:08
9
0
这也不比加解密时输个口令好用吧?
安全效果完全一致
雪    币: 224
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zzt12 2020-3-14 11:42
10
0
比输入口令的安全一点点,防肩窥和键盘记录器,重点是适合装*
雪    币: 0
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
walker苏 2020-3-17 14:42
11
0
伪随机数是真的不安全,已知明文攻击和选择明文攻击随便就把你的核心密钥求出来了。。。
游客
登录 | 注册 方可回帖
返回