Monthly Archives: January 2018

Intro to unicorn engine

什么是Unicorn引擎 Unicorn是一个轻量级, 多平台, 多架构的CPU模拟器框架. 我们可以更好地关注CPU操作, 忽略机器设备的差异. 想象一下, 我们可以将其应用于这些情景: 比如我们单纯只是需要模拟代码的执行而非需要一个真的CPU去完成那些操作, 又或者想要更安全地分析恶意代码, 检测病毒特征, 或者想要在逆向过程中验证某些代码的含义. 使用CPU模拟器可以很好地帮助我们提供便捷. 它的亮点(这也归功于Unicorn是基于qemu而开发的)有: 支持多种架构: Arm, Arm64 (Armv8), M68K, Mips, Sparc, & X86 (include X86_64). 对Windows和*nix系统(已确认包含Mac OSX, Linux, *BSD & Solaris)的原生支持 具有平台独立且简洁易于使用的API 使用JIT编译技术, 性能表现优异 你可以在Black Hat USA 2015获悉有关Unicorn引擎的更多技术细节. Github项目主页: unicorn … Continue reading

Posted in reverse engnieering | Leave a comment

The structure of .pyc files

原文链接: The structure of .pyc files 简单来说, 一个pyc文件包含以下三块 * 一个4字节的魔数(magic number) * 一个4直接的修改时间戳(modification timestamp) * 一个编排过的代码对象 对于各个版本的python解释器, magic number都各不相同, 对于python 2.5则是b3f20d0a 修改时间戳则是源文件生成.pyc文件的Unix修改时间戳, 当源文件改变的时候, 该值也会变化 整个文件剩下的部分则是在编译源文件产生的代码对象编排后的输出. marshal跟python的pickle类似, 它对python对象进行序列化操作. 不过marshal和pickle的目标不同. pickle目的在于产生一个持久的独立于版本的序列化, 而marshal则是为了短暂地序列化对象, 因此它的表示会随着python版本二改变. 而且, pickle被设计用于适用用户定义的类型, 而marshal这时用于处理python内部类型的复杂结构 marshal的特性给出了pyc文件的重要特征: 它对平台独立, 但依赖于python版本. 一个2.4版本的pyc文件不能在2.5版本下执行, 但是它可以很好地移植到不同操作系统里. 接下来的部分也简单: … Continue reading

Posted in reverse engnieering | Leave a comment