chart.js 绘制雷达图

chart.js是一个很newblity的图标库,支持各种图(柱状、曲线、饼图、雷达图等等),使用起来也很简单,这里先奉上官方文档一份 http://www.bootcss.com/p/chart.js/docs/。

chart.js使用canvas绘制,缺点就是移动端性能有点差(或者是我入门太浅)。

官方文档介绍的不甚详细,这里给一个可以成功的example。

雷达图

1.引入chart.js

1).<script>标签引入    逼格太低

2).npm install chart.js 后,var Chart = require('chart.js')    逼格一般

3).npm install chart.js,使用gulp,import Chart from 'chart.js'  逼格目前最高

2.html文件中,一个canvas元素是必须的

style比较简单,就不写css了

3.创建一个图标,只需要new一个chart对象就可以了

需要两个参数,canvas的context,以及config

主要问题在于config,暂时未能完全了解

GitHub上的十一款热门开源安全工具

恶意软件分析、渗透测试、计算机取证——GitHub托管着一系列引人注目的安全工具、足以应对各类规模下计算环境的实际需求。

Stop Updates

GitHub上的十一款热门开源安全工具

作为开源开发领域的基石,“所有漏洞皆属浅表”已经成为一条著名的原则甚至是信条。作为广为人知的Linus定律,当讨论开源模式在安全方面的优势时,开放代码能够提高项目漏洞检测效率的理论也被IT专业人士们所普遍接受。

现在,随着GitHub等高人气代码共享站点的相继涌现,整个开源行业开始越来越多地帮助其它企业保护自己的代码与系统,并为其提供多种多样的安全工具与框架,旨在完成恶意软件分析、渗透测试、计算机取证以及其它同类任务。

以下十一个基本安全项目全部立足于GitHub。任何一位对安全代码及系统抱有兴趣的管理员都有必要对它们加以关注。

Stop Updates

Metasploit框架

作为由开源社区及安全企业Rapid7一手推动的项目,Metasploit框架是一套专门用于渗透测试的漏洞开发与交付系统。它的作用类似于一套 漏洞库,能够帮助管理人员通过定位弱点实现应用程序的安全性评估,并在攻击者发现这些弱点之前采取补救措施。它能够被用于对Windows、Linux、 Mac、Android、iOS以及其它多种系统平台进行测试。

“Metasploit为安全研究人员提供了一种途径,能够以相对普遍的格式对安全漏洞加以表达,”Rapid7公司工程技术经理Tod Beardsley指出。“我们针对全部设备类型打造出数千种模块——包括普通计算机、手机、路由器、交换机、工业控制系统以及嵌入式设备。我几乎想不出 有哪种软件或者固件无法发挥Metasploit的出色实用性。”

项目链接:https://github.com/rapid7/metasploit-framework

Stop Updates

Brakeman

Brakeman是一款专门面向Ruby on Rails应用程序的漏洞扫描工具,同时也针对程序中一部分数值向另一部分传递的流程执行数据流分析。用户无需安装整套应用程序堆栈即可使用该软件,Brakeman缔造者兼维护者Justin Collins解释道。

尽管速度表现还称不上无与伦比,但Brakeman在大型应用程序扫描方面只需数分钟、这样的成绩已经超越了“黑盒”扫描工具。虽然最近已经有针对 性地作出了修复,但用户在使用Brakeman时仍然需要留意误报状况。Brakeman应该被用于充当网站安全扫描工具。Collins目前还没有将其 拓展至其它平台的计划,不过他鼓励其他开发人员对项目代码作出改进。

项目链接:https://github.com/presidentbeef/brakeman

Stop Updates

Cuckoo Sandbox

Cuckoo Sandbox是一款自动化动态恶意软件分析系统,专门用于检查孤立环境当中的可疑文件。

“这套解决方案的主要目的是在启动于Windows虚拟机环境下之后,自动执行并监控任何给定恶意软件的异常活动。当执行流程结束之 后,Cuckoo会进一步分析收集到的数据并生成一份综合性报告,用于解释恶意软件的具体破坏能力,”项目创始人Claudio Guarnieri表示。

