首页
社区
课程
招聘
[原创]菜鸟学习OllyDBG之HELLO WORLD (请高手指点)
发表于: 2007-12-16 14:26 4823

[原创]菜鸟学习OllyDBG之HELLO WORLD (请高手指点)

2007-12-16 14:26
4823
第一步当然是下载OD啦!!这个大家在论坛找下。应该不难。
然后就可以开始我们的OD之旅了。。。首先论坛里有个教程,就是《ollyDBG入门教程》 可以大概看下。。看不懂没关系。。至少大概有个了解就行。那篇教程是从破解CRACK ME这个程序开始的。不过上来就说破解。。有很多基础的东西都没讲清楚,对于我这种基础不好,又想尽快熟悉OD的人来说不是很适合。于是仿造C++的学习过程。我也来搞个“HELLO WORLD”

既然用OD。那首先必须要有个程序给搞搞。。。。。简单起见。当然就自己写一个了。。。俺用的VC 6。0代码如下(假定该程序叫TEST)
#include<windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
        // TODO: Place code here.
        MessageBox(NULL,"Hello World","test",MB_OK);
        return 0;
}

既然是入门,当然简单是最重要的。关键是先要熟悉环境。这段程序可以直接编译运行。结果就是弹个小框框  内容是Hello World标题是test

一切准备就绪,现在就让我们打开OD吧!!点击,文件,打开找到刚才的程序,,刷,弹出一堆汇编代码。这些个代码代表什么意思呢??如此简单的程序。汇编代码居然也如此的复杂。。。不明白。
先按F8走一遍,有个大概了解再说。,在走到一句0x004010e9: CALL 00401000地方的时候弹出了我们的对话框,看来前面都是程序的一些初始化,此句才是真正执行我们的MessageBox
OK。找到了程序主体,怎么修改呢?比如我们要在此对话框弹出之后。再弹出一个对话框该砸办呢?

翻了翻论坛的贴子。说是在后面直接找空地,写代码就可以了。于是开始大胆尝试。
首先把程序拉到最下面。看到从00403893开始就全是DB 0了。于是大胆修改,暂时目标就是在原来弹一次对话框成功的前提下。再弹一次对话框

既然要弹2次对话框,那就要CALL2次。。那就修改0x004010e9: CALL 00401000的这个代码
改成0x004010e9: JMP  00403893

然后从0x00403893开始输入代码(因为这处开始是空白)
0040389E                  > \E8 5DD7FFFF              call    00401000
004038A3                  .  E8 05000000              call    004038AD
004038A8                  .^ E9 41D8FFFF              jmp     004010EE
//上面就是调用2次对话框。然后返回程序原来的地方
//下面的弹出对话框是照抄此程序0x 00401000处的代码。
004038AD                 /$  6A 00                    push    0                                           ; /Style = MB_OK|MB_APPLMODAL
004038AF                 |.  68 30504000              push    00405030                                    ; |Title = "Hello World"
004038B4                 |.  68 3C504000              push    0040503C                                    ; |Text = "test"
004038B9                 |.  6A 00                    push    0                                           ; |hOwner = NULL
004038BB                 |.  FF15 94404000            call    dword ptr [<&USER32.MessageBoxA>]           ; \MessageBoxA
004038C1                 |.  33C0                     xor     eax, eax
004038C3                 \.  C2 1000                  retn    10

OK。全部搞定。点右键,复制到可执行文件。写个文件名。。。终于一套流程搞完了。。

不过本菜鸟对于OD的环境依然非常不熟悉。请高手指点。如果我要自己定义数据段的内容,该怎么办?如何知道数据段从哪个地址开始为空,可以使用?。
还有如何拖动数据窗口???貌似数据窗口的大小限制的很死
我只能从0x0040500  拖到0x00405FF0,要看其他地址的数据段无法直接拖或者点击。现在我采用的是在空白出PUSH 个地址,然后用窗口跟随来看该处的内容。。请问OD是否有什么直接的方法?

如果程序预留的代码段,数据段空白位置不够。OD是否有什么可以方便的工具可以直接增加?(以上均假定该程序没有设置任何自我保护措施。)

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
前几个问题没理解。
“如果程序预留的代码段,数据段空白位置不够。OD是否有什么可以方便的工具可以直接增加?”

这个可以用专门的工具来实现
http://www.pediy.com/tools/PEtools.htm

增加PE区块相关工具
2007-12-16 18:09
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢老大。。有这个太好了。。
2007-12-16 21:02
0
游客
登录 | 注册 方可回帖
返回
//