首页
社区
课程
招聘
[旧帖] [求助]关于OllyDBG使用ESP定律查找OEP问题 0.00雪花
发表于: 2009-8-18 11:16 1976

[旧帖] [求助]关于OllyDBG使用ESP定律查找OEP问题 0.00雪花

2009-8-18 11:16
1976
在下是新人,这个关键的OB使用ESP定律查找OEP问题使用问题?

我在网上找到的教程,我按其操作,但是都无法实现教程的结果。

教程里看到的 用OB打开一个EXE调试程序,右边寄存器里的ESP= 0012FFC4,而我开打相同的EXE(下载教程里的调试的EXE文件),寄存器显示的数据代码如下:

EAX 00000000
ECX 0013FFB0
EDX 7C92E4F4 ntdll.KiFastSystemCallRet
EBX 7FFD5000
ESP 0013FFC4
EBP 0013FFF0
ESI FFFFFFFF
EDI 7C930208 ntdll.7C930208
EIP 0040E8C0 notepad_.<模块入口点>
C 1  ES 0023 32 位 0(FFFFFFFF)
P 0  CS 001B 32 位 0(FFFFFFFF)
A 0  SS 0023 32 位 0(FFFFFFFF)
Z 0  DS 0023 32 位 0(FFFFFFFF)
S 1  FS 003B 32 位 7FFDF000(FFF)
T 0  GS 0000 NULL
D 0
O 0  LastErr ERROR_NO_IMPERSONATION_TOKEN (0000051D)
EFL 00000283 (NO,B,NE,BE,S,PO,L,LE)
ST0 empty -UNORM BCE0 01050104 002E0067
ST1 empty 0.0
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 1.0000000000000000000
ST7 empty 1.0000000000000000000
               3 2 1 0      E S P U O Z D I
FST 4020  Cond 1 0 0 0  Err 0 0 1 0 0 0 0 0  (EQ)
FCW 027F  Prec NEAR,53  Mask    1 1 1 1 1 1

对应的反编译窗口的代码:
0040E8C0 >  60              pushad
0040E8C1    BE 15B04000     mov     esi, 0040B015
0040E8C6    8DBE EB5FFFFF   lea     edi, dword ptr [esi+FFFF5FEB]
0040E8CC    57              push    edi
0040E8CD    83CD FF         or      ebp, FFFFFFFF
0040E8D0    EB 10           jmp     short 0040E8E2
0040E8D2    90              nop
0040E8D3    90              nop
0040E8D4    90              nop
0040E8D5    90              nop
0040E8D6    90              nop
0040E8D7    90              nop
0040E8D8    8A06            mov     al, byte ptr [esi]
0040E8DA    46              inc     esi
0040E8DB    8807            mov     byte ptr [edi], al
0040E8DD    47              inc     edi
0040E8DE    01DB            add     ebx, ebx
0040E8E0    75 07           jnz     short 0040E8E9

ESP=0013FFC4与教程里的不同,网上所有教程里的与上述反编译代码对应的ESP=0012FFC4,都是这个值而我换了电脑,也换了调试的EXE文件,ESP都等于0013FFC4。
请教高手大大们,这是怎么回事?为什么不一样?

而我在使用ESP定律查找OEP时,在命令里即输入了“HW 12FFC0”(ESP定律)也输入了“HW 13FFC0”,都不能实现教程里的结果,而且很奇怪的是:在命令里输入命令后,按F9(ESP定律教程里提示这样做),OB打开了调试的程序(就像双击打开程序一样),而反编译里的代码仍然在开始执行命令(输入硬件中断HW命令,后按F9)的那一行:0040E8C0 >  60              pushad
,并没有出现教程里的中断,更找不到OEP,完全调试不出来教程里的结果。

哎,似乎不能插入图片,要不图文并貌,要不看的更具体。

另有高手高人手徒弟或学生吗?或有能及时交流或请教的工具吗?论坛虽好,但请教起来还是不方便,不能及时马上处理。在下诚心学习,时间充足,计算机专业,有汇编等基础,苦于没人指导。

