首页
社区
课程
招聘
教你如何去严重BUG
发表于: 2006-7-19 05:07 8051

教你如何去严重BUG

qyc 活跃值
4
2006-7-19 05:07
8051

   在一个软件已经成品的发布了,BUG的出现是不可预见的(可以软件发布期缺少测试或本身不可能测试到的),所以撑握成品软件后期BUG调试技术是每个软件开发人员必须撑握的(今天看了一些软件开发的书,废话多了点。)

工具:OD (OD已成为现在WINDOWS主流用户级调试工具,不但用来破解方便,调试软件BUG也很OK)
被调试软件:万能五笔 EXE外挂版

   前天看到我深圳健华医药公司的美美用万能五笔打字挺爽的(介面好看而字库大),以前有不少打不出的字现在都能打了,不错(以后改用万能五笔)[要说下今天辞职(深圳健华医药公司)行政部搞了我一天才给我批下来,操他妈的害我坐在那等了一天。]

   今天来网吧,前几天想的万能五笔现在下来用,呵下了个绿色版,去掉了COPYSO网搜,一开始用还可以,但制作绿色版的作者不负积应,去了链接,但指标还在,看着不爽,害我在他搞的版本上搞了个更好看的,就在这时我发现了个万能五笔的BUG(我当时打开了一个空白记事本,无意中在COPYSO点了下,哈哈,软件被WINDOWS中止了),这下好了,我试了下最新原安装版也是如此。好了,故事开始了.....
  
  安装了原版,我试了原版,觉了那个COPYSO还真不错,不过失望的是:用的是COPYSO搜索引擎,能力大不行,虽然软件提供了引擎选择,不过很不爽,COPYSO都是默认的,重起软件又到回COPYSO,小的就大胆的DIY了一个万能五笔baidu版(最爱baidu百度――全球最大中文搜索引擎 中国人的吗!)百度引擎接口:http://www.baidu.com/s?wd=     这里就不说怎DIY了,呵,用上了百度,可那个BUG....我哭啊!
  
   为了让万能五笔与baidu完美结缘,结定动手去掉它(谁叫这个不起眼BUG,竟被我发现了,倒霉,知到了有BUG,就等于知到了这软件的不完美性,中意了没办法),下面开工。。

   先说明下:创建进程一舟殳都用到两个函数ShellExecute和WinExec 它们都是只创建,后期工作就不管了(被创建进程死活就不理了),不过有一个函数:CreateProcess就不同了,在此不多说(我都是在罗云杉的32位AMS那学的,ASM真的很有用哦,学破解的同包们,能了解到很多函数)。OK

OD打开万能五笔运行然后在命令行下:BP CreateProcessA  

运行那个BUG过程,哦程序没断下来,不过出现了异常(如果不下BP CreateProcessA 异常将不会出现,为什么自己看书 CreateProcess回调异常)

调试此程序不可以用键盘,不要问为什么?用了OD就会死掉。(用OD里的单步按钮)

003A004E    C2 0400         retn    4-------------->异常
003A0051    3A2D 29000000   cmp     ch, [29]
003A0057    0000            add     [eax], al
003A0059    0000            add     [eax], al
003A005B    0000            add     [eax], al
003A005D    0000            add     [eax], al
003A005F    0000            add     [eax], al

返回在KERNEL32.DLL
77E53887    5E              pop     esi
77E53888    C9              leave
77E53889    C2 1000         retn    10
77E5388C >  6A 18           push    18
77E5388E    68 2830E677     push    77E63028
77E53893    E8 406A0000     call    77E5A2D8

异常交给WINDOWS了
7801B27B    50              push    eax
7801B27C    E8 B5FDFFFF     call    RpcRaiseException
7801B281    CC              int3------------------------->int3异常中断
7801B282    56              push    esi

