posts - 6,  comments - 16,  trackbacks - 0
  置顶随笔
摘要: 近期手上项目需要选择一配置信息保存方案,现就XML、JSON、Protocol Buffer(以下简称PB)、Lua做一次横向对比。首先要说明的是Lua严格来说属于嵌入式脚本语言,而XML、JSON、PB都属于数据交换格式,两者之间不属于同类别,按理说不应该放在一起比较,但是就项目需求来讲,Lua也能够实现配置信息保存。故而将Lua和XML、JSON、PB放在一起做横向对比。   XML JSON...阅读全文
posted @ 2008-11-06 12:44 虾虾 阅读(2166) 评论(6) 编辑
  2011年9月4日

前些日子去中国电信装了E169套餐,

送了一个华为HG526无线路由猫和

一个中兴xxx型号滴网络机顶盒(还没开始捣鼓),

当然无线路由猫一如既往滴是阉割版。

在搜索一番之后,开始了我滴破解之旅。

 

1、打开猫滴管理页面,并用telecomadminnE7jA%5m登陆;

2、把一个U盘插到猫上

3、打开管理=》设备管理,备份配置

4、打开U盘滴ctce8_hg526.cfg,发现全是乱码。

经过一番分析,

写出一下加解密程序;

 

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 enum ErrCode
  5 {
  6     EC_Ok,
  7     EC_ArgErr,
  8     EC_OptionErr,
  9     EC_CantOpenInFile,
 10     EC_CantOpenOutFile,
 11 };
 12 
 13 enum OpCode
 14 {
 15     OC_Decode,
 16     OC_Encode,
 17 };
 18 
 19 int main(int argc, char *argv[])
 20 {
 21     int r = EC_Ok;
 22     FILE *f_in = 0*f_out = 0;
 23     
 24     do
 25     {
 26     
 27         if (argc != 4)
 28         {
 29             r = EC_ArgErr;
 30             break;
 31         }
 32 
 33         int op;
 34         if (*argv[1== 'd' || *argv[1== 'D')
 35         {
 36             op = OC_Decode;
 37         }
 38         else if (*argv[1== 'e' || *argv[1== 'E')
 39         {
 40             op = OC_Encode;
 41         }
 42         else
 43         {
 44             r = EC_OptionErr;
 45             break;
 46         }
 47 
 48         f_in = fopen(argv[2], "rb");
 49         if (!f_in)
 50         {
 51             r = EC_CantOpenInFile;
 52             break;
 53         }
 54 
 55         f_out = fopen(argv[3], "wb");
 56         if (!f_out)
 57         {
 58             r = EC_CantOpenOutFile;
 59             break;
 60         }
 61 
 62         int buf = 0;
 63         switch (op)
 64         {
 65         case OC_Encode:
 66             {
 67                 while (fread(&buf, 11, f_in))
 68                 {
 69                     buf <<= 1;
 70                     if (buf > 127) buf -= 127;
 71                     fwrite(&buf, 11, f_out);
 72                 }
 73             }
 74             break;
 75         case OC_Decode:
 76             {
 77                 while (fread(&buf, 11, f_in))
 78                 {
 79                     if (buf & 0x01) buf += 127;
 80                     buf >>= 1;
 81                 
 82                     fwrite(&buf, 11, f_out);
 83                 }
 84             }
 85             break;
 86         }
 87     }
 88     while(0);
 89 
 90     switch(r)
 91     {
 92     case EC_Ok:
 93         {
 94             printf("Convert Ok.\n");
 95         }
 96         break;
 97     case EC_ArgErr:
 98     case EC_OptionErr:
 99         {
100             printf("Hg526Cfg <d|e> infile outfile\n");
101         }
102         break;
103     case EC_CantOpenInFile:
104         {
105             printf("Can't Open InFile: %s\n", argv[2]);
106         }
107         break;
108     case EC_CantOpenOutFile:
109         {
110             printf("Can't Open OutFile: %s\n", argv[3]);
111         }
112         break;
113     };
114 
115     if (f_in) fclose(f_in);
116     if (f_out) fclose(f_out);
117 
118     return r;
119 }

 

可执行程序下载:Hg526Cfg_Release_MT_MaxSpeed

 

今天晚上就写到里吧,这将是一个系列文章,一步步打造属于自己滴全定制无线猫

 

 

 

 

posted @ 2011-09-04 01:57 虾虾 阅读(2521) 评论(0) 编辑
  2009年4月17日

最近在用Ogre+CEGUI+OIS做游戏。在开发的过程出现了种种问题,现将问题一一整理,并将解决方案释出,供同好参阅。

OIS默认鼠标占用模式是鼠标独占使用,表现为鼠标指针无法移除当前窗口。那么如果想把鼠标指针移除窗体怎么解决呢?让OIS使用鼠标协作模式啊!代码如下:

 

//创建设备

OIS::ParamList pl;

size_t windowHnd = 0;

std::ostringstream windowHndStr;

 

m_Window->getCustomAttribute(Ogre::String(”WINDOW”), &windowHnd);

windowHndStr << windowHnd;

pl.insert(std::make_pair(std::string(”WINDOW”), windowHndStr.str()));

pl.insert(std::make_pair(std::string(”w32_mouse”), std::string(”DISCL_FOREGROUND”)));

pl.insert(std::make_pair(std::string(”w32_mouse”), std::string(”DISCL_NONEXCLUSIVE”)));

m_InputManager = OIS::InputManager::createInputSystem( pl );

 

 

这下好了,鼠标可以移除当前窗体了,突然发现没对,怎么有两个鼠标指针?好嘛,我就在当前窗口隐藏掉系统的指针!代码如下:

 

ShowCursor(0); //隐藏系统鼠标指针

 

这回应该没问题了吧~~~啦啦啦,还是没对哦!鼠标定位不准确~~~~~~~~,行!那就在mouse::MouseMoved 事件中把 Moved(e.state.X.rel, e.state.Y.rel) 替换成Postion(e.state.X.abs, e.state.Y.abs)

 

在编译运行,矣~~~~~~咋个指针在一个很小范围内移动呢?哦,原来OIS默认宽和高是50px啊,来设置成RenderWindow的宽高即可!代码如下:

 

_mouse->getMouseState().width=_render_window->getWidth();

_mouse->getMouseState().height=_render_window->getHeight();

 

嘿嘿,这下完美了!ohmy god~~~~~~~~为什么这样对我?鼠标都移除窗体了,为什么窗体内的那个指针还要动,那我就在MouseMoved中做边界检查,对了为了防止误点,还要在mousePressed mouseReleased 做边界检查,代码就不啰嗦了!~~~=

 

 

       至此OGRE+OIS+CEGUI鼠标非独占使用,完美解决!

posted @ 2009-04-17 00:54 虾虾 阅读(3927) 评论(5) 编辑
  2008年11月20日

     文章伊始,我先要说明本文提到到的“泛解析”,不是真正意义上的泛解析,而是在虚拟主机中模拟泛解析以实现一个虚拟主机跑多个网站或实现将子目录转换为二级域名的目的!

     一、类似解决方案及其优缺点:
     1、利用微软提供的URLRewriter.DLL及ActionlessForm.DLL实现URL重写和表单Action属性修改。此方案仅支持对请求的PATH部分进行解析重定向,没法实现对HOST部分解析,亦不能实现一个虚拟主机跑多个网站的目的。但不需服务器加载其他组件。
     2、利用ISAPI_Rewriter这个IIS服务器扩展来实现这一目的。但ISAPI_Rewriter属于商业软件需要付费购买(Full版其售价:$99,Lite版免费),需要虚拟主机服务商购买。Lite版功能极其有限,不能实现单个虚拟主机一个配置文件,这样用户没法自己修改自己的URLRewrtier配置文件;其次,该服务器扩展需要安装在服务器上,对于一般购买虚拟主机的朋友来讲,这极其不方便实现;最最最关键的一个原因,如果该服务器扩展安装到服务器之后,用户完全可以通过使用该扩展及同一主机绑定多个域名实现一个虚拟主机跑多个网站的目的,对于虚拟主机服务商来讲就减少了收入,所以多数虚拟主机服务器是不会加装该服务器扩展。

     二、我的解决方案:

     1、新建BasePage类,该类从System.Web.UI.Page派生而来,并重写OnPreLoad(EventArgs e)事件。代码如下:

 

 1using System;
 2using System.Data;
 3using System.Collections;
 4using System.Collections.Generic;
 5using System.Configuration;
 6using System.Web;
 7using System.Web.Security;
 8using System.Web.UI;
 9using System.Web.UI.HtmlControls;
10using System.Web.UI.WebControls;
11using System.Web.UI.WebControls.WebParts;
12
13namespace EnterpriseSiteFactory
14{
15    public class BasePage : System.Web.UI.Page
16    {
17        public SiteConfig SubSiteConfig getset; }
18        protected override void OnPreLoad(EventArgs e)
19        {
20            string SiteHost = Request.ServerVariables["HTTP_HOST"].ToLower();
21            if (!SiteConfigDict.ContainsKey(SiteHost))
22                SiteHost = global::System.Configuration.ConfigurationManager.AppSettings["DefaultSiteHost"];
23            SubSiteConfig = SiteConfigDict[SiteHost];
24            SiteConfigDict = null;
25            base.OnPreLoad(e);
26        }

27    }

28}

29

 

     2、在Global类中的protected void Application_Start(object sender, EventArgs e)事件中初始化多站点配置。代码如下:

 1        protected void Application_Start(object sender, EventArgs e)
 2        {
 3            Dictionary<string, SiteConfig> SiteConfigDict = new Dictionary<string, SiteConfig>();
 4            System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
 5            xmlDoc.Load(Server.MapPath("~/GameList.xml"));
 6            foreach (System.Xml.XmlNode node in xmlDoc.DocumentElement.ChildNodes)
 7            {
 8                SiteConfig sc = new SiteConfig();
 9                sc.Id = node.SelectSingleNode("Id").InnerText;
10                sc.Name = node.SelectSingleNode("Name").InnerText;
11                sc.Title = node.SelectSingleNode("Title").InnerText;
12                sc.Keywords = node.SelectSingleNode("Keywords").InnerText;
13                sc.Description = node.SelectSingleNode("Description").InnerText;
14                if (!SiteConfigDict.ContainsKey(sc.Id.ToLower()))
15                {
16                    SiteConfigDict.Add(sc.Id.ToLower(), sc);
17                }

18            }

19            xmlDoc = null;
20            if (Application[CoreLib.SiteConfigDict] == null)
21                Application.Add(CoreLib.SiteConfigDict, SiteConfigDict);
22            else
23                Application[CoreLib.SiteConfigDict] = SiteConfigDict;
24        }


     3、SiteConfg类(可根据需要自行扩展)代码如下:

 1using System;
 2using System.Data;
 3using System.Configuration;
 4using System.Web;
 5using System.Web.Security;
 6using System.Web.UI;
 7using System.Web.UI.HtmlControls;
 8using System.Web.UI.WebControls;
 9using System.Web.UI.WebControls.WebParts;
10
11namespace EnterpriseSiteFactory
12{
13    public class SiteConfig
14    {
15        public string Id getset; }
16        public string Name getset; }
17        public string Title getset; }
18        public string Keywords getset; }
19        public string Description getset; }
20    }

