首页
社区
课程
招聘
[原创]内存注册机的工作原理及masm源码
发表于: 2007-6-5 15:22 31109

[原创]内存注册机的工作原理及masm源码

2007-6-5 15:22
31109
收藏
免费 7
支持
分享
最新回复 (60)
雪    币: 314
活跃值: (15)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
26
我改我改,其实我并不近视
2007-6-6 15:46
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
27
貌似这样产生泄漏
CREATE DEBUG EVENT里面的handles和process inf里面的不一样,要关闭后面一个
2007-6-6 15:57
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
强,顶!

啊?短了还不能发啊?
2007-6-6 16:55
0
雪    币: 314
活跃值: (15)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
29
你说的应该是 @DBGEvent.u.CreateProcessInfo.hThread 吧
好象是和 PI.hThread 不一样,我把前面的 PI.hThread  都改成 @DBGEvent.u.CreateProcessInfo.hThread
发现debggee被挂起后动不了了。

探索:
在invoke WaitForDebugEvent,addr @DBGEvent,INFINITE  ;等待调试事件的发生
.break .if @DBGEvent.dwDebugEventCode==EXIT_PROCESS_DEBUG_EVENT  ;你退出了我也就退出吧!
后面加几句调试一下发现:            
.if @DBGEvent.u.CreateProcessInfo.hThread   ;可能这个debuggee是单线程的,只有一次不为0,得到了CREATE_THEAD_DEBUG_EVENT 消息,
                         mov ecx,@DBGEvent.u.CreateProcessInfo.hThread
                          ;invoke CloseHandle,PI.hThread   ;有这一句则debuggee死掉
                        ;mov PI.hThread,ecx    ;有无这一句debuggee都不死,正常,有前一句必要这一句
                        mov eax,PI.hThread    ;只为调试时看着方便
                         mov edx,@DBGEvent.dwThreadId    ;只为调试时看着方便
                         mov esi,PI.dwThreadId    ;只为调试时看着方便
.endif
所谓debuggee死掉,就是点按“注册”后debuggee无反应,也弹不出注册码显示窗口

调试发现:,@DBGEvent.u.CreateProcessInfo.hThread 与 PI.hThread 的值的确不同,但@DBGEvent.dwThreadId 与 PI.dwThreadId 相同。
我的看法:同一个线程的 ID 是唯一的,但 handle 可以有多个且不同,关闭 handle 实际上也就关闭了 ID,关闭也不是关闭线程本身,只为释放内存占用。不知正确与否,请高手指点。

***************************************************************
不好意思,一时疏忽,上面犯了个初级错误,invoke CloseHandle,PI.hThread  这句会改变 ecx 的值,所以程序会挂死。改成
if @DBGEvent.u.CreateProcessInfo.hThread
                   invoke CloseHandle,PI.hThread
                         mov ecx,@DBGEvent.u.CreateProcessInfo.hThread
                   mov PI.hThread,ecx
.endif
就不会挂死了,也不会内存泄漏了。
2007-6-6 17:47
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
30
id当然是唯一的,handle可以打开好几个。

