破解和混合编程实例 Hacker Reverse Engineering

Slides:



Advertisements
Similar presentations
全面准确学习领会 党的十八精神.
Advertisements

教育年鉴条目的撰写.
22.3 实际问题与一元二次方程(1).
计算机体系结构 应用程序 软件 操作系统 编译器 固件 指令集 输入输出 CPU 硬件 内存 (I/O) 集成电路 元件,逻辑门.
Advantage And Disadvantage
毕业答辩PPT模板 答辩人: XXX 指导老师: XX教授
愿:这个冬天不再寒冷! 甲流预防&冬日保健 外国语学院 校医院.
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
OpenMP简介和开发教程 广州创龙电子科技有限公司
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
SVN的基本概念 柳峰
第二讲 搭建Java Web开发环境 主讲人:孙娜
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
SVN服务器的搭建(Windows) 柳峰
基本的”防”黑客技术 Basic” ” Hacker Technique
走进编程 程序的顺序结构(二).
辅导课程六.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
黑客反向工程导论 中国科技大学计算机系
Chen Kaiming Copyright 2007
WinRAR(64)反汇编 Presented by: 郭炜栋 陈赛特.
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
实习前你需要知道的 PRESENTED BY Yisa.
SOA – Experiment 2: Query Classification Web Service
第7章 在C/C++中使用汇编 罗文坚 中国科大 计算机学院
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第 3 章、組合語言 作者:陳鍾誠 旗標出版社.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
本节内容 字节对齐.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
物件導向程式設計 CH2.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
项目二:HTML语言基础.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第4章 Excel电子表格制作软件 4.4 函数(一).
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
iSIGHT 基本培训 使用 Excel的栅栏问题
虚拟机加密,是把源程序的X86指令变成自定义的伪指令,执行时内置在保护程序中的VM就会启动,读取伪指令,然后解析执行
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
College of Computer Science & Technology
临界区问题的硬件指令解决方案 (Synchronization Hardware)
<编程达人入门课程> 本节内容 学习路线 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本节内容 导出表 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
大数据搜索挖掘实验室 第五章 子程序设计 张华平 副教授 博士 Website: 大数据搜索挖掘实验室
24 or 1024? PWN Jawbone Up24 手环.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
黑客反向工程导论 中国科技大学计算机系
Presentation transcript:

破解和混合编程实例 Hacker Reverse Engineering 2018/11/12 破解和混合编程实例 Hacker Reverse Engineering chenkm@ustc.edu.cn

自定义保护机制,并尝试破解 ■ 创建一个最简单的保护机制并破解它; 2018/11/12 自定义保护机制,并尝试破解 ■ 创建一个最简单的保护机制并破解它; ■ 选一个实例, 在此基础上学习十六进制编辑器, API窥测器 与 反汇编器(IDA Pro) ■ 破解一个实际的例子 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 chenkm@ustc.edu.cn

自定义保护机制,并尝试破解 最简单的密码保护算法: 密码存放位置: 程序中/ 配置文件/注册表 密码保护措施: 无 2018/11/12 自定义保护机制,并尝试破解 最简单的密码保护算法: 密码存放位置: 程序中/ 配置文件/注册表 密码保护措施: 无 if (strcmp(password entered, reference password)) { /* 密码不正确 */ } else /* 密码正确 */ 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 chenkm@ustc.edu.cn

#define legal_psw "my.good.password" int main() { char user_psw[666]; 2018/11/12 黑客反向工程热身 Protect_password #define legal_psw "my.good.password" int main() { char user_psw[666]; cout << “crackme 00h\n enter password: “; cin >> user_psw; if (strcmp(legal_psw, user_psw)) cout<<“wrong password\n”; // “标记"密码不匹配 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 chenkm@ustc.edu.cn

黑客反向工程热身 else cout<< “password ok\nhello ,legal user|\n “; //“标记”密码匹配 return 0; } // "申斥"密码不匹配 // "申斥"密码不匹配 // "申斥"密码不匹配 2018/11/12 chenkm@ustc.edu.cn 0551-3602824

自动过滤上述程序二进制内容结果 00007d11: LCMapStringW 00007d1f: kernel32.dll 0000805c: crackme 00h 0000806a: enter passwd: 0000807d: my.good.password 0000808f: wrong password 0000809c: password ok 000080af: hello, legal user! 000080c2: .?Avios@@ 000080de: .?Avistream@@ ………… 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 6

结果分析 2018/11/12 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程热身 编译后的程序执行 □猜测密码---凭运气,难度大 □分析程序的组成 代码 …… 数据(密码字符串) 编译后的程序执行 □猜测密码---凭运气,难度大 □分析程序的组成 代码 …… 数据(密码字符串) 2018/11/12 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程热身 ■ data: 数据段 rdata: 只读数据, 字符串文字和常量. 如本程序中的 "myGOODpassword\n“。 2018/11/12 黑客反向工程热身 ■ data: 数据段 rdata: 只读数据, 字符串文字和常量. 如本程序中的 "myGOODpassword\n“。 bss: 未初始化数据, 比如函数和静态变量。 idata: 包括导入库和导入地址名称表。 edata:包含了应用程序或DLL的导出数据。 ■ text(code): 代码段。 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 chenkm@ustc.edu.cn

