首页
社区
课程
招聘
如何求解 异或方程组
发表于: 2015-10-27 20:56 7792

如何求解 异或方程组

2015-10-27 20:56
7792
RT,比如 ^表示异或,数值都是16进制,如何求解 x、y
0x32^X + 0x30^Y = 0xF2
0x42^X + 0x40^Y = 0x12

放弃了,结贴。。

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

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 341
活跃值: (143)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
求赏金

int main(int argc, char* argv[])
{

        int iX = 0;
        int iY = 0;

        for (iX = 0; iX <= 0xff; iX++)
        {
                for (iY = 0; iY <= 0xFF; iY++)
                {
                        int ia = 0x32^iX;
                        int ib = 0x30^iY;
                        if (ia + ib == 0xF2)
                        {
                                printf("0x%X  0x%X\r\n", iX, iY);
                        }
                }
               
        }
        printf("-----------\n");

        for (iX = 0; iX <= 0xff; iX++)
        {
                for (iY = 0; iY <= 0xFF; iY++)
                {
                        int ia = 0x42^iX;
                        int ib = 0x40^iY;
                        if (ia + ib == 0x12)
                        {
                                printf("0x%X  0x%X\r\n", iX, iY);
                        }
                }
               
        }
        return 0;
}
2015-10-27 22:40
0
雪    币: 191
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=地狱怪客;1399277]求赏金

int main(int argc, char* argv[])
{

        int iX = 0;
        int iY = 0;

        for (iX = 0; iX <= 0xff; iX++)
        {
                for (iY = 0; iY <= 0xFF; iY++)
                {
                        int ia ...[/QUOTE]

先等等看,其他人的答案。。。这种方式太暴力了吧
2015-10-27 22:49
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=地狱怪客;1399277]求赏金

int main(int argc, char* argv[])
{

        int iX = 0;
        int iY = 0;

        for (iX = 0; iX <= 0xff; iX++)
        {
                for (iY = 0; iY <= 0xFF; iY++)
                {
                        int ia ...[/QUOTE]

如果,是128位的,遍历的话,得遍历到天荒地老
还是得靠数学分析才行啊
2015-10-28 02:40
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这是非线性的运算,暂时只能用暴力破解
2015-10-28 02:48
0
雪    币: 118
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
赏金猎人呢。
2015-10-28 07:41
0
雪    币: 102
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
简单看来
{0b00000001,0b0000000}不是最低位的解
那么
{0bxxxxxxx1,0bxxxxxxx0}一定不是解
不过好像1bit1bit回溯,也不怎样..
2015-10-28 09:40
0
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
位宽度,符号参与计算等是大问题,如下图,点交叉部分应该就是方程组的解了,抛砖引玉~
# -*- coding: utf-8 -*-
#-----------------------------------------------
#求解异或方程组
#0x32^X + 0x30^Y = 0xF2
#0x42^X + 0x40^Y = 0x12
#-----------------------------------------------

import numpy as np
import matplotlib.pyplot as plt

def equation1(x):
        return np.bitwise_xor(0xf2 - np.bitwise_xor(0x32,x),0x30)

def equation2(x):
        return np.bitwise_xor(0x12 - np.bitwise_xor(0x42,x),0x40)

x = np.linspace(0,255,256,dtype=np.ubyte)
y = equation1(x)
z = equation2(x)

plt.figure(figsize=(8,4))
plt.plot(x,y,label="0x32^X + 0x30^Y = 0xF2",color="red",linewidth=2)
plt.plot(x,z,"b--",label="0x42^X + 0x40^Y = 0x12")
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Bitwise XOR equation set")
plt.ylim(-255,255)
plt.grid(True)
plt.legend()
plt.show()

for i in range(-255,255):
        if(equation1(i) == equation2(i)):
                print "x = %u, y = %u" % (i, equation1(i))
2015-10-28 13:49
0
雪    币: 203
活跃值: (63)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
是不是利用异或运算的性质来计算更简单些。
2015-10-28 14:37
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
2015-10-28 14:44
0
雪    币: 203
活跃值: (63)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
0x32^X + 0x30^Y = 0xF2 (1)
0x42^X + 0x40^Y = 0x12 (2)

(1)^0x32  -  (2)^0x42,化简得到一个矛盾方程,无解。。。
2015-10-28 15:17
0
雪    币: 203
活跃值: (63)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
使用消元法,利用异或运算,是能解出来的。
2015-10-28 15:25
0
雪    币: 69
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
50^X + 48^Y = 242
66^X + 64^Y = 18

50^X + 48^Y - 242 = 0
66^X + 64^Y - 18  = 0

50^X + 48^Y - 242 = 66^X + 64^Y - 18
50^X + 48^Y       = 66^X + 64^Y + 224

---
0x32^X + 0x30^Y = 0x42^X + 0x40^Y + 0xE0
---

溢位的话...?
2015-10-28 15:35
0
雪    币: 191
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
头大了,x=y=0x48 ,可是不知道怎么求解
2015-10-28 15:45
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
你这还是暴力破解,128位 256位时怎么办?
2015-10-28 16:33
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
正在找类似的解决方案,谢谢分享
2015-10-28 20:53
0
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
是没想到获得确定解,只能画出图来观摩解分布情况,然后在关心的区间内暴力匹配
2015-10-29 00:22
0
游客
登录 | 注册 方可回帖
返回
//