在Android中创建启动界面

1、制作一张启动图片splash.png,放置在res->drawable-hdpi文件夹中。

2、新建布局文件splash.

 

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”fill_parent” android:layout_height=”fill_parent”
android:gravity=”bottom|center” android:orientation=”vertical”
android:background=”@drawable/splash”>
<TextView android:text=”@+id/TextView01″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:layout_marginTop=”20dip”
android:typeface=”sans” android:shadowDx=”0″ android:shadowDy=”2″
android:shadowRadius=”1″ android:shadowColor=”#FFFFFF”
android:textColor=”#444444″ android:textSize=”20dip” android:id=”@+id/versionNumber”
android:gravity=”bottom”>
</TextView>
</LinearLayout>

 

这里我们把上一步制作的图片作为启动界面的背景图,然后在界面底部显示当前程序的版本号。

3、新建SplashActivity,在Oncreate中添加以下代码:

setContentView(R.layout.splash);

PackageManager pm = getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo(“com.lyt.android”, 0);
TextView versionNumber = (TextView) findViewById(R.id.versionNumber);
versionNumber.setText(“Version ” + pi.versionName);
} catch (NameNotFoundException e) {
e.printStackTrace();
}

new Handler().postDelayed(new Runnable(){

@Override
public void run() {
Intent intent = new Intent(SplashActivity.this,SplashScreenActivity.);
startActivity(intent);
SplashActivity.this.finish();
}

}, 2500);

 

4、 修改Manifest文件,将启动界面Activity改为默认启动,并且设置标题栏不可见。

<?xml version=”1.0″ encoding=”utf-8″?>

<manifest xmlns:android=”http://schemas.android.com/apk/res/android”
package=”com.lyt.android” android:versionCode=”1″ android:versionName=”1.0″>
<application android:icon=”@drawable/icon” android:label=”@string/app_name”>

<activity android:name=”.SplashActivity” android:label=”@string/app_name”
android:theme=”@android:style/Theme.NoTitleBar”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
<activity android:name=”.SplashScreenActivity” android:label=”@string/app_name” >
</activity>
</application>
<uses-sdk android:minSdkVersion=”8″ />

</manifest>

 

5、显示效果如下:

 

标签Tags:, , , , , , , , , ,

资深设计师Tony Ventrice解析手机游戏开发的四个层次

营销人员可能明白强势品牌的重要性,但却对游戏机制一无所知;程序员可能深谙强大游戏机制的意义所在,但对游戏机制的传达方式一窍不通。这样的营销人员和程序员都无法各自打造出成功的游戏。因为一款成功的游戏离不开跨领域的协调性,然而,我们经常见到情况就如上所述,游戏制作团队的成员往往只熟悉游戏设计中面向己方的专业知识,对其他学科的知识所知甚少。

此时游戏设计师的职责显得尤为关键把不同专业的观点融合为全面的设计构想。如果设计师做不到,结果就是,团队里的成员各忙各的,把时间和精力浪费在毫不相干的工作上。

游戏设计包含了几个层次的工作,且各个层次彼此不同,就如游戏的市场营销和用户界面,把这些毫不相干的层次组合起来,这看似一项艰难的任务。完成这项任务需要明白游戏设计交叉性的理论框架、形象化游戏设计方案的下滴(上滴)效应。

手机平台的两个支点

手机游戏带给玩家的融入感可能不如掌机游戏或电脑游戏那么强烈,但如果要深入研究游戏设计结构,简易的手机游戏却是个理想的探索起点。手机游戏开发之所以独特基于两点:能简则简,以量取胜。

能简则简。你可能已经听说过这么句话:一旦所有可删除的对象都被删除了,一个游戏就趋于完美了。手机平台检验了这个论断。即使是在今天这个iPhone的黎明时代,手机游戏开发者仍然不得不应对手机游戏需局限于128K空间的难题,而这128K包括了美工、、游戏数据、声音和其他所有游戏要素。

这种容量限制几乎足以令任何一种游戏设置寸步难行,但游戏还是顽强地活下来了,虽然硕果仅存的是些再简单不过的游戏。这些残存下来的游戏拥有高度精炼和清晰可辩的设计构架。