21}


     4、在开发过程中,每个页面的基类用BasePage类代替System.Web.UI.Page类,可以直接使用this.SubSiteConfg来获取站点相关信息。


     5、在虚拟主机控制面板为该虚拟主机绑定多个域名(通常虚拟主机服务商限制为20个),并将这些域名解析到该虚拟主机的IP。

     6、修改多站点配置文件SiteList.XML代码如下:
 

 1<?xml version="1.0" encoding="utf-8" ?>
 2<SiteList>
 3  <Site>
 4    <Id>www.xxx.com</Id>
 5    <Name>笑嘻嘻网站</Name>
 6    <Title>笑嘻嘻哇哈哈</Title>
 7    <Keywords>信息,想法</Keywords>
 8    <Description>全球最大,最完善的笑嘻嘻网站!</Description>
 9  </Site>
10  <Site>
11    <Id>www.xxx2.com</Id>
12    <Name>笑嘻嘻网站2</Name>
13    <Title>笑嘻嘻哇哈哈2</Title>
14    <Keywords>信息,想法2</Keywords>
15    <Description>全球最大2,最完善的笑嘻嘻网站!</Description>
16  </Site>
17</SiteList>

 

     此方案可以在虚拟主机环境下实现“泛解析”。有一定局限性,但是用于企业站建设足够了。小弟才疏学浅,望各位大哥指点。

