谁知道这种加密方式是什么,求加密算法

我看你有戏 2013-11-03 06:37:12
struct UserElement
{
char mUserName[17];
char mPassword[13];
};
test01 123456
把这值放在结构里面,加密对应的字节是
de 11 9b 28 e0 75 b8 2c 67 d3 9a fc 3c 0d 4a cc 88 85 1a af 24 b1 ce 6c 1f ab 37 c3 d0 b1


test02 123456 加密后
de 11 9b 28 e0 76 b8 2c dd e1 9a fc 3c 0d 4a cc 88 85 1a af 24 b1 ce 6c 1f ab 37 c3 d0 b1


abc168 123456 加密后,加密了两次,发现加密的结果是变化的,
cb 03 a1 12 b2 dd 46 a7 af 19 d8 2b c0 04 5c af d8 40 e0 00 a0 c0 60 b7 e7 86 25 c4 fc 68

cb 03 a1 12 b2 dd 46 a7 0f 15 d8 2b c0 04 5c af d8 40 e0 00 a0 c0 60 b7 e7 86 25 c4 fc 68



目前这个加密方法在某个dll里面,我没代码,但是我想研究下
谁知道这种加密方式是什么,求加密算法,大致讲出原理就行
...全文
310 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看你有戏 2013-11-07
  • 打赏
  • 举报
回复

00171D80  push        esi  
00171D81  mov         esi,dword ptr [esp+8] 
00171D85  mov         cl,byte ptr [esi] 
00171D87  xor         cl,0AAh 
00171D8A  push        edi  
00171D8B  mov         di,word ptr [esp+10h] 
00171D90  mov         byte ptr [esi],cl 
00171D92  mov         ecx,1 
00171D97  cmp         di,cx 
00171D9A  jbe         00171DB2 
00171D9C  lea         edx,[esi+1] 
00171D9F  push        ebx  
00171DA0  mov         al,byte ptr [esi] 
00171DA2  mov         bl,byte ptr [edx] 
00171DA4  imul        cl   
00171DA6  xor         bl,al 
00171DA8  inc         ecx  
00171DA9  mov         byte ptr [edx],bl 
00171DAB  inc         edx  
00171DAC  cmp         cx,di 
00171DAF  jb          00171DA0 
00171DB1  pop         ebx  
00171DB2  pop         edi  
00171DB3  pop         esi  
00171DB4  ret       


void unencode(char* pbuff,int size)
{
	if (size>0)
	{
		byte tmp;
		pbuff[0]^=0x0AA;
		for (int i=1;i<size;i++)
		{
			tmp = pbuff[0] * i;
			pbuff[i]^=tmp;
		}
	}
	else
	{
		ASSERT(0);
	}
}

void encode(char* pbuff,int size)
{
	if (size>0)
	{
		byte tmp;
		for (int i=1;i<size;i++)
		{
			tmp = pbuff[0] * i;
			pbuff[i]^=tmp;
		}
		pbuff[0]^=0x0AA;
	}
	else
	{
		ASSERT(0);
	}
}
自己解码了,那段会变化的字节,估计是,变量定义的时候,没有清零所导致的,谢谢大家 是调试的时候,跟进了汇编代码,大致看懂,就可以写出来了 学点汇编还是挺实用的
赵4老师 2013-11-07
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行!
ken_scott 2013-11-04
  • 打赏
  • 举报
回复
还有加密结构体这种做法的啊? 说下我了解的 如果是RSA加密,出来的应该是固定长的 (以前用RSA(256)出来的都是512字节) 如果是AES加密,进出的都是8的倍数的长度 (我只试过密码本的模式,其他的应该差不多) 还有可能不是加密,而是用的摘要算法 (SHA,MD5,MAC什么的) 甚至可能是非标准的,比如自己写的算法 (移动,异或,乱来一同,只要能转回来都可以算一种方法)
赵4老师 2013-11-04
  • 打赏
  • 举报