以量取胜。在时间相对紧凑的开发周期中,手机游戏设计师要同时开工好几个游戏,这几乎囊括所有你能想得到的游戏类型。

同时设计三四款不同的游戏,你有两个选择:要么是通过一个共同的工作期掌握所有游戏的设计进程,要么顶着令人抓狂的压力分别跟进所有游戏设计进度。以下是一些手机游戏设计的经验总结。 (更多…)

标签Tags:, , , , , , , , , , , , , , ,

Nginx限速

看了网上很多的Nginx介绍,就跟着弄,发现总是限制不了速度: 配置如下

http {
limit_zone   one $binary_remote_addr 10m;

{ …..

location /attachments/ {
limit_conn   one 1;
limit_rate 100k;
}
}

}

在万般无奈下,找到这样句话“如果把limti_rate直接放在server{}中,而不是location中,确实能实现限速,但我只想限制附件下载的速度,请问大大该怎么搞?” (更多…)

标签Tags:, , , , , , , , , , ,

ASP防注入新方式,希望对大家是有用的

最近我的网站经常把js脚本注入到数据,清除了又来。先后在网上找了很多的方法,还是没有用的,十分恼火。

首先先告诉大家一个批量清除代码的sql语句。

update 表名 set 字段=replace(字段,’script src=http://3b3.org/c.js>
1、分析那些无聊的人,或者有些病态的人究竟做了些什么 。

通过iis的日志或者microsoft urlscan 日志查看,在一些通过id查询数据库内容的时候后面被人加了一段很长的字符窜。

%%3B%%44%%65%%43%%4C%%61%%52%%45%%类似这样的字符窜,一定是其他的方式编码

首先我们先用工具分析下如此之长的字符窜究竟包含了些什么内容。

通过批量替换工具把%%全部替换成空,然后把得到的字符串通过其他的转码工具,转成字符窜。

;DeCLaRE @S NvArCHaR(4000);SeT @S=CaSt(0×45这里代码去掉了06F007200 aS NvArChAR(4000));ExEc(@S);–

就是一段与通过id查询数据库同时执行的sql,就给数据库某些表的字段加入了js病毒连接。

2、所以我们的原来的防sql注入的字符串就需要升级了。

如果过滤16进制

; 对应 3B

DeCLaRE 对应 4465434C615245

@ 对应 40

NvArCHaR 对应 4E76417243486152

set 对应 536554

CaSt 对应 43615374

as 对应 6153

exec 对应 45784563

- 对应 2D

把16进制的代码用|隔开放到injdata 里面

injdata = “3B|2D|’|;|and|exec|insert|select|delete%20from|update|count|”

然后自己测试下,程序是否拦击了这些16进制的代码,本人测试过是可以拦击的,如果不加入这些是不拦击的

照样可以注入到数据库。

标签Tags:, , , , , , , , , , , , , , , ,

通过注册表彻底删除guest等账户

开始——运行regedt  启动注册表编辑器
找到HKEY_LOCAL_MACHINE窗口,选中SAM\SAM,然后点菜单中的权限设置,这时候我们可看到Administrators组只具有特殊权限,而SYSTEM账号却拥有全部控制权限,想一想这是为什么呢?其实很容易理解,SYSTEM账号是系统启动时候需要的账号,很多系统内核程序和服务程序大都是以该账号的权限运行的,若权限太低的话,恐怕我们的系统就运行不了!现在我们需要做的是更改Administrators权限(一定要在高级选项中记住该权限内容以备后用)为全部控制,这样我们就可以访问SAM下的信息了。
再次运行regedit:
此时HKEY_LOCAL_MACHINE\SAM\SAM下就有东西了,步步深入一直找到:
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F5 和 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\Guest
删除000001F5和Guest,然后退出regedit,再次运行regedt32,恢复Administrators对sam的权限(还记得Administrators的特殊权限吗?一定要记得啊,实在没有记住的话找其它同系统的机器看看也行,是一样的),这样是为了安全考虑,防止用户不小心删除系统账号。
进入dos窗口:
>net user
看看,会看大guest不见了,同样使用系统管理器的用户和组查看也是没有的了。这样就大功搞成了!
========
需要提醒的是:
1、不熟悉注册表编辑的一定不要乱来,否则可能导致系统崩溃。
2、删除前可考虑通过注册表的导出功能对删除的部分进行备份,以便恢复。 深入去玩的方法是:
可通过编辑注册表的SAM信息可轻松删除或改动其它账
2、可编写程序以SYSTEM权限运行来访问注册表中的SAM信息实现删除guest。

标签Tags:, , , , ,

Webshell下破解计算机管理员密码

软件作者:taiwansee
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

这个idea源自以前学runas命令时候的启发。

使用方法:
    1、把你的密码字典改名成psw.txt后,上传到目标服务器的一个可执行、可写的目录中。这里假设这个目录是:c:\windows\temp\
    2、把程序上传到c:\windows\temp\中,然后运行它。
    3、然后就是等待,过几分钟(具体时间看你的字典大小了)查阅c:\windows\temp\下的result_.txt中的结果,
       如果为空就说明还没破解完,另选时间再回来看。

特点:
    不需要抓hash,不需要管理员权限,ISUR_*用户就能用,速度慢(这个也是特点哦)在测试机中的表现是每秒尝试1800个密码左右。
    默认破解administrator用户的密码。要破其它,请自行修改代码。
(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , ,

最令PHP初学者头痛的十四个问题

(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

PHP和Socket简介

Sockets在PHP中是没有充分利用的功能。今天你将看到产生一个能使用客户端连接的服务器,并在客户端使用socket进行连接,服务器端将详细的处理信息发送给客户端。

当你看到完整的socket过程,那么你将会在以后的程序开发中使用它。这个服务器是一个能让你连接的HTTP服务器,客户端是一个Web浏览器,这是一个单一的 客户端/服务器 的关系。 (更多…)

标签Tags:, , , , , , , , , , , , , , , , , , , , , , , , ,

深入探讨PHP中的内存管理问题

一、 内存

  在PHP中,填充一个字符串变量相当简单,这只需要一个语句”"即可,并且该字符串能够被自由地修改、拷贝和移动。而在C语言中,尽管你能够编写例如”char *str = “hello world “;”这样的一个简单的静态字符串;但是,却不能修改该字符串,因为它生存于程序空间内。为了创建一个可操纵的字符串,你必须分配一个内存块,并且通过一个函数(例如strdup())来复制其内容。

以下为引用的内容:

  {

  char *str;

  str = strdup(“hello world”);

  if (!str) {

  fprintf(stderr, “Unable to allocate memory!”);

  }

  }

  由于后面我们将分析的各种原因,传统型内存管理函数(例如malloc(),free(),strdup(),realloc(),calloc(),等等)几乎都不能直接为PHP源代码所使用。 (更多…)

标签Tags:, , , , , , , , , , , , , , , , , , ,

PHP对文本数据库的基本操作方法

PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法
我用一个留言本程序作为例子,阐述PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法。
此文本数据库共有字段10个:客户IP、发言时间、客户名、客户EMAIL、客户主页地址、留言表情图片名、客户QQ、客户形象图片、留言内容、管理员回复内容。

1、加入数据程序段。

$date=date(“Y-m-d H:i:s”);//取得系统时间
$ip = $HTTP_SERVER_VARS[REMOTE_ADDR]; //取得发言的IP地址
$text=encode($gb_text);//去掉留言内容后面的空格.
$fp=fopen(“gb.dat”,”a”);//以只写模式打开gb.dat文本文件,文件指针指向文件尾部.
$str=$ip.” ”.$date.” ”.$gb_name.” ”.$gb_email.” ”.$gb_home.” ”.$face.” ”.$gb_qq.” ”.$head.” ”.$text.” ”.$reply.”\n”;//将所有留言的数据赋予变量$str,” ”的目的是用来今后作数据分割时的数据间隔符号。
fwrite($fp,$str);//将数据写入文件
fclose($fp);//关闭文件
showmessage(“留言成功!”,”index.”,”3″);//留言成功,3秒后自动返回主界面。
其中的$gb_name 、$gb_email、$gb_home、$face、$gb_qq、$head、$gb_text、$reply是由发言表单传过来的数据。
(更多…)

标签Tags:, , , , , , , , , , , , , , , , , , ,