首页
社区
课程
招聘
[原创]关于NAG窗口的移出方法
发表于: 2008-4-15 22:20 13419

[原创]关于NAG窗口的移出方法

2008-4-15 22:20
13419

【文章标题】: nag窗口的几种方法
【文章作者】: kanghtta
【作者邮箱】: kanghtta@hotmail.com
【作者主页】: http://kanghtta.cublog.cn
【作者QQ号】: 18381291
【软件名称】: nag  crackeme_01
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  大家好,前一段的Crackme阶段的练习先到一个阶段吧!感觉玩crackeme首要的就是下断,关键找到了,就看你的算法基础了!
  在玩了那6个之后,深感数学之重要,虽然到现在学的编程语言不少,但还是理论偏多,所以接下来的时间估计要潜水了!
  应该好好的学学数学,英语,还有编程实践了,感觉做一个好的Cracker 不会编程,估计有点不合适吧,也说不过去!
  也许简单的你能玩过去,但不能永远停在一个水平上,现在应该回头好好读读书,多练手了! 也许这些废话你并不爱看,
  没关系,JMP一下就可以,这些东西我写下来主要是让我以后回头看的时候,也好知道我在这个时间段做了些什么!
  
   今天看到NAG窗口,至于理论,看雪出版的书上很详细,所以在这里主要讨论下实现!
  关于nag窗口的去除办法有三种:
  修改资源,动态分析,静态分析;
  
   说道窗口,不得不说一下,目前为止用得最多的几种,其实窗口的范围很广,大到一个window,小到一个button,等等
  都可以列入窗口之列;要想nag一个窗口,本人觉得首先你必须对你nag的对象有个了解才行,我们常常要nag的窗口包括:
  
  MessageBox   消息框
  产生:
  消息框的产生也许你在任何一本有关GUI编程的书中都能找到,调用一API函数,
  The MessageBox function creates, displays, and operates a message box.
   The message box contains an application-defined message and title,
  plus any combination of predefined icons and push buttons.
  MessageBox函数创建,显示,并且控制一个消息框,消息框包含应用程序已定于的消息和标题,再加上一个预定义的图标和按钮.
  int MessageBox(
    HWND hWnd,          // handle of owner window  拥有这个消息框的窗口句柄
    LPCTSTR lpText,     // address of text in message box   在消息框中的文本的地址( 指针)
    LPCTSTR lpCaption,  // address of title of message box 消息框标题的地址
    UINT uType          // style of message box  消息框的样式,( 可以设定的值很多,详细请参考API手册或是MSDN)
  );
  
  对于消息框的去除,有下列几种方法可以尝试: 我们用一个例子说明:
  反汇编后的代码如下:
  00401000 >/$  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
  00401002  |.  68 00304000   push    00403000                         ; |Title = "Acid_Cool_178's"
  00401007  |.  68 10304000   push    00403010                         ; |Text = "Win32Asm Crackme 1"
  0040100C  |.  6A 00         push    0                                ; |hOwner = NULL
  0040100E  |.  E8 2D000000   call    <jmp.&USER32.MessageBoxA>        ; \MessageBoxA
  00401013  |.  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
  00401015  |.  68 23304000   push    00403023                         ; |Title = "Greetings goes too all my friends.."
  0040101A  |.  68 47304000   push    00403047                         ; |Text = "Hellforge, tCA, FHCF, DQF and the rest..."
  0040101F  |.  6A 00         push    0                                ; |hOwner = NULL
  00401021  |.  E8 1A000000   call    <jmp.&USER32.MessageBoxA>        ; \MessageBoxA
                     
  00401026  |.  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
  00401028  |.  68 71304000   push    00403071                         ; |Title = "Remove Me!"
  0040102D  |.  68 7C304000   push    0040307C                         ; |Text = "NAG NAG"
  00401032  |.  6A 00         push    0                                ; |hOwner = NULL  
  00401034  |.  E8 07000000   call    <jmp.&USER32.MessageBoxA>        ; \MessageBoxA             这个消息框是我们要去除的
  00401039  |.  6A 00         push    0                                ; /ExitCode = 0
  0040103B  \.  E8 06000000   call    <jmp.&KERNEL32.ExitProcess>      ; \ExitProcess
  
  方法1:  跳过警告窗口的那段代码;用JMP指令;
  
  1)用hiew打开程序: Crackeme_01.exe
  2)回车键进入代码模式,F5进入你要修改的地址,如果是虚拟地址前面加点号;本例输入: .401026
  3)F3进入编辑状态,此时地址显示的是文件偏移地址;
  4)在指定行上回车键或者F2修改汇编代码,输入: jmp 000000439后,ESC键返回,确认后,F9存盘!
  5) 运行程序; nag 窗口没了;
  
  方法2:
  用NOP指令填充401026到401039之间的代码;
  1)用hiew打开程序;
  2)回车进入16进制模式,F5进入你要修改的地址
  3)F3进入编辑状态,用90填充426--439之间的数据!
  4)F9 存盘后运行,NOG窗口没了!
  
  方法3:改WM_CLOSE 消息跳转;本例中直接调用三个messagebox函数,所以此方法不用;
  
  
  DialogBox   对话框
  什么是对话框;
  一个对话框被作为资源定义,这和菜单的定义有很多相同之处.
  你写一个对话框模版用来描述这个对话框的特征面( 属性) 和它拥有的控件并用资源编辑器将这些资源脚本组合在一起.
  有两种类型的对话框: 模式的和非模式的.非模式的对话框能让你切换输入焦点给其他窗口.如word中的查找对话框就是非模式的.
  模式对话框有两种子类型: 应用程序模式和系统模式.一个应用程序模式对话框不让你切换输入焦点给属于同一应用程序的其他窗口了,
  但是你能切换输入焦点给其他的应用程序窗口.一个系统模式的对话框不允许你切换输入焦点给任何其它窗口,直到你响应它为止.
  对话框的产生:
  非模式对话框是通过调用CreateDialogParam API 函数来创建的.模式对话框是通过调用DialogBoxParam函数创建。
  应用程序模式对话框和系统模式对话框唯一的区别就是系统模式对话框指定DS_SYSMODAL样式.
  如果在一个对话框模版中包含DS_SYSMODAL样式,那么这个对话框将是系统模式的对话框.
  int DialogBoxParam(
    HINSTANCE hInstance,  // handle to application instance
    LPCTSTR lpTemplateName,  // identifies dialog box template
    HWND hWndParent,      // handle to owner window
    DLGPROC lpDialogFunc, // pointer to dialog box procedure
    LPARAM dwInitParam    // initialization value
  );
   
  HWND CreateDialogParam(
    HINSTANCE hInstance,  // handle to application instance   应用程序实例句柄
    LPCTSTR lpTemplateName,  // identifies dialog box template 对话框模版标识 ,ID号
    HWND hWndParent,      // handle to owner window  拥有对话框的窗口句柄,父窗口句柄
    DLGPROC lpDialogFunc, // pointer to dialog box procedure   指向对话框过程的指针,
    LPARAM dwInitParam    // initialization value  初始化值
  );
  
  这两个函数中在去除NAG窗口时有两个窗口很重要:
   DLGPROC lpDialogFunc, // pointer to dialog box procedure   指向对话框过程的指针
   LPCTSTR lpTemplateName,  // identifies dialog box template 对话框模版标识 ,ID号
  这两个参数决定了你想创建什么样的对话框,和对话框可以做些什么!
  如果程序中有两个NAG窗口,我们就可以将这两个参数嫁接到另一个对话框函数的这两个参数上;来看看这种方法;
  1)打开资源黑客,找到我们要移出的对话框ID号为121D,16进制为:0x79,还有其它两个对话框
  
  00401051  |.  6A 00         push    0                                ; /lParam = NULL
  00401053  |.  68 C4104000   push    004010C4                         ; |DlgProc = Nag.004010C4
  00401058  |.  6A 00         push    0                                ; |hOwner = NULL
  0040105A  |.  6A 79         push    79                               ; |pTemplate = 79  我们要移出的对话框
  0040105C  |.  50            push    eax                              ; |hInst
  0040105D  |.  A3 9C114000   mov     dword ptr [40119C], eax          ; |
  00401062  |.  FF15 10104000 call    dword ptr [<&USER32.DialogBoxPar>; \DialogBoxParamA
  
  004010E5   .  6A 00         push    0                                ; /lParam = NULL
  004010E7   .  68 09114000   push    00401109                         ; |DlgProc = Nag.00401109
  004010EC   .  6A 00         push    0                                ; |hOwner = NULL
  004010EE   .  6A 65         push    65                               ; |pTemplate = 65
  004010F0   .  6A 00         push    0                                ; |/pModule = NULL
  004010F2   .  FF15 00104000 call    dword ptr [<&KERNEL32.GetModuleH>; |\GetModuleHandleA
  004010F8   .  50            push    eax                              ; |hInst
  004010F9   .  FF15 10104000 call    dword ptr [<&USER32.DialogBoxPar>; \DialogBoxParamA
  
  方法一: 将创建目标对话框的窗口代码作如下更改
  00401051  |.  6A 00         push    0                                ; /lParam = NULL
  004010E7   .  68 09114000   push    00401109                         ; |DlgProc = Nag.00401109
  004010EC   .  6A 00         push    0                                ; |hOwner = NULL
  004010EE   .  6A 65         push    65                               ; |pTemplate = 65
  0040105C  |.  50            push    eax                              ; |hInst
  0040105D  |.  A3 9C114000   mov     dword ptr [40119C], eax          ; |
  00401062  |.  FF15 10104000 call    dword ptr [<&USER32.DialogBoxPar>; \DialogBoxParamA
  
  用hiew打开,nag.exe
  1)回车,转换到代码窗口
  2)F5,输入 .401053 来到DlgProc处 ,
  3)F3进入编辑状态 ,回车后输入 PUSH 00401109
  4)回车来到 push    79  处,改为 PUSH 65后ESC退出
  5)F9存盘,运行程序,嘿嘿,成功;
  
  方法二:可以用Jmp指令直接跳到
  004010E5   .  6A 00         push    0        ;
  
  用hiew打开,nag.exe
  1)回车,转换到代码窗口
  2)F5,输入 .4010E5,在按F3 ,查看文件偏移: 为10E5
  3)ESC返回到代码窗口,F5查找.401051
  4)F3进入编辑状态 ,回车后输入 jmp 10E5
  5)F9存盘,运行程序,嘿嘿,成功;
  
  
   
  
