wenjiang 的个人资料morning's blog照片日志列表更多 工具 帮助

日志


5月29日

被VC2005耍了

vc++ 2005 generates wrong code when using /O2 /arch:SSE in some circumstances

很隐蔽的一个bug,首次遇到,费了好大的劲才发现
5月28日

删掉 VAX,VS2005立刻快了好多!

同一个版本配合VC6,感觉速度还是挺快的.
配合VC2005,感觉VC2005启动超级慢,删了之后非常快!
why?
5月20日

义乌广电开始强行推广数字电视了

近期,原来的有线电视就要被强制停止信号了,义乌广电要求必须安装数字电视.费用比原来贵了1000左右/年.
在义乌的老外可以使用卫星电视,本地人要使用则强行拆除并处罚款,原因是为了维护国家安全.汗,难道不看广电的节目,就不爱国了吗?
这和前几年政府强征农民耕地一模一样啊.这么没人管管呢?
点击查看 义乌丹桂苑 的资讯.
点击查看 义乌的违规征地 的资讯.
5月19日

做了一个 v8 的包装接口

使用 SDK方式编程,可以进行 js 和C++ 之间的互相调用,使用这个模块不需要接触 v8的内部实现,接口简洁.
对于原来不具有和 JS双向通讯的代码,只需加入少量代码即可,此外,模块支持 VC6及以后版本.
此外,发现 v8 的速度真是相当爽啊.
 
the sample is simple,哈哈
 
class Window
{
public:
 Window()
 {
  minWidth=0;
  minHeight=0;
  maxWidth=0;
  maxHeight=0;
 }
protected:
//方法
 int msgbox(LPCTSTR text,LPCTSTR title)
 {
  return MessageBox(NULL,text,title,0);
 }
 void showwindows(int dwFlag,int dwFlag2)
 {
  DbgPrint(_T("参数:%d,%d"),dwFlag,dwFlag2);
 }
 BOOL Gettrue()
 {
  return true;
 }
 BOOL Getfalse()
 {
  return FALSE;
 }
 int Getflag()
 {
  return 135;
 }
 void Print(LPCTSTR str)
 {
  DbgPrint(_T("window:%s\n"),str);
 }
 BOOL GetCaptionbyvar(BSTR* pstr)
 {
  *pstr=m_strCaption.AllocSysString();
  return TRUE;
 } 
//属性:
protected:
 void SetminWidth(UINT nNewVal)
 {
  minWidth=nNewVal;
 }
 UINT GetminWidth()
 {
  return minWidth;
 }
 void SetCaption(LPCTSTR szCaption)
 {
  DbgPrint(_T("new Caption:%s"),szCaption);
  m_strCaption=szCaption;
 }
 BSTR GetCaption()
 {
  DbgPrint(_T("now Caption:%s"),(LPCTSTR)m_strCaption);
  return m_strCaption.AllocSysString();
 }
 
//消息
public:
 void OnLoad()
 {
  m_jsengine->Invoke(this,"OnLoad");
 }
 void OnUnLoad()
 {
  m_jsengine->Invoke(this,"OnUnLoad");
 }
 int test(int nVal)
 {
  _variant_t varResult;
  m_jsengine->Invoke(this,"test",&varResult,nVal);
  return varResult;
 }
public:
 UINT minWidth;
 UINT minHeight;
 UINT maxWidth;
 UINT maxHeight;
 CStdString m_strCaption;
 JS_DECLARE_DISPATCH_MAP();
 JS_DECLARE_EVENT_MAP();
};

//假想的窗口对象(唯一实例)
JS_BEGIN_DISPATCH_MAP(Window)
 JS_DISP_FUNCTION(Window,showwindows,VT_EMPTY,VTS_I4 VTS_I4)
 JS_DISP_FUNCTION(Window,Getflag,VT_I4,VTS_NONE)
 JS_DISP_FUNCTION(Window,Print,VT_EMPTY,VTS_BSTR)
 JS_DISP_FUNCTION(Window,msgbox,VT_I4,VTS_BSTR VTS_BSTR)
 JS_DISP_FUNCTION(Window,Gettrue,VT_BOOL,VTS_NONE)
 JS_DISP_FUNCTION(Window,Getfalse,VT_BOOL,VTS_NONE)
//  JS_DISP_FUNCTION(Window,GetCaptionbyvar,VT_BOOL,VTS_PBSTR)
 JS_DISP_PROPERTY(Window,minWidth,VT_I4)
 JS_DISP_PROPERTY(Window,Caption,VT_BSTR)