黑客反向工程热身 ■c中,内存数据分为如下几个区 ■ C++中,内存分成5个区,分别为: 1.栈--- 由编译器自动分配释放[bp+xx], [bp-xx]。 2.堆--- 一般由程序员分配释放new(), delete() 函数。 3.全局区(静态区)共享存储区。 初始化的全局变量和静态变量在一块区域(data)。 未初始化全局和静态变量放在相邻区域(bss)。 4.另外还有一个专门放常量的地方(rdata)。 ■ C++中,内存分成5个区,分别为:  1.栈,里面的变量通常是局部变量、函数参数等。 2018/11/12 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程热身 2.堆,由new分配的内存块,由delete回收。 3.自由存储区,由malloc等分配的内存块,和堆相似,   3.自由存储区,由malloc等分配的内存块,和堆相似, 由free回收。 4.全局/静态存储区,全局和静态变量均被分配到同一块内存中,由该语言编译器自行确定(与C语言有差别)。 5.常量存储区,存放常量,不允许修改。 静态变量/全局变量:全局/静态存储区。 常量存放在常量区。 程序放在代码区。 2018/11/12 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程热身 查看二进制文件. 根据: 编译器将初始变量放在如下数据段中. data rdata 自定义段 根据: 编译器将初始变量放在如下数据段中. data rdata 自定义段 2018/11/12 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程热身 改写动机:隐藏密码字符串,增加一点分析难度。 int count = 0 2018/11/12 黑客反向工程热身 改写动机:隐藏密码字符串,增加一点分析难度。 int count = 0   // 从现在开始, 所有初始化变量都放置在.kpnc中. #pragma data_seg(“kpnc”) char passwd[]=PASSWORD; #pragma data_seg()   // 现在所有初始变量又将放到默认段rdata中了. char buff[PASSWORD_SIZE]=“ “; 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 chenkm@ustc.edu.cn

黑客反向工程热身 改写后的源代码清单---list1_p9.cpp idag list1_p9.exe 目标代码中出现了如下段落: text 2018/11/12 黑客反向工程热身 改写后的源代码清单---list1_p9.cpp idag list1_p9.exe 目标代码中出现了如下段落: text rdata data idata kpnc 只有在kpnc 段中才能看到密码字符串信息. "myGOODpassword\n“ 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 chenkm@ustc.edu.cn

黑客反向工程-熟练使用反汇编器 ■修改二进制代码的工具:hiew(动机) ■反汇编工具: ida ■大家推荐工具:softice, …… 2018/11/12 黑客反向工程-熟练使用反汇编器 ■修改二进制代码的工具:hiew(动机) ■反汇编工具: ida ■大家推荐工具:softice, …… ■汇编: 将汇编程序转换为机器语言程序。 ■反汇编: 将机器语言程序转换为汇编指令。 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 chenkm@ustc.edu.cn