--------------------------------------------------------------------------------
【经验总结】
  这两天在学PE格式,也许可以修改.rsrc来去除对话框,这一部分我会在学完pe格式后尝试,如果可以,到时候再补上
  
  方法三: 修改资源,设置对话框的样式为隐藏
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年04月15日 PM 10:17:57


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错哦.谢谢楼主..
2008-4-15 23:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这两天正需要这个,能搞一下dll 中的吗???
2008-4-18 12:44
0
雪    币: 250
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习了,谢谢分享
2008-5-9 14:30
0
雪    币: 203
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
如果NAG窗口中有关键代码的话,就不能简单跳过了。
2008-5-9 15:47
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
十分同意,支持
2008-5-10 10:01
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
期待你学会然后分享
2008-5-11 00:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
学习了。谢谢分享!
2008-5-12 20:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
呃......
2008-5-23 20:51
0
雪    币: 210
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢分享,很详细。顶一下。
2008-5-26 11:53
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
还是先把楼主说的看雪的书中提到的那些基础看了再来吧,现在看这个功力不够。
2008-5-31 01:14
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
12
sorry..
请问 nag 是什么意思?
2008-5-31 01:21
0
雪    币: 420
活跃值: (77)
能力值: ( LV13,RANK:500 )
在线值:
发帖
回帖
粉丝
13
Nag  本义是烦人的意思,是软件设计者用来不时的提醒用户购买正式版本的窗口!  

    金山词霸每次启动时弹出的那个提示你注册的窗口就是,时间长了,感觉烦人!
