首页
社区
课程
招聘
nop掉一个MessageBox的疑惑
发表于: 2009-12-18 09:40 11380

nop掉一个MessageBox的疑惑

2009-12-18 09:40
11380
收藏
免费 0
支持
分享
最新回复 (34)
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
26
[QUOTE=AimPerf;728756]1111111111111

[/QUOTE]

厉害  麻烦您上传一下  nop掉MessageBox 后可执行文件  感谢ing
2009-12-18 14:16
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
27
你这个注册不成功,我试过了,目的是注册机依然能用,而且CrackMe没有异常产生
2009-12-18 14:19
0
雪    币: 120
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
程序退出是因为这个CM有一个监视线程,当他启动后,如果你调试时间超过他设置的时间就会退出,你那样的nop是没问题的,你可以试一下,nop掉后保存为一个新的exe文件

.text:00401FC0                   ; int __cdecl sub_401FC0(DWORD ExitCode)
.text:00401FC0                   sub_401FC0 proc near          ; DATA XREF: sub_402030+E4o
.text:00401FC0
.text:00401FC0                   ExitCode= dword ptr  4
.text:00401FC0
.text:00401FC0 53                push    ebx
.text:00401FC1 8B 5C 24 08       mov     ebx, [esp+4+ExitCode]
.text:00401FC5 55                push    ebp
.text:00401FC6 8B 2D 2C 50 40 00 mov     ebp, ds:Sleep
.text:00401FCC 56                push    esi
.text:00401FCD 57                push    edi
.text:00401FCE 8B 3D 28 50 40 00 mov     edi, ds:GetTickCount
.text:00401FD4
.text:00401FD4                   loc_401FD4:                   ;
.text:00401FD4                                                 ;
.text:00401FD4 FF D7             call    edi ; GetTickCount    ; 读取程序已运行时间
.text:00401FD6 68 C8 00 00 00    push    0C8h                  ; dwMilliseconds
.text:00401FDB 8B F0             mov     esi, eax
.text:00401FDD FF D5             call    ebp ; Sleep               ; Sleep 0.2秒
.text:00401FDF FF D7             call    edi ; GetTickCount    ; 再次读取程序运行时间
.text:00401FE1 2B C6             sub     eax, esi
.text:00401FE3 3D E8 03 00 00    cmp     eax, 3E8h               ; 若时间差大于1秒则退出程序
.text:00401FE8 77 2A             ja      short loc_402014
.text:00401FEA 8B 4B 60          mov     ecx, [ebx+60h]
.text:00401FED C7 44 24 14 00 00+mov     [esp+10h+ExitCode], 0
.text:00401FF5 8D 44 24 14       lea     eax, [esp+10h+ExitCode]
.text:00401FF9 8B 51 2C          mov     edx, [ecx+2Ch]
.text:00401FFC 50                push    eax                   ; lpExitCode
.text:00401FFD 52                push    edx                   ; hThread
.text:00401FFE FF 15 20 50 40 00 call    ds:GetExitCodeThread
.text:00402004 81 7C 24 14 03 01+cmp     [esp+10h+ExitCode], 103h
.text:0040200C 74 C6             jz      short loc_401FD4
.text:0040200E 85 C0             test    eax, eax
.text:00402010 74 0A             jz      short loc_40201C
.text:00402012 EB C0             jmp     short loc_401FD4
.text:00402014                   ; ---------------------------------------------------------------------------
.text:00402014
.text:00402014                   loc_402014:                   ; CODE XREF: sub_401FC0+28j
.text:00402014 6A 00             push    0                     ; Code
.text:00402016 FF 15 10 52 40 00 call    ds:exit
.text:0040201C                   ; ---------------------------------------------------------------------------
.text:0040201C
.text:0040201C                   loc_40201C:                   ; CODE XREF: sub_401FC0+50j
.text:0040201C 6A 00             push    0                     ; Code
.text:0040201E FF 15 10 52 40 00 call    ds:exit
.text:0040201E                   sub_401FC0 endp
2009-12-18 14:43
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
29
您可能没明白我是什么意思,呵呵,可能我表述不清,道歉。
其实这个CM有2个监视线程,相互监视,但是这跟本主题是没有关系的,如果您nop掉MessageBox成功了,请上传一个修改好的附件, 感激不尽!
2009-12-18 17:09
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
30
方法一

004024E4      53              push    ebx
上传的附件:
2009-12-18 18:10
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
31
方法二
004024D5   .  6A 00          push    0
004024D7   .  8B46 20        mov     eax, [esi+20]
004024DA   .  68 70764000    push    00407670
004024DF   .  68 5C764000    push    0040765C
004024E4   .  50             push    eax
004024E5   .  897424 28      mov     [esp+28], esi
004024E9   .  FF15 64524000  call    [<&USER32.MessageBoxA>]

改成nop掉4个push 及1个call
nop
nop
nop
nop
mov     [esp+28-4*4], esi             <- *
nop
上传的附件:
2009-12-18 18:55
0
雪    币: 290
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
在你的百度空间简单解释了下
2009-12-18 20:01
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
33
[QUOTE=sessiondiy;728912]方法二
004024D5   .  6A 00          push    0
004024D7   .  8B46 20        mov     eax, [esi+20]
004024DA   .  68 70764000    push    00407670
004024DF  ...[/QUOTE]
你的2个附件我都试过了,都很好,可是我咋看不懂捏?  有时间麻烦稍稍解释下好不,没时间就算了,谢谢你
备注:第一个我看明白啦,哈哈 原来让第一个参数(句柄)无效就ok啦,这么“邪”的办法都想得出来,厉害啊 呵呵 膜拜~~~
      第二个好像也明白了,原来的代码是将 esi送堆栈某位置(这应该是Release版本的优化作用,貌似是一个提前入栈的?!反正是这么个感觉),这一nop后堆栈当前位置都变了,后面的函数参数可能就会顺序错乱,导致非常严重的后果。呵呵,非常感谢。。
2009-12-18 21:14
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
34
您的解释:
函数调用时参数传递考虑两个问题:
1、按什么顺序将参数入栈;
2、函数结束后,由谁来平衡堆栈;

围绕这两个问题,不同语言定了不同的调用约定,包括__cdcel(C规范)、PASCAL、stdcall及Fastcall四种方式
win32API采用stdcall方式,由被调用函数返回前平衡堆栈,故你在MessageBoxA函数后面看不到平衡堆栈的操作(在函数内部就完成堆栈平衡操作了)
sprintf函数采用的是__cdcel方式,需要调用者自己平衡堆栈,所以函数返回后有个 add esp,xx

http://www.rrgod.com/

非常好,感谢ing
2009-12-18 21:25
0
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
学习一下
神阿,请让我入门
2009-12-18 21:28
0
游客
登录 | 注册 方可回帖
返回
//