当前位置:  编程技术>移动开发
本页文章导读:
    ▪卡巴斯基:IE浏览器高危破绽被木马利用        卡巴斯基:IE浏览器高危漏洞被木马利用 近日,微软Internet Explorer浏览器爆出高危漏洞,微软已经发布公告提醒用户,并承诺将修复该漏洞。与此同时,该漏洞也已经被木马所利用。知名信.........
    ▪ 分享一个日记类        分享一个日志类 /*** * <p> 封装日志api的调用. 将日志api的调用统一放到这个类下, * 更换具体是使用的日志框架时就只要修改这个类时就好了. * (比如: 将现在使用的java内置log框架换为L.........
    ▪ 什么是FPS       什么是FPS? 在学习《cocos2d-x手机游戏开发》时,书中里面多处出现了FPS,在不同的上下文当中有不同的含义。   1. 在图像领域中 FPS(Frames Per Second):每秒传输帧数。 更确切的解释是“每.........

[1]卡巴斯基:IE浏览器高危破绽被木马利用
    来源: 互联网  发布时间: 2014-02-18
卡巴斯基:IE浏览器高危漏洞被木马利用

 近日,微软Internet Explorer浏览器爆出高危漏洞,微软已经发布公告提醒用户,并承诺将修复该漏洞。与此同时,该漏洞也已经被木马所利用。知名信息安全厂商卡巴斯基实验室在爆出该漏洞之后很快就检测到了一个可以利用这个漏洞的木马。

  据了解,此木马是一个恶意网页脚本木马,会打开带有漏洞利用程序的恶意flash文件,利用最近爆出的微软Internet Explorer浏览器高危漏洞向用户计算机中下载安装后门木马,使用户计算机被黑客操纵。

  用户在用IE浏览器浏览含有此木马的网页时,此木马会加载一个名为Moh2010.swf的flash文件。

  Moh2010.swf使用了Doswf进行了加壳保护,使人不能轻易地看到flash文件的内容。

  从中我们可以看到它会去调用另一个Protect.html.另外还可以看到其中还包含有转换为字符的代码。

  可以看到这段代码还会对其中后面的代码进行异或解密。

  从解密后的代码中我们可以看到它所要下载的后门木马的地址。

  前面提到的被flash文件调用的Protected.html被卡巴斯基检测为Trojan-Downloader.HTML.SWFLoad.h。

  从中可以看到这个版本的漏洞利用程序只攻击Windows XP上的IE7和IE8,并且还可以看到其中包含有真正的CVE-2012-4969漏洞的利用代码。漏洞触发后会执行前面解密出的代码并从http://62.152.xxx.xxx/public/help/111.exe向用户计算机中下载运行木马。被下载的木马被卡巴斯基检测为Trojan.Win32.Agent.tuzg,是一种Poison Ivy远程控制木马。

  目前来看,该木马使得用户的电脑存在极大的风险,用户应安装专业的安全软件。卡巴斯基所有产品已经可以完全查杀这个恶意网页脚本木马了,尤其是近期刚刚发布的卡巴斯基安全部队2013,其具备的自动漏洞入侵防护技术能帮助用户排除隐忧。


    
[2] 分享一个日记类
    来源: 互联网  发布时间: 2014-02-18
分享一个日志类
/***
 * <p> 封装日志api的调用. 将日志api的调用统一放到这个类下, 
 * 更换具体是使用的日志框架时就只要修改这个类时就好了.
 * (比如: 将现在使用的java内置log框架换为Log4j时). </p>
 * 
 * <p> 日志其实就是在代码中预先添加好一些用于调试或者跟踪程序的代码, 
 * 在代码出问题的时候可以让我们通过记录的日志来查找程序问题. 加入了日志在打印处可能会带来一些开销,
 * 但基本是可以忽略不计的那种, 所以程序中尽量要在需要的地方加入日志. </p>
 */
public class AppLog {    
    /** 开发标记 */
    public static final boolean DEV = false;
    
    private static final String TAG = "AppLog";
    
    public static class LogConfig {
        File mLogFolder;
        String mLogFileNamePattern;
        int mLimit = 100 * 1024;
        int mCount = 5; 
        boolean mAppend = true;
        /** 日志写入文件的级别 */
        Level mFileLogLevel = Level.WARNING;
        Formatter mFileLogFormatter = new SimpleFormatter();
        
        public LogConfig(File logFolder) {
            this(logFolder, "/%u.log");
        }
        
        public LogConfig(File logFolder, String logFileNamePattern) {
            if (logFileNamePattern.charAt(0) == '/') {
                mLogFileNamePattern = logFileNamePattern;                
            } else {
                mLogFileNamePattern = '/' + logFileNamePattern;
            }
            mLogFolder = logFolder;
        }
    }
    
