160 - 41 defiler.1.exe
环境:
Windows xp sp3
工具:
Ollydbg
stud_PE
LoadPE
先分析一下。
这次的程序要求更改了,变成了这个:
defiler's reversme no.1
-----------------------The task of this little, lame reverseme is to add some code to it.
The code you have to add will be triggered by the 'Exit' menu and should
look like this:A messagebox should appear asking the user "Do you fickbirne really want to quit?".
Its buttons should be 'Yes' and 'No'. If the user clicks 'Yes', simply exit the
program in a clean way, if the user clicks 'No' just do NOT exit the program
(it's up to you what will happen when the user clicks 'No').Valid solutions are solutions with a tutorial explaining what you did,
explaining the code you added and the modified binaries.Mail your solution to defiler@immortaldescendants.org
Valid solutions will be published on http://immortaldescendants.org,
the first solution will be on http://defiler.cjb.netthats it.. i hope i didn't forget any more unimportant stuff ;)best regards,defiler
其实就是程序的菜单栏的Exit选项没有功能,让我们把加个messagebox下去,实现这个Exit选项。
OD载入,直接运行,点击菜单栏,选About选项,弹出messagebox,F12站厅,Alt+F9,点击确定。断下来到这里:
0043CCE2 |. 64:FF31 push dword ptr fs:[ecx]
0043CCE5 |. 64:8921 mov dword ptr fs:[ecx],esp
0043CCE8 |. 53 push ebx ; /Style
0043CCE9 |. 57 push edi ; |Title
0043CCEA |. 56 push esi ; |Text
0043CCEB |. 8B45 FC mov eax,[local.1] ; |
0043CCEE |. 8B40 24 mov eax,dword ptr ds:[eax+0x24] ; | 这个是messageBox所属的hwnd
0043CCF1 |. 50 push eax ; |hOwner
0043CCF2 |. E8 C998FCFF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0043CCF7 |. 8945 F8 mov [local.2],eax ;程序暂停后的位置
单步F8往下走:
00430528 /$ 53 push ebx
00430529 |. 33DB xor ebx,ebx
0043052B |. 0FB7D2 movzx edx,dx
0043052E |. 33C9 xor ecx,ecx
00430530 |. E8 53FFFFFF call defiler_.00430488 ; 获取点击后的位置
00430535 |. 85C0 test eax,eax ; 确认点击的是哪个东西
00430537 |. 74 07 je Xdefiler_.00430540 ;
00430539 |. 8B10 mov edx,dword ptr ds:[eax] ;
0043053B |. FF52 40 call dword ptr ds:[edx+0x40]
0043053E |. B3 01 mov bl,0x1
00430540 |> 8BC3 mov eax,ebx
00430542 |. 5B pop ebx
00430543 \. C3 retn
在00430535下断点,重新运行程序,点击菜单栏,选About,程序断下。观察EAX的值:
数据窗口跟随:
显示方式改为:长型 -> 地址
可以猜测上一个call是用来确定菜单栏的选项的。
让程序重新运行,这次点Exit
看出这两个的值是不同的,于是可以用eax的值来判断点击的内容。
现在可以开始添加代码了。
首先先用LoadPE删除重定位信息。
打开LOadPE后用PE编辑器加载程序。
设置为0
然后就保存
再用stud_PE打开,添加section
大小设置为0x1000,用NULL填充
点击Add添加,完成后双击新建的section
设置一下Characteristics flags为0xE00000E0
顺便记一下VirtualOff:4E000
save一下。
OD载入这个修改过的程序,跳转到44E000处,然后就可以开始添加代码了。
思路是这样的:
在00430530处的call后获取了点击的内容,然后就直接跳转到44E000处进行判断,根据内容来确定接下来的程序。如果是“About”的值就直接返回去源代码处,否则就是exit的值了,就可以弹出消息框,根据用户点击来确定点击内容从而判断接下来的行为。
0044E000 85C0 test eax,eax
0044E002 - 0F84 3825FEFF je 复件_def.00430540 ;这里就和原代码相同,如果为空就跳过
0044E008 60 pushad
0044E009 8B0D D0FB4300 mov ecx,dword ptr ds:[0x43FBD0] ; 复件_def.004407C8
0044E00F 8B09 mov ecx,dword ptr ds:[ecx]
0044E011 90 nop
0044E012 90 nop
0044E013 90 nop
0044E014 81C1 04230000 add ecx,0x2304 ;这个值会有所改变,在xp上是0x2304,在Win8.1的话则是0x22A0,具体原因能力有限
0044E01A 3BC1 cmp eax,ecx ;这里就判断eax的值是"ABout"还是"Exit"的
0044E01C 61 popad
0044E01D 8B10 mov edx,dword ptr ds:[eax]
0044E01F 75 05 jnz X复件_def.0044E026
0044E021 - E9 1525FEFF jmp 复件_def.0043053B
0044E026 A1 D0FB4300 mov eax,dword ptr ds:[0x43FBD0]
0044E02B 8B00 mov eax,dword ptr ds:[eax]
0044E02D 83C0 24 add eax,0x24 ;这里是获取handle,具体的原因可以看一开始程序断下时的messagebox
0044E030 6A 24 push 0x24
0044E032 68 58E04400 push 复件_def.0044E058 ; ASCII "Quit"
0044E037 68 60E04400 push 复件_def.0044E060 ; ASCII "Are you sure quit?"
0044E03C FF30 push dword ptr ds:[eax]
0044E03E E8 7D85FBFF call <jmp.&user32.MessageBoxA>
0044E043 83F8 06 cmp eax,0x6 ;0x6为“Yes”,0x7为“No”
0044E046 74 05 je X复件_def.0044E04D
0044E048 - E9 F124FEFF jmp 复件_def.0043053E ;如果是“No”就跳回去原来的位置
0044E04D 6A 00 push 0x0
0044E04F E8 D831FBFF call <jmp.&kernel32.ExitProcess>
0044E054 0000 add byte ptr ds:[eax],al
0044E056 0000 add byte ptr ds:[eax],al
0044E058 51 push ecx ;这里开始往下就是字符串的值了
0044E059 75 69 jnz X复件_def.0044E0C4
0044E05B 74 00 je X复件_def.0044E05D
0044E05D 0000 add byte ptr ds:[eax],al
0044E05F 0041 72 add byte ptr ds:[ecx+0x72],al
0044E062 65:2079 6F and byte ptr gs:[ecx+0x6F],bh
0044E066 75 20 jnz X复件_def.0044E088
0044E068 73 75 jnb X复件_def.0044E0DF
0044E06A 72 65 jb X复件_def.0044E0D1
0044E06C 2071 75 and byte ptr ds:[ecx+0x75],dh
0044E06F 69743F 00 00000>imul esi,dword ptr ds:[edi+edi],0x0
修改完44E000的代码后,再修改一下 00430530后面的内容
0043052B . 0FB7D2 movzx edx,dx
0043052E . 33C9 xor ecx,ecx
00430530 . E8 53FFFFFF call 复件_def.00430488
00430535 .- E9 C6DA0100 jmp 复件_def.0044E000 ; 改了这里
0043053A 90 nop
0043053B . FF52 40 call dword ptr ds:[edx+0x40]
0043053E . B3 01 mov bl,0x1
修改完后保存一下就好了
完成 O(∩_∩)O
参考:
https://www.52pojie.cn/thread-654237-1-1.html
160 - 41 defiler.1.exe相关推荐
- 160 - 44 defiler.1.exe
环境: Windows xp sp3 工具: 1.ollydbg 2.exeinfope 0x00 查壳 无壳就下一步 0x01 分析 随便输入个错的,出现了不知道哪国的语言.有个6,应该就是name ...
- 160个Crackme041之无源码修改Delphi程序
文章目录 前言 软件概况 分析程序 栈回溯分析About点击事件 获取必要的API 添加区段 配置区段 添加区段数据 植入代码 修改目标函数 校验结果 [软件名称]:defiler.1.exe [软件 ...
- cmd窗口太炫酷了,电脑编码软件太多?手把手教你搭建Java环境,利用dos命令实现运行操作
Java学习打卡:第十四天 内容导航 Java学习打卡:第十四天 内容管理 什么是cmd 写文背景介绍 搭建java环境 首先先下载JDK,java开发工具包 第二步:将压缩包解压到指定目录 第三步: ...
- KALI LINUX渗透测试学习笔记
KALI LINUX渗透测试学习笔记 (苑房弘主讲) 第1章 课程介绍 任务1:Kali Linux渗透测试介绍.exe 安全问题的根源: 分层思想 只求功能实现 最大的威胁是人 渗透测试: 尝试挫败 ...
- EXCEL里如何知道某种颜色的ColorIndex的值
EXCEL里如何知道某种颜色的ColorIndex的值 ===fag::============================================================= Ex ...
- Cisco Firepower 9300 Series FTD Software 7.2.0 ASA Software 9.18.1
请访问原文链接:https://sysin.org/blog/cisco-firepower-9300/,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 为什么选择 Ci ...
- signature=da0cbfb45ebebe4ea0118c0a20df185e,MS15-018:Internet Explorer 累积安全更新:2015 年 3 月 10 日...
此软件更新的英语(美国)版本将安装具有下表所列属性的文件.这些文件的日期和时间按协调世界时 (UTC) 列出.请注意,这些文件在您的本地计算机中的显示日期和时间是您的本地时间加上当前夏令时偏差.如果对 ...
- Cisco Firepower 4100 Series FTD Software 7.2.0 ASA Software 9.18.1
请访问原文链接:https://sysin.org/blog/cisco-firepower-4100/,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 为什么选择 Ci ...
- Cisco Firepower 9300 Series FTD Software 7.1.0 ASA Software 9.17.1 下载
请访问原文链接:https://sysin.cn/blog/cisco-firepower-9300/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sy ...
最新文章
- 08、求x的y的幂次方的最后3位数——循环
- android水平滚动条,Android使用HorizontalScrollView实现水平滚动
- linux错误自动报告工具,linux – 关闭abrt的电子邮件通知(自动错误报告工具)
- eclipse连接MySQL
- 查看详细_教师资格准考证开始打印!点击查看详细流程!
- Ceph FINDING AN OBJECT LOCATION
- 国内著名大师培训视频全集
- vb查询mysql数据库实例_初识vb数据库开发之实例5(数据查询)
- 安卓psp模拟器联机教程_安卓PSP模拟器评测:蜘蛛侠2
- asp html5 ajax,ASP – AJAX 与 ASP | 菜鸟教程
- java算法——通过身份证号获取出生的年月日
- 微信读书中总显示服务器错误,微信读书充值遇到问题怎么办 微信读书充值遇到问题解决方法...
- Python爬虫-爬取豆瓣读书
- 【每天学点管理】——RACI责任制(快速解决责任分配问题)
- win10 Xshell 中文无法输入问题
- 分布式elasticsearch7.3.1集群部署
- 别用Docker了,这7大开源容器化工具也能满足你!
- 参会指南!POW'ER 2020上海峰会完整议程周边活动
- C语言-(1)初始C语言 已完成,待二次修改完善
- 按照日期排序相册库(支持自定义选中图片,视频数量,支持预览,支持拍摄仿小米原生相册)
热门文章
- h5页面保存img_一文彻底解决HTML5页面中长按保存图片功能
- python简单实用案例_Ajax的简单实用实例代码
- 《01》ECMAScript 6 简介
- mongo-express 远程代码执行漏洞(CVE-2019-10758)
- Android查看web日志,详解Android WebView监听console错误信息
- antd From 中 Form.Item里含有自己封装的组件,获取不到值的解决方法
- JS里面的懒加载(lazyload)
- 滚动条造成页面抖动问题
- jzoj 6302. 提高组
- JS 循环遍历 总结