tianlong11 发表于 2010-9-25 17:50

某软件去Nag例子

本帖最后由 tianlong11 于 2010-9-25 17:57 编辑

【文章标题】: 某软件去Nag例子
【文章作者】: whiley
【作者邮箱】: whiley@163.com
【作者主页】: 无
【作者QQ号】: 保留
【软件名称】: 不清楚
【下载地址】: 自己搜索下载
【作者声明】: 思路来自天草的教程,没什么可说的了
--------------------------------------------------------------------------------
【详细过程】
天草教程原来的一个很简单的例子,去掉某软件的Nag

首先OD打开软件,用到F12暂停法

看到以下代码,不管它,F9运行
00405095 K> $6A 74                  push 74
00405097    .68 68674000         push KeyGen.00406768
0040509C    .E8 FF020000         call KeyGen.004053A0
004050A1    .33DB                      xor ebx,ebx
004050A3    .895D E0               mov dword ptr ss:,ebx
004050A6    .53                        push ebx                                     ; /pModule => NULL
004050A7    .8B3D 68604000   mov edi,dword ptr ds:[<&KERNEL32.GetModuleHa>; |kernel32.GetModuleHandleA
004050AD    .FFD7                      call edi                                     ; \GetModuleHandleA
004050AF    .66:8138 4D5A      cmp word ptr ds:,5A4D

F12暂停,然后Alt+K调用堆栈,看到以下代码


0012FE50   77D19418   包含ntdll.KiFastSystemCallRet          USER32.77D19416               0012FE84
0012FE54   77D2DBA8   USER32.WaitMessage                     USER32.77D2DBA3               0012FE84
0012FE88   77D2593F   USER32.77D2DA19                        USER32.77D2593A               0012FE84
0012FEB0   77D25981   USER32.77D25889                        USER32.77D2597C               0012FEAC
0012FED0   77D3B158   USER32.DialogBoxIndirectParamAorW      USER32.77D3B153               0012FECC
0012FEFC   00402125   包含USER32.77D3B158                  KeyGen.00402123               0012FEF8
0012FF1C   0040521A   ? KeyGen.00402090                      KeyGen.00405215


其实可以直接双击这行代码,直接到关键位置,但是为了...
0012FEFC   00402125   包含USER32.77D3B158                  KeyGen.00402123

我们双击或右键显示调用,这行代码

0012FF1C   0040521A   ? KeyGen.00402090                      KeyGen.00405215

就来到了,这里
00405209    . /EB 03                jmp short KeyGen.0040520E
0040520B    > |6A 0A               push 0A
0040520D    . |58                     pop eax
0040520E    > \50                  push eax
0040520F    .56                     push esi
00405210    .53                     push ebx
00405211    .53                     push ebx
00405212    .FFD7               call edi
00405214    .50                     push eax
00405215    .E8 76CEFFFF   call KeyGen.00402090                         ;调用对话框的CALL
0040521A    .8BF0               mov esi,eax
0040521C    .8975 C0            mov dword ptr ss:,esi
0040521F    .395D E4            cmp dword ptr ss:,ebx
00405222    .75 07               jnz short KeyGen.0040522B
00405224    .56                  push esi                                     ; /status
00405225    .FF15 C8604000       call dword ptr ds:[<&MSVCR71.exit>]          ; \exit
0040522B    >FF15 CC604000       call dword ptr ds:[<&MSVCR71._cexit>]      ;MSVCR71._cexit

然后我们F7,进入00405215 调用对话框的CALL,来到

    00402090   /$56                   push esi
00402091   |.57                      push edi
00402092   |.6A 00               push 0                                       ; /pModule = NULL               
00402094   |.FF15 68604000      call dword ptr ds:[<&KERNEL32.GetModuleHandl>; \GetModuleHandleA
0040209A   |.68 6293BC00         push 0BC9362                                 ; /Color = RGB(98.,147.,188.)
0040209F   |.A3 E0804000          mov dword ptr ds:,eax                ; |
004020A4   |.FF15 30604000       call dword ptr ds:[<&GDI32.CreateSolidBrush>>; \CreateSolidBrush
004020AA   |.A3 E8804000          mov dword ptr ds:,eax
004020AF   |.A1 E0804000          mov eax,dword ptr ds:
004020B4   |.6A 67                      push 67                                    ; /RsrcName = 103.
004020B6   |.50                            push eax                                     ; |hInst => NULL
004020B7   |.FF15 54614000       call dword ptr ds:[<&USER32.LoadIconA>]      ; \LoadIconA
004020BD   |.8B0D E0804000       mov ecx,dword ptr ds:
004020C3   |.6A 65                      push 65                                    ; /RsrcName = 101.
004020C5   |.51                           push ecx                                     ; |hInst => NULL
004020C6   |.A3 EC804000         mov dword ptr ds:,eax                ; |
004020CB   |.FF15 50614000       call dword ptr ds:[<&USER32.LoadCursorA>]    ; \LoadCursorA
004020D1   |.68 E0104000         push KeyGen.004010E0
004020D6   |.68 A0104000         push KeyGen.004010A0
004020DB   |.68 60104000         push KeyGen.00401060
004020E0   |.68 50104000         push KeyGen.00401050
004020E5   |.68 00104000         push KeyGen.00401000
004020EA   |.A3 E4804000         mov dword ptr ds:,eax
004020EF   |.E8 57120000         call KeyGen.0040334B
004020F4   |.6A 00                     push 0
004020F6   |.6A 68                     push 68
004020F8   |.E8 980D0000         call KeyGen.00402E95
004020FD   |.8BF0                      mov esi,eax
004020FF   |.56                        push esi

以上的CALL里的代码我们都没必要管,因为这是个SDK写的程序,用Win32汇编写过程序的朋友都知道是什么

00402100   |.90                  nop
00402101   |.90                  nop
00402102   |.90                  nop
00402103   |.90                  nop
00402104   |.90                  nop
00402105   |.8B15 E0804000       mov edx,dword ptr ds:
0040210B   |.8B3D 48614000       mov edi,dword ptr ds:[<&USER32.DialogBoxPara>;USER32.DialogBoxParamA
00402111   |.83C4 20             add esp,20

00402114   |.6A 00               push 0                                       ; /lParam = NULL
00402116   |.68 B01E4000   push KeyGen.00401EB0                         ; |DlgProc = KeyGen.00401EB0
0040211B   |.6A 00               push 0                                       ; |hOwner = NULL
0040211D   |.68 E8030000   push 3E8                                     ; |pTemplate = 3E8
00402122   |.52                  push edx                                     ; |hInst => NULL
00402123   |.FFD7                call edi                                     ; \弹出对话框让你选择是还是否
以上调用的是DialogBoxparmA函数来显示对话框

00402125   |.A1 F0834000    mov eax,dword ptr ds:                ;如果选择的是,那么这里就会给eax赋值1,如果是否那就是0
0040212A   |.85C0                test eax,eax
0040212C   |.74 16               je short KeyGen.00402144                     ;这里就不会跳
0040212E   |.A1 E0804000    mov eax,dword ptr ds:

如果不跳的话,就会单步一直走到主对话框这里,就显示了,那很明显了,我们去掉对话
框,这里我们有两个选择。
第一NOP掉00402123 这个CALL和 0040212C jeNop掉之后就会慢慢走到主程序这里。
第二NOP掉00402123 这个CALL和 00402125 mov eax,dword ptr ds: 这段代码我们
修改成 mov eax,1即可,为什么修改成1,因为eax = 1的话,je就不跳,eax = 0的话就跳
我们的目的就是不让它跳。

00402133   |.6A 00               push 0                                       ; /lParam = NULL
00402135   |.68 901A4000   push KeyGen.00401A90                         ; |DlgProc = KeyGen.00401A90
0040213A   |.6A 00               push 0                                       ; |hOwner = NULL
0040213C   |.68 D0070000   push 7D0                                     ; |pTemplate = 7D0
00402141   |.50                  push eax                                     ; |hInst => NULL
00402142   |.FFD7                call edi                                     ; \主对话框   

00402144   |>8B0D E8804000       mov ecx,dword ptr ds:
0040214A   |.51                           push ecx                                     ; /hObject => NULL
0040214B   |.FF15 3C604000       call dword ptr ds:[<&GDI32.DeleteObject>]    ; \DeleteObject
00402151   |.56                            push esi
00402152   |.E8 970D0000         call KeyGen.00402EEE
00402157   |.83C4 04               add esp,4
0040215A   |.6A 00                      push 0
0040215C   |.E8 6F000000         call KeyGen.004021D0
00402161   |.6A 00                     push 0                                       ; /ExitCode = 0
00402163   \.FF15 6C604000       call dword ptr ds:[<&KERNEL32.ExitProcess>]; \ExitProcess
00402169       5F                        db 5F                                        ;CHAR '_'
0040216A       5E                        db 5E                                        ;CHAR '^'
0040216B       CC                        int3
0040216C       CC                        int3
0040216D       CC                        int3
0040216E       CC                        int3
0040216F       CC                        int3
00402170    $C3                         retn








                                          
--------------------------------------------------------------------------------
【版权声明】: 没啥版权之称,在天草教程里学到的东西,所以.......
                                                       2010年09月25日 17:43:39

viks 发表于 2010-9-25 17:59

天草被我删了。郁闷。

wangleweb 发表于 2010-9-25 18:00

哈哈,沙发,沙发

czjh2008 发表于 2010-9-25 18:10

不错!又可以学习了……
页: [1]
查看完整版本: 某软件去Nag例子