花指令的原理和常用花指令收集

花指令的原理和常用花指令收集

花指令的作用是对付静态分析,以下面一段程序说明一下花指令的原理
代码
#include  < iostream.h >
#include  < windows.h >
void  main()
{
    _asm
    {
            jmp l2
        _EMIT  0x1 // 这里就是花指令
        _EMIT  0x2 // 这里就是花指令
        _EMIT  0x3 // 这里就是花指令
        _EMIT  0x4 // 这里就是花指令
l2:
        mov eax, 0x11111111
    }
}

可以看到,程序直接跳转到标签l2了,在jmp指令和l2之间的就是花指令,花指令为什么能起作用呢?那是因为反编译器在反编译的时候不会像我们人一样去理解jmp和l2之间的指令是永远不会执行到的,所以在反编译的时候就把这段乱七八糟的代码作为正常的指令了,而这样的反编译会影响mov eax,0x11111111这个指令的正确识别,所以导致在OD中以上代码不会正确显示。

了解了原理我们就可以自如地设计花指令了,比如再加一段_EMIT 0x5等等。

花指令不光是能够用jmp指令来设计,还可以用call指令配合ret指令来进行设计,原理是这样的:我们知道call指令等于这样两条指令,一是把自身所在位置的下一条指令的地址压入堆栈,二是jmp到call的地址处,而ret指令可以理解为jmp到call指令压入堆栈的地址,因此,可以用call指令这样来写花指令:

1.call一个地址,在call下面随便写一点花指令,但是要注意一点与jmp版花指令不同的,我们要记得自己写的花指令占了多少个字节,比如,占了2字节,至于为什么要记得,往下看

2.在call里面,也就是函数里面,首先pop出压入的地址,然后把这个地址减去花指令占用的字节数,这里是2字节,再重新push进堆栈,然后就ret

这样,call结束以后执行的下一条指令就是我们想要去的位置了,也就是花指令下面的正常的指令了

其实用call来做的话起到的也就是jmp的作用,道理是一样的,只不过手法不同

这个call ret配合的方法是我分析aspack看到的,不知道还有没有其他的花指令的方法,有的话再加上:)

这里有个找花指令的小技巧,当发现jmp或者call的地址在OD中没显示的话,就把jmp或者call指令的下一个指令nop掉吧,肯定是花指令,如果还没有显示的话就继续nop下一条,直到显示的指令和执行的指令一致,所以说,去花指令是个体力活,哈哈