Cuckoo所造成的数据包括本地功能与Windows API调用追踪、被创建及被删除的文件副本以及分析机内存转储数据。用户可以对该项目的处理与报告机制进行定制,从而将报告内容生成为不同格式,包括 JSON与HTML。Cuckoo Sandbox已经于2010年开始成为谷歌代码之夏中的项目之一。

项目链接:https://github.com/cuckoobox/cuckoo

Stop Updates

Moloch

Moloch是一套可扩展式IPv4数据包捕捉、索引与数据库系统,能够作为简单的Web界面实现浏览、搜索与导出功能。它借助HTTPS与HTTP机制实现密码支持或者前端Apahce能力,而且无需取代原有IDS引擎。

该软件能够存储并检索标准PCAP格式下的所有网络流量,并能够被部署到多种系统之上、每秒流量处理能力也可扩展至数GB水平。项目组件包括捕捉、 执行单线程C语言应用程序、用户也可以在每台设备上运行多个捕捉进程;一套查看器,这实际是款Node.js应用程序、针对Web接口以及PCAP文件传 输;而Elasticsearch数据库技术则负责搜索类任务。

项目链接:https://github.com/aol/moloch

Stop Updates

MozDef: Mozilla防御平台

这款Mozilla防御平台,也就是MozDef,旨在以自动化方式处理安全事件流程,从而为防御者带来与攻击者相对等的能力:一套实时集成化平台,能够实现监控、反应、协作并改进相关保护功能,该项目缔造者Jeff Bryner解释称。

MozDef对传统SEIM(即安全信息与事件管理)功能作出扩展,使其具备了协同事件响应、可视化以及易于集成至其它企业级系统的能 力,Bryner指出。它采用Elasticsearch、Meteor以及MongoDB收集大量不同类型的数据,并能够根据用户需求以任意方式加以保 存。“大家可以将MozDef视为一套立足于Elasticsearch之上的SIEM层,能够带来安全事件响应任务流程,”Bryner表示。该项目于 2013年在Mozilla公司内部开始进行概念验证。

项目链接:https://github.com/jeffbryner/MozDef

Stop Updates

MIDAS

作为由Etsy与Facebook双方安全团队协作打造的产物,MIDAS是一套专门针对Mac设备的入侵检测分析系统框架(即Mac intrusion detection analysis systems,缩写为MIDASes)。这套模块框架提供辅助工具及示例模型,能够对OS X系统驻留机制中出现的修改活动进行检测。该项目基于《自制防御安全》与《攻击驱动防御》两份报告所阐述的相关概念。

“我们发布这套框架的共同目标在于促进这一领域的探讨热情,并为企业用户提供解决方案雏形、从而对OS X终端当中常见的漏洞利用与驻留模式加以检测,”Etsy与Facebook双方安全团队在一份说明文档中指出。MIDAS用户能够对模块的主机检查、验 证、分析以及其它针对性操作进行定义。

项目链接:https://github.com/etsy/MIDAS

Stop Updates

Bro

Bro网络分析框架“与大多数人所熟知的入侵检测机制存在着本质区别,”Bro项目首席开发者兼加州伯克利大学国际计算机科学协会高级研究员Robin Sommer指出。

尽管入侵检测系统通常能够切实匹配当前存在的各类攻击模式,但Bro是一种真正的编程语言,这使其相较于那些典型系统更为强大,Sommer表示。它能够帮助用户立足于高语义层级执行任务规划。

Bro的目标在于搜寻攻击活动并提供其背景信息与使用模式。它能够将网络中的各设备整理为可视化图形、深入网络流量当中并检查网络数据包;它还提供一套更具通用性的流量分析平台。

项目链接:https://github.com/bro/bro

Stop Updates

OS X Auditor

OS X Auditor是一款免费计算机取证工具,能够对运行系统之上或者需要分析的目标系统副本当中的伪迹进行解析与散列处理。包括内核扩展、系统与第三方代理 及后台程序、不适用的系统以及第三方启动项、用户下载文件外中已安装代理。用户的受隔离文件则可以提取自Safari历史记录、火狐浏览器 cookies、Chrome历史记录、社交与邮件账户以及受审计系统中的Wi-Fi访问点。

项目链接:https://github.com/jipegit/OSXAuditor

Stop Updates

The Sleuth Kit

