首页
社区
课程
招聘
[求助]下列算法是否可逆?
发表于: 2009-9-27 00:27 8101

[求助]下列算法是否可逆?

2009-9-27 00:27
8101
某软件算法一部分,已经弄清DES加密解密部分,再准备求解下面一部分:

设一字符串“abcdefg……z”,内存地址“ABCD……Z”

第一次,将a存入内存地址A;
第二次,将(b SHR 6) OR [A](表示A中存入的值),再存入A,b*4存入B;
第三次,将(c SHR 4) OR ,再存入B,c*16存入C;
第四次,将(d SHR 2) OR [C],再存入C。

字符串未取完,再循环,运算时寄存器只取低8位的值,如果已知内存地址"ABCD……Z"中的值,能推出原字符串吗?

高手莫笑,虽然已经有点破解基础了,但还不会编程,请教高手上面算法是否可逆或做出注册机?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
和原串的长度有关?比如字符串长度是1,2,3可以解密,长度是4无法解密
2009-9-27 11:22
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
原字串长0x170,刚好可以循环5C次。
2009-9-27 12:06
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
放宽条件,原串4个字符运算后得到三个新字符,现不要求必须和原串相同,只要运算后能得到我所要的新字串即可,应该没有问题吧?
2009-9-27 21:24
0
雪    币: 993
活跃值: (442)
能力值: ( LV12,RANK:403 )
在线值:
发帖
回帖
粉丝
5
a0a1a2a3a4a5a6a7|                |
            b0b1|b2b3b4b5b6b7 0 0|
                |        c0c1c2c3|c4c5c6c7 0 0 0 0
                |                |    d0d1d2d3d4d5
----------------+----------------+----------------
      [A]               [B]              [C]
x or y = z
0    0   0
0    1   1
1    0   1
1    1   1

完全恢复出原串需要穷举,如果不求与原串相同恢复是很容易的。
2009-9-27 22:15
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
6
base64吧
4byte->3byte 是解码
2009-9-27 23:15
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
非常感谢,似乎是BAES64编码,整个流程如下:

软件通过网络验证得到一个很长的字串,假设为A,然后A字串从另一字串B中取位置,并保存为十六进制值C,C的每个值<<2,得到新十六进制值D,D再进行我上面提到的算法每四个十六进制值转成三个,得到E,再从E串里每隔一个取一个得到F字串,最后对F字串进行DES解密就得到关键数据了,我现在已经解了DES部分,再反推自己构造所需的网络验证返回串,有人知道这是哪个程序吗?某国产软件,软件名不方便公布。

没有编程经验,描述的不知能不能让大家看懂,唉!有时间好好学学编程。
2009-9-28 00:19
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
非常感谢你的回复,不会编程,可能用这个方法推算。
2009-9-28 00:45
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
Loka作的图示比较清楚。
这个不是base64编码算法,base64可逆,但LZ提供的算法不可逆。但正如Loka所说,由三字节结果逆推4字节原始信息时,需要穷举部分比特,但穷举时需要讲点技巧,比如(沿用Loka记号):
a6 OR b0 == A6
若A6=0,则必定a6=0,b0=0;
若A6=1,则有三种情况,这时就要穷举一下啦。
2009-9-28 18:31
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
10
只用到6个bit (高bit6'7皆为0)
你说呢 ?

00xxxxxx
2009-9-28 18:51
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
11
按楼主的说法, 确实只用到6个bit, 但不是高两位而是低两位. 即 xxxxxx00 . 所以不需要穷举, 直接可以还原.
2009-9-28 22:21
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢各位的帮忙,正在反推,纯人工算,还好只要修改一部分串。
2009-9-29 10:17
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢各位的帮忙,推算成功!
上传的附件:
2009-9-29 11:51
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
14
再仔细想想看, 其实从A到E这个流程就是Base64, 其中B字串就是Base, 它的长度应该是64个字节.
当然, 这个字串可能和我们常见的标准Base64那个 ABCD.... 不一样, 但算法和目的是一样的.
2009-9-29 21:33
0
雪    币: 276
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
字串不同,顺序打乱的,我试过一个可以定义字串的,改为我调试这个软件的字串,也不能还原,当然,可能我哪个步骤弄错了,现在有时间就慢慢研究。今天手动推出原串后,发现不能解密,晕,可能DES部分弄错了,又得重新来过。
2009-9-30 00:42
0
游客
登录 | 注册 方可回帖
返回
//