俗话说苦练十年,不如有个好师傅。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可能每个机器显示的不一样吧,输入Hr:0013FFC4,试试看。是在不行的话,你把附件上传,大家一起来帮吗,o(∩_∩)o...哈哈
2009-8-18 11:22
0
雪    币: 60
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
谢谢你的回复,请教是输入HW 0013FFC4吧? 我试了,在按F9之后OB直接打开了调试的程序。请问在输入HW命令之后,是按F9吗?

在使用ESP定律查找OEP时,在命令里即输入了“HW 12FFC0”(ESP定律)也输入了“HW

13FFC0”,都不能实现教程里的结果。更很奇怪的是:在命令里输入HW命令后,按F9(ESP定

律教程里提示这样做),OB打开了调试的程序(就像双击打开程序一样),而反编译里的代码仍然

在开始执行命令的那一行:0040E8C0 >  60       pushad,并没

有出现教程里的中断,更找不到OEP,完全调试不出来教程里的结果。
2009-8-18 11:34
0
雪    币: 60
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
期待高手或论坛大大能给我指点一二,小弟在此先拜谢了。
2009-8-18 11:36
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
载入后,你单步走了没有?
2009-8-18 11:44
0
雪    币: 60
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
我发现问题了,你说的是对的,是输入:HR 0013FFC0,是HR(硬件中断在访问时)命令,而不是HW(硬件中断在写入时)命令。

不过我在ESP定律教程里看到说是HW,而且还是图文并貌,命令处:HW 12FFC0,哎。

我刚测试了输入:HR 0013FFC0,按F9,代码执行了,没有打开调试的程序,而且代码执行到OEP处中断了。

载入时的反汇编代码:(调试选项-时间-设置第一次暂停在-WinMaann<如果位置已知>)

0040E8C0 >  60              pushad
0040E8C1    BE 15B04000     mov     esi, 0040B015
0040E8C6    8DBE EB5FFFFF   lea     edi, dword ptr [esi+FFFF5FEB]
0040E8CC    57              push    edi
0040E8CD    83CD FF         or      ebp, FFFFFFFF
0040E8D0    EB 10           jmp     short 0040E8E2
0040E8D2    90              nop
0040E8D3    90              nop
0040E8D4    90              nop
0040E8D5    90              nop
0040E8D6    90              nop
0040E8D7    90              nop
0040E8D8    8A06            mov     al, byte ptr [esi]
0040E8DA    46              inc     esi
0040E8DB    8807            mov     byte ptr [edi], al
0040E8DD    47              inc     edi
0040E8DE    01DB            add     ebx, ebx
0040E8E0    75 07           jnz     short 0040E8E9
0040E8E2    8B1E            mov     ebx, dword ptr [esi]
0040E8E4    83EE FC         sub     esi, -4

对应的寄存器(FPU)数据:

EAX 00000000
ECX 0013FFB0
EDX 7C92E4F4 ntdll.KiFastSystemCallRet
EBX 7FFDF000
ESP 0013FFC4
EBP 0013FFF0
ESI FFFFFFFF
EDI 7C930208 ntdll.7C930208
EIP 0040E8C0 notepad_.<模块入口点>
C 1  ES 0023 32 位 0(FFFFFFFF)
P 0  CS 001B 32 位 0(FFFFFFFF)
A 0  SS 0023 32 位 0(FFFFFFFF)
Z 0  DS 0023 32 位 0(FFFFFFFF)
S 1  FS 003B 32 位 7FFDE000(FFF)
T 0  GS 0000 NULL
D 0
O 0  LastErr ERROR_NO_IMPERSONATION_TOKEN (0000051D)
EFL 00000283 (NO,B,NE,BE,S,PO,L,LE)
ST0 empty -UNORM BBB0 01050104 002E0067
ST1 empty 0.0
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 1.0000000000000000000
ST7 empty 1.0000000000000000000
               3 2 1 0      E S P U O Z D I
FST 4020  Cond 1 0 0 0  Err 0 0 1 0 0 0 0 0  (EQ)
FCW 027F  Prec NEAR,53  Mask    1 1 1 1 1 1

