OllyDbg 使用笔记 (四)

参考

书:《加密与解密》

视频:小甲鱼 解密系列 视频

RegisterMe程序下载地址:http://pan.baidu.com/s/1gd3l4XH

这个RegisterMe程序,运行前和运行后都会有neg窗口。破解目标,去除这个两个窗口。

用OD直接打开这个程序,我们会发现出错。也可能OD会卡死。

因为这个程序的PE文件被故意修改了。

我们先到 选项---> 调试设置 --> 事件 --> 选择系统断点。

图片1

这样用OD打开就不会卡死。

按 alt + M 来到 memory界面,你可以看到“PE文件头”。注意是地址00开头的,如果是7xx看到的,那些PE文件头是dll的。

图片2

但这个PE文件头 大小是5000,一般情况是1000。所以肯定有问题,双击它,查看PE文件头。

来到PE文件头,我们可以看到有很多地方数字被故意设置的很大,所以我们会调试出错。

图片3

SizeOfCode = 40000400 太大了,选中右键点击修改整数,改成400。

SizeOfInitializedData = 40000A00 也太大了,改成A00

BaseOfCode = 40001000 也太大了,一般都是1000,改成1000 。

BaseOfData = 40002000 也太大了,改成2000

NumberOfRvaAndSizes = 40000004 也太大了,这个值一般都是10

这个程序没有输出,没有输出表,所以

Export Table address = 500000  改成 0

Export Table size = 50000 改成 0

改好后,在这个页面我们是保存不了的,记住我们修改的地方是从 00400DC 开始到0040013C。

按Ctrl+C 切换到CPU窗口,在数据面板按Ctrl+G 输入00400DC,选中我们修改的地方 右键 复制到可执行文件,在弹出的窗口中右键选择  备份-->保存数据到文件即可。

在调试选项中把设置第一次暂停 改回 WinMAin。再用OD打开修改后的程序,运行就正常了。

要去掉这个程序的两个neg窗口方法有好多种:

第一种:

直接把弹出窗口的全代码改成nop。方法是选中代码,右键-->二进制-->用nop填充,即可

第二种:

看MessageBox的函数说明,第一个参数hWnd,表示MessageBox的父窗口。

int MessageBox(

    HWND hWnd,	// handle of owner window
    LPCTSTR lpText,	// address of text in message box
    LPCTSTR lpCaption,	// address of title of message box
    UINT uType 	// style of message box
   );

我们可以把这个参数改成一个非法的句柄,让MessageBox运行出错。例如

我们可以把下面代码中的push 0 改成 push 1,MessageBox就不会显示了

00401039  |.  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
0040103B  |.  68 7D304000   push    0040307D                         ; |Title = "Register Me"
00401040  |.  68 89304000   push    00403089                         ; |Text = "Oops! I am not registered !!"
00401045  |.  6A 00         push    0                                ; |hOwner = NULL
00401047  |.  E8 9E010000   call    <jmp.&USER32.MessageBoxA>        ; \MessageBoxA

OllyDbg 使用笔记 (四),布布扣,bubuko.com

时间: 07-30

OllyDbg 使用笔记 (四)的相关文章

OllyDbg 使用笔记 (一)

参考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 ollydbg下载地址:http://tools.pediy.com/debuggers.htm hello.exe下载地址:http://pan.baidu.com/s/1c0iYQOC 一.OllyDbg基本界面 图片1 如果按窗口切换按钮出现下面的情况,乱了,只需要双击一个窗口让它全屏就行了. 图片2 二.部分快捷键介绍 F3 : 打开目标文件 F2 : 设置断点 F7:单步步进,遇到CALL跟进 F8:单步步过,遇到CALL路过,

OllyDbg 使用笔记 (二)

参考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 TraceMe.exe下载地址:http://pan.baidu.com/s/1c0s2twO TraceMe.exe 程序破解 程序见下图,破解目标:使我们能够验证成功. 图片1 由于输入肯定会用到获取对话框文本的API,所以在反汇编面板 按Ctrl+G搜索GetDlgItemTextA,试试看. 图片2 也可以按Ctrl+N 打开程序的导入表.查看程序导入了那些函数,选中GetDlgItemTextA,右键 选择在反汇编窗口中跟随输入

Caliburn.Micro学习笔记(四)----IHandle&lt;T&gt;实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了

R实战读书笔记四

第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括如下. 一图胜千字,人们从视觉层更易获取和理解信息. 图形工作 R具有非常强大的绘图功能,看下面代码. > attach(mtcars) > plot(wt, mpg) > abline(lm(mpg~wt)) > title("Regression of MPG on Weight") > detach(m

Swift学习笔记四:数组和字典

最近一个月都在专心做unity3d的斗地主游戏,从早到晚,最后总算是搞出来了,其中的心酸只有自己知道.最近才有功夫闲下来,还是学习学习之前的老本行--asp.net,现在用.net做项目流行MVC,而不是之前的三层,既然技术在更新,只能不断学习,以适应新的技术潮流! 创建MVC工程 1.打开Visual studio2012,新建MVC4工程 2.选择工程属性,创建MVC工程 3.生成工程的目录 App_Start:启动文件的配置信息,包括很重要的RouteConfig路由注册信息 Conten

老男孩培训视频听课笔记四(在51cto上听的)

实际操作:     1.创建一个目录 mkdir 语法:mkdir [-mp] [目录名称]            一般与配合cd tree pwd等命令来实现,整个操作     2.建议一个文件 利用touch命令来完成 语法:touch [path]/filename            批量创建文件:        for f in `seq 1000`;do touch $f.txt;done         创建文件的命令很多:vi echo> > cat等命令      3.文件