posted @ 2008-11-20 17:04 虾虾 阅读(2530) 评论(4) 编辑
  2008年11月6日

 

近期手上项目需要选择一配置信息保存方案,现就XMLJSONProtocol Buffer(以下简称PB)、Lua做一次横向对比。首先要说明的是Lua严格来说属于嵌入式脚本语言,而XMLJSONPB都属于数据交换格式,两者之间不属于同类别,按理说不应该放在一起比较,但是就项目需求来讲,Lua也能够实现配置信息保存。故而将LuaXMLJSONPB放在一起做横向对比。

 

 

  XML JSON PB Lua
数据结构支持 复杂结构 简单结构 较复杂结构 复杂结构
数据保存方式 文本 文本 二进制 文本
数据保存大小 一般 一般
解析效率 一般 稍快
语言支持程度 非常多 C++/Java/Python
开发难度?繁琐? 繁琐 简单 简单 相对繁琐
学习成本
适用范围 数据交换 数据交换 数据交换 数据保存及脚本处理

 

最终我的选择为Lua,理由如下:
首先配置文件可能很复杂;其次需要脚本功能;Lua性能较好;语言支持程度好,本项目除了用c++做主要开发外,可能还有大量辅助软件开发,就要求快速开发,性能适用就好,因此可能会选择其他语言做快速开发。而lua的多语言支持还可以。

