首页
社区
课程
招聘
[求助]关于nag窗口,高手指点迷津
发表于: 2008-5-16 03:26 5242

[求助]关于nag窗口,高手指点迷津

2008-5-16 03:26
5242
===========================================
00401000 >/$  6A 00         PUSH 0                                   ; /pModule = NULL
00401002  |.  E8 B7060000   CALL <JMP.&kernel32.GetModuleHandleA>    ; \GetModuleHandleA
00401007  |.  A3 40304000   MOV DWORD PTR DS:[403040],EAX
0040100C  |.  E8 A1060000   CALL <JMP.&kernel32.GetCommandLineA>     ; [GetCommandLineA
00401011  |.  A3 44304000   MOV DWORD PTR DS:[403044],EAX
00401016  |.  6A 0A         PUSH 0A                                  ; /Arg4 = 0000000A
00401018  |.  FF35 44304000 PUSH DWORD PTR DS:[403044]               ; |Arg3 = 00000000
0040101E  |.  6A 00         PUSH 0                                   ; |Arg2 = 00000000
00401020  |.  FF35 40304000 PUSH DWORD PTR DS:[403040]               ; |Arg1 = 00000000
00401026  |.  E8 06000000   CALL crackme.00401031                    ; \crackme.00401031
0040102B  |.  50            PUSH EAX                                 ; /ExitCode
0040102C  \.  E8 7B060000   CALL <JMP.&kernel32.ExitProcess>         ; \ExitProcess
00401031  /$  55            PUSH EBP
00401032  |.  8BEC          MOV EBP,ESP
00401034  |.  83C4 B0       ADD ESP,-50
00401037      E8 3B040000   CALL crackme.00401477
0040103C      6A 10         PUSH 10
0040103E      68 35304000   PUSH crackme.00403035                    ;  ASCII "Nag"
00401043      68 21304000   PUSH crackme.00403021                    ;  ASCII "Patch Me if you can"
00401048      6A 00         PUSH 0
0040104A      E8 33060000   CALL <JMP.&user32.MessageBoxA>
0040104F  |.  C745 D0 30000>MOV DWORD PTR SS:[EBP-30],30
00401056  |.  C745 D4 03000>MOV DWORD PTR SS:[EBP-2C],3
0040105D  |.  C745 D8 3E114>MOV DWORD PTR SS:[EBP-28],crackme.004011>
00401064  |.  C745 DC 00000>MOV DWORD PTR SS:[EBP-24],0
0040106B  |.  C745 E0 00000>MOV DWORD PTR SS:[EBP-20],0
00401072  |.  FF35 40304000 PUSH DWORD PTR DS:[403040]
00401078  |.  8F45 E4       POP DWORD PTR SS:[EBP-1C]
0040107B  |.  33C0          XOR EAX,EAX
0040107D  |.  B4 F4         MOV AH,0F4
0040107F  |.  C1E0 08       SHL EAX,8

===========================================
我把103C--104A的代码nop掉后发现还会出现消息框,后来发现是1037处的CALL的原因,可是把CALL nop 掉发现程序会出现异常,WHY????HOW????

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
40140A nop
401477 jmp 0040103C
WS的动作没了
NAG没了
但太挫了
搞坏了

往[403C80]的某验证 CALL  得修复一下

因为搞反NAG给关的CALL 和这 部分在一起
2008-5-16 15:40
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
3
402083的word改为 EB 11
2008-5-16 18:44
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也想知道为什么..
希望楼上能说说
2008-5-17 19:38
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
5

00401037  |.  E8 3B040000   call    00401477   //这里会对本进程WriteProcessMemory,恢复了下面的19字节,所以把下面的代码nop就没什么效果的.
0040103C      6A 10         push    10 //这里改为jmp 40104f可以跳过nag,机器码为EB 11
0040103E      68 35304000   push    00403035
00401043      68 21304000   push    00403021
00401048      6A 00         push    0
0040104A      E8 33060000   call    <jmp.&user32.MessageBoxA>



程序每次运行都会恢复一次,
恢复代码的call里有下面的代码


004014D6 |. FF35 A03C4000 push dword ptr [403CA0]
004014DC |. 6A 02 push 2
004014DE |. 68 83204000 push 00402083 //要写入的是6A 10
004014E3 |. 68 3C104000 push 0040103C //这里恢复"push 10",
004014E8 |. FF35 9C3C4000 push dword ptr [403C9C]
004014EE |. FF15 883C4000 call dword ptr [403C88] ; <jmp.&kernel32.WriteProcessMemory>



所以把402083的代码改为EB 11就可以让程序每次运行时都把0040103C 处的代码改为
jmp 40104,就会跳过nag了

当然直接把00401037 nop,和40103c改为jmp 40104,保存也是可以
2008-5-17 19:55
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
呃...
我明白了
是因为这里吧
00401526  |.  FF35 A03C4000 push    dword ptr [403CA0]                                             ; /pBytesWritten = NULL
0040152C  |.  6A 06         push    6                                                              ; |BytesToWrite = 6
0040152E  |.  68 8D204000   push    0040208D                                                       ; |Buffer = crackme(.0040208D
00401533  |.  68 43104000   push    00401043                                                       ; |Address = 401043
00401538  |.  FF35 9C3C4000 push    dword ptr [403C9C]                                             ; |hProcess = 00000030
0040153E  |.  FF15 883C4000 call    dword ptr [403C88]                                             ; \WriteProcessMemory
-------------------------------------------------------------------------------
你的速度好快啊..


edit1:123456
edit2:^[-C<=OM-IGE
2008-5-17 19:59
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢三楼给的办法。
我想到的办法是把103C改为jmp 0040104F ,在把14DC的push 2改为push 0 ,这样就不会把刚才改的jmp 0040104F 覆盖掉了。
可是这些办法都有个bug,修改了的程序点击“CHECK”按钮时,不管注册正确与否,都会退出程序。可人家原来的程序点击“CHECK”并不会退出程序。这又是怎么一回事呢??????????????
2008-5-17 21:58
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
8
点了check之后
在这里会进程序的校验
004013E2   > \E8 21000000   call    00401408

00401449  |.  E8 65010000   call    004015B3                         ;  Default case of switch 00401439


004015DB |> /6A 00 /push 0
004015DD |. |6A 01 |push 1
004015DF |. |68 983C4000 |push 00403C98
004015E4 |. |53 |push ebx ; crackme.00401001
004015E5 |. |FF35 9C3C4000 |push dword ptr [403C9C]
004015EB |. |FF15 8C3C4000 |call dword ptr [403C8C] ; <jmp.&kernel32.ReadProcessMemory> //读出一个字节
004015F1 |. |43 |inc ebx
004015F2 |. |C705 A43C4000>|mov dword ptr [403CA4], 004016BC ; @
004015FC |. |8B15 983C4000 |mov edx, dword ptr [403C98]
00401602 |. |81FB 01104000 |cmp ebx, 00401001
00401608 |. |75 06 |jnz short 00401610
0040160A |. |8915 943C4000 |mov dword ptr [403C94], edx
00401610 |> |81FB DD200600 |cmp ebx, 620DD
00401616 |. |74 10 |je short 00401628
00401618 |. |83C2 04 |add edx, 4
0040161B |. |8335 943C4000>|xor dword ptr [403C94], 19
00401622 |. |3115 943C4000 |xor dword ptr [403C94], edx //算出校验值
00401628 |> |81FB 2A164000 |cmp ebx, 0040162A //从校验1000开始的62ah字节
0040162E |.^\75 AB \jnz short 004015DB
00401630 |. 813D 943C4000>cmp dword ptr [403C94], 0C0 //最后的校验值是否是0c0h
0040163A 74 07 je short 00401643 //如果有改动就ExitProcess关程序,过校验这里改 ** jmp
0040163C |. 6A 00 push 0 ; /ExitCode = 0
0040163E |. E8 69000000 call <jmp.&kernel32.ExitProcess> ; \ExitProcess
00401643 |> FF35 9C3C4000 push dword ptr [403C9C] ; /hObject = 00000094 (window)
00401649 |. E8 58000000 call <jmp.&kernel32.CloseHandle> ; \CloseHandle



2008-5-17 23:04
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢了,终于弄懂了
2008-5-19 13:45
0
游客
登录 | 注册 方可回帖
返回
//