吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4049|回复: 9
收起左侧

[CrackMe] 【吾爱2013CM大赛解答】-- Crack Me-- RedAgl 【CM分析】

  [复制链接]
a070458 发表于 2013-12-13 22:39
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

本帖最后由 a070458 于 2013-12-14 10:30 编辑

-------------------------------------------------【文章简介】-------------------------------------------------
【文章标题】 【吾爱2013CM大赛题目】-- Crack Me-- RedAgl CM分析
【文章作者】 a070458
【作者邮箱】 无~
【作者主页】 无~
【软件名称】 2013CM
【软件大小】 433 KB (443,392 字节)
【下载地址】 http://www.52pojie.cn/thread-228420-1-1.html
【加壳方式】 无~
【保护方式】 无~
【编写语言】 VC
【使用工具】 OD  
【操作平台】 XPSP3
【软件介绍】 52pojieCM大赛题目
【作者声明】 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
-------------------------------------------------【文章正文】-------------------------------------------------
大家好 ~ 我是a070458
今天看到 52pojie CM大赛 开赛了  果断前来参加  
这次分析是 RedAgl 大牛 写的一个CM  
小菜在这里就简单分析分析
有错误的地方请各位大牛指出!
题目要求1. 爆破,注册码均可  我这里就分析爆破 和追注册码   至于分析算法 就留给大家搞了



载入OD,例牌 先查找字符串吧  查找到的字符串不多
这里我对第一个字符串很感兴趣 果断跟进去
看到局部调用吧 我们就在局部调用的地址下断点   
运行  输入a070458 123123 点一下按钮 果断断下了

大致看了看 004023D0 00402040 2个call 的地址的API函数 估计第一个是\提高自身权限吧 第二应该就是遍历进程找出指定的进程
在第二个CALL 得知  他使用的是LoadStringW加载字符串 果断用资源软件看看有什么字符串吧
我这里就用到Restorator查找看看  看图片


呵呵  发挥自己强大的脑补能力 我估计就是查找几个.exe尾的进程了  还有OllyDbg和debug字样 估计还检查调试器{:1_903:} 这里我没被ANTI   所以就不去了解了   
继续来看软件   软件多处用到这样的代码去查找字符串的长度
[C++] 纯文本查看 复制代码
00401463  |.  8D51 01       lea edx,dword ptr ds:[ecx+0x1]
00401466  |>  8A01          /mov al,byte ptr ds:[ecx]
00401468  |.  41            |inc ecx
00401469  |.  84C0          |test al,al
0040146B  |.^ 75 F9         \jnz short 2013CM~1.00401466
0040146D  |.  2BCA          sub ecx,edx

