破解和混合编程实例HackerReverseEngineering_第1页
破解和混合编程实例HackerReverseEngineering_第2页
破解和混合编程实例HackerReverseEngineering_第3页
破解和混合编程实例HackerReverseEngineering_第4页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 创建一个最简单的保护机制并破解它; 选一个实例, 在此基础上学习十六进制编辑器, API窥测器 与 反汇编器(IDA Pro) 破解一个实际的例子 0551-36028242022-3-7最简单的密码保护算法: 密码存放位置: 程序中/ 配置文件/注册表密码保护措施: 无 if (strcmp(password entered, reference password) /* 密码不正确 */ else /* 密码正确 */ 0551-36028242022-3-7Protect_password#define legal_pswmy.good.passwordint main() char

2、user_psw666; cout user_psw; if (strcmp(legal_psw, user_psw) cout“wrong passwordn”;/ “标记密码不匹配 0551-36028242022-3-7黑客反向工程热身else cout “password oknhello ,legal user|n “; /“标记”密码匹配 return 0; 2022-3- 申斥密码不匹配/ 申斥密码不匹配/ 申斥密码不匹配2022-3- 0551-3602824600007d11: LCMapStringW00007d1f: kernel32.dll

3、0000805c: crackme 00h0000806a: enter passwd:0000807d: my.good.password0000808f: wrong password0000809c: password ok000080af:hello, legal user!000080c2: .?Avios000080de: .?Avistream 结果分析2022-3-黑客反向工程热身编译后的程序执行 猜测密码-凭运气,难度大 分析程序的组成代码 数据(密码字符串)2022-3-黑客反向工程热身 data: 数据段 rda

4、ta: 只读数据, 字符串文字和常量. 如本程序中的 myGOODpasswordn“。 bss: 未初始化数据, 比如函数和静态变量。 idata: 包括导入库和导入地址名称表。 edata:包含了应用程序或DLL的导出数据。 text(code): 代码段。 0551-36028242022-3-7黑客反向工程热身c中中,内存数据分为如下几个区内存数据分为如下几个区 1.栈- 由编译器自动分配释放bp+xx, bp-xx。 2.堆- 一般由程序员分配释放new(), delete() 函数。 3.全局区(静态区)共享存储区。 初始化的全局变量和静态变量在一块区域(data)。 未初始化全局

5、和静态变量放在相邻区域(bss)。 4.另外还有一个专门放常量的地方(rdata)。 C+中中,内存分成内存分成5个区,分别为:个区,分别为:1.栈栈,里面的变量通常是局部变量、函数参数等。 0551-36028242022-3-7黑客反向工程热身2.堆堆,由new分配的内存块,由delete回收。 3.自由存储区自由存储区,由malloc等分配的内存块,和堆相似, 由free回收。4.全局全局/静态存储区静态存储区,全局和静态变量均被分配到同一块内存中,由该语言编译器自行确定(与C语言有差别)。5.常量存储区常量存储区,存放常量,不允许修改。 静态变量/全局变量:全局/静态存储区。 常量存放

6、在常量区。程序放在代码区。 0551-36028242022-3-7黑客反向工程热身查看二进制文件. 根据: 编译器将初始变量放在如下数据段中. data rdata 自定义段 0551-36028242022-3-7黑客反向工程热身改写动机:隐藏密码字符串,增加一点分析难度。int count = 0/ 从现在开始从现在开始, 所有初始化变量都放置在所有初始化变量都放置在.kpnc中中.#pragma data_seg(“kpnc”) char passwd=PASSWORD;#pragma data_seg()/ 现在所有初始变量又将放到默认段现在所有初始变量又将放到默认段rdata中了中

7、了.char buffPASSWORD_SIZE=“ “; 0551-36028242022-3-7黑客反向工程热身改写后的源代码清单-list1_p9.cppidag list1_p9.exe目标代码中出现了如下段落:textrdatadataidatakpnc只有在kpnc 段中才能看到密码字符串信息 myGOODpasswordn“ 0551-36028242022-3-7黑客反向工程-熟练使用反汇编器修改二进制代码的工具:hiew(动机)反汇编工具: ida大家推荐工具:softice, 汇编:将汇编程序转换为机器语言程序。反汇编: 将机器语言程序转换为汇编指令。 0551-36028

8、242022-3-7分析过程:.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. .Passrdata:00420020 77 6F 72 64 20 4F 4B 0A 00 00 00 00 57 72 6F 6E word OK.Wronrdata:00420030 67 20 70 61 73 73 77 6F 72 64 0A 00 00 00 00 00 g pas

9、sword.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 passwordata:00420060 72 64 3A 20 20 20 00 00 00 00 00 00 73 74 72 20 rd: .strrdata:00420070 21 3D 20 4E 55 4C 4C 00 66 67 65 74 73 2E 63 00 != NUL

10、L.fgets.c黑客反向工程黑客反向工程-Ida -list1_7.exe 0551-36028242022-3-7使用密码串进行比较的程序块.text:0040104D.text:00401052 add esp, 0Ch.text:00401055 push offset s_Mygoodpasswor (00420040h)myGOODpasswordn.text:0040105A lea ecx, ebp+var_68.text:0040105D push ecx.text:0040105E call strcmp.text:0040105E.text:00401063 add es

11、p, 8.text:00401066 test eax, eax.text:00401068 jz short loc_ 0551-36028242022-3-7 strcmp传递两个参数 :push offset s_Mygoodpasswor ;参考密码lea ecx, ebp+var_68; 用户输入密码区 push ecxcall strcmp C 规范:从右到左的顺序将参数压入堆栈。恢复的结果为: strcmp(var_68, myGOODpasswordn)黑客反向工程-C规范的知识 0551-36028242022-3-7黑客反向工程-C规范的知识 1 从堆栈中删除参数不由函数自

12、身完成,而是由调用程序完成,这样能创建数目可变的参数。 调用程序 被调用程序 call strcmp ret 8 addesp, +08 2 常用清除堆栈指令 add esp, XXX 32位: n_args = XXX/416位:n_args = XXX/2 pop regsub esp, -XXX 3 由call后的add esp, 8 指令知该函数个数为2。 0551-36028242022-3-7黑客反向工程-分析修改的程序text:00401063 add esp, 8.text:00401066 test eax, eax.text:00401068 jz short loc_40

13、1079.text:0040106A push offset_WrongPassword ;Wrong passwordn.text:0040106F call printf 检查函数返回值是否等于零,若为0,表示密码正确,进行相应提示;否则转错误处理程序。修改: JNZ-JZ, test eax,eaxxor eax,eax等 JZ: 74-JNZ: 75 XOR: 0551-36028242022-3-7黑客反向工程-外科手术(改程序)解决方法:使用直接编辑二进制工具 hiew32等.Hiew32 list1_p7g.exe目标: 寻找 JZ 机器代码定位 1068h偏移, 将 改为 0551-36028242022-3-7黑客反向工程预备知识客反向工程预备知识客反向工程预备知识客反向工程预备知识客反

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论