吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5709|回复: 3
收起左侧

[分享] 某软件去Nag例子

[复制链接]
tianlong11 发表于 2010-9-25 17:50
本帖最后由 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:[ebp-20],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:[eax],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:[ebp-40],esi
  0040521F    .  395D E4            cmp dword ptr ss:[ebp-1C],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:[4080E0],eax                ; |
  004020A4   |.  FF15 30604000       call dword ptr ds:[<&GDI32.CreateSolidBrush>>; \CreateSolidBrush
  004020AA   |.  A3 E8804000          mov dword ptr ds:[4080E8],eax
  004020AF   |.  A1 E0804000          mov eax,dword ptr ds:[4080E0]
  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:[4080E0]
  004020C3   |.  6A 65                      push 65                                      ; /RsrcName = 101.
  004020C5   |.  51                           push ecx                                     ; |hInst => NULL
  004020C6   |.  A3 EC804000         mov dword ptr ds:[4080EC],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:[4080E4],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:[4080E0]
  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:[4083F0]                ;如果选择的是,那么这里就会给eax赋值1,如果是否那就是0
  0040212A   |.  85C0                test eax,eax
  0040212C   |.  74 16               je short KeyGen.00402144                     ;这里就不会跳
  0040212E   |.  A1 E0804000    mov eax,dword ptr ds:[4080E0]
  
  如果不跳的话,就会单步一直走到主对话框这里,就显示了,那很明显了,我们去掉对话
  框,这里我们有两个选择。
  第一NOP掉00402123 这个CALL  和 0040212C je  Nop掉之后就会慢慢走到主程序这里。
  第二NOP掉00402123 这个CALL  和 00402125 mov eax,dword ptr ds:[4083F0] 这段代码我们
  修改成 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:[4080E8]
  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
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 06:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表