The Sleuth Kit是一套库与多种命令行工具集合,旨在调查磁盘镜像,包括各分卷与文件系统数据。该套件还提供一款插件框架,允许用户添加更多模块以分析文件内容并建立自动化系统。

作为针对微软及Unix系统的工具组合,Sleuth Kit允许调查人员从镜像当中识别并恢复出事件响应过程中或者自生系统内的各类证据。在Sleuth Kit及其它工具之上充当用户界面方案的是Autopsy,这是一套数字化取证平台。“Autopsy更侧重于面向用户,”Sleuth Kit与Autopsy缔造者Brian Carrier指出。“The Sleuth Kit更像是一整套能够为大家纳入自有工具的库,只不过用户无需对该训加以直接使用。”

项目链接:https://github.com/sleuthkit/sleuthkit

Stop Updates

OSSEC

基于主机的入侵检测系统OSSEC能够实现日志分析、文件完整性检查、监控以及报警等功能,而且能够顺利与各种常见操作系统相对接,包括Linux、Mac OS X、Solaris、AIX以及Windows。

OSSEC旨在帮助企业用户满足合规性方面的各类要求,包括PCI与HIPAA,而且能够通过配置在其检测到未经授权的文件系统修改或者嵌入至软件 及定制应用日志文件的恶意活动时发出警报。一台中央管理服务器负责执行不同操作系统之间的策略管理任务。OSSEC项目由Trend Micro公司提供支持。

项目链接:https://github.com/ossec/ossec-hids

Stop Updates

PassiveDNS

PassiveDNS能够以被动方式收集DNS记录,从而实现事故处理辅助、网络安全监控以及数字取证等功能。该软件能够通过配置读取pcap(即数据包捕捉)文件并将DNS数据输出为日志文件或者提取来自特定接口的数据流量。

这款工具能够作用于IPv4与IPv6流量、在TCP与UDP基础上实现流量解析并通过缓存内存内DNS数据副本的方式在限制记录数据量的同时避免给取证工作带来任何负面影响。

项目链接:https://github.com/gamelinux/passivedns

中文翻译:GitHub上的十一款热门开源安全工具

英文原文:http://www.infoworld.com/slideshow/163151/11-open-source-security-tools-catching-fire-github-249652

Android-aidl传输parceble数据错误

写了一个service,使用AIDL跨进程调用时出现问题,service这边写的数据是正确的,client端拿到的是默认值,都是0.

找了下,

http://stackoverflow.com/questions/24615317/android-aidl-and-service-and-activity-parceable-seems-to-be-passing-default-clas

因为 in  out写反了。

in表示这个参数是入参,会被这个method读,但不会写。out意味着这个method会写但不读。inout表示会读也会写。

in/out/inout从字面意思上很好理解,要记住,它们是修饰参数,in/out都是相对于当前method的。

Android-获取内存,当前/总cpu信息

内存信息中最有用的就是PSS了,还有各种零碎的,在android.os.Debug中可以直接拿到MemeryInfo

 

cpu信息分两类,总的cpu使用率,取proc/stat的数据,这个样子

取到之后解析,拿到使用时间和空闲时间

隔一段时间后,再取一次数据,即可得到cpu使用时间

当前进程的cpu使用率计算方法和总的相似,只不过路径变成了proc/<pid>/stat

解析数据代码如下,如果不计算子进程时间则只用toks[13]和toks[14]

取到之后除以总的cpu时间,即

通过jni获得应用Icon(getApplicationIcon)

jni获得应用icon有两步

1.在java端写一个方法,通过包名获取appIcon,返回byte[]

native初始化时,获取这个method,同时拿到VM和全局context

jobject mBzAppContext;
JavaVM *m_appContext_VM = NULL;

mAppContext = env->NewGlobalRef(thiz);
env->GetJavaVM(&m_appContext_VM);

FIND_CLASS(clazz, "com/xx/xx/xx");
if (clazz == NULL) {
loge("class not exist!!");
}

GET_METHOD_ID(gAppGlobalCallMethod.getAppIcon, clazz,
"getAppIcon", "(Ljava/lang/String;)[B");
if (gAppGlobalCallMethod.getAppIcon == NULL) {
loge("method get fail!!");
}