补充一点,如果这个call不跟进去的话,貌似程序就没办法调试了,不知道怎么回事,不清楚原因

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SEH异常的应用 SEH异常就是结构化异常处理,程序遇到SEH异常时,异常交给系统处理(这讲是一个非常负责的过程,很容易跟飞),所以利用SEH异常时可以一定程度的防止程度调试(SEH异常在壳里是很常见的)。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push ******** //地址压入堆栈 mov eax,dword ptr fs:[0] push eax //fs[0]压入堆栈,执行完成后fs[0]指向堆栈 mov dword ptr fs:[0],esp //构造一个ERR结构 mov esi,0 //简单的赋值语句 mov eax,dword ptr ds:[esi] //产生异常 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push ******** mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp mov ebx,0 div ebx ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ nop push ******** mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp int 3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push ******** mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp nop int 68 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push ******** mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp nop vxdcall 134543 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push ******** mov eax,dword ptr fs:[0] push eax mov dword ptr fs:[0],esp ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push xxx push dword ptr fs:[0] mov fs:[0], esp stc ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push xxx push dword ptr fs:[0] mov fs:[0], esp JMP 0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push xxx push dword ptr fs:[0] mov fs:[0], esp ret ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ push xxx push dword ptr fs:[0] mov fs:[0], esp pop ss
1 人类社会的四次信息革命: 1)语言的出现: 可表达思维的工具,也是人类交流和传播信息最早使用的工具; 2)文字的出现: 不仅能够保存信息,而且使信息的传播冲破时、空的限制,对人类文化的发展起了重大的作用; 3)印刷术的发明: 能大量复制信息,从而在更大范围内以更快的速度传播人类文明; 4)计算机网络:以计算机为中心,以计算机技术与通信技术相结合为标志的一次革命。 计算机基础知识和计算机基本操作全文共63页,当前为第1页。 2 第一节 计算机基础 计算机的诞生与发展 计算机的发展阶段 计算机的分类 计算机技术的发展方向 计算机的主要应用 计算机系统的基本组成 计算机基础知识和计算机基本操作全文共63页,当前为第2页。 3 计算机的诞生与发展 世界上第一台电子计算机诞生于1946年,美国宾夕法尼亚大学,取名"电子数字积分计算机,简称"埃尼阿克(ENIAC)"。 它是一种能自动对各种信息进行高速处理和存储的电子设备,它是现代科学技术发展的必然产物 计算机的发展突飞猛进,在短短50年间,已经历了电子管、晶体管、集成电路和大规模集成电路等四代: 计算机基础知识和计算机基本操作全文共63页,当前为第3页。 4 计算机的发展阶段 逻辑元件 程序设计 语言 运算速度 内存容量 第一代1949~1957 电子管 机器语言或 汇编语言 几千次 / 每秒 几 KB 第二代1958~1964 晶体管 FORTRAN、ALGOL、COBOL 几十万次 / 每秒 几十KB 第三代 1965~1971 中、小规模集成电路 操作系统和 会话式语言 百万次 / 每秒 第四代 1971 以后 大规模或超大规模集成电路 几百万亿次 / 每秒 第五代智能化计算机正在研制之中: 使计算机具有看、听、说、想、学习、逻辑判断等功能。 特点 时代 几百MB 几十MB 面向对象的语言 计算机基础知识和计算机基本操作全文共63页,当前为第4页。 5 计算机的分类 (1)按工作原理划分: 电子模拟计算机、电子数字计算机 和 混合计算机 ; (2)按制造计算机所用元器件划分: 第一、第二、 第三、第四代计算机; (3)按功能划分: 巨型机、大型机、中型机、小型机、微型机 (4)按用途划分: 可分为通用计算机、专用计算机和工业控制机等。 计算机基础知识和计算机基本操作全文共63页,当前为第5页。 6 计算机的主要应用 (1)科学 计算 用于计算复杂、人工无法实现的各种数值计算 (如解千阶微分方程、大型矩阵运算、天气预报等); (2)信息 处理 占80%以上;对各种数据信息进行收集、加工、分类、合并、排序、计算、传送、存储以及打印输出各种报表或图形等; 特点:数据量大、计算简单(主要是逻辑运算和判断) (3)实时 控制 应用于工业生产:提高自动化水平、产品质量和合格率 应用于交通、邮电、卫星通信:快速、准确 (4)计算机 辅助系统 计算机辅助设计:广泛应用于服装、机械、飞机、船舶、水坝、集成电路等设计中 计算机辅助制造:直接控制产品的加工和生产 计算机辅助教学:CAI课件的CAI;利用计算机网络的远程教育 (5)人工 智能 利用计算机模拟人的智能,用于机器人、医疗诊断专家系统、推理证明等各方面 计算机基础知识和计算机基本操作全文共63页,当前为第6页。 7 计算机的基本工作原理 冯·诺依曼于1945年首先提出了程序存储的基本思想:概括为以下三点: (1) 计算机由运算器、控制器、存储器、输入设备和输出设备五个基本部分组成。 (2) 计算机内部采用二进制表示指令和数据。 (3) 将编制好的程序和原始数据存入计算机的内存储器中,启动计算机后,能自动逐条取出指令执行。 计算机基础知识和计算机基本操作全文共63页,当前为第7页。 8 计算机系统的基本组成 计算机系统 运 算 器 控 制 器 硬件:( 物质设备 ) 存 储 器 输入设备 输出设备 软件:(程序 + 文档) 系统软件 应用软件 计算机基础知识和计算机基本操作全文共63页,当前为第8页。 9 (1) 计算机的硬件结构: ( 表示数据传送线, 表示控制信号线) 输入设备 存储器 输出设备 控制器 运算器 计算机基础知识和计算机基本操作全文共63页,当前为第9页。 10 (2) 计算机各部件的主要功能 1) 运算器(ALU: Arithmetical and Logical Unit) 运算器的主要功能就是对二进制数据进行算术运算和逻辑运算,所以也称算术逻辑单元。 2) 控制器(CU:Control Unit) 控制器是整个计算机的控制枢纽,用于控制计算机各部件协调地工作。 3) 存储器(Memory) 存储器是计算机用来存放程序和数据的记忆装置。 4) 输入设备(Input Device) 常用的输入设备有键盘、鼠标、扫描仪、触摸
课程标准 课程名称:单片机原理及应用 课程代码:02038 适用专业:应用电子技术、通信技术 学 时:72 学 分:4.5 制 订 人: 审 核: 《单片机原理及应用》学习领域(课程)标准 一、学习领域(课程)综述 (一)学习领域定位 "单片机原理及应用"学习领域由岗位群的"电子产品技术支持岗位"行动领域转化而来 ,是构成应用电子技术专业框架教学计划的专业学习领域之一,其定位见表一: 表一 学习领域定位 "学习领域性质"专业必修学习领域 " "学习领域功能"使学生具备从事电子产品技术支持工作所需的基础知识和" " "技能 " "前导学习领域"电路分析、模拟电子技术、数字电子技术、C语言程序设 " " "计、计算机基础 " "平行学习领域"PLC可编程控制 " "后续学习领域"无 " (二)设计思路 本学习领域注重培养分析问题、解决问题的能力、强化学生动手实践能力,遵循学生 认知规律,紧密结合应用电子专业的发展需要,为将来从事应用电子产品的设计、检测 奠定坚实的基础。将本课程的教学活动分析设计成若干项目或工作情景,以项目为单位 组织教学、并以典型设备为载体,通过具体案例,按单片机项目实施的顺序逐步展开, 让学生在掌握技能的同时,引出相关专业理论知识,使学生在技术训练过程中加深对专 业知识、技能的理解和应用、培养学生的综合职业能力,满足学生职业生涯发展的需要 。 本课程在内容组织形式上强调了学生的主体性学习,在每个项目实施前,先提出学习 目标,再进行任务分析,学生针对项目的各项任务进行相关知识的学习,并通过多种实 践活动实施项目以实现学习目标。最后根据多元化的评分标准进行自我评价。 (三)学习领域(课程)目标 1. 方法能力目标: 能根据项目任务或工作,制订项目完成工作计划; 学会自我学习、收集和检索信息、查阅技术资料; 在单片机应用程序调试过程中会选择各种仪器仪表; 学会单片机应用程序 KEIL 的仿真调试方法; 学会学习和工作的方法,勤于思考、做事认真的良好作风; 培养学生一丝不苟、刻苦钻研的职业道德; 学会在产品制作过程中进行技术指导、质量管理和成本核算方法。 2. 社会能力目标: 建立团结协作的精神,能与人沟通和合作完成工作任务; 养成勇于创新、敬业乐业的工作作风; 形成清晰的逻辑思维意识,正确辨别事物的真假; 了解电子行业技术应用的发展前景,拓宽产品开发的思路; 掌握产品生产工艺要求,培养工作的质量意识、安全意识; 具有较强的社会责任感,为祖国发展强大贡献力量的责任意识; 积累丰富的工作经验。 3. 专业(职业)能力目标: 能熟悉和了解不同厂商、不同型号单片机器件并掌握其性能特点; 能读懂单片机应用系统电路原理,包括复位电路、时钟电路、最小单片机应用系统 电路,掌握各 I/O的区别及与外围电路连接的方法,区分辩别单片机的地址线、数据线及控制 线,熟练掌握单片机拥有的系统资源及资源利用,掌握汇编语言的指令格式、寻 址方式,学会汇编语言的程序编写,学会简单的应用系统设计; 能识别各种外围元器件并进行元器件焊接、KEIL 仿真调试; 能根据应用系统原理图编写控制程序; 能在单片机系统调试和维修过程中,通过工程计算和理论分析, 判断故障点和提供解决问题的途径; 会使用常用仪器仪表如万用表、示波器、频率计对单片机应用系统进行判断分析、 调 试,直至调试成功; 掌握程序流程图的画法、子程序的编写方法、中断程序的编写方法、子程序和中断 调用、伪指令的熟练使用、熟练掌握顺序程序结构、循环程序结构、分支程序结 构,掌握仿真器的使用及结合软硬件调试程序。 二、学习领域(课程)描述 学习领域描述包括学习领域名称、学期、参考学时、学习任务和学习领域目标等,见 表二: 表二 学习领域的描述 "学习领域:单片机原理及应用 " "教学时间安排:第四学期 课时:72 " "学习任务: " "掌握单片机的硬件结构、熟悉汇编语言的应用、理解常用单片机系统设计的控制方式、特点,掌握单片机系统设计的方法 " "学习目标: " "1. 了解单片机的概念与种类,了解各种单片机的最新发展水平和方向; " "2. 熟悉常用单片机的基本结构、工作过程及应用特点; " "3. 会应用汇编语言进行基本模块程序的编写; " "4. 熟练使用keil软件的主要功能; " "5. 会根据使用要求,查阅单片机性能指标与使用技术,能够正确选用设计常用的单片机系统; " "6. 会应用单片机系统内部的I/O口、定时、计数、中断、数模转换、模数转换的各个功能; " "7. 能初步识读单片机控制电路图,并能说出系统组成的模块及其作用,具备单片机系统设计安装和调试的初步能力。 " "学习组织形式与方法 " ""学习准备"阶段采用正面课堂教学,部分采用独立学习;多数计划实施阶段采用小组学习,明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值