2008-6-1 23:36
0
雪    币: 206
活跃值: (125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
谢谢分享 学习啦
2008-9-4 12:20
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ppt
15
没看明白,先补基础知识去什么年代还用hiew,感觉有点古老了,在OD里不可以直接改吗?看得一头雾水.........
2008-9-4 15:58
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
16
关于这句:  方法2:
  用NOP指令填充401026到401039之间的代码;
  1)用hiew打开程序;
  2)回车进入16进制模式,F5进入你要修改的地址
  3)F3进入编辑状态,用90填充426--439之间的数据!
  4)F9 存盘后运行,NOG窗口没了!
========================================
问一个:为什么是用NOP指令填充401026到401039之间的代码;而不是填充401026到401034之间的代码???
2008-9-4 16:17
0
雪    币: 97697
活跃值: (200829)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
17
support.
2008-9-7 15:25
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
方法三: 修改资源,设置对话框的样式为隐藏

利用哪个资源修改工具可改为隐藏。我用了4个工具(reshacker,resscope,restorator,exescope)都没有隐藏这一项。
2008-9-14 09:29
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
菜鸟一个,学习了!
2008-9-16 21:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
谢谢楼主的总结。
2009-1-18 00:09
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
已照着教程做了遍,谢谢分享!
2009-5-3 21:25
0
游客
登录 | 注册 方可回帖
返回
//