第一步当然是下载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虚拟机自动化脱壳的方法