二进制程序分析与破解实验.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二进制程序分析与破解实验二进制程序分析与破解实验.doc

 TOC \o 1-3 \h \z \u 实验四: HYPERLINK \l _Toc375395473 二进制程序分析与破解实验  实验目的: 1、 了解破解:学习破解技术 2、 保护版权:思考如何对抗破解技术从而 实验内容: 破解磁盘上的文件:例子1:学习一个74/75方法破解实例程序 破解内存中的进程:例子2:外挂来了 使用OllyDBG、IDA Pro等静态、动态工具,分析二进制程序的代码、变量、函数、调用接口等逻辑结构硬件环境:? 处理器:Intel Core i3-370 内存:4GBDDR3 1033GHz软件环境: WMWare Virtual Machine 8 Windows XP Professional Ollydbg 实验步骤: 74/75方法破解实例程序 源代码: #includestdio.h #includewindows.h intdo_you_have_key() { return0; } intmain() { if(!do_you_have_key()) exit(-2); else printf(crackok!); return0; } 使用OLLYDBG调试zdj_7475.exe 发现: 0x0040106F地址处为if(!do_you_have_key())判断的关键跳转 将75改为74,复制二进制文件 现在程序成功通过了if判定条件,输出如图: 彩票摇奖程序内存破解 用VC进行反汇编,得到bob和list[]中who的地址 printf(第%d期 一等奖1000万获得者是:%s\n, c, list[who]); 00411AB1 mov eax,dword ptr [who] 00411AB4 mov ecx,dword ptr [eax*4+429DF4] 00411ABB push ecx 00411ABC mov edx,dword ptr [c] 00411ABF push edx 00411AC0 push offset string \xb5\xda%d\xc6\xda \xd2\xbb\xb5\xc8\xbd\xb11000\xcd\xf2\0000000000000... (4240F4h) edx*4+426A30h代表中奖人地址的地址,即[edx*4+429DF4]代表中间人的地址 为使bob一直中奖,故该指令可以改为:Mov eax,0x424024,使寄存器EAX一直获得”bob”地址。 于是采用OLLEYDBG调试汇编语言修改mov eax,dwordptr[edx*4+429DF4] 为mov eax,0x424024 到此对caipiao.exe的修改结束 下面是干扰程序的代码,主要用了WriteProcessMemory()进行干扰,根据上面得到的地址,编写下面的代码 #include stdio.h #include windows.h #include string.h #include direct.h HWND find;//句柄 DWORD byread;//实际写入/读取的字节数 LPVOID address1=(LPVOID)0x0040105E;//修改地址1 LPVOID address2=(LPVOID)0//修改地址2 int crack1=0x424024B8;//修改数据1 int crack2=0x909000;//修改数据2 int main() { char *a=getcwd(NULL, 0); char *b; b = a + strlen(a); *b ++ = \\; *b = 0; char *c = caipiao.exe; strcpy(b,c); printf(%s\n, a);//同目录下使用 find=FindWindow(ConsoleWindowClass,a);//查找符合条件控制台程序 if(find) { printf(find ok); DWORD processid; GetWindowThreadProcessId(find,processid);//获得进程号 HANDLE caipiao=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processid);//获得句柄权限 WriteProcessMemory(caipia

您可能关注的文档

文档评论(0)

ganqludp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档