Shellcode编写入门
为什么要手写shellcode?
现在的题目对shellcode做了越来越多的限制,比如限制长度,限制特定字符等等。所以一些通用性的shellcode已经很难再起作用,针对某个二进制文件编写特异化shellcode势在必行。
注:本文默认你已经有一定的Rust基础
rust的宏的强大相信大家肯定听的不少,本篇就简单说说rust的过程宏
rust的宏有好几种,有基于模式匹配的,还有可以直接对语法树动手的,过程宏就是可以修改语法树,可以在编译器派生代码:比如有个test crate,然后它依赖于test_macro crate,而后者是一个proc-macro库,也就是里面定义了过程宏,编译时就会先编译test_macro然后用test_macro的对test的语法解析流修改再丢给编译器,所以可以实现很多非常抽象的操作。
写本文的契机是,前段时间在Rust中文社区群里看到有人问能不能用宏把json生成一个enum(json只有一层),这个需求和过程宏还是很契合的,所以就简单实现了一下,以下内容就是对实现的讲解
ida pro7.7已经基本普及了,所以本篇文章是基于ida pro77和python3环境编写。
不可否认的是ida pro在静态分析上极为强大,不过动调方面还是比起其他工具稍显不足,而idapython提供了大量的ida的api,能一定程度上缓解动调的缺陷,这里就给大家简单介绍一下(
PS:参考了Q神的 http://www.qfrost.com/posts/ctf/idapython ,并且修正为了新版ida python的api
Include:
This book?
Before Start
Quick Start with a small Game
Improve your Rust code (TODO)
Others (TODO)
先写点简单的,后面看情况补充……