posted @ 2008-11-06 12:44 虾虾 阅读(2166) 评论(6) 编辑
  2008年8月16日

最近公司要和某网游公司合作推广某网游X

公司领导让我们这些小员工们都玩

每天还要定任务,必须达到多少多少级,并写下对游戏的看法

这对于很少玩网游的我来说不得不说是一个痛苦,

不觉突然想起,既然是网游就有辅助程序吧,网上搜索

发现该网游还真的有了,辅助程序,

Down下来,用用,还不错,

有时间限制?

正好 好好整理整理自己对 ASM 的学习成果,干掉之

 

找来 od 

干掉辅助程序,

哈哈,可惜啊 用ASProtect 混淆过了?

花指令tnnd真多

 

看看吧,是分析他得算法 模拟一个Server出来

还是 直接干掉吧

 

明天在试试 如果能去掉花指令 成功分析出算法

就模拟一个Server出来

不行就干掉吧

 

 

ps:本文仅用于自己学习过程的记录,文中所提网游辅助程序,并非本人开发,本人进行分析,也是为了研究学习。

 

posted @ 2008-08-16 04:31 虾虾 阅读(128) 评论(0) 编辑
  2008年8月10日
摘要: 呵呵,一直都在园子里面潜水 看各位大大的好文 努力学习ing不想注册Id 这么麻烦 还要人工审核 万幸的是 我一次通过 还好还好阅读全文
posted @ 2008-08-10 08:52 虾虾 阅读(25) 评论(1) 编辑