首页
论坛
课程
招聘
[调试逆向] [原创]你用 OllyDbg 吗? 千万不要相信他也不要相信你的眼睛!
2008-7-28 04:45 35425

[调试逆向] [原创]你用 OllyDbg 吗? 千万不要相信他也不要相信你的眼睛!

2008-7-28 04:45
35425
你常用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 吧, 这不是没道理的.
不然就算你重新载入程序也没用.

[看雪官方培训] Unicorn Trace还原Ollvm算法!《安卓高级研修班》2021年秋季班火热招生!!

收藏
点赞0
打赏
分享
最新回复 (57)
雪    币: 108
活跃值: 活跃值 (14)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
沙金 活跃值 4 2008-7-28 07:19
2
0
花指令。慢慢的就习惯了。
雪    币: 2188
活跃值: 活跃值 (98)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
shellwolf 活跃值 10 2008-7-28 08:37
3
0
学了一招。是个防软断的好方法。多谢。
session这么早?
雪    币: 2025
活跃值: 活跃值 (21)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 活跃值 4 2008-7-28 09:23
4
0
不是花指令



唉..就是睡不著才寫的.
雪    币: 1795
活跃值: 活跃值 (661)
能力值: (RANK:770 )
在线值:
发帖
回帖
粉丝
海风月影 活跃值 18 2008-7-28 10:08
5
0
SMC
设计这样的例子会很累
雪    币: 2025
活跃值: 活跃值 (21)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 活跃值 4 2008-7-28 10:21
6
0
当所有的anti都被anti时, 好像也只能另找出路钻牛角了
不然就anti几个重要的就好, 听天命.
雪    币: 5536
活跃值: 活跃值 (51)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 活跃值 26 2008-7-28 10:51
7
0
标题party啊,设计也不麻烦,看看vx heaven上的polymorphic engine
雪    币: 1835
活跃值: 活跃值 (93)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
Bughoho 活跃值 8 2008-7-28 22:08
8
0
cb上多了吧
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
WisdomZh 活跃值 2008-8-15 23:51
9
0
确实遇到过, OD 这个 bug 挺严重, 不过利用起来很难
雪    币: 207
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
snailxp 活跃值 2008-8-16 15:12
10
0
这是心理工程学范畴.高了去啦...
雪    币: 1480
活跃值: 活跃值 (68)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
cntrump 活跃值 13 2008-8-16 15:38
11
0
快点报告给作者,期望在2.0正式版中得到改正
雪    币: 70
活跃值: 活跃值 (57)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
Nisy 活跃值 5 2008-8-16 15:52
12
0
有心人 强大 学习一下 ~·~
雪    币: 159
活跃值: 活跃值 (46)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
gzgzlxg 活跃值 11 2008-8-16 16:15
13
0
看了半天也不知道楼主要说什么,OD这个缺点?道行太浅。
软件断点和硬件断点如何使用,在什么时候使用,多研究研究。
不要因为一点事,就以为OD错了,OD有错,那是千真万确的,而且多少前辈在修改,但不是你说的这种错误,找个强壳,或者干脆跟到RING 0,在干脆直接到FOOO0H的BIOS中,你怎么办,都是OD的问题?
不服气,你写一个我们看看?(中国牛人SYSTEMDEBUG例外)
我水平算不低了,用IDA反汇编OD(曾经给过看雪老大这方面的指引,即怎样将OD的头文件引导进IDA,使分析结果更可爱),而最终结果回到BC++ 的源代码,可惜自己修行不足,心有余而力不足。
OD不是你我想象的那么简单的一个调试器。
曾经将OD的代码仔细的在IDA中反汇编,我的水平(可看我在本站发的帖)也够可以了,但还是有些地方弄不懂,否则中国至少会出现一个完美的OD的汇编版(那不是我的愿望,我的愿望是完美的BC++源码)。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qijiashe 活跃值 2008-8-16 23:08
14
0
楼上的很危险
雪    币: 215
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
veninson 活跃值 2008-8-16 23:35
15
0
为什么会有那么大的鸟
雪    币: 2025
活跃值: 活跃值 (21)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 活跃值 4 2008-8-17 01:28
16
0
13楼的吃错药了?
这人怪怪的
得选个时间来去改改运..
雪    币: 5536
活跃值: 活跃值 (51)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 活跃值 26 2008-8-17 02:38
17
0
大概是笑楼主不会按Ctrl+上下
雪    币: 2025
活跃值: 活跃值 (21)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 活跃值 4 2008-8-17 04:05
18
0
不像
而且按那个一样没有用.
雪    币: 212
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
vrowang123 活跃值 1 2008-8-17 04:17
19
0
因为你的标题太夸张了
雪    币: 2025
活跃值: 活跃值 (21)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
sessiondiy 活跃值 4 2008-8-17 04:19
20
0
嗯. 吸引你的好奇心
雪    币: 170
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yzjsdn 活跃值 2008-8-17 07:55
21
0
无聊的说,何不去关注奥运来得实际
雪    币: 159
活跃值: 活跃值 (46)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
gzgzlxg 活跃值 11 2008-8-17 19:54
22
0
绝对不危险,老好人一个。

雪    币: 105
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
你猜 活跃值 2008-8-18 06:13
23
0
如果这篇文章是13楼的大牛来写的话读起来肯定又是另一种感觉. 舒爽...
雪    币: 219
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mykgd 活跃值 2008-8-18 17:16
24
0
没学过汇编,但是对这方面研究非常感兴趣,如果我有13楼的水平那多好啊。很想告别菜鸟,成一个牛人,
雪    币: 356
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
stupidass 活跃值 2008-8-19 12:55
25
0
利用BPH写个插件打个补丁,完全可以避免以上问题...唯一的限制就是同时保护的软件断点只能有4个。OD的可扩展性真的很好,大家多研究。
游客
登录 | 注册 方可回帖
返回