// JS_DISP_PROPERTY(Window,minheight,VT_I4)
JS_END_DISPATCH_MAP()
 
 
 g_jsengine=CreateJSEngine();
 if(g_jsengine->LoadFile(szFile))
 {
  if (g_jsengine->Compile())
  {
 //   g_jsengine->AddGlobalFunction("Print",Print);
    Window g_win;
    Window2 g_win2;
    g_jsengine->RegisterGlobalClass("WINDOW",g_win.GetDispMap(),g_win.GetEventMap());
    g_jsengine->RegisterGlobalClass("wiNDOw2",g_win2.GetDispMap());
    g_win.SetJSEngine(g_jsengine);
    g_win2.SetJSEngine(g_jsengine);
    g_jsengine->CreateGlobalObject("WIndow","wIN",&g_win);
    g_jsengine->CreateGlobalObject("winDOW2","WIn2",&g_win2);
 //   g_jsengine->AddInstanceFunction("win2","Print2",Print2);
   
    if (g_jsengine->Run())
    {
      g_win.OnLoad();
      DbgPrint_CON(_T("脚本Result:%s\n"),g_jsengine->GetResult());
      DbgPrint_CON(_T("minWidth:%d,minHeight:%d,maxWidth:%d,maxHeight:%d\n"),  \
       g_win.minWidth,g_win.minHeight,g_win.maxWidth,g_win.maxHeight);
      int x=g_win.test(11);
      DbgPrint_CON(_T("返回新数值:%d\n"),x);
      
      g_win.OnUnLoad();
    }
    else
    {
     DbgPrint_CON(_T("脚本执行错误!\n"));
     DbgPrint_CON(_T("Script:\t\t%s\n"),g_jsengine->GetJSFileName());
     DbgPrint_CON(_T("Line:\t\t%d\n"),g_jsengine->GetLastErrorLineNo());
     DbgPrint_CON(_T("Source:\t\t%s\n"),g_jsengine->GetLastErrorSourceLine());
     DbgPrint_CON(_T("Error:\t\t%s\n"),g_jsengine->GetLastErrorMessage());
    }
  }
  else
  {
    DbgPrint_CON(_T("脚本编译错误!\n"));
    DbgPrint_CON(_T("Script:\t\t%s\n"),g_jsengine->GetJSFileName());
    DbgPrint_CON(_T("Line:\t\t%d\n"),g_jsengine->GetLastErrorLineNo());
    DbgPrint_CON(_T("Source:\t\t%s\n"),g_jsengine->GetLastErrorSourceLine());
    DbgPrint_CON(_T("Error:\t\t%s\n"),g_jsengine->GetLastErrorMessage());
  }
 }
 else
 {
  DbgPrint_CON(_T("脚本加载失败!\n"));
 }
 
 DeleteJSEngine(g_jsengine);
 
 
5月12日

vcpkg 更新到 4.7

最近的主要更新是
 
1.增加了cryptdll 模块,编译过程中自动加密dll,这可以较好的对抗逆向分析
2.修正一处vc patch
3.完成环境变量的处理
 
v.4.70 (2009.5.12)
1.解决4.65遗留的问题,现在,变量将在识别平台后进行解析,4.66引入的操作被取消
2./implib 不再必须,cryptdll可以自动处理文件格式,重写了cryptdll的重建dll/lib的算法
3.修正VC字体补丁
v4.69 (2009.5.7)
1.添加 cryptdll 功能,仅对 windows 子系统,且包含 /implib 的项目有效,文件生成时自动抹掉导出表的函数名
 
 
配套的VCLoader 改动如下:
1.绝大部分代码进行了重写
2.现在编译器设置和使用习惯信息分开保存,使用习惯记录了每个编译器的使用次数,每个工程所用的编译器,启动时如果能读取到这个工程上次所用的编译器,那么会优先推荐这个编译器,否则,推荐使用次数最多的编译器.
 
 
5月1日

来,破解手机QQ2008!

今天早上用了一下手机QQ,给我的印象是功能还不错,操作很方便,广告也挺多,一个早上被 系统消息烦了好像4次.另外,很多基于网页的功能很容易点开.

于是,打开反汇编工具,通过分析,发现只需做小小修改即可去掉不少多余的东西.
以下内容适合 最新官网上的适合Nokia 3230的QQ2008(手机QQ2008(S60 V2)正式版 Build064).

1.工具
反汇编: IDA(如果你只需要修改,则不需要此工具)
16进制修改: Ultraedit(你可以任意选择自己喜欢的16进制编辑器)
2.原理
根据sybian的http连接方式找到相应代码
根据ARM指令集修改具体代码
3.修改方法
把手机里面的TmtHttpEngine_0xA0008D31.dll拷贝到PC,用任意16进制编辑工具打开这个文件,定位到 0x326F,把原来的 1A 改成 0A.
4.效果
修改后:手机通讯网/QQ空间/社区等所有网页形式的功能均失效,聊天正常.