    private static FileHandler sFileHandler;
    private static String sFileHandlerPattern;
    
    /***
     * <p> 配置Logger. </p>
     */
    public static void configRootLogger(LogConfig lc) {
        Logger rootLogger = Logger.getLogger("");
        rootLogger.setLevel(Level.WARNING);
        
        try {
            boolean logFolderExists = lc.mLogFolder.exists();
            if (!logFolderExists) {
                AppLog.i(lc.mLogFolder.getAbsolutePath());
                AppLog.i("log folder doesn't exists");
                
                logFolderExists = lc.mLogFolder.mkdirs();
                if (!logFolderExists) {
                    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
                        AppLog.i("log folder create fail and sdcard exists, " +
                        		"please check is permission android.permission.WRITE_EXTERNAL_STORAGE exists");
                    } else {
                        AppLog.i("log folder create fail and sdcard not exists");
                    }
                } else {
                    AppLog.i("log folder created");
                }
            }
            
            if (logFolderExists) {
                String fileHandlerPattern = lc.mLogFolder.getPath() + lc.mLogFileNamePattern;
                if (fileHandlerPattern.equals(sFileHandlerPattern)) {
                    return;
                }
                sFileHandler = new FileHandler(fileHandlerPattern, lc.mLimit, lc.mCount, lc.mAppend);
                sFileHandler.setLevel(lc.mFileLogLevel);
                sFileHandler.setFormatter(lc.mFileLogFormatter);
                rootLogger.addHandler(sFileHandler);
                
                sFileHandlerPattern = fileHandlerPattern;
            } else {
                rootLogger.removeHandler(sFileHandler);
                sFileHandler = null;
                sFileHandlerPattern = null;
            }
        } catch (IOException ex) { // 创建FileHandler时出错, 就不用FileHandler
            rootLogger.removeHandler(sFileHandler);
            sFileHandler = null;
            sFileHandlerPattern = null;
            Log.w(TAG, ex);
        }
    }
    
    /***
     * <p> 使用配置文件来配置Logger. </p>
     */
    public static void configLogger(InputStream is) {
        try {
            LogManager logManager = LogManager.getLogManager();
            logManager.readConfiguration(is);
        } catch (IOException ex) {
            // 如果出错则使用默认的log配置
            Log.w(TAG, ex);
        }
    }
    
    // -----------------------------------
     
    private static volatile Logger sDefaultLogger = Logger.getLogger(TAG);
    
    private static boolean sDev = DEV;
    
    private static String sTag = TAG;
    
    public static void setDefaultTag(String tag) {
        if (!tag.equals(sTag)) { // tag不能为null
            sTag = tag;
            sDefaultLogger = Logger.getLogger(tag);
        }
    }
    
    public static void setDevMode(boolean dev) {
        sDev = dev;
    }
    
    // -----------------------------------
    
    // 优先级: v>d>i>w>e
    
    // error, warning日志需要保持到日志文件中(在开发时就只显示到控制台)
    
    public static void e(String msg) {
        if (DEV) { // 开发时只显示到控制台
            Log.e(sTag, msg);
        } else { // 发布时, 保存到日志文件中
            sDefaultLogger.log(Level.SEVERE, msg);
        }
    }
    
    public static void e(String msg, Throwable tr) {
        if (DEV) {
            Log.e(sTag, msg, tr);
        } else {
            sDefaultLogger.log(Level.SEVERE, msg, tr);
        }
    }
    
    public static void w(String msg) {
        if (DEV) { // 开发时只显示到控制台
            Log.w(sTag, msg);
        } else { // 发布时, 保存到日志文件中
            sDefaultLogger.log(Level.WARNING, msg);
        }
    }
    
    public static void w(Throwable tr) {
        if (DEV) {
            Log.w(sTag, tr);
        } else {
            sDefaultLogger.log(Level.WARNING, "", tr);
        }
    }
    
    private static void log(String tag, Level level, String msg) {
        Logger logger = Logger.getLogger(tag);
        logger.log(level, msg);
    }
    
    private static void log(String tag, Level level, String msg, Throwable tr) {
        Logger logger = Logger.getLogger(tag);
        logger.log(level, msg, tr);
    }
    
    // -----------------------------------
    
    // info, debug, verbose日志只打印到控制台
    
    /***
     * <p> 记录程序运行状态的日志. 比如: 用来确定是否有程序模块是否都正常启动了,
     * 或者配置文件都正确加载了. </p>
     */
    public static void i(String msg) {
        if (sDev) {
            Log.i(sTag, msg);
        }
    }
    
    /***
     * <p> 跟踪程序时可以用到的日志记录. 主要用在一些关键的数据上, 比如从网络获取来的数据,
     * 在进入程序前记录下日志, 就可以知道传入的数据是否不合法. </p>
     */
    public static void d(String msg) {
        if (sDev) {
            Log.d(sTag, msg);
        }
    }
        
    /***
     * <p> 开发时, 代替System.out.println()的, 用来记录任何想要显示到控制台上的内容,
     * 需要在发布版本时从实际代码中删除, 否则会造成额外的方法调用开销. </p>
     */
    public static void v(String msg) {
        if (DEV) {
            Log.v(sTag, msg);
        }
    }
}