你关闭pi里面的handles就可以了,用CREATE事件里面的
2007-6-6 19:51
0
雪    币: 314
活跃值: (15)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
31
感谢指导,问题已经解决
2007-6-6 22:59
0
雪    币: 220
活跃值: (107)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
这东东好像去年就有人发出了源码吧,只是样子不一样而以.....实际操作也是大同小异吧?
2007-6-7 14:26
0
雪    币: 314
活跃值: (15)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
33
我去找来看一下.........
那个好象对加壳的无效,弹出窗口后debuggee就死了,所以我这个多少该有点进步吧?
2007-6-7 14:41
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
认真学习 ~~~~
2007-6-8 12:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
真的是非常感谢了!
2007-6-8 14:47
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
现在还是看不懂这些汇编的代码??是不是不是古老的汇编语言阿而是win32的汇编语言
2007-6-8 19:02
0
雪    币: 268
活跃值: (40)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
37
不错的东西,下来学习学习,不过好像压缩有问题
2007-6-8 20:24
0
雪    币: 89
活跃值: (151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
老兄你直接生程序放出吧,,
2007-6-9 20:49
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
谁能发上编译好的程序???
2007-6-10 01:29
0
雪    币: 314
活跃值: (15)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
40
直接生成程序。。。。。。。。你干脆去找KeyMake(编者刘健英,应该知道吧)好了。
我前面就强调过,如果你不太会编程,我这些代码就成垃圾了。如果你会编程就可以更灵活地针对不同的注册算法,写出KeyMake生成不了的注册机,毕竟KeyMake的生成模式是有限的。
我原来是想用VC++写一个给看不懂Asm的人用,有人觉得我没必要发这样的贴子,所以我就不想再写了。我似乎是应该多看别人的文章,少献丑为妙。
2007-6-10 19:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
谢谢楼主分享!俺好好学习一下
收藏……
2007-6-11 02:24
0
雪    币: 89
活跃值: (151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
老兄过激啦,愚并无任何不恭之意,只是想刘老的东东现现在已经成被杀对相,实是不方便
2007-6-11 23:09
0
雪    币: 227
活跃值: (4820)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
43
收藏了!!!!!!!!!!!!!!
2007-6-11 23:37
0
雪    币: 220
活跃值: (107)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
44
这东东只能对付压缩壳的,对付压缩壳的也就是多了一个断点而以,所以跟以前那个是差不多的 ,
改进也就那一点点
我说的可能太诚实了。别在意
2007-6-12 09:32
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
好东东当然要学习的,以后一定会用得着。
2007-6-12 16:40
0
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
46
下载了,谢谢分享
2007-6-12 21:18
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
47
真是....太感激了。多谢贡献。。。。
2007-6-12 21:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
还是老大厉害哦。
2007-6-13 23:29
0
雪    币: 295
活跃值: (461)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
49
终于可以上网了,又有好帖了,支持学习中
2007-6-14 16:43
0
雪    币: 66
活跃值: (15)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
50
感觉lz分享经验,关于给出的代码有点小问题
LOCAL @ThreadConText:CONTEXT
......
dec @ThreadConText.regEip  ;EIP已经指向int 3中断的下一条代码了,让它重新指向int 3
mov ecx,@ThreadConText.regEip  ;取debugee的EIP


但是WINNT.H中关于CONTEXT的结构是这样定义的:

typedef struct _CONTEXT {

    //
    // The flags values within this flag control the contents of
    // a CONTEXT record.
    //
    // If the context record is used as an input parameter, then
    // for each portion of the context record controlled by a flag
    // whose value is set, it is assumed that that portion of the
    // context record contains valid context. If the context record
    // is being used to modify a threads context, then only that
    // portion of the threads context will be modified.
    //
    // If the context record is used as an IN OUT parameter to capture
    // the context of a thread, then only those portions of the thread's
    // context corresponding to set flags will be returned.
    //
    // The context record is never used as an OUT only parameter.
    //

    DWORD ContextFlags;

    //
    // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
    // set in ContextFlags.  Note that CONTEXT_DEBUG_REGISTERS is NOT
    // included in CONTEXT_FULL.
    //

    DWORD   Dr0;
    DWORD   Dr1;
    DWORD   Dr2;
    DWORD   Dr3;
    DWORD   Dr6;
    DWORD   Dr7;

    //
    // This section is specified/returned if the
    // ContextFlags word contians the flag CONTEXT_FLOATING_POINT.
    //

    FLOATING_SAVE_AREA FloatSave;

    //
    // This section is specified/returned if the
    // ContextFlags word contians the flag CONTEXT_SEGMENTS.
    //

    DWORD   SegGs;
    DWORD   SegFs;
    DWORD   SegEs;
    DWORD   SegDs;

    //
    // This section is specified/returned if the
    // ContextFlags word contians the flag CONTEXT_INTEGER.
    //

    DWORD   Edi;
    DWORD   Esi;
    DWORD   Ebx;
    DWORD   Edx;
    DWORD   Ecx;
    DWORD   Eax;

    //
    // This section is specified/returned if the
    // ContextFlags word contians the flag CONTEXT_CONTROL.
    //

    DWORD   Ebp;
    DWORD   Eip;
    DWORD   SegCs;              // MUST BE SANITIZED
    DWORD   EFlags;             // MUST BE SANITIZED
    DWORD   Esp;
    DWORD   SegSs;

    //
    // This section is specified/returned if the ContextFlags word
    // contains the flag CONTEXT_EXTENDED_REGISTERS.
    // The format and contexts are processor specific
    //

    BYTE    ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];

} CONTEXT;


不知是???
2007-6-15 20:10
0
游客
登录 | 注册 方可回帖
返回
//