恶意代码技术理论:GoLang恶意代码分析
基础知识 执行顺序 执行 runtime_init() 启动GC gcenable() 执行 main_init() (init是由Golang的编译器为每个包生成的,用于初始化该报所依赖的其他包以及该包的全局变量) fn := main_init fn() 执行main函数,此时程序进入用户的代码 fn = main……
恶意代码技术理论:宏病毒恶意代码分析
一 概述 宏病毒是一种常见的计算机病毒,寄存在文档或模板中,但是并不会直接感染可执行程序。其诞生于上世纪90年代,自其诞生之日,各种各样的宏病毒不断在网络上涌现。早期的宏病毒是病毒先驱者们展现高超技术的舞台,只感染文档文件,随着时间的推移,宏病毒的危害也越来越大,宏病毒不再只是感染文档文件,而成为了分发恶意程序的常规途经。宏病毒的执行简易隐蔽快速,一旦用户打……
IDA系列教程:IDA Python
参考资料 Alex Hanel写的电子书:https://leanpub.com/IDAPython-Book Magic Lantern写的:https://magiclantern.fandom.com/wiki/IDAPython 官方教程:https://hex-rays.com/products/ida/support/idapython_docs……
恶意代码样本分析:FinFisher
一. 基础定义 1. Spaghetti codes 面条式代码(spaghetti code)是非结构化和难以维护的源代码的贬义词组,广泛地解释。 意大利面条代码可能由多种因素引起,例如易变的项目要求,缺乏编程风格规则以及能力或经验不足。 代码过度使用GOTO语句而不是结构化编程结构,从而导致错综复杂和不可维护的程序,通常称为意大利面条代码。 这样的代码……
IDA系列教程:堆栈平衡原理与手动恢复平衡
1. 背景 调试样本时发现在某个函数时不能F5,显示positive sp value has been found。初步断定是因为堆栈不平衡导致的,因此需恢复堆栈平衡。 2. 恢复堆栈平衡 IDA->Option->General->Disassembly 勾选stack pointer,打开栈指针显示。 双击左下角output wi……
恶意代码漏洞分析:CVE-2017-11882
1 栈溢出漏洞概述 栈溢出(stack-based buffer overflows)原因一方面因为程序员的疏忽,使用了 strcpy、sprintf 等不安全的函数,增加了栈溢出漏洞的可能。另一方面,因为栈上保存了函数的返回地址等信息,攻击者任意覆盖栈上的返回地址,改变程序执行流程,加载恶意shellcode。这种攻击方法就是栈溢出攻击(stack sma……
IDA系列教程:寄存器与数据类型
0x01 什么是寄存器,它们的用途是什么? 32-bit 寄存器: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 和 EIP EAX – 累加器寄存器 EBX – 基础寄存器 ECX – 计数器寄存器 EDX – 数据寄存器 ESI – 源指针 EDI –……
恶意代码技术理论:ELF恶意代码分析
ELF执行流程 start() -> __libc_start_main( ) -> init( ) -> main( ) -> fini( ) -> rtld_fini( ) -> exit( ) init( ):用于C++全局对象构造 main( ):你自己写的函数 fini( ):用于C++全……
IDA系列教程:由软件破解谈windows消息机制
0x01 背景 在IDA系列教程(一)中附件中有一个可执行程序,在分析这个程序时,部分函数涉及到windows消息机制,恶意代码也会利用windows消息机制来隐藏恶意功能代码。 0x2 基础知识 以下知识选自安全客文章《Windows调试艺术——从真实病毒学习消息机制》一文,本文章尊重原著,纯属学习目的。 Windows是一个消息驱动的系统。Windows……
IDA系列教程:IDA使用方法
0x01 判断32位还是64位程序来选择不同位数的IDA进行分析 64位程序可以看到“PE..d†”,32位程序可以看到“PE..L“。 0x02 操作 使用 ”空格键“ 来切换图形模式和指令模式 使用”options-debuging options-line prefixes“来对图形化界面指令前添加地址。 使用”view-open subv……