没有单步F8,命令输入:HR 0013FFC4后,直接按F9后的代码:

0040EA0F  - E9 B826FFFF     jmp     004010CC     //OEP
0040EA14    0000            add     byte ptr [eax], al
0040EA16    0000            add     byte ptr [eax], al
0040EA18    0000            add     byte ptr [eax], al
0040EA1A    0000            add     byte ptr [eax], al
0040EA1C    0000            add     byte ptr [eax], al
0040EA1E    0000            add     byte ptr [eax], al
0040EA20    0000            add     byte ptr [eax], al
0040EA22    0000            add     byte ptr [eax], al
0040EA24    0000            add     byte ptr [eax], al
0040EA26    0000            add     byte ptr [eax], al
0040EA28    0000            add     byte ptr [eax], al
0040EA2A    0000            add     byte ptr [eax], al
0040EA2C    0000            add     byte ptr [eax], al
0040EA2E    0000            add     byte ptr [eax], al

此时寄存器(FPU)对应的数据:

EAX 00000000
ECX 0013FFB0
EDX 7C92E4F4 ntdll.KiFastSystemCallRet
EBX 7FFDF000
ESP 0013FFC4
EBP 0013FFF0
ESI FFFFFFFF
EDI 7C930208 ntdll.7C930208
EIP 0040EA0F notepad_.0040EA0F
C 0  ES 0023 32 位 0(FFFFFFFF)
P 1  CS 001B 32 位 0(FFFFFFFF)
A 0  SS 0023 32 位 0(FFFFFFFF)
Z 1  DS 0023 32 位 0(FFFFFFFF)
S 0  FS 003B 32 位 7FFDE000(FFF)
T 0  GS 0000 NULL
D 0
O 0  LastErr ERROR_NO_IMPERSONATION_TOKEN (0000051D)
EFL 00000246 (NO,NB,E,BE,NS,PE,GE,LE)
ST0 empty -UNORM BBB0 01050104 002E0067
ST1 empty 0.0
ST2 empty 0.0
ST3 empty 0.0
ST4 empty 0.0
ST5 empty 0.0
ST6 empty 1.0000000000000000000
ST7 empty 1.0000000000000000000
               3 2 1 0      E S P U O Z D I
FST 4020  Cond 1 0 0 0  Err 0 0 1 0 0 0 0 0  (EQ)
FCW 027F  Prec NEAR,53  Mask    1 1 1 1 1 1

后话,看来调试时的ESP值并不是一样的,每台电脑显示的不同,而是以自己电脑显示的,我用的是联想杨天商务机,而笔记本也是联想的,我在这2台电脑上看到的ESP都是等于0013FFC4,而不是ESP定律教程里的0012FFC4,谢谢,谢谢楼上的。几天疑惑终于解决了。
2009-8-18 12:07
0
雪    币: 60
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
cracklu  哥们,再次谢谢啦。

不过我还是有个疑问:刚刚又逛了下论坛,也看了些技巧文章,看到关于使用ESP定律找OEP,很多里面提到使用的是HW命令,我奇怪,应该是他们这么用了,所以才这么说,而我使用HW为什么就不行呢?

我使用HW命令,然后按F9,OB直接打开了调试的应用程序。

而你提到的是HR命令就可以,其实我也是看到你在这个区提交的一个贴子,里面写的是使用HR命令,就你这个唯一的帖子,是HR命令。

是不是使用HW或HR都可以,而不是唯一的,但在特定的环境下只能使用其中之一???

哎,让我这个新手看起来很雾,哈哈。
2009-8-18 13:38
0
雪    币: 60
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
不知道是不是我自己操作的问题,我是在用OB载入之后,在命令行里输入HW,就按F9,而没有其他的任何操作。

哎,有出现问题了,现在用HR命令也不行。(清除了UDD文件夹中的缓存文件,重新载入调试的文件)

流程:OB载入--输入命令--F9

在这流程中是不是还有其他的操作啊?????
2009-8-18 14:02
0
游客
登录 | 注册 方可回帖
返回
//