这个本来是打算投稿看雪的杂志,所以简单的东西也说得很详细。前两部分可以忽略,文章真正有价值的是第三部分,从指针欺骗到字符欺骗,可以骗过Ultra String Reference和IDA的字符参考窗口。避免加密后的关键字符仍然以乱码的方式出现在字符参考窗口中,导致仍然可以通过加密字符找到关键代码的情况。毕竟最好的加密是让对方根本不知道其存在。
    本来还有其他的想法,例如Ultra String Reference可能只搜索EXE所在内存范围,而不扫描DLL中的参考信息,又或者是象壳那样将解密的代码复制到申请的内存空间中运行。但是前面的方法过于简单,而且有效,以致我觉得完全没有必要用复杂的方法实现,就取消了对复杂方法的探索。
    另外,一个明显的注册信息,和一堆明显的无意义字符,你会去看哪一个参考呢?假如把加密的字符隐藏了,现在只有唯一的注册信息,就可以引诱CRACKER去看一堆可能根本不可能运行的代码。一两句话就能说清楚的东西,也没必要写示例代码。
    文章就砍剩这么多了,大家凑合看。发上来看看能不能混个精华

  • 标 题:答复
  • 作 者:wofan[OCN]
  • 时 间:2007-04-09 09:33

感谢笨笨雄的文章,不知是用什么编译编的,我用Visual c++ 
修改头文件后编译了一下,发现的确有效。
修改版:
#include "windows.h"

class defMsgBox
{
public:
    defMsgBox()
    {
      m_text = (char *)"你能找到我吗?";
      m_caption = (char *) "隐藏字符参考";
    }
    void myShow()
    {
      MessageBox(0,m_text,m_caption,0);
    }
    char *m_text;
    char *m_caption;
};

  char *myText = "测试";

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  defMsgBox myMsgBox;
  char *myCaption = "\x1f""Hello Ultra String Reference";
  MessageBox(0,myText,myCaption,0);
  myMsgBox.myShow();
//字符指针myCaption由于第一个字节加入了无效字符而被Ultra String Reference的确被忽略
  return 0;
}