应用程序错误(好像在不可执行代码段执行了代码,你们看下ASM之DLL那章吧,我说的可能不对)在NTDLL提示
77FB4DB3    8B1C24          mov     ebx, [esp]
77FB4DB6    51              push    ecx
77FB4DB7    53              push    ebx
77FB4DB8    E8 ACBDFAFF     call    77F60B69---------------->在些出现应用程序错误程序(哈哈,我笑了,不知你地笑了没)
77FB4DBD    0AC0            or      al, al
77FB4DBF    74 0C           je      short 77FB4DCD


哈哈,这就是WINDOWS的每力所在,异常调试:点取消调试
77E41BBC >  55              push    ebp ------------->异常回调
77E41BBD    8BEC            mov     ebp, esp
77E41BBF    6A 00           push    0
77E41BC1    FF75 2C         push    dword ptr [ebp+2C]
77E41BC4    FF75 28         push    dword ptr [ebp+28]
77E41BC7    FF75 24         push    dword ptr [ebp+24]
77E41BCA    FF75 20         push    dword ptr [ebp+20]
77E41BCD    FF75 1C         push    dword ptr [ebp+1C]
77E41BD0    FF75 18         push    dword ptr [ebp+18]
77E41BD3    FF75 14         push    dword ptr [ebp+14]
77E41BD6    FF75 10         push    dword ptr [ebp+10]
77E41BD9    FF75 0C         push    dword ptr [ebp+C]
77E41BDC    FF75 08         push    dword ptr [ebp+8]
77E41BDF    6A 00           push    0
77E41BE1    E8 20170100     call    CreateProcessInternalA
77E41BE6    5D              pop     ebp
77E41BE7    C2 2800         retn    28
下面是堆栈........(看到了吧,不用我说了吧!)
0135F334   77E7347C  /CALL 到 CreateProcessA 来自 kernel32.77E73477
0135F338   00000000  |ModuleFileName = NULL
0135F33C   0135F384  |CommandLine = "drwtsn32 -p 872 -e 196 -g"
0135F340   00000000  |pProcessSecurity = NULL
0135F344   00000000  |pThreadSecurity = NULL
0135F348   00000001  |InheritHandles = TRUE
0135F34C   00000000  |CreationFlags = 0
0135F350   00000000  |pEnvironment = NULL
0135F354   00000000  |CurrentDir = NULL
0135F358   0135F484  |pStartupInfo = 0135F484
0135F35C   0135F374  \pProcessInfo = 0135F374
0135F360   0047D5F0  wnwb.0047D5F0
0135F364   00A50530

