我在看一个程序的时候,发现了这样的加密算法:
char m_pe[6]={0};
*(DWORD*)(m_pe+0)=0x3299fbf7;
*(DWORD*)(m_pe+0)+=0x41664959;实质以上两句赋值是将m_pe这个字符数组赋成"PE",猜想由于DWORD是四字节,因此通过相加的算法,将其赋值为PE,但是实现想不出这种加密算法,有没有哪位大侠稍微指点一下?在此谢过了!
char m_pe[6]={0};
*(DWORD*)(m_pe+0)=0x3299fbf7;
*(DWORD*)(m_pe+0)+=0x41664959;实质以上两句赋值是将m_pe这个字符数组赋成"PE",猜想由于DWORD是四字节,因此通过相加的算法,将其赋值为PE,但是实现想不出这种加密算法,有没有哪位大侠稍微指点一下?在此谢过了!
[code]*(DWORD*)(m_pe+0)=0x3299fbf7;[/code]
表示的就是为m_pe数组的前四个字节赋值。
如果有不同理解,欢迎回帖探讨。
看来还是没有人回帖,我现在似乎理解了,现在就把此过程讲一下吧,希望有兴趣的人可以商讨:
*(DWORD*)(m_pe+0)=0x3299fbf7;表示的就是为m_pe数组的前四个字节赋值。
如果有不同理解,欢迎回帖探讨。
char m_pe[6]={0xf7,0xfb,0x99,0x32,0,0}*(DWORD*)(m_pe+0)+=0x41664959;这句运行后:
char m_pe[6]={0x50,0x45,0x00,0x74,0,0};
0x50:'P'的ascii码
0x45:'E'的ascii码
0x00:字符串结束标志
两者相加后变成0x74004550 = "PE\0t",不就是想写"PE\0"嘛?你换两个数相加也可以做到同样的效果。