首页
社区
课程
招聘
[旧帖] [推荐][原创]去除某软件的NAG 0.00雪花
发表于: 2009-8-5 12:21 1485

[旧帖] [推荐][原创]去除某软件的NAG 0.00雪花

2009-8-5 12:21
1485
刚刚尝试去除了一个软件的NAG,现在发出来,希望能拿到邀请码

声明:本人是刚学2天的菜鸟,文章有许多不足之处,请各位大牛指点。
============================================================================================================
目标程序简介:该程序是一款虚拟桌面程序,如果没注册,每次关闭程序时会依次弹出两个对话框,要求注册、修改IE主页。

任务目标:    使得程序退出时不显示该对话框。

使用工具:    PEid,Ollydbg,UnAspack2.1,WinHex
============================================================================================================
过程:

首先PEid查壳,结果是Aspack2.12。由于我暂时不会手工脱壳,就用网上的UnAspack2.1脱壳机把壳去掉(脱壳明天再学)。
然后用od载入,Ctrl+N查看API函数,看到两个MessageBoxA,选在每个参考上设置断点,运行,关闭程序,断了:

  0045FC77  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ; |
  0045FC7A  |.  8B40 30       MOV EAX,DWORD PTR DS:[EAX+30]            ; |
  0045FC7D  |.  50            PUSH EAX                                 ; |hOwner
  0045FC7E  |.  E8 B576FAFF   CALL <JMP.&user32.MessageBoxA>           ; \MessageBoxA(断于此处)
  0045FC83  |.  8945 F8       MOV DWORD PTR SS:[EBP-8],EAX
  0045FC86  |.  33C0          XOR EAX,EAX

此call是弹出提示框。往上翻,发现没有跳转可以绕过这个call,没办法,在该函数入口处设断,并把其他不必要的断点禁用掉。
然后重新载入,运行。又断了,正是断在函数入口,看看堆栈:

0012FBF0   004D3B44  返回到 v2.004D3B44 来自 v2.0045FB98

按enter到返回的位置:

  004D3B20   .  53            PUSH EBX
  004D3B21   .  8BD9          MOV EBX,ECX
  004D3B23   .  803D 30A34D00>CMP BYTE PTR DS:[4DA330],0
  004D3B2A   .  75 2F         JNZ SHORT v2.004D3B5B                    ;  修改这里
  004D3B2C   .  6A 24         PUSH 24
  004D3B2E   .  B9 603B4D00   MOV ECX,v2.004D3B60
  004D3B33   .  BA 683B4D00   MOV EDX,v2.004D3B68
  004D3B38   .  A1 50844D00   MOV EAX,DWORD PTR DS:[4D8450]
  004D3B3D   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
  004D3B3F   .  E8 54C0F8FF   CALL v2.0045FB98
  004D3B44   .  83F8 06       CMP EAX,6                                ;  enter到这里
  004D3B47   .  75 12         JNZ SHORT v2.004D3B5B
  004D3B49   .  C603 00       MOV BYTE PTR DS:[EBX],0
  004D3B4C   .  A1 A8854D00   MOV EAX,DWORD PTR DS:[4D85A8]
  004D3B51   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
  004D3B53   .  8B10          MOV EDX,DWORD PTR DS:[EAX]
  04D3B55   .  FF92 E8000000 CALL DWORD PTR DS:[EDX+E8]
  004D3B5B   >  5B            POP EBX
  004D3B5C   .  C3            RETN

往上翻,发现有个JNZ可以跳过刚才的call,于是尝试修改,把JNZ改为JMP。再把所有断点禁掉。
然后重新载入,Ctrl+P运用该补丁,运行,关闭程序。竟然没有弹出窗口!再测试一下其他功能,哈哈,一切正常。

现在要改程序文件了。我没了解过PE文件格式,就直接用WinHex改文件...

运用了补丁后的代码是:

  004D3B2A     /EB 2F         JMP SHORT v2.004D3B5B                    ;  运用之后的代码

WinHex打开脱过壳的程序,Alt+G转到偏移004D3B2A,提示不存在该偏移。怎么回事??
再看OllyDbg中最小的地址都是00401000WinHex里最大的偏移才16DFFF,相差巨大。
我一想,可能是内存的地址和文件的偏移之间存在某种不相等的数量关系。
于是找到开头的代码:

  00401000   . /04104000      DD v2.00401004
  00401004     \03            DB 03
  00401005   .  07            DB 07
  00401006   .  42 6F 6F 6C 6>ASCII "Boolean"                          ;  查找此处的文本      
  0040100D      01            DB 01
  0040100E      00            DB 00
  0040100F      00            DB 00
  00401010      00            DB 00
  00401011      00            DB 00
  00401012      01            DB 01
  00401013      00            DB 00
  00401014      00            DB 00
  00401015      00            DB 00
  00401016      00104000      DD v2.00401000
  0040101A   .  05            DB 05
  0040101B   .  46 61 6C 73 6>ASCII "False"
  00401020   .  04            DB 04
  00401021   .  54 72 75 65   ASCII "True"

WinHex中Ctrl+F查找文本Boolean,找到偏移量为1006处,往下看,居然和OllyDbg中的数据一样:

  Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
  00001000   04 10 40 00 03 07 42 6F  6F 6C 65 61 6E 01 00 00   ..@...Boolean...
  00001010   00 00 01 00 00 00 00 10  40 00 05 46 61 6C 73 65   ........@..False
  00001020   04 54 72 75 65                                     .True

于是用00401006-1006=400000,OllyDbg中的地址对应到文件中的偏移量要相应地减400000
(我觉得我明天有必要了解一下PE文件的结构,这种换算关系应该是个巧合)
回去继续看补丁,它把004D3B2A处的75 2F改成了EB 2F,换算到文件中就是把000D3B2A处的75 2F改成EB 2F
打开WinHex,Alt+G定位到000D3B2A处,看看正好是75 2F
75 2F改为EB 2F,保存,测试...OK!

============================================================================================================
任务完成情况:成功完成目标,在不影响其他功能的前提下保证了关闭时的提示框不弹出。

完成时间:    09年8月5日凌晨
============================================================================================================
提问:    关于将OllyDbg中的补丁运用到文件去,应该还有更好的方法,哪位大牛可以介绍一下??

最后的话:凡指出我在本文章中的不足的人,不管是大牛还是菜鸟,在此,我都不胜感激。。。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 93
活跃值: (55)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
关于如何将OllyDbg的补丁应用到文件,我今天浏览了一下论坛,发现其实很简单。。(昨天写文章时上不了网)

运用了所有补丁之后,在代码窗口中右击->复制到可执行文件->所有修改,然后选择保存位置就可以了。

参见http://bbs.pediy.com/showthread.php?s=&threadid=31840  3.2第二问
==========================================================================================
关于0x400000的含义,应该是PE文件中的ImageBase,提供文件所有头的优先(线性)载入地址(即OllyDbg中的地址??)
2009-8-5 12:22
0
雪    币: 179
活跃值: (26)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
楼主的悟性很高啊,在不知道文件偏移和虚拟内存偏移概念的情况下自己悟出解决办法。
2009-8-5 12:31
0
雪    币: 224
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢LZ分享,学习了。。。。
2009-8-5 14:42
0
游客
登录 | 注册 方可回帖
返回
//