(Ljava/lang/String;)[B 指入参是String,回参是jbyteArray

2.调用jni函数,拿到byte[],转成char*

void readAppIcon(const char* packageName)
{
if (m_appContext_VM == NULL) {
loge("m_appContext_VM null");
return;
}
if (mAppContext == NULL) {
loge("mAppContext null");
return;
}
if (gAppGlobalCallMethod.getAppIcon== NULL) {
loge("gAppGlobalCallMethod.getAppIcon null");
return;
}
CHECK_JVM_THREAD(m_appContext_VM);
if (error) {
loge("check jvm thread error");
return;
}
jstring jPackageName = env->NewStringUTF(packageName);
jbyteArray jbarray = (jbyteArray)env->CallObjectMethod(mBzAppContext, gAppGlobalCallMethod.getAppIcon, jPackageName);

if (jbarray == nullptr) {
logi("getAppIcon null");
} else {
len = (int)env->GetArrayLength (jbarray);
char *data = (char*)env->GetByteArrayElements(jbarray, 0);
// 这里就把appicon拿到并转成了char*,注意释放data

env->ReleaseByteArrayElements(jbarray, data, 0);
}
if (attached) {
m_appContext_VM->DetachCurrentThread();
}
}

 

AndroidStudio 更改jar包编译顺序优先于android.jar,使用@hide api

使用@hide 的api,可以通过反射,但反射速度慢,且使用不方便。

@hide的api,在编译的时候有问题,如果能编译成功,是可以调用的。那么问题来了,如何编译成功?

可以修改android源码,去掉@hide,编译生成该模块的framework.jar。Eclipse中直接引入该jar包在android.jar前即可。AndroidStudio就比较麻烦,需要做两步。

1.引入jar包,这个网上有无数方法,不表。注意设置compile->provide,gradle文件如下:

原因就是我们只需要编译成功,不需要把这个包打到系统。

这时候在系统自动生成的iml文件中,可以看到一排orderEntry标签 <orderEntry>,也就是我们引用的所有jar包信息,把framework的jar包放到orderEntry的第一位,也就是

前面,这时候IDE就不报错了。

不过只是表象,方便我们写代码自动补全而已。而且iml文件是自动生成的,每次重启IDE都要重新改一下。

2.真正的编译需要在工程的gradle中增加编译选项

找到

在repositores同级增加

Xbootclasspath/p:是Java编译的寻址优先设置,先找缺省路径还是全路径

不确定路径怎么填的,可以使用绝对路径,如

编译通过

Tips:

1.有时候@hide的api编译过了,其他地方又报错。查看一下报错的api,看看是不是对android版本有要求,framework.jar编译最好用较新的编译环境。

2.不要做过多的其他尝试,这两步绝对可以解决问题。

calling startactivity() from outside of an activity context requires the flag_activity_new_task flag. Is this really what you want?

今天遇到一个错误,莫名戳中笑点,好贴心好长的提示。

原因:使用application startActivity,必须使用FLAG_ACTIVITY_NEW_TASK,因为新起来的Activity没办法和application放到一个task中,必须用FLAG_ACTIVITY_NEW_TASK让新启动的ACTIVITY独占一个TASK。

statfs获得硬盘信息

statfs结构如下:

struct statfs
{
long    f_type;     /* 文件系统类型  */
long    f_bsize;    /* 经过优化的传输块大小  */
long    f_blocks;   /* 文件系统数据块总数 */
long    f_bfree;    /* 可用块数 */
long    f_bavail;   /* 非超级用户可获取的块数 */
long    f_files;    /* 文件结点总数 */
long    f_ffree;    /* 可用文件结点数 */
fsid_t  f_fsid;     /* 文件系统标识 */
long    f_namelen;  /* 文件名的最大长度 */
};

statfs接口调用成功返回0,失败返回-1.

简单用法:
int resultCode = statfs(path.c_str(), &data);
if (resultCode < 0) {
return false;
} else {
unsigned long freeSize = data.f_bsize * data.f_bfree;
unsigned long availSize = data.f_bsize * data.f_bavail;
unsigned long totalSize = data.f_bsize * data.f_blocks;
}

单位bytes,使用>>20转为MB。