黑客反向工程---Ida ---list1_7.exe 2018/11/12 黑客反向工程---Ida ---list1_7.exe 分析过程: .rdata:00420000 00 00 00 00 24 79 F0 46 00 00 00 00 02 00 00 00 ....$y餏....... rdata:00420010 35 00 00 00 00 00 00 00 00 60 02 00 50 61 73 73 5........`.Pass rdata:00420020 77 6F 72 64 20 4F 4B 0A 00 00 00 00 57 72 6F 6E word OK....Wron rdata:00420030 67 20 70 61 73 73 77 6F 72 64 0A 00 00 00 00 00 g password..... rdata:00420040 6D 79 47 4F 4F 44 70 61 73 73 77 6F 72 64 0A 00 myGOODpassword. rdata:00420050 00 00 00 00 45 6E 74 65 72 20 70 61 73 73 77 6F ....Enter passwo rdata:00420060 72 64 3A 20 20 20 00 00 00 00 00 00 73 74 72 20 rd: ......str rdata:00420070 21 3D 20 4E 55 4C 4C 00 66 67 65 74 73 2E 63 00 != NULL.fgets.c 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 chenkm@ustc.edu.cn

使用密码串进行比较的程序块 .text:0040104D .text:00401052 add esp, 0Ch .text:00401055 push offset s_Mygoodpasswor (00420040h)"myGOODpassword\n" .text:0040105A lea ecx, [ebp+var_68] .text:0040105D push ecx .text:0040105E call strcmp .text:0040105E .text:00401063 add esp, 8 .text:00401066 test eax, eax .text:00401068 jz short loc_401079 2018/11/12 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程---C规范的知识 ■ strcmp传递两个参数 : push offset s_Mygoodpasswor ;参考密码 2018/11/12 黑客反向工程---C规范的知识 ■ strcmp传递两个参数 : push offset s_Mygoodpasswor ;参考密码 lea ecx, [ebp+var_68]; 用户输入密码区 push ecx call strcmp ■ C 规范:从右到左的顺序将参数压入堆栈。 ■恢复的结果为: strcmp(var_68, "myGOODpassword\n") 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 chenkm@ustc.edu.cn

黑客反向工程--C规范的知识 ■ 1 从堆栈中删除参数不由函数自身完成,而是由调用程序完成,这样能创建数目可变的参数。 调用程序 被调用程序 调用程序 被调用程序 call strcmp ret 8 add esp, +08 ■ 2 常用清除堆栈指令 add esp, XXX 32位: n_args = XXX/4 16位:n_args = XXX/2 pop reg sub esp, -XXX ■ 3 由call后的add esp, 8 指令知该函数个数为2。 2018/11/12 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程---分析修改的程序 text:00401063 add esp, 8 .text:00401066 test eax, eax .text:00401068 jz short loc_401079 .text:0040106A push offset_WrongPassword ;"Wrong password\n" .text:0040106F call printf 检查函数返回值是否等于零,若为0,表示密码正确,进行相应提示;否则转错误处理程序。 修改: JNZ--》JZ, test eax,eaxxor eax,eax等 JZ: 74--》JNZ: 75 XOR: 31 2018/11/12 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程--外科手术(改程序) 解决方法: 使用直接编辑二进制工具 hiew32等. Hiew32 list1_p7g.exe 2018/11/12 黑客反向工程--外科手术(改程序) 解决方法: 使用直接编辑二进制工具 hiew32等. Hiew32 list1_p7g.exe 目标: 寻找 JZ 机器代码 定位 1068h偏移, 将 74 改为  75 2018/11/12 chenkm@ustc.edu.cn 0551-3602824 chenkm@ustc.edu.cn

黑客反向工程预备知识 ■反汇编---二进制到汇编代码(X86) 二进制 汇编代码 90  NOP 89D8  MOV AX,BX 74  JZ 39C8  CMP AX, BX ■反编译---汇编到高级语言(C或C++) MOV AX,[1000], ADD AX, 10, MOV [1000],AX var1000=var1000+10 ■类/模型/概念识别---从高级语言到类/模式/概念。 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程预备知识 ■如何创建与绕过保护环节 若能了解创建保护机制的知识更好。 ■黑客底层分析技术---调试器与反汇编器使用技能 熟练使用调试器 熟练使用反汇编器 二进制编辑工具 ■识别与重建源代码关键结构---从二进制或汇编中识别出函数、局部与全局变量、控制结构、对象、运算符等。降低程序分析的工作量。 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程预备知识 根据喜好选用一些工具软件 ■ 调试器---Softice ■ 反汇编器---IDA ■ 十六进制编辑器---Hiew ■ 开发包---SDK 与 DDK ■ 操作系统---Windows XP ■ 编译器---VC6.0 (C++) chenkm@ustc.edu.cn 0551-3602824

黑客反向工程预备知识 调试器介绍: ■ Softice: 黑客们使用的主要武器。3.26版本是一个经受了时间考验的版本,它具有很好的稳定性。 ■ OllyDby:不及Softice 。 ■ TRW:国产的较好的工具。 ■ VC6自带的调试器---常用方法介绍。 ■ Debug :最古老的,最基本的---使用方法。 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程预备知识 反汇编器介绍 ■ IDA------常用功能介绍 ■ W32DASM ■ SR(Source) ■ Hex2ASM chenkm@ustc.edu.cn 0551-3602824

黑客反向工程预备知识 十六进制编辑器: ■ Hiew---常用功能介绍 ■ FlexHex ■ Hedit ■ WinHex ■ Editor chenkm@ustc.edu.cn 0551-3602824

黑客反向工程预备知识 ■ SDK WinAPI 函数 用于PE 文件DUMPBIN 实用工具文档资料 ■ DDK 有助于弄清楚驱动程序如何开发、工作,以及如何被攻击。包含一个非常有价值的文件NTDDK.h。 chenkm@ustc.edu.cn 0551-3602824

黑客反向工程预备知识 ■常用汇编语言(机器)指令 ■寄存器的用途 ■堆栈---常用概念介绍 ■中断调用 ■处理器文档资料: www.Intel.com  www.amd.com chenkm@ustc.edu.cn 0551-3602824

课程说明(2) 2.教材和参考文献 黑客反向工程(第二版),卡巴斯基, 各种相关文献或学术文章 3. 考试或考查 一次正式课堂汇报(ppt+报告不超过30分钟,70%) 平时发言或报告或点名 30% http://staff.ustc.edu.cn/~chenkm 30