AppLog类的使用:

在app启动时配置好日志
public class App extends Application {
    @Override
    public void onCreate() {
		super.onCreate();
		// 在app启动时配置好日志
		File logFolder = new File(Environment.getExternalStorageDirectory(), getPackageName()+"/log");
        LogConfig lc = new LogConfig(logFolder);
        AppLog.configRootLogger(lc);
		
		// 记录app的运行状态
		AppLog.i("App.onCreate()");
    }
}


在app崩溃时将错误堆栈写入到日志文件中
public class CrashHandler implements Thread.UncaughtExceptionHandler {
	@Override
    public void uncaughtException(Thread thread, Throwable t) {
	    // 对于引起app挂掉的异常, 我们可以使用error级别的日志来记录
        AppLog.e("+++crash", t);
    }
}


用error级别的日志记录app执行过程中发生的错误, 用warning级别的日志记录可以忽略的异常
public class Act extends Activity {
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		AppLog.i("Act.onCreate()");
		
		String file = "d:/not_exists_file";
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(file);
			fis.read();
		} catch (IOException ex) {
			// 使用error级别的日志记录下引发错误的异常
			AppLog.e(file, t);
		} finally {
			try {
				if (fis != null) {
					fis.close();
				}
			} catch (IOException ex) {
				// 一些可忽略的异常可以用warning级别的日志来记录
				AppLog.w(ex);
			}
		}
	}
	
	@Override
    protected void onResume() {
        super.onResume();
        File logFolder;
        // 每次在activity恢复时检查sd卡, 因为在pause期间可能sd卡被拔出
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
            logFolder = new File(Environment.getExternalStorageDirectory(), getPackageName()+"/log");
        } else { // sd卡不可用时, 将日志记录到/data/data/app_package_name/app_log目录下
            logFolder = getDir("log", 0);
        }
        LogConfig lc = new LogConfig(logFolder);
        AppLog.configRootLogger(lc);
    }
}

    
[3] 什么是FPS
    来源: 互联网  发布时间: 2014-02-18
什么是FPS?

在学习《cocos2d-x手机游戏开发》时,书中里面多处出现了FPS,在不同的上下文当中有不同的含义。

 

1. 在图像领域中

FPS(Frames Per Second):每秒传输帧数。 更确切的解释是“每秒钟填充图像的帧数(帧/秒)”。也可以理解为我们常说的“刷新率(单位为Hz)

常见媒体的FPS帧率:
  电影:24fps
  电视(PAL):25fps
  电视(NTSL):30fps
  CRT显示器:75Hz以上
  液晶显示器:60Hz

 

2. 在电子游戏领域中

FPS(First- Person Shooter Game):第一人称射击游戏。严格来说FPS属于ACT类游戏的一个分支,但和RTS类游戏一样,由于其在世界上的迅速风靡,使之展成了一个单独的类 型。 (注:ACT=Action Game 动作类游戏,RTS=Real-Time Strategy Game 即时战略游戏)

著 名的FPS游戏有:《毁灭战士》系列(Doom)、《雷神之锤》系列 (Quake)、《虚幻竞技场》系列(Unreal Tournament)、《半条命》系列及其Mod(Half-Life)、《反恐精英》系列(Counter-Strike 即 CS)、《胜利之日》系列(Day of Defeat)、《死亡空间》系列(Dead Space)、《荣誉勋章》系列(Medal of Honor)、《使命召唤》系列(Call of Duty)、《德军总部》/《狼穴》(Wolfenstein)、《战地》/《战地风云》系列及其Mod(Battlefield)、《三角洲特种部队》 系列(Delta Force)、《丛林之狐》系列(Vietcong)、《彩虹六号》系列及其Mod(Rainbow six)、《幽灵行动》系列(Ghost Recon)、《VR特警》系列(Virtua Squad)、《命令与征服》系列(Command & Conquer)、......

 

 

更多关于 cocos2d-x手机游戏开发的资料请点这里

 

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3