继续走到
004631CD  |> \83C8 FF       or      eax, FFFFFFFF                    ;  Case 1 of switch 004630C6
004631D0  |.  EB 09         jmp     short 004631DB
004631D2  |>  FF75 0C       push    dword ptr [ebp+C]                ; /pExceptionInfo; Case 0 of switch 004630C6
004631D5      FF15 70D14700 call    [<&KERNEL32.UnhandledExceptionFi>;  -------->此函数引发了异常
004631DB  |>  5E            pop     esi
004631DC  |.  5B            pop     ebx                              ;  0125FFA4
004631DD  |.  C9            leave
004631DE  \.  C3            retn
哈哈,原来UnhandledExceptionFi函数引发了异常

异常处找到了接下来是修复了(不知到你们想到修复方案没),我可想到了,利用正常搜索过程返回程序入口,就和正常搜索过程返回、程序就正常了,你说是不是(呵呵,光说没用还是要找到能用才行,),OK来一次正常的,选几个文字点搜索,以前下的BP CreateProcessA 起作用


一直走到:
0045DB21  |.  8906          mov     [esi], eax
0045DB23  |.  A1 4C2A4A00   mov     eax, [4A2A4C]
0045DB28  |.  85C0          test    eax, eax
0045DB2A  |.  74 02         je      short 0045DB2E
0045DB2C  |.  FFD0          call    eax
0045DB2E  |>  8365 FC 00    and     dword ptr [ebp-4], 0
0045DB32  |.  FF76 4C       push    dword ptr [esi+4C]
0045DB35  |.  FF56 48       call    [esi+48]
0045DB38  |.  50            push    eax
0045DB39  |.  E8 37000000   call    0045DB75----------------------在此call 0045DB75正常搜索过程返回
0045DB3E  |.  59            pop     ecx
0045DB3F  |.  834D FC FF    or      dword ptr [ebp-4], FFFFFFFF
0045DB43  |.  33C0          xor     eax, eax
0045DB45  |.  8B4D F0       mov     ecx, [ebp-10]
0045DB48  |.  64:890D 00000>mov     fs:[0], ecx
0045DB4F  |.  5F            pop     edi
0045DB50  |.  5E            pop     esi
0045DB51  |.  5B            pop     ebx
0045DB52  |.  C9            leave
0045DB53  \.  C2 0400       retn    4

呵。。来修复了
==============================================================================
在004631D5 UnhandledExceptionFi函数引发了异常
所以004631D5 call    [<&KERNEL32.UnhandledExceptionFi>改为:call    0045DB75

OK保存,哈哈,看到效果没,此BUG修复得很完美,所以我把我的修改版命名为:万能五笔去严重[BUG]baidu版
以后修改得更完美时发布此版本,记得用baidu搜哦/最爱baidu

By 小Q 2006 .7 .19 零晨 在深圳健华医药公司辞职的第一天

转贴请注明出处,版权所有[小Q]qyc LOVE pediy.com


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习了,支持.
2006-7-19 06:47
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错,学习了~````
2006-7-19 14:20
0
雪    币: 433
活跃值: (176)
能力值: ( LV13,RANK:1250 )
在线值:
发帖
回帖
粉丝
4
最初由 qyc 发布

调试此程序不可以用键盘,不要问为什么?用了OD就会死掉。
........


我见过用GetKeyState检测按键F7和F8的,看看导入表中有没有它。
2006-7-19 15:18
0
雪    币: 436
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不错了!!!
这到是学习的又一个好贴!1
2006-7-19 20:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我也很喜欢五笔输入法,先顶了,再仔细学过。
2006-7-19 21:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
晕,偶比较笨,没看懂。基础不行啊。

不过,五笔输入法方面,我可是用了比较多,万能五笔只能说还可以。

1、传统的输入法(就是OFFICE里的五笔)也还是不错的,简单实用,够用。上屏速度快。

2、我现在最喜欢的是现代输入法是:小鸭五笔,刚刚发布新版。用起来很顺手。另外,小鸭有几个很有特色的功能是其它输入法没有的。比如可以设置三重二简,也可以不设。而且支持大字符集。等等,反正有几个其它输入法没有的功能。小鸭适合高手用。

3、极点五笔是功能最多的现代输入法,可以有插件,已经有了不少插件。比较我就常用极点五笔的现代汉语词典功能。还有牛筋英汉词典等。就是复制一个字,按Ctrl+/ 就可以出来这个字,词的解释,还有成语词典等。――极点适合比较多的人用。

4、外挂类输入法还有出来不久的酷极。也还不错。

喜欢输入法,就多说了些。呵呵。

我的目标是自己写一款输入法,不过现在还差的太远。也不知猴年能不能成形。
2006-7-19 21:56
0
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
8
我用极点。。。。跑题了有点,老大不要删啊
2006-7-19 21:59
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
google也不错  
2006-7-20 00:36
0
雪    币: 47147
活跃值: (20455)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
10
最初由 WAKU 发布
我用极点。。。。跑题了有点,老大不要删啊


五笔当然用极点,用过的人就会喜欢。
2006-7-20 09:14
0
雪    币: 707
活跃值: (1301)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
11
呵呵,各位小Q在看雪的处女精啊///好高兴 高兴地说不出话来了
kanxue  你还取看不起我吗//

各位兄弟我终以得了一个精了,苦苦的学习没有白会
2006-7-21 10:10
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
极点的十分好用.
2006-7-21 11:51
0
雪    币: 221
活跃值: (44)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
一向只用五码86版
2006-7-21 17:05
0
游客
登录 | 注册 方可回帖
返回
//