上篇文章介绍了so加壳(加密特定section)的原理,回顾点这。这篇文章将介绍如何使加壳的so正常运行。 1.动态解密原理 在上篇文章说的加壳原理中,将特定section的长度和偏移分别写入so头部的e_entry和e_shoff字段,那么在解密时只需读取这两个字段即可找到特定section的偏移。接下来还需解决以下几个问题: 如何找到so被加载的起始地址 什么时候进行解密 如何动态修改内存权限 问题一:...

上篇文章介绍了so加壳需要了解的elf文件格式回顾点我,这篇将介绍so加壳的原理,并且给出python版源码。 1.加壳原理 本加固方案实现对特定section进行整体加密。对特定section进行整体加密需要解决以下几个问题: 如何找到特定的section 使用什么方法加密 是否可以简化解密操作 读过上一篇blog的话,第一个问题就很简单了。只要读取每个section的名字与要被加密的section名比较即可;第...

1.ARP欺骗攻击 局域网内的主机,路由器等都通过MAC地址来相互建立连接。每台PC都有一张ARP缓存表,主机将一些常用的MAC地址记录在表中,这样就不需要每次都使用ARP协议查找MAC地址。当一台主机在访问外网时(比如访问baidu),这台主机会在ARP缓存表中查找网关MAC,然后将要发送的数据包的数据链路层的目的MAC地址填入网关的MAC,然后将其发送。而主机一...

scapy是python中一个非常强大的网络数据包处理模块,它可以轻松的构建各类数据包,这篇文章将对收发常见数据包做一个总结。官方文档在这。 1.收发数据包函数 scapy模块中有好几个收发数据包的函数,他们能完成不同的功能: send()  只发送而不接收数据包,并且网络层之下的都默认处理好了,只需传给它网络层之上(包括网络层)的参数即可 sendp()  只发送不接收,并且数据链路层之下的...

这个解析器可以读取dex文件中的各个数据,比如string,field,method,class等。通过写这个解析器对dex文件格式有了比较清晰的认识,也算是为以后学习dex文件的混淆和加壳做准备把。 Python import struct import binascii import hashlib import zlib class DexFile: def __init__(self,filepath): self.dex = open(filepath,"r") ...

Dex文件中最重要的就是各个class了,method tale,field table,string table这些的存在都是为了class服务的,每个方法和字段最终都要归属与某个具体的类,它们之间的关系大致如下: header中的class_def_off指向了第一个类的class item,所有类的item都可以由class_def_off加上一个偏移获得,每个item中有8项,共32bytes,指明了这个类的名字,权限,类数据等,其中class_data_off指出...

Checksum Dex文件头中的checksum是用来校验文件的完整性,使用adler32算法。在python中的zlib库中有该算法: Python import zlib 1 import zlib checksum计算dex文件中checksum字段之后(12字节之后)的数据,主要代码如下: def CalChecksum...

Proto table中每一项占12个字节,每一项包括3个元素: shorty_idx(uint):函数原型(函数类型的简写),指向string table的索引 return_type_idx(uint):返回类型,指向type table的索引 parameters_off(uint):指向这个函数的参数列表(如果这个字段为0表示这个函数没有参数) shorty_idx 这个字段的内容是函数原型的简写形式,它遵循ShortyDescriptor语法。其中,第一个字母...

前面几篇文章介绍了聊天室中使用到的模块,回顾看这:wxpython模块,asyncore模块,会使用这几个模块后,聊天室就很容易实现了,当然还有一些需要注意的地方在这篇文章会一一介绍。 1.服务器及客户端数据处理流程 Server接受客户端的连接,连接上之后为每一个客户端生成一个ChatSession,ChatSession负责与客户端进行原始数据的收发,当收到原始数据后,ChatSession将数据丢给Ro...

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

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

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

+
跳转到评论