飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 13577|回复: 43

[转贴] 你用 OllyDbg 吗? 千万不要相信他也不要相信你的眼睛!

[复制链接]

该用户从未签到

发表于 2008-8-20 09:45:35 | 显示全部楼层 |阅读模式
标 题: 【原创】你用 OllyDbg 吗? 千万不要相信他也不要相信你的眼睛!
作 者: sessiondiy
时 间: 2008-07-28,04:45
链 接: http://bbs.pediy.com/showthread.php?t=69477

你常用OllyDbg吗? 千万不要相信他也不要相信你的眼睛!

睡不着,写个好玩的大家看看.练练你的心脏.

下列是一个很重要的注册号调用 :
你习惯性的在 00401003 按了二下, 设了软件断点 非常方便.
(以下将以 P1 代表 00401003)
00401000    31C9            xor     ecx,ecx
00401002    40              inc     eax
00401003    E8 F80F0000     call    00402000
00401007    C3              retn
很习惯性的事后你没有 delete或disable 掉P1

看准了你这坏习惯:
<千万不要相信你的眼睛>

 我在Call里面的深层有如下的程序码:
  BE 00104000        mov     esi,00401000
  C706 8A023242      mov     dword ptr [esi],4232028A
  C746 04 90324202   mov     dword ptr [esi+4],02423290
  .......
  .....
  
 主要将401000换上这个程序:
 00401000   .  8A02          mov     al,[edx]
 00401002   .  3242 90       xor     al,[edx-70]
 00401005   .  3242 02       xor     al,[edx+2]
 00401008       ......

 当然了, 置换时你并不知道.

 若你突然去看 401000, 你会发现OD是显示这样: 跟放上去的不同
 00401000    8A02            mov     al,[edx]
 00401002    32E8            xor     ch,al
 00401004    90              nop
 00401005    3242 02         xor     al,[edx+2]
 00401008    C3              retn
 没错. 那个你下断点的P1  E8 无法盖掉.
 至少OD的画面告诉我们这是"无法盖掉"的.

 OK. 你不管这个, 你继续在OD里F7'F8努力的分析code ' data
 突然..聪明的你执行到401000时发现Code被改了. 你就开始从401000单步

 假设 xor 前, AX=0102 , CX=8090
 第二行的 xor ch,al , ch 总会得到 80^02 = 82 吧
 你按了一下 F7, 哇靠... CX 还是维持在 8090 , 倒是 AX 变成了 0123 了
 这题有点难度, 我小心的用计算机算了一下 80^02=82 没错啊.
 打死我也想不通 AX 是如何由 0102 变成 0123 的.
 xor ch,al 竟然会跟 cx 无关.
  
 OK. F7 可能有问题. 我们换 F8 ' F9. 结果一样.
  
 现在我们将那个软件断点 Disable 试试.(请直接设回EIP=401000继续测试)
    xor ch,al
    nop
 CH=82 没错了.

 现在我们将那个软件断点再 Enable 试试.(请直接设回EIP=401000继续测试)
    哇靠...这次 xor ch,al 换成 CL=91

 学了一个多月的汇编, 用了一个多月的OD还没见过这等鸟事

 <整理一下>
  第一次: AX=0123
      你会发现 在 00401002 按 F7, 下一条不是停在 nop 而是停在 00401005
      经验告诉我们, 其实 OD 是执行了一条占用 3 个 byte 的指令
       OD 其实是正确的执行了 xor al,[edx-70]
       我这里 [edx-70]=21 , 02^21=23 , 所以 AL=23 没错,只是OD显示的Code不对.
      可见 OD 虽然显示不正确, 可是的确有正确的记录下P1那个 Byte

  第二次: 将断点 Disable 掉,结果跟眼睛所看到的跟程序码符合
      (实际上已算不出正确的注册号了)

  第三次: 将断点 Enable (变成 CL=91 了)
      大家都知道Enable一个软件断点会将其Byte改成 CC
      眼睛虽然看到 32E8 xor ch,al
      执行的却是  32CC xor cl,ah

  OK. 这的确造成很大的困扰.
  
  <更大的困扰>
  经过了上列三回合, 我们EIP再设回401000, 并将P1断点 remove 掉.
  这二行还是一样这样显示,  而且还真的是这样子执行. (跟上面的'第二次'一样)
    00401002    32E8            xor     ch,al
    00401004    90              nop

  Disable ' Remove 掉反而会导致算出来的注册码永远都不对.


这种方式也可运用在防OD方面, 适当的设置可变成: 有OD会引发例外, 没OD则不会.
或是有无载入 OD, 其 jmp 的地方会不一样.
不过得先大约猜测破解者会在那一范围内下软断.
(上面的程序码我是刻意的不想产生Exception所编排的)

若已弄到你很累 & 做手脚的地址不是在 401000 这么好识别的话.....

注册机时,习惯中途从 OD 复制程序码的人也要小心一点了.
(弄到你生不出注册机)

所以...软件断点不要乱设一堆

在Debug自己写的小程序时, 发现我要的值怎么算都不对.
原来是重新Compile之后的Code移了1个byte, 之前的断点又没拿掉导致的.
写出来给同是新手的朋友們做个参考.
牛人常说: 若你不顺'有问题...先删了 udd 吧, 这不是没道理的.
不然就算你重新载入程序也没用.
PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2025-1-14 08:38
  • 签到天数: 516 天

    [LV.9]以坛为家II

    发表于 2008-8-20 10:01:46 | 显示全部楼层
    高人呐,确实盲目不能相信OD,不过我这样的菜鸟目前还只能是跟着OD走,没这个水平思考这样的问题,感谢大侠的提醒,努力提高中。。。
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2024-2-8 10:42
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2008-8-20 17:25:26 | 显示全部楼层
    一般像我这等菜鸟 是不能发现了 只能先相信OD了 /:010
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-5-9 01:01
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2008-8-20 22:01:10 | 显示全部楼层
    这篇文章我好像在那个论坛上看到过,但由于自己目前还属于菜鸟,有些看不懂,也就没在意了,今天再次在这里看到,说明我还得加油。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-21 14:37:23 | 显示全部楼层
    很有意思,有时候觉得od不稳定,是不是遇到了这个。/:014
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2025-1-14 21:51
  • 签到天数: 1002 天

    [LV.10]以坛为家III

    发表于 2008-8-23 09:01:11 | 显示全部楼层
    还不到哪水平,OD还不熟练。继续努力!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-24 01:39:23 | 显示全部楼层
    这个应该是OD BOG把?????????
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-4-18 15:36
  • 签到天数: 207 天

    [LV.7]常住居民III

    发表于 2008-8-25 21:57:23 | 显示全部楼层
    勉强看懂了楼主的文章,受教了,谢谢!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-25 22:52:29 | 显示全部楼层
    没看懂,继续学习中/:good
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-25 23:44:52 | 显示全部楼层
    发在看雪的,呵呵!
    od也是一软件,并不是智能的,只能按设计来反汇编,当然可能被人为的修改然后使它反出来是错的,当然也有加些小花来改变反汇编结果来扰乱大家视线的,经验在于总结,知识在于积累!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表