跟进关键call 继续分析
[C++] 纯文本查看 复制代码
00401B70  /$  55            push ebp
00401B71  |.  8BEC          mov ebp,esp
00401B73  |.  81EC 10010000 sub esp,0x110
00401B79  |.  A1 00504000   mov eax,dword ptr ds:[0x405000]
00401B7E  |.  33C5          xor eax,ebp
00401B80  |.  8945 FC       mov [local.1],eax
00401B83  |.  68 04010000   push 0x104                               ; /Count = 104 (260.)
00401B88  |.  8D85 F0FEFFFF lea eax,[local.68]                       ; |
00401B8E  |.  50            push eax                                 ; |Buffer
00401B8F  |.  FF35 78534000 push dword ptr ds:[0x405378]             ; |hWnd = 00140512 (class='Edit',parent=003D02E6)
00401B95  |.  FF15 60414000 call dword ptr ds:[<&USER32.GetWindowTex>;// \获取用户名
00401B9B  |.  68 04010000   push 0x104                               ; /n = 104 (260.)
00401BA0  |.  6A 00         push 0x0                                 ; |c = 00
00401BA2  |.  83F8 04       cmp eax,0x4                           //   ; |是否大于4
00401BA5  |.  7D 1C         jge short 2013CM~1.00401BC3            //  ; |所以用户名要大于4
00401BA7  |.  FF35 D0534000 push dword ptr ds:[0x4053D0]             ; |s = 00178188
00401BAD  |.  E8 D6150000   call <jmp.&MSVCR110.memset>              ; \memset
00401BB2  |.  83C4 0C       add esp,0xC
00401BB5  |.  8B4D FC       mov ecx,[local.1]
00401BB8  |.  33CD          xor ecx,ebp
00401BBA  |.  E8 570D0000   call 2013CM~1.00402916
00401BBF  |.  8BE5          mov esp,ebp
00401BC1  |.  5D            pop ebp
00401BC2  |.  C3            retn
00401BC3  |>  8D85 F0FEFFFF lea eax,[local.68]                       ; |
00401BC9  |.  50            push eax                                 ; |s
00401BCA  |.  E8 B9150000   call <jmp.&MSVCR110.memset>           //   ; \置0
00401BCF  |.  83C4 0C       add esp,0xC
00401BD2  |.  8D85 F0FEFFFF lea eax,[local.68]
00401BD8  |.  68 04010000   push 0x104                               ; /Count = 104 (260.)
00401BDD  |.  50            push eax                                 ; |Buffer
00401BDE  |.  FF35 74534000 push dword ptr ds:[0x405374]             ; |hWnd = 002E0456 (class='Edit',parent=003D02E6)
00401BE4  |.  FF15 60414000 call dword ptr ds:[<&USER32.GetWindowTex>;// \取出假注册码
00401BEA  |.  68 04010000   push 0x104                               ; /n = 104 (260.)
00401BEF  |.  6A 00         push 0x0                                 ; |c = 00
00401BF1  |.  FF35 D4534000 push dword ptr ds:[0x4053D4]             ; |s = 00178298
00401BF7  |.  E8 8C150000   call <jmp.&MSVCR110.memset>              ; \memset
00401BFC  |.  8D8D F0FEFFFF lea ecx,[local.68]
00401C02  |.  83C4 0C       add esp,0xC
00401C05  |.  8D51 01       lea edx,dword ptr ds:[ecx+0x1]
00401C08  |>  8A01          /mov al,byte ptr ds:[ecx]
00401C0A  |.  41            |inc ecx
00401C0B  |.  84C0          |test al,al
00401C0D  |.^ 75 F9         \jnz short 2013CM~1.00401C08             //;  取出了假注册码的长度
00401C0F  |.  2BCA          sub ecx,edx
00401C11  |.  83F9 04       cmp ecx,0x4                              ; // 也是要大于4
00401C14  |.  7C 29         jl short 2013CM~1.00401C3F
00401C16  |.  8D85 F0FEFFFF lea eax,[local.68]
00401C1C  |.  50            push eax
00401C1D  |.  68 04010000   push 0x104
00401C22  |.  FF35 D4534000 push dword ptr ds:[0x4053D4]
00401C28  |.  FF15 FC404000 call dword ptr ds:[<&MSVCR110.strcpy_s>] ; // 复制一份
00401C2E  |.  83C4 0C       add esp,0xC
00401C31  |.  E8 FA0A0000   call 2013CM~1.00402730                  // ;  算法call  
00401C36  |.  85C0          test eax,eax                            // ;  这里就不分析里面了  貌似还有获取硬盘信息的
00401C38  |.  74 05         je short 2013CM~1.00401C3F
00401C3A  |.  E8 11000000   call 2013CM~1.00401C50                //   ;  关键call 跟进!!!!!!!!!
00401C3F  |>  8B4D FC       mov ecx,[local.1]
00401C42  |.  33CD          xor ecx,ebp
00401C44  |.  E8 CD0C0000   call 2013CM~1.00402916
00401C49  |.  8BE5          mov esp,ebp
00401C4B  |.  5D            pop ebp
00401C4C  \.  C3            retn


算法call我就不分析了
继续跟进 00401C3A  |.  E8 11000000   call 2013CM~1.00401C50              //     ;  关键call 跟进!!!!!!!!!
[C++] 纯文本查看 复制代码
00401C50  /$  55            push ebp                            //     ;  来到这里
00401C51  |.  8BEC          mov ebp,esp
00401C53  |.  81EC 5C020000 sub esp,0x25C
00401C59  |.  A1 00504000   mov eax,dword ptr ds:[0x405000]
00401C5E  |.  33C5          xor eax,ebp
00401C60  |.  8945 FC       mov [local.1],eax
00401C63  |.  53            push ebx
00401C64  |.  56            push esi
00401C65  |.  8B35 F8404000 mov esi,dword ptr ds:[<&MSVCR110.operato>;  msvcr110.operator new
00401C6B  |.  57            push edi
00401C6C  |.  33C0          xor eax,eax
00401C6E  |.  6A 0D         push 0xD
00401C70  |.  C785 BCFDFFFF>mov [local.145],0x0
00401C7A  |.  8985 B8FDFFFF mov [local.146],eax
00401C80  |.  FFD6          call esi                                 ;  <&MSVCR110.operator new>
00401C82  |.  6A 10         push 0x10
00401C84  |.  8985 B0FDFFFF mov [local.148],eax
00401C8A  |.  FFD6          call esi
00401C8C  |.  6A 0C         push 0xC
00401C8E  |.  8BF8          mov edi,eax
00401C90  |.  FFD6          call esi
00401C92  |.  6A 06         push 0x6
00401C94  |.  8985 A8FDFFFF mov [local.150],eax
00401C9A  |.  FFD6          call esi
00401C9C  |.  6A 0C         push 0xC
00401C9E  |.  8985 B4FDFFFF mov [local.147],eax
00401CA4  |.  FFD6          call esi
00401CA6  |.  6A 0C         push 0xC
00401CA8  |.  8985 ACFDFFFF mov [local.149],eax
00401CAE  |.  FFD6          call esi
00401CB0  |.  6A 12         push 0x12
00401CB2  |.  FFD6          call esi
00401CB4  |.  68 1C020000   push 0x21C                               ; /n = 21C (540.)
00401CB9  |.  8D85 DCFDFFFF lea eax,[local.137]                      ; |
00401CBF  |.  6A 00         push 0x0                                 ; |c = 00
00401CC1  |.  50            push eax                                 ; |s
00401CC2  |.  C785 C0FDFFFF>mov [local.144],0x0                      ; |
00401CCC  |.  C785 C4FDFFFF>mov [local.143],0x0                      ; |
00401CD6  |.  C785 C8FDFFFF>mov [local.142],0x0                      ; |
00401CE0  |.  C785 CCFDFFFF>mov [local.141],0x0                      ; |
00401CEA  |.  C785 D0FDFFFF>mov [local.140],0x0                      ; |
00401CF4  |.  66:C785 D4FDF>mov word ptr ss:[ebp-0x22C],0x0          ; |
00401CFD  |.  C685 D6FDFFFF>mov byte ptr ss:[ebp-0x22A],0x0          ; |
00401D04  |.  C785 D7FDFFFF>mov dword ptr ss:[ebp-0x229],0x0         ; |
00401D0E  |.  C685 DBFDFFFF>mov byte ptr ss:[ebp-0x225],0x0          ; |
00401D15  |.  E8 6E140000   call <jmp.&MSVCR110.memset>              ; \memset
00401D1A  |.  A1 DC534000   mov eax,dword ptr ds:[0x4053DC]        //  ;  这里保存一个东西 下面用来打开进程
00401D1F  |.  83C4 28       add esp,0x28
00401D22  |.  85C0          test eax,eax
00401D24  |.  75 0C         jnz short 2013CM~1.00401D32            //  ;  测试一下是否保存有指定进程的PID
00401D26  |.  3905 E0534000 cmp dword ptr ds:[0x4053E0],eax       //   ;  这里保存了kernel32基址
00401D2C  |.  0F84 F6020000 je 2013CM~1.00402028
00401D32  |>  8B35 7C404000 mov esi,dword ptr ds:[<&KERNEL32.OpenPro>;  kernel32.OpenProcess
00401D38  |.  50            push eax                                 ; /ProcessId
00401D39  |.  6A 00         push 0x0                                 ; |Inheritable = FALSE
00401D3B  |.  68 FFFF1F00   push 0x1FFFFF                            ; |Access = TERMINATE|CREATE_THREAD|VM_OPERATION|VM_READ|VM_WRITE|DUP_HANDLE|CREATE_PROCESS|SET_QUOTA|SET_INFORMATION|QUERY_INFORMATION|SYNCHRONIZE|STANDARD_RIGHTS_REQUIRED|F804
00401D40  |.  FFD6          call esi                                // ; \打开进程
00401D42  |.  8BD8          mov ebx,eax
00401D44  |.  85DB          test ebx,ebx
00401D46  |.  75 18         jnz short 2013CM~1.00401D60              //;  如果失败继续打开一次试试
00401D48  |.  FF35 DC534000 push dword ptr ds:[0x4053DC]             ; /ProcessId = 0x11DC
00401D4E  |.  50            push eax                                 ; |Inheritable
00401D4F  |.  68 FF0F1F00   push 0x1F0FFF                            ; |Access = PROCESS_ALL_ACCESS
00401D54  |.  FFD6          call esi                                 ; \OpenProcess
00401D56  |.  8BD8          mov ebx,eax
00401D58  |.  85DB          test ebx,ebx
00401D5A  |.  0F84 67020000 je 2013CM~1.00401FC7
00401D60  |>  A1 E0534000   mov eax,dword ptr ds:[0x4053E0]
00401D65  |.  FF35 CC534000 push dword ptr ds:[0x4053CC]
00401D6B  |.  8B35 FC404000 mov esi,dword ptr ds:[<&MSVCR110.strcpy_>;  msvcr110.strcpy_s
00401D71  |.  8985 C8FDFFFF mov [local.142],eax
00401D77  |.  A1 E4534000   mov eax,dword ptr ds:[0x4053E4]
00401D7C  |.  8985 CCFDFFFF mov [local.141],eax
00401D82  |.  8D85 DCFDFFFF lea eax,[local.137]
00401D88  |.  68 04010000   push 0x104
00401D8D  |.  50            push eax
00401D8E  |.  FFD6          call esi                                 ;  <&MSVCR110.strcpy_s>
00401D90  |.  8D8D DCFDFFFF lea ecx,[local.137]
00401D96  |.  83C4 0C       add esp,0xC
00401D99  |.  8D51 01       lea edx,dword ptr ds:[ecx+0x1]
00401D9C  |.  8D6424 00     lea esp,dword ptr ss:[esp]
00401DA0  |>  8A01          /mov al,byte ptr ds:[ecx]               // ;  这里取出的字符串就是刚才用户名+假注册码
00401DA2  |.  41            |inc ecx                                // ;  再通过算法call 生成出来的
00401DA3  |.  84C0          |test al,al
00401DA5  |.^ 75 F9         \jnz short 2013CM~1.00401DA0
00401DA7  |.  FF35 D4534000 push dword ptr ds:[0x4053D4]
00401DAD  |.  8D85 E0FEFFFF lea eax,[local.72]
00401DB3  |.  2BCA          sub ecx,edx                           //   ;  求出了长度
00401DB5  |.  68 04010000   push 0x104
00401DBA  |.  50            push eax
00401DBB  |.  898D C0FDFFFF mov [local.144],ecx
00401DC1  |.  FFD6          call esi                                // ;  拷贝一份
00401DC3  |.  8D8D E0FEFFFF lea ecx,[local.72]
00401DC9  |.  83C4 0C       add esp,0xC
00401DCC  |.  8D51 01       lea edx,dword ptr ds:[ecx+0x1]
00401DCF  |.  90            nop
00401DD0  |>  8A01          /mov al,byte ptr ds:[ecx]            //    ;  取出了假码
00401DD2  |.  41            |inc ecx
00401DD3  |.  84C0          |test al,al
00401DD5  |.^ 75 F9         \jnz short 2013CM~1.00401DD0
00401DD7  |.  8B35 58414000 mov esi,dword ptr ds:[<&USER32.LoadStrin>;  user32.LoadStringA
00401DDD  |.  6A 0D         push 0xD                                 ; /Count = D (13.)
00401DDF  |.  FFB5 B0FDFFFF push [local.148]                         ; |Buffer
00401DE5  |.  2BCA          sub ecx,edx                              ; |
00401DE7  |.  68 52200000   push 0x2052                              ; |RsrcID = STRING "Kernel32.dll"
00401DEC  |.  FF35 B0534000 push dword ptr ds:[0x4053B0]             ; |hInst = 00400000
00401DF2  |.  898D C4FDFFFF mov [local.143],ecx                      ; |
00401DF8  |.  FFD6          call esi                                 ; \LoadStringA
00401DFA  |.  FFB5 B0FDFFFF push [local.148]                         ; /pModule
00401E00  |.  FF15 78404000 call dword ptr ds:[<&KERNEL32.GetModuleH>; \GetModuleHandleA
00401E06  |.  6A 10         push 0x10
00401E08  |.  57            push edi
00401E09  |.  68 55200000   push 0x2055
00401E0E  |.  FF35 B0534000 push dword ptr ds:[0x4053B0]             ;  2013CM~1.00400000
00401E14  |.  3B85 C8FDFFFF cmp eax,[local.142]
00401E1A  |.  74 06         je short 2013CM~1.00401E22
00401E1C  |.  8985 C8FDFFFF mov [local.142],eax
00401E22  |>  FFD6          call esi
00401E24  |.  57            push edi                                 ; /ProcNameOrOrdinal
00401E25  |.  FFB5 C8FDFFFF push [local.142]                         ; |hModule
00401E2B  |.  FF15 74404000 call dword ptr ds:[<&KERNEL32.GetProcAdd>;//\获取了GetProcessAddress的地址
00401E31  |.  8BBD A8FDFFFF mov edi,[local.150]
00401E37  |.  6A 0C         push 0xC
00401E39  |.  57            push edi
00401E3A  |.  68 56200000   push 0x2056
00401E3F  |.  FF35 B0534000 push dword ptr ds:[0x4053B0]             ;  2013CM~1.00400000
00401E45  |.  8945 F4       mov [local.3],eax
00401E48  |.  FFD6          call esi                               //  ;  取出MessageBoxA
00401E4A  |.  57            push edi
00401E4B  |.  8B3D FC404000 mov edi,dword ptr ds:[<&MSVCR110.strcpy_>;  msvcr110.strcpy_s
00401E51  |.  8D85 D0FDFFFF lea eax,[local.140]
00401E57  |.  6A 0C         push 0xC
00401E59  |.  50            push eax
00401E5A  |.  FFD7          call edi                                // ;  复制一份字符串; <&MSVCR110.strcpy_s>
00401E5C  |.  83C4 0C       add esp,0xC
00401E5F  |.  6A 06         push 0x6
00401E61  |.  FFB5 B4FDFFFF push [local.147]
00401E67  |.  68 57200000   push 0x2057
00401E6C  |.  FF35 B0534000 push dword ptr ds:[0x4053B0]             ;  2013CM~1.00400000
00401E72  |.  FFD6          call esi
00401E74  |.  FFB5 B4FDFFFF push [local.147]
00401E7A  |.  8D45 E4       lea eax,[local.7]
00401E7D  |.  6A 06         push 0x6
00401E7F  |.  50            push eax
00401E80  |.  FFD7          call edi
00401E82  |.  83C4 0C       add esp,0xC
00401E85  |.  6A 0C         push 0xC
00401E87  |.  FFB5 ACFDFFFF push [local.149]
00401E8D  |.  68 58200000   push 0x2058
00401E92  |.  FF35 B0534000 push dword ptr ds:[0x4053B0]             ;  2013CM~1.00400000
00401E98  |.  FFD6          call esi
00401E9A  |.  FFB5 ACFDFFFF push [local.149]
00401EA0  |.  8D45 EA       lea eax,dword ptr ss:[ebp-0x16]
00401EA3  |.  6A 0C         push 0xC
00401EA5  |.  50            push eax
00401EA6  |.  FFD7          call edi
00401EA8  |.  8B35 44404000 mov esi,dword ptr ds:[<&KERNEL32.Virtual>;  kernel32.VirtualAllocEx
00401EAE  |.  83C4 0C       add esp,0xC
00401EB1  |.  6A 04         push 0x4                                 ; /flProtect = 0x4
00401EB3  |.  68 00300000   push 0x3000                              ; |flAllocationType = 3000 (12288.)
00401EB8  |.  68 00100000   push 0x1000                              ; |dwSize = 1000 (4096.)
00401EBD  |.  6A 00         push 0x0                                 ; |lpAddress = NULL
00401EBF  |.  53            push ebx                                 ; |hProcess
00401EC0  |.  FFD6          call esi                                 ; \VirtualAllocEx

他先打开了进程  mov eax,dword ptr ds:[0x4053DC]          ;  这里保存一个东西 下面用来打开进程 可以对这个进程右键 查找所有调用 然后自己跟一下 就会发现是刚才找进程保存的 我这里保存的是ctfmon.exe的pid     
然后获取了GetProcessAddress的地址 然后对ctfmon.exe申请内存了  用来干啥? 自然想到直接去调试另一个进程   
继续开另一个OD   附加0x4053DC保存的PID的进程 我这里是11dc 附加成功F9让他运行起来
继续回到主程序跟踪
[C++] 纯文本查看 复制代码
00401EC2  |.  8BF8          mov edi,eax
00401EC4  |.  89BD BCFDFFFF mov [local.145],edi
00401ECA  |.  85FF          test edi,edi
00401ECC  |.  0F84 F5000000 je 2013CM~1.00401FC7
00401ED2  |.  6A 00         push 0x0                                 ; /pBytesWritten = NULL
00401ED4  |.  68 38020000   push 0x238                               ; |写入的长度
00401ED9  |.  8D85 C0FDFFFF lea eax,[local.144]                      ; |
00401EDF  |.  50            push eax                               //  ; |写入数据的地址
00401EE0  |.  57            push edi                              //   ; |目标进程的地址
00401EE1  |.  53            push ebx                               //  ; |目标进程的hProcess
00401EE2  |.  FF15 18404000 call dword ptr ds:[<&KERNEL32.WriteProce>//; \对第一申请的内存写入数据     
00401EE8  |.  85C0          test eax,eax

单步F8 步过WriteProcessMenory 我们进去另一个进程看看他写入什么数据 我这里是00ac0000

00AC0000  0C 00 00 00 06 00 00 00 00 00 80 7C 00 00 D1 77  .........

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

点评

一上论坛就被你秒,555555555555555  发表于 2013-12-14 06:57

免费评分

参与人数 5热心值 +5 收起 理由
20120427 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
低调(d-iao) + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
Chief + 1 吾爱破解2013CM大赛,有你更精彩!
吾爱扣扣 + 1 小红帽的CM被。。。
xjun + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| a070458 发表于 2013-12-13 22:42
本帖最后由 a070458 于 2013-12-13 23:05 编辑


又是发挥强大的脑部能力的时候了 0C就是"32F757272533"(算法call算出来的)的字符串长度吧  06就是"123123"假码的长度了吧
MessageBoxA不用我多说了吧
继续跟主程序


继续用上面的方法  00401F52  |.  FF15 18404000 call dword ptr ds:[<&KERNEL32.WriteProce>; \又是写入了 我这里是00ad0000
步过后 去另一个进程看看

应该是代码吧.....
00401FBD  |.  FF15 24404000 call dword ptr ds:[<&KERNEL32.CreateRemo>; \创建远程线程 来到这里他创建远程线程了 这里看看他线程的进入地址  我这么是00ad0000 果断去另一个进程对该地址下F2断点
运行主程序 然后看看另一个进程的OD  果断断下来了 继续分析

对传过来的正注册码再xor一次  
00AD0039    5F              pop edi 运行到这里看堆栈是正确的注册码>O8>=0426612
00AD0008  00AD003E  2处改为jmp就能爆破了 但是现在在的是另一个进程 他的代码是通过主进程写入的 所以主进程一定有保存他的地方吧
复制CALL的代码 去主程序搜索一下

果断找到了  对应00402358 0040238E   改JMP保存
试试爆破和正确注册码     
至此分析完毕


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

点评

注意排版啦,排版也有分值喔  发表于 2013-12-13 22:53

免费评分

参与人数 1热心值 +1 收起 理由
RedAngel丶 + 1 都给你,太坏了

查看全部评分

马斯维尔 发表于 2013-12-13 22:50
a070458 发表于 2013-12-13 22:42
尾部被吞掉了

希望大牛此楼补全。。。好文章!
xjun 发表于 2013-12-13 22:50
brack 发表于 2013-12-13 22:51
大牛..厉害.
1007475557 发表于 2013-12-13 22:55
没看懂,算了
L4Nce 发表于 2013-12-13 23:13
本帖最后由 L4Nce 于 2013-12-13 23:20 编辑

远程线程注入shellcode的explorer,可以这么玩,下openprocess,call kernel32.CreateRemoteThread,发现打开explorer的时候断CreateRemoteThread再开一个od加载explorer根据参数获取线程地址下f2两个od都f9就可以在explorer里面断下,里面就几个小跳,就OK
还最重要的是膜拜大大,这么认真分析不加威望?

点评

L4Nce师傅谦虚了  发表于 2013-12-14 00:20
l4Nce谦虚了...  发表于 2013-12-14 00:19
Rookietp 发表于 2013-12-14 00:40
霸气侧漏啊,师傅!
zhigaows 发表于 2013-12-14 00:45
膜拜大牛。。。
vipcrack 发表于 2013-12-14 00:51
本帖最后由 vipcrack 于 2013-12-14 01:02 编辑

[C] 纯文本查看 复制代码
004026B0 |> /0FBE040A /movsx eax, byte ptr [edx+ecx] ; 用户名HEX累加
004026B4 |. |03F8 |add edi, eax
004026B6 |. |0FBE440A 01 |movsx eax, byte ptr [edx+ecx+0x1]
004026BB |. |83C1 02 |add ecx, 0x2
004026BE |. |03D8 |add ebx, eax
004026C0 |. |3BCE |cmp ecx, esi
004026C2 |.^\7C EC \jl short 004026B0
004026C4 |. 8BB5 E8FEFFFF mov esi, dword ptr [ebp-0x118]
004026CA |> 3BCE cmp ecx, esi
004026CC |. 7D 0A jge short 004026D8
004026CE |. 0FBE040A movsx eax, byte ptr [edx+ecx]
004026D2 |. 8985 F0FEFFFF mov dword ptr [ebp-0x110], eax
004026D8 |> 8B8D F0FEFFFF mov ecx, dword ptr [ebp-0x110]
004026DE |. 6A 0A push 0xA
004026E0 |. 68 04010000 push 0x104
004026E5 |. 8D85 F8FEFFFF lea eax, dword ptr [ebp-0x108]
004026EB |. 50 push eax
004026EC |. 81C1 DD070000 add ecx, 0x7DD
004026F2 |. 8D043B lea eax, dword ptr [ebx+edi]
004026F5 |. 03C1 add eax, ecx ; HEX累加和 +7DD
004026F7 |. 6BC0 34 imul eax, eax, 0x34 ; 967*43
004026FA |. 50 push eax ; eax=0001E8EC 转换成10进制就是新处理后的用户名后面的数字。
004026FB |. FF15 04414000 call dword ptr [<&MSVCR110._itoa_s>] ; msvcr110._itoa_s








[C++] 纯文本查看 复制代码
00402787 |. 68 04010000 push 0x104 ; /取C盘的硬盘序列号
0040278C |. 8D85 D8F6FFFF lea eax, dword ptr [ebp-0x928] ; |
00402792 |. 50 push eax ; |pFileSystemNameBuffer
00402793 |. 8D85 CCF6FFFF lea eax, dword ptr [ebp-0x934] ; |
00402799 |. 50 push eax ; |pFileSystemFlags
0040279A |. 8D85 D0F6FFFF lea eax, dword ptr [ebp-0x930] ; |
004027A0 |. 50 push eax ; |pMaxFilenameLength
004027A1 |. 8D85 D4F6FFFF lea eax, dword ptr [ebp-0x92C] ; |
004027A7 |. 50 push eax ; |pVolumeSerialNumber
004027A8 |. 68 04010000 push 0x104 ; |MaxVolumeNameSize = 104 (260.)
004027AD |. 8D85 E0F8FFFF lea eax, dword ptr [ebp-0x720] ; |
004027B3 |. 50 push eax ; |VolumeNameBuffer
004027B4 |. 6A 00 push 0x0 ; |RootPathName = NULL
004027B6 |. C785 D0F6FFFF FF000000 mov dword ptr [ebp-0x930], 0xFF ; |
004027C0 |. FF15 58404000 call dword ptr [<&KERNEL32.GetVolumeI>; \GetVolumeInformationW
004027C6 |. 33C9 xor ecx, ecx
004027C8 |. 85F6 test esi, esi
004027CA |. 7E 11 jle short 004027DD
004027CC |. 8B15 D0534000 mov edx, dword ptr [0x4053D0] ; ds:[004053D0]=00168A68, (ASCII "abcd125164")
004027D2 |> 0FBE040A /movsx eax, byte ptr [edx+ecx]
004027D6 |. 41 |inc ecx
004027D7 |. 03F8 |add edi, eax
004027D9 |. 3BCE |cmp ecx, esi
004027DB |.^ 7C F5 \jl short 004027D2
004027DD |> 8B35 04414000 mov esi, dword ptr [<&MSVCR110._itoa>; HEX累加和 2BD
004027E3 |. 6A 0A push 0xA
004027E5 |. 68 04010000 push 0x104
004027EA |. 8D85 F0FCFFFF lea eax, dword ptr [ebp-0x310]
004027F0 |. 50 push eax
004027F1 |. FFB5 D4F6FFFF push dword ptr [ebp-0x92C] ; 硬盘序列号 ss:[0012F39C]=80806311 有符号数-2139069679,注册码后半段





得到的HEX是注册码的前半段,然后获取C盘的序列号,转换成带符号的10进制数字,连接到后面就是注册码.



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1热心值 +1 收起 理由
a070458 + 1 我很赞同!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 14:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表