能力值:
( LV9,RANK:610 )
|
-
-
26 楼
[QUOTE=AimPerf;728756]1111111111111 [/QUOTE]
厉害 麻烦您上传一下 nop掉MessageBox 后可执行文件 感谢ing
|
能力值:
( LV9,RANK:610 )
|
-
-
27 楼
你这个注册不成功,我试过了,目的是注册机依然能用,而且CrackMe没有异常产生
|
能力值:
( 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
|
能力值:
( LV9,RANK:610 )
|
-
-
29 楼
您可能没明白我是什么意思,呵呵,可能我表述不清,道歉。
其实这个CM有2个监视线程,相互监视,但是这跟本主题是没有关系的,如果您nop掉MessageBox成功了,请上传一个修改好的附件, 感激不尽!
|
能力值:
( LV9,RANK:180 )
|
-
-
30 楼
方法一
004024E4 53 push ebx
|
能力值:
( 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
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
在你的百度空间简单解释了下
|
能力值:
( 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后堆栈当前位置都变了,后面的函数参数可能就会顺序错乱,导致非常严重的后果。呵呵,非常感谢。。
|
能力值:
( LV9,RANK:610 )
|
-
-
34 楼
您的解释:
函数调用时参数传递考虑两个问题:
1、按什么顺序将参数入栈;
2、函数结束后,由谁来平衡堆栈;
围绕这两个问题,不同语言定了不同的调用约定,包括__cdcel(C规范)、PASCAL、stdcall及Fastcall四种方式
win32API采用stdcall方式,由被调用函数返回前平衡堆栈,故你在MessageBoxA函数后面看不到平衡堆栈的操作(在函数内部就完成堆栈平衡操作了)
sprintf函数采用的是__cdcel方式,需要调用者自己平衡堆栈,所以函数返回后有个 add esp,xx
http://www.rrgod.com/
非常好,感谢ing
|
能力值:
( LV2,RANK:10 )
|
-
-
35 楼
学习一下
神阿,请让我入门
|
|
|