回复
如果是RSA加密,不知道私钥,仅分析算法还是无法解密。
5t4rk 2013-11-04
  • 打赏
  • 举报
回复
这种研究意义不大。
xiaohuh421 2013-11-04
  • 打赏
  • 举报
回复
如果你只去分析加密后解密后的串, 如果不是常规加密方法, 你很难分析出算法的. 汇编去跟踪加密算法才是比较好的方法, 就算你得不到加密算法的c++版, 至少你还可以使用内嵌汇编. IDA可以把汇编转换成 伪C的样子, 只是变量都是由地址表示的, 你需你自己替换.
namelcz 2013-11-04
  • 打赏
  • 举报
回复
感觉和时间是有关系的!
xiaoyao18301 2013-11-04
  • 打赏
  • 举报
回复
密码学。。。。学习下
独孤过儿 2013-11-03
  • 打赏
  • 举报
回复
从技术角度来考虑,你可以反汇编DLL里面的encryption function 从学术角度来考虑,你可以用 differential and linear cryptanalysis 试试
healer_kx 2013-11-03
  • 打赏
  • 举报
回复
这上哪看加密类型啊?
zhaokai115 2013-11-03
  • 打赏
  • 举报
回复
http://www.blackwasp.co.uk/SaltedPasswordHashing.aspx
  • 打赏
  • 举报
回复
看起来用户名、密码最多都是8个字符。你可以试试特殊情况,比如全空格、全1、全0等等,比较容易发现规律。另外,反汇编DLL也是一个办法。
max_min_ 2013-11-03
  • 打赏
  • 举报
回复
引用 2 楼 henry3695 的回复:
[quote=引用 1 楼 worldy 的回复:] 原文一个字节经某种运算变成两个字节,变化部分为干扰数据?
感觉每次加密的时候,key是随机生成的[/quote] 高级!随机生成的key应该是有保存的吧?解密的时候如何找到这次加密的这个key呢? 多次加密呢?保存多个不同的key么?
pathletboy 2013-11-03
  • 打赏
  • 举报
回复
引用 4 楼 henry3695 的回复:
[quote=引用 3 楼 kingstarer 的回复:] [quote=引用 2 楼 henry3695 的回复:] [quote=引用 1 楼 worldy 的回复:] 原文一个字节经某种运算变成两个字节,变化部分为干扰数据?
感觉每次加密的时候,key是随机生成的[/quote] 那是好事啊 说明key肯定在哪个地方另外保存[/quote] 是啊,这个要看出来,还真是需要点天赋的,我是想不出好的办法啊,大家帮帮忙[/quote] dll能否公开?
我看你有戏 2013-11-03
  • 打赏
  • 举报
回复
引用 3 楼 kingstarer 的回复:
[quote=引用 2 楼 henry3695 的回复:] [quote=引用 1 楼 worldy 的回复:] 原文一个字节经某种运算变成两个字节,变化部分为干扰数据?
感觉每次加密的时候,key是随机生成的[/quote] 那是好事啊 说明key肯定在哪个地方另外保存[/quote] 是啊,这个要看出来,还真是需要点天赋的,我是想不出好的办法啊,大家帮帮忙
kingstarer 2013-11-03
  • 打赏
  • 举报
回复
引用 2 楼 henry3695 的回复:
[quote=引用 1 楼 worldy 的回复:] 原文一个字节经某种运算变成两个字节,变化部分为干扰数据?
感觉每次加密的时候,key是随机生成的[/quote] 那是好事啊 说明key肯定在哪个地方另外保存
我看你有戏 2013-11-03
  • 打赏
  • 举报
回复
引用 1 楼 worldy 的回复:
原文一个字节经某种运算变成两个字节,变化部分为干扰数据?
感觉每次加密的时候,key是随机生成的
worldy 2013-11-03
  • 打赏
  • 举报
回复
原文一个字节经某种运算变成两个字节,变化部分为干扰数据?

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