首页
社区
课程
招聘
对 异或 的不解!
发表于: 2007-3-8 15:47 3829

对 异或 的不解!

2007-3-8 15:47
3829
al’ = al xor bl = 55        ( al = 76 , bl = 10 )
++++++++++++++++++++++++++++++++++++++++++++++++++
以16进制算
1110110
  10000
――――――
1100110 =66

以十进制来算
1001100
   1010
――――――
1000110 =70

我不知道上面的55是怎么得来的……
因为我看了几个帖子跟踪出来的 异或 的结果都跟我自己动手算的结果不相同
http://bbs.pediy.com/showthread.php?s=&threadid=40596
http://bbs.pediy.com/showthread.php?s=&threadid=39672&perpage=10&highlight=&pagenumber=3

请教一下 55 这个结果是如何得来的……

引用http://bbs.pediy.com/showthread.php?s=&threadid=40596
经验总结】
本人对esp的堆栈做了跟踪得出如下规律:(所有字符都表示位数)
堆栈地址                     数值                         所取的内容
ss:[esp+4]     0 1 2 3 4 5 6 7                                10
ss:[esp+5]         2 3 4 5 6 7 8 9                            32
ss:[esp+6]             4 5 6 7 8 9 A B                        54
ss:[esp+7]                 6 7 8 9 A B C D                    76
ss:[esp+8]                     8 9 A B C D E F                98
ss:[esp+9]                         A B C D E F 0              BA
ss:[esp+A]                             C D E F 0 1            DC
ss:[esp+B]                                 E F 0 1 2          FE
又知:
al’ = al xor bl = 55        ( al = 76 , bl = 10 )
cl’ = cl xor dl = 6E        ( cl = FE , dl = 32 )
dl’ = dl xor bl = 4E        ( dl = BA , bl = 54 )
bl’ = bl xor ss:[esp+A]     ( bl = 98 )
得出结论如下:
[8][7]与[2][1]异或,结果必须等于55
[16][15]与[4][3]异或,结果必须等于6E
[6][5]与[12][11]异或,结果必须等于4E
[10][9]与[14][13]异或,结果必须等于19
满足以上的注册码即为真正的注册码,给个例子:7CE5F929871D1603。

但是总觉得不对,因为KAN也出了个分析,并给了个注册码:4510/510911000/7,按我的算法,这里的/应该是不合法的,因为/本身就占了2个字节,这是为什么,斑竹明鉴!・

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
计算结果的确没错。是不是你没搞清楚AL和BL怎么得出
2007-3-8 19:00
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是的,你可以看看那些帖子(地址已经贴出)

不知道问题出在哪里……所以实在是纳闷。
2007-3-8 21:26
0
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也是没看懂 al = 76 , bl = 10 看样子是16进制呀
1110110 ====  76
  10000 ===== 10
――――――
1100110 =66 这样计算出来就是66呀
请问怎么计算出来的55 难道和寄存器有关
2007-3-9 09:12
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
5
不是你脑袋坏了就是cpu坏了
2007-3-9 14:02
0
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用计算器计算也是66呀
请那我大侠用2进制来表示一下计算76xor10得到55的过程
2007-3-9 16:36
0
雪    币: 295
活跃值: (346)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
7
是这样, 确作者假设输入的注册码是 "0123456789ABCDEF"

运算一下以后, 到某个地方, 在SS:[sp+4]开始的8个BYTE 就会是

0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE;

然后这8个BYTE 两两异或, 得到最后的4个BYTE, 而最后的4个BYTE

应该是0x55, 0x6E, 0x4E, 0x98, 才表示注册码有效.

既  

  10 xor 76  == 55
  32 xor FE  == 6E
  54 xor BA  == 4E
  98 xor DC  == 98

才可以.

上面的4个等式当然不成立, 只能表示 "0123456789ABCDEF" 不是有效注册码
2007-3-10 11:02
0
游客
登录 | 注册 方可回帖
返回
//