免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3463 | 回复: 9
打印 上一主题 下一主题

[算法] 懂DES算法的大神请进(C语言版) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-04-12 12:20 |只看该作者 |倒序浏览
最近在捣鼓一个东西,网上搜到了核心部分的加密算法代码,无奈才疏学浅,对加密这一块一点都不了解,该部分C代码完全懵逼。不知社区是否有对DES加密熟悉的不?还望指教。


代码如下:
while(len)
        {for(i=0;i<3;i++)
                {eax = *((int*)(pCodeNow + 0x44));
                 ebx=*((int*)(pDataNow));
                 num = eax^ebx;
                 numold = *((int*)(pDataNow + 0x4));
                 for(j=0x40;j>0;j=j-4)
                        {ebx = (num & 0xff0000) >> 16;
                         eax = *((int*)(pCodeNow + ebx * 4 + 0x44);
                         ebx = num >> 24;
                         eax += *((int*)(pCodeNow + ebx * 4 + 0x4);
                         ebx = (num & 0xff00) >> 8;
                         eax ^= *((int*)(pCodeNow + ebx * 4 + 0x84);
                         ebx = num & 0xff;
                         eax += *((int*)(pCodeNow + ebx * 4 + 0xC4);
                         eax ^= *((int*)(pCodeNow + j));
                         ebx = num;
                         num = numold^eax;
                         numold = ebx;
                        }
                 numold ^= *((int*)pCodeNow);
                 pInt = (unsigned int*)pDataNow;
                 *pInt = numold;
                 pInt = (unsigned int*)(pDataNow+4);
                 *pInt = num;
                 pDataNow = pDataNow + 8;
                }
         pDataNow = pDataNow + 5;
         len--;

        }


其原帖中说明如下:

1、加密文件中,每条记录29字节,前24字节是加密的,后5字节未加密,因为他用的加密算法是固定64位,一次加密8字节

2、解密过程汇编代码很长,但仔细分析后可以转换为16次循环,64位对称加密,16次循环,呵呵,DES嘛。


请问:

1.pCodeNow和pDataNow分别为何种数据类型?char *?char []?或者其它?

2.pCodeNow和pDataNow从何处获得其值?

3.解密后的数据是哪些变量?


论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2017-04-12 14:34 |只看该作者
回复 1# titansword2000

应用密码学:协议、算法与C源程序(原书第2版)
您要是把
第12章 数据加密标准
看完了,估计也就看懂代码了
这种前不着村后不着店的代码谁来分析?

论坛徽章:
0
3 [报告]
发表于 2017-04-12 15:57 |只看该作者
回复 2# lxyscls

这就是解密的核心部分啊。我现在只想知道pCodeNow和pDataNow这两个变量的数据类型,以及它们的赋值是如何取得即可,其它不用管啊

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
4 [报告]
发表于 2017-04-12 16:31 |只看该作者
打眼一看貌似pCodeNow从0x44开始是密钥,pDataNow数据,解密之前是秘闻,解完了变明文。
每个记录29个字节,前24个字节是分组加密的,每个分组8个字节共3个分组,后5个字节没有加密不知道是什么东西。
因为整段程序没有写pCodeNow,也没有长得像v0的东西,所以我猜就是简单的ECB方式。
具体怎么加密解密的这段程序看不出来,但没有看到DES的S-box。

评分

参与人数 1信誉积分 +10 收起 理由
lxyscls + 10 猫哥,有什么是你不会的吗?!

查看全部评分

论坛徽章:
0
5 [报告]
发表于 2017-04-12 16:38 |只看该作者
windoze 发表于 2017-04-12 16:31
打眼一看貌似pCodeNow从0x44开始是密钥,pDataNow数据,解密之前是秘闻,解完了变明文。
每个记录29个字节 ...

就是这个意思,对加密的数据进行解密,解密后变成明文。
“每个记录29个字节,前24个字节是分组加密的,每个分组8个字节共3个分组,后5个字节没有加密不知道是什么东西。”这个很对。我也是不知道pCodeNow是何种数据类型,并且它是如何被赋值也不清楚,所以弄清楚帖子里提到的3个问题,该核心代码就可以放到我的程序中了。

论坛徽章:
0
6 [报告]
发表于 2017-04-12 16:51 |只看该作者
E:\QQ图片20170412165021.png
截图为原帖中的代码,未做任何改动。

QQ图片20170412165021.png (10.91 KB, 下载次数: 139)

QQ图片20170412165021.png

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
7 [报告]
发表于 2017-04-12 17:23 |只看该作者
回复 5# titansword2000

这他娘的怎么可能知道啊……这个问题不适合这个论坛,你得找上帝……
PS. 我猜楼主是想破解什么东西,从29个字节一个记录来看十有八九是网络相关的东西,再加上这个小白问题,我赌你是想做网游外挂。

评分

参与人数 1信誉积分 +10 收起 理由
dorodaloo + 10 很给力! 猫哥,有什么是你不会的吗?!

查看全部评分

论坛徽章:
0
8 [报告]
发表于 2017-04-12 17:27 |只看该作者
windoze 发表于 2017-04-12 17:23
回复 5# titansword2000

这他娘的怎么可能知道啊……这个问题不适合这个论坛,你得找上帝……

确实是破解一些数据,但不是网络方面,更不是做什么外挂。自己想建一个模型,要用到这些数据,但没加密了。

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
9 [报告]
发表于 2017-04-12 19:00 |只看该作者
回复 8# titansword2000

真的吗?我刚才随手搜了一下“0x448 0x48 0x848 0xc48”,发现了这个:
http://bbs.pediy.com/thread-69971.htm

点进去看到了这个:

  1.   BYTE* pdx=(BYTE*)arg_4;
  2.   di=pdx[this->i104C];
  3.   bx=this->dd[di+0x448/4];
  4.   si=pdx[this->i1048];
  5.   si=this->dd[si+0x48/4];
  6.   di=pdx[this->i1050];
  7.   si+=bx;
  8.   bx=this->dd[di+0x848/4];
  9.   di=pdx[this->i1054];
  10.   si=si^bx;
  11.   bx=this->dd[di+0xc48/4];
  12.   di=arg_0[0];
  13.   si+=bx;
  14.   si=si^this->dd[2];
  15.   di=di^si;
  16.   arg_0[0]=di;   
复制代码


这他喵的不就是你贴的那段程序吗?换了个马甲就当我认不出来了?

大家可以试一下。
游戏是蜀山Online,版本1.00.05(当前版本)。


还说你不是想做外挂……

论坛徽章:
0
10 [报告]
发表于 2017-04-12 21:35 |只看该作者
没接触过游戏方面的开发,也不想去搞,我做的这个是通daxin的东西,与游戏无关,如果有熟悉游戏方面的大神硬说有关,那也估计是采用相同的加解密算法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP