李沉舟 发表于 2018-2-22 12:41

一些CrackMe的NAG去除



{:6_218:}最近有点颓废啊,翻开160个CrackMe玩玩。刚被老爹教训完,试试看去除NAG。{:6_223:}
160个CrackMe,没有的话下载地址是:
**** Hidden Message *****



一、25号CrackMe,VB5 Native Code




这个是倒计时,等到了0按钮就会变为可用。
直接打开VB Decompiler Pro反编译看看。





**** Hidden Message *****

运行后主窗口成功出现,25号CrackMe收工。




顺便来吐槽一下这个CrackMe的一个BUG,NAG窗口不是主窗口,如果你直接在没有载入主窗口前就关掉了NAG窗口,那么,,,你需要在任务管理器里面把它干掉。

二、42号CrackMe,MASM
这个CrackMe有点无聊,说实在的,不是一般的无聊。
作者定义的规则如下:
yes, it definately is just a messagebox...
remove this messagebox.
no patching allowed, no processpatching allowed (of the reverseme's process).
maybe code a little processpatcher of a different process, or a tiny vxd..
什么意思呢?意思是说,你不能改这个进程的内存,不能改这个文件,你可能需要补丁一个不同的进程,或者干脆搞一个VXD(VXD是WIN 9X下的驱动模型)。
其实如果从进程内存模型认真来说的话,每个进程的0x80000000以后的内存都是一样的,在内核干HOOK,不脱了裤子放P吗?{:6_207:}
原谅我,我的脑洞不够大。我只能无耻的写一个Loader了。用Drx调试寄存器,我可没Patch你。{:6_225:}

Loader源码:
.686
.model      flat,stdcall
option      casemap:none

include                windows.inc
include                kernel32.inc
include                user32.inc
includelib      kernel32.lib
includelib      user32.lib

dwBreakPoint      equ      <401000h>
dwNewEip      equ      <401013h>
.data
szFile                db      '.\defiler.2.exe',0
szError                db      'defiler.2.exe不在当前目录下',0
szOK                db      '补丁成功,成功绕过MessageBox',0
szTitle                db      '提示',0
.code

Main                proc
      ALIGN      4
      LOCAL      @si:STARTUPINFO
      LOCAL      @pi:PROCESS_INFORMATION
      LOCAL      @dbg:DEBUG_EVENT
      LOCAL      @ct:CONTEXT
      mov      @ct.ContextFlags,CONTEXT_FULL or CONTEXT_DEBUG_REGISTERS
      invoke      RtlZeroMemory,addr @si,sizeof @si
      invoke      RtlZeroMemory,addr @pi,sizeof @pi
      mov      @si.cb,sizeof @si
      lea      eax,@si
      lea      ebx,@si
      invoke      CreateProcess,offset szFile,NULL,NULL,NULL,FALSE,DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS,NULL,NULL,eax,ebx
      .if      !eax
                invoke      MessageBox,0,offset szError,offset szTitle,MB_OK
                invoke      ExitProcess,0
      .endif
      .while      TRUE
                invoke      WaitForDebugEvent,addr @dbg,INFINITE
                .if      @dbg.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT      ;程序退出
                        invoke      ContinueDebugEvent,@dbg.dwProcessId,@dbg.dwThreadId,DBG_CONTINUE
                        invoke      ExitProcess,0
                .elseif      @dbg.dwDebugEventCode == EXCEPTION_DEBUG_EVENT                ;调试事件
                        .if      @dbg.u.Exception.pExceptionRecord.ExceptionCode == EXCEPTION_SINGLE_STEP
                              .if      @dbg.u.Exception.pExceptionRecord.ExceptionAddress == dwBreakPoint
                                        invoke      OpenThread,THREAD_ALL_ACCESS,FALSE,@dbg.dwThreadId
                                        mov      ebx,eax
                                        invoke      GetThreadContext,ebx,addr @ct
                                        mov      @ct.regEip,dwNewEip
                                        invoke      SetThreadContext,ebx,addr @ct
                                        invoke      CloseHandle,ebx
                                        invoke      MessageBox,0,offset szOK,offset szTitle,MB_OK
                              .endif
                        .endif
                        invoke      ContinueDebugEvent,@dbg.dwProcessId,@dbg.dwThreadId,DBG_CONTINUE
                .elseif      @dbg.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT      ;创建
                        invoke      OpenThread,THREAD_ALL_ACCESS,FALSE,@dbg.dwThreadId
                        mov      ebx,eax
                        invoke      GetThreadContext,ebx,addr @ct
                        mov      @ct.iDr0,dwBreakPoint
                        mov      @ct.iDr7,101h
                        invoke      SetThreadContext,ebx,addr @ct
                        invoke      CloseHandle,ebx
                        invoke      ContinueDebugEvent,@dbg.dwProcessId,@dbg.dwThreadId,DBG_CONTINUE
                .else
                        invoke      ContinueDebugEvent,@dbg.dwProcessId,@dbg.dwThreadId,DBG_CONTINUE
                .endif
      .endw
      invoke      ExitProcess,0

Main endp

_START:
      call      Main
end      _START
编译后丢到CrackMe的同一目录,打开NAG已经没有了。

**** Hidden Message *****

三、145号 Delphi



打开资源编辑工具,找到RCDATA。看看(要支持解析Delphi Form数据的)

玩Delphi这么久了,居然不知道还有这个属性。{:6_216:}
看字段应该是延迟装入,里面有个事件,应该是装入完后的响应。
把6000改0,保存看看。


四、我自己临时写的 Delphi【Delphi的push窗体】

工程的.dpr文件如下,这里才是程序真正的入口点。
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Delphi的register传递方式:



**** Hidden Message *****
保存(有重定位提示不用管)


上面,Form1是NAG窗口,也是第一个载入的窗口,CreateForm的时候,我们用TForm2(主窗口),来初始化了Form1。

Delphi的窗口有自动创建与手动创建之分,手动创建还没看。这里是玩了那第3个Delphi CM的时候临时加的,有些东西我也不是很明白。不多说了,看VCL源码去也。{:6_200:}

Shark恒 发表于 2018-2-22 18:42

有意思有意思,虽然没时间动手分析,但是看着也好玩!

insane 发表于 2018-2-22 19:41

来学习大佬的作品

DDK4282 发表于 2018-2-22 20:31

感谢分享系列教程。{:5_117:}

syzh802618 发表于 2018-2-22 21:15

楼主好眼力,赞一个{:5_120:}{:5_120:}

byh3025 发表于 2018-2-22 22:07

来学习下大神的思路

湛西哥 发表于 2018-2-22 22:46

感谢分享{:5_116:}

1151425395 发表于 2018-2-22 23:04

学习了,写的挺不错的。{:7_236:}

妄旺仔 发表于 2018-2-23 20:25

看看学习一下

redapple2008 发表于 2018-2-24 14:16

2018,狗年发发发,狗年旺旺旺!
页: [1] 2 3 4 5
查看完整版本: 一些CrackMe的NAG去除