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

趣味文件加密

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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (10)
雪    币: 6533
活跃值: (4331)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
2
有点简单,这加密不如对称加密坚固。
撸了一份源码。
楼主这个文件名长一点就溢出了。
最后于 2019-11-27 12:40 被yimingqpa编辑 ,原因:
上传的附件:
2019-11-27 12:36
0
雪    币: 7065
活跃值: (3106)
能力值: ( LV4,RANK:52 )
在线值:
发帖
回帖
粉丝
3
个人经验来看,,不难,,
2019-11-27 13:47
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
@yimingqpa   我试了文件名100字节也没见到溢出?
2019-11-27 15:34
0
雪    币: 6533
活跃值: (4331)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
5
sjdkx @yimingqpa 我试了文件名100字节也没见到溢出?
不是,里面算key的地方.
\ 最后位置 + 文件名内容 * 内容 累加,感觉会超过int范围的样子。 
2019-11-27 15:41
0
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
楼上,那是模运算不会溢出的。且也是对称加密。能破解才怪。
2019-11-27 15:57
0
雪    币: 211
活跃值: (526)
能力值: ( LV9,RANK:172 )
在线值:
发帖
回帖
粉丝
7
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')

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