我在看一个程序的时候,发现了这样的加密算法:
char m_pe[6]={0};
*(DWORD*)(m_pe+0)=0x3299fbf7;
*(DWORD*)(m_pe+0)+=0x41664959;实质以上两句赋值是将m_pe这个字符数组赋成"PE",猜想由于DWORD是四字节,因此通过相加的算法,将其赋值为PE,但是实现想不出这种加密算法,有没有哪位大侠稍微指点一下?在此谢过了!

解决方案 »

  1.   

    看来还是没有人回帖,我现在似乎理解了,现在就把此过程讲一下吧,希望有兴趣的人可以商讨:
    [code]*(DWORD*)(m_pe+0)=0x3299fbf7;[/code]
    表示的就是为m_pe数组的前四个字节赋值。
    如果有不同理解,欢迎回帖探讨。
      

  2.   

    刚才误操作,没有将代码写上,现在重发一下。
    看来还是没有人回帖,我现在似乎理解了,现在就把此过程讲一下吧,希望有兴趣的人可以商讨:
    *(DWORD*)(m_pe+0)=0x3299fbf7;表示的就是为m_pe数组的前四个字节赋值。
    如果有不同理解,欢迎回帖探讨。
      

  3.   

    Signature PE 应该等于 0x00004550,你的计算结果有问题吧?
      

  4.   

    *(DWORD*)(m_pe+0)=0x3299fbf7;这句运行后:
    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:字符串结束标志
      

  5.   

    这个0x00744550不是 Signature PE。(ULONG)
      

  6.   

    简单得不能再简单的花指令,算不上什么加密。
    两者相加后变成0x74004550 = "PE\0t",不就是想写"PE\0"嘛?你换两个数相加也可以做到同样的效果。