前一篇文章介绍了网络聊天室中的界面,回顾看这。asyncore模块封装了底层的异步操作(比如poll之类),使得我们能很方便使用异步socket。关于这个模块更多的介绍请看官方文档。当然,如果仅仅是介绍如何使用这个模块,那这篇文章就没什么意思了,所以这篇文章将更进一步,讲讲“为什么”,然后从源码的角度来理解这个模块。 1.CPU密集型和IO密集型 在讲为什么之前先来理解一个概念:...

2014年就这么过去了,在这过去的20多年来,我觉得2014年对我而言是最不平凡的一年,这一年内发生了太多事:考研,调剂,录取,毕业,2个月的工作,学车,家里发生了点小情况,写blog,适应新环境,一个学期的graduate生活等等等等。总结起来,这一年让我对3个词有了更深的理解:独立,思考,责任。 小初高都在父母的陪伴下度过,而考研是迄今为止我独立做出的最重大的决定,这一路过来尝遍...

1.原始的链接方法 在讲静态链接与动态链接前,先看看原始的链接方法。比如编译如下代码: C /******** * test.c *********/ #include<stdio.h> int main() {     int num;     scanf("%d",&num); printf("ok %d\n",num); return 0; } 1234567891011 /********* test.c*******...

打算用Python写一个网络聊天室,先从界面入手,实现的功能很简单:将输入框中的文字发送出去并且显示在消息框中,然后清空输入框的内容。 wxPython是Python下GUI编程库, 窗口应用程序基本上都是基于事件消息处理的,wxPython也不例外,所以只要掌握了其他语言的窗口应用程序编程思想,那就很容易上手wxPython。 Ubuntu下安装wxPython很简单,先看看库里有没有: ...

Python让生活变得更容易: Python filename = raw_input("input the file:") f = open(filename,'r') words = f.read().split() print words dic = {} for word in words: if dic.has_key(word): dic[word] = dic[word] + 1 else: dic[word] = 1 for key in dic: print "%s : %d" % (key,dic[key]) ...

在讲解input和raw_input两者的区别前先来看看eval这个函数: 1.eval() eval函数用于计算表达式,会将输入当成表达式计算,然后返回计算结果。输入的第一个参数为表达式字符串或内建函数compile()创建的预编译代码对象,第二,三个参数代表全局和局部名字空间中的对象。eval使用例子: Python eval("1+1") 1 ev...

1.什么是SSH ssh(Secure Shell Protocol)是一种安全的远程登入协议,相比于telnet协议以明文的形式传输数据,用户名,密码,ssh协议将这些内容都进行了加密,可以有效的防止一些网络攻击。 2.SSH原理 ssh登入有两种模式:口令登入和公钥登入,口令登入每次都要输入密码,原理简单但较为繁琐;公钥登入需要用户生成自己的公私钥对,并且要将公钥事先内置于服务器,但安全性更高...

最近在逆向apk的时候发现关键的加密算法被放进了so库里,毕竟直接用java写这种代码太容易被破了,放在so里面更安全些。既然这样,那也只好动态调so了,查资料研究了几个小时终于搞定了,现记录如下: 1.基本配置 IDA,adb,android_server,模拟器。这里用的是IDA6.5。 android_server在IDA的目录下面,需要用adb push至模拟器: adb push androi...

1.Dex文件格式 在上篇Dex文件解析文章中大致介绍了Dex文件的格式,回顾点这里:Android 文件解析之Dex文件头 这一节主要介绍string字符串是如何保存在Dex文件中的。 下面这张图很清晰的表示了string字符串在Dex文件中的存储方式: 在Dex的header中string_ids_size和string_ids_off分别表示了字符串的个数和string table的偏移,而string table中又存储着每个string数据的真实偏移...

1.工具准备 动态调试Smali代码需要的工具有:apktool,netbeans,signapk.jar,ddms 2.apktool反编译 apktool d -d xxx.apk -o out 1 apktool d -d xxx.apk -o out 不加-d选项时生成的smali代码是.class结尾的,不能用于动态调试,加上-d选项后生成的smali代码是.java 结尾的,并且...

在Python的6种数据类型(字符串,整数,浮点数,列表,元组,字典)中,并没有字节,指针等类型,但是在平时编程中常常需要使用这些类型。其实Python有很多替代的方法来解决我们的问题,比如c中的结构体可以用Python中的struct模块替代,在网络编程传输数据的时候十分好用。 这篇文章主要介绍struct模块和部分os模块。struct模块能将Python中的数据类型转换成c中的结构体,反之亦可。...

判断手机是否root只需判断su文件是否在特定的目录下(适用于大部分情况),代码如下: /** * * 判断手机是否ROOT * */ public boolean isRoot() { boolean root = false; try { if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbi...

1.Android apk文件结构 Android的apk文件相当于一个压缩文件,解压apk文件后目录下文件大致如下: 其中,META-INF文件夹一般存放apk的签名文件,res文件夹存放资源文件,AndroidManifest.xml是程序的全局配置文件,classes.dex是Dalvik下的可执行程序,resources.arsc是编译后的二进制资源文件。要想实现对apk文件的加壳脱壳首先得熟悉dex文件的结构,接下来就一步步的分析并...

Windows下有很多好用的十六进制编辑器,比如winhex,而Linux下其实也有很多很强大的工具或命令来查看文件的十六进制格式: 1.vi/vim 在命令模式下进入十六进制模式: :%!xxd 1 :%!xxd 退出十六进制模式: :%!xxd -r ...

使用gdb动态调试代码想必大家都不陌生,但实际上gdb还有很多强大的功能,比如动态调试反汇编代码,基本功能并不比Windows下的OD差。先来一张动态调试反汇编代码的图:   只要使用tui参数即可: Vim gdb -tui filename 1 gdb -tui filename 进入之后可以通过layout切换窗口,...

1.URI和URL URI是最广泛的一个概念,泛指资源的标识,它包含了URL和URN。URL十分常见,其格式是:资源类型://域名:端口/路径?查询参数,比如在本blog中搜索“互联网”,提交的URL为: http://burningcodes.net/?s=%E4%BA%92%E8%81%94%E7%BD%91 1 http://burningcodes.net/?s=%E4...

+
跳转到评论