吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 21943|回复: 64
收起左侧

[原创] 一个新鲜CM的追码(简略分析)

  [复制链接]
zbnysjwsnd8 发表于 2017-8-1 22:12
本帖最后由 zbnysjwsnd8 于 2017-8-6 15:24 编辑

CM地址:http://www.52pojie.cn/thread-630662-1-1.html

因为这个CM要详细写起来实在是太麻烦 篇幅有限 我就说关键的{:1_902:}
我并不是大神 所以哪里写的太少 或者哪里有错误的地方 还请指出来。。

0x0 初探
这个cm.exe是用易语言编写(而且是静态编译)
先用Mrack师傅的E-Reverse3.12看一下程序调用的API 其中有三个我认为比较重要的API
ReadProcessMemory <==
403EB5,404316,
CallWindowProcA <==
4044C8,
CreateProcessA <== kernel32.dll
4061E6,

这三个API我认为很关键(对于分析而言)
再用E-DEBUG EVENTS探测一下信息(启动事件的地址)
C:\Users\Administrator\Desktop\cm.exe
中断地址: 0041CDCD
Start......
StartAddress: 004639D7
事件发生: 00403998 //__启动窗口_创建完毕
事件发生: 0040105B //时钟的周期事件
事件发生: 0040105B
事件发生: 0040105B
事件发生: 0040105B
事件发生: 0040105B
程序退出
......End

好了 现在用OD打开cm.exe 给00403998下断点 然后F9
程序首先取出临时目录的路径并和"tmp.tmp"合在一起
[Asm] 纯文本查看 复制代码
004039A1  |.  68 01030080   push 0x80000301
004039A6  |.  6A 00         push 0x0
004039A8  |.  68 0B000000   push 0xB
004039AD  |.  68 01000000   push 0x1
004039B2  |.  B8 03000000   mov eax,0x3
004039B7  |.  BB A0294600   mov ebx,cm.004629A0
004039BC  |.  E8 E52D0000   call cm.004067A6                         ;  取临时目录
004039C1  |.  83C4 10       add esp,0x10
004039C4  |.  8945 FC       mov [local.1],eax
004039C7  |.  68 244C4800   push cm.00484C24                         ; /tmp.tmp
004039CC  |.  FF75 FC       push [local.1]                           ; |Arg1 = 00537D44 ASCII "out"
004039CF  |.  B9 02000000   mov ecx,0x2                              ; |
004039D4  |.  E8 3BE5FFFF   call cm.00401F14                         ; \cm.00401F14
004039D9  |.  83C4 08       add esp,0x8
004039DC  |.  8945 F8       mov [local.2],eax                        ;  路径合成(临时目录 + tmp.tmp)

然后将一个可执行文件的字节集写到tmp.tmp中
[Asm] 纯文本查看 复制代码
004039EF  |> \68 05000080   push 0x80000005
004039F4  |.  6A 00         push 0x0
004039F6  |.  68 3C4D4800   push cm.00484D3C                         ;  一个可执行文件
004039FB  |.  68 04000080   push 0x80000004
00403A00  |.  6A 00         push 0x0
00403A02  |.  8B45 F8       mov eax,[local.2]                        ;  tmp.tmp的全路径
00403A05  |.  85C0          test eax,eax
00403A07  |.  75 05         jnz short cm.00403A0E
00403A09  |.  B8 884C4800   mov eax,cm.00484C88
00403A0E  |>  50            push eax
00403A0F  |.  68 02000000   push 0x2
00403A14  |.  BB 007A4000   mov ebx,cm.00407A00                      ;  写到文件
00403A19  |.  E8 8E2D0000   call cm.004067AC
00403A1E  |.  83C4 1C       add esp,0x1C

然后程序设置一个SendMessage的回调函数
[Asm] 纯文本查看 复制代码
00403A31  |> \68 01000100   push 0x10001                             
00403A36  |.  68 00000106   push 0x6010000
00403A3B  |.  68 01000152   push 0x52010001;_启动窗口
00403A40  |.  68 01000000   push 0x1
00403A45  |.  BB 70694000   mov ebx,cm.00406970                      ;  取窗口句柄
00403A4A  |.  E8 5D2D0000   call cm.004067AC
00403A4F  |.  83C4 10       add esp,0x10
00403A52  |.  50            push eax                                 ; /_启动窗口的窗口句柄
00403A53  |.  E8 76000000   call cm.00403ACE                         ; \设置SendMessage的回调函数 地址是0x404511
00403A58  |.  6A 01         push 0x1                                 ; /Arg3 = 00000001
00403A5A  |.  68 D45E4000   push cm.00405ED4                         ; |Arg2 = 00405ED4
00403A5F  |.  B8 447D5300   mov eax,cm.00537D44                      ; |out
00403A64  |.  8945 FC       mov [local.1],eax                        ; |
00403A67  |.  8D45 FC       lea eax,[local.1]                        ; |
00403A6A  |.  50            push eax                                 ; |Arg1 = 00000000
00403A6B  |.  E8 C00A0000   call cm.00404530                         ; \cm.00404530
00403A70  |.  8B5D FC       mov ebx,[local.1]                        ;  cm.00537D44

后面的call太长了就不看了。
这个tmp.tmp是一个可执行文件。。
先打开cm.exe 用pchunter看看进程间的关系
QQ截图20170801205520.jpg
可以发现 这个cm.exe是tmp.tmp的父进程
Mrack的神器告诉我们cm.exe有使用CreateProcessA这个api
那么给这个API下断点 然后F9。
QQ截图20170801205722.jpg
可以发现:程序创建了一个调试进程(进程名是tmp.tmp)

0x1 分析被调试进程
因为WINDOWS下的R3调试器与被调试进程的关系是"一个萝卜一个坑" 即一个进程只能被一个调试器附加
这样我们就没办法用OllyDbg去附加tmp.tmp了
所以只能用OD载入单独分析了。。
直接F9运行 输入假码 然后给GetWindowTextA下断点 之后点击[按钮]
结果发现。。。第一次没找到按钮事件
那再F9一次 结果发现又断了下来。。。
这次回到0x402C5E处  找到函数头(0x402C3B处)
删掉GetWindowTextA 这个断点  给函数头设置断点。
F9运行 重新点击[按钮]。
程序首先取出第一个编辑框的内容然后转换成整数
[Asm] 纯文本查看 复制代码
00402C4B  |.  6A FF         push -0x1
00402C4D  |.  6A 08         push 0x8
00402C4F  |.  68 B4350116   push 0x160135B4
00402C54  |.  68 01000152   push 0x52010001
00402C59  |.  E8 CD2B0000   call tmp.0040582B                        ;  获取第一个编辑框的内容
00402C5E  |.  83C4 10       add esp,0x10
00402C61  |.  8945 F8       mov [local.2],eax
00402C64  |.  68 04000080   push 0x80000004
00402C69  |.  6A 00         push 0x0
00402C6B  |.  8B45 F8       mov eax,[local.2]
00402C6E  |.  85C0          test eax,eax
00402C70  |.  75 05         jnz short tmp.00402C77
00402C72  |.  B8 676E4800   mov eax,tmp.00486E67
00402C77  |>  50            push eax
00402C78  |.  68 01000000   push 0x1
00402C7D  |.  BB B0604000   mov ebx,tmp.004060B0
00402C82  |.  E8 982B0000   call tmp.0040581F                        ;  再转换成整数
00402C87  |.  83C4 10       add esp,0x10
00402C8A  |.  8945 F4       mov [local.3],eax

程序又获取了第二个编辑框的内容 然后转换成字节集
[Asm] 纯文本查看 复制代码
00402C9D  |> \6A FF         push -0x1
00402C9F  |.  6A 08         push 0x8
00402CA1  |.  68 B3350116   push 0x160135B3
00402CA6  |.  68 01000152   push 0x52010001
00402CAB  |.  E8 7B2B0000   call tmp.0040582B                        ;  获取第二个编辑框的内容
00402CB0  |.  83C4 10       add esp,0x10
00402CB3  |.  8945 F0       mov [local.4],eax
00402CB6  |.  68 04000080   push 0x80000004
00402CBB  |.  6A 00         push 0x0
00402CBD  |.  8B45 F0       mov eax,[local.4]
00402CC0  |.  85C0          test eax,eax
00402CC2  |.  75 05         jnz short tmp.00402CC9
00402CC4  |.  B8 676E4800   mov eax,tmp.00486E67
00402CC9  |>  50            push eax
00402CCA  |.  68 01000000   push 0x1
00402CCF  |.  BB 50674000   mov ebx,tmp.00406750
00402CD4  |.  E8 462B0000   call tmp.0040581F                        ;  转换成字节集
00402CD9  |.  83C4 10       add esp,0x10

然后调用这个函数
[Asm] 纯文本查看 复制代码
00402CEF  |> \8D45 EC       lea eax,[local.5]                        ;  指向第二个编辑框的内容(字节集)的指针的指针
00402CF2  |.  50            push eax                                 ; /Arg3 = 0019F47C
00402CF3  |.  B8 8F784800   mov eax,tmp.0048788F                     ; |ASCII "out"
00402CF8  |.  8945 E8       mov [local.6],eax                        ; |
00402CFB  |.  8D45 E8       lea eax,[local.6]                        ; |ASCII "out"
00402CFE  |.  50            push eax                                 ; |Arg2 = 0019F47C
00402CFF  |.  FF75 F4       push [local.3]                           ; |第一个编辑框的内容(整数型)
00402D02  |.  E8 12020000   call tmp.00402F19                        ; \tmp.00402F19

F7跟进去。
程序申请一个叫做 out 的窗口消息
[Asm] 纯文本查看 复制代码
00402F44  |.  FF33          push dword ptr ds:[ebx]                  ;  tmp.0048788F
00402F46  |.  B8 07000000   mov eax,0x7
00402F4B  |.  E8 C9280000   call tmp.00405819                        ;  新申请一个窗口消息(名字叫做out)
00402F50  |.  3965 EC       cmp [local.5],esp
00402F53  |.  74 0D         je short tmp.00402F62
00402F55  |.  68 06000000   push 0x6
00402F5A  |.  E8 B4280000   call tmp.00405813
00402F5F  |.  83C4 04       add esp,0x4
00402F62  |>  8945 FC       mov [local.1],eax                        ;  保存消息号 这里是0xC342

然后将第一个编辑框的内容转换成整数型 充当窗口句柄 判断这个窗口是否接受鼠标或键盘输入
[Asm] 纯文本查看 复制代码
0040300A  |.  FF75 08       push [arg.1]                             ;  窗口句柄(第一个编辑框的内容(整数型))
0040300D  |.  B8 0C000000   mov eax,0xC
00403012  |.  E8 02280000   call tmp.00405819                        ;  判断窗口是否允许接受键盘或鼠标输入
00403017  |.  3965 EC       cmp [local.5],esp
0040301A  |.  74 0D         je short tmp.00403029
0040301C  |.  68 06000000   push 0x6
00403021  |.  E8 ED270000   call tmp.00405813
00403026  |.  83C4 04       add esp,0x4
00403029  |>  85C0          test eax,eax
0040302B  |.  0F84 8E030000 je tmp.004033BF                          ;  不允许则返回

如果返回的话 就直接失败。 所以这里不能让它返回
联合前面cm.exe新申请的SendMessage回调函数 那这个就可能是填写父进程(cm.exe)的窗口句柄
用od打开cm.exe 然后直接F9运行(要出现窗口) 找到这个cm.exe的窗口句柄 转换成十进制。
QQ截图20170801211355.jpg
那么把1183644输入过去。
看看这个je会不会跳走 这次就没有跳走。
那么继续往下
然后程序向cm.exe发送了窗口消息(中间一大部分操作我直接略过了。) 然后弹出了一个MessageBox
[Asm] 纯文本查看 复制代码
00403342  |.  FF75 D8       push [local.10]
00403345  |.  FF75 E0       push [local.8]                           ;  tmp.00441431
00403348  |.  FF75 FC       push [local.1]                           ;  out 消息
0040334B  |.  FF75 08       push [arg.1]                             ;  cm.exe的窗口句柄
0040334E  |.  B8 0E000000   mov eax,0xE
00403353  |.  E8 C1240000   call tmp.00405819                        ;  发送消息

之前cm.exe申请了一个SendMessage的回调函数 因为xh5510大佬提醒我 说"关键部分在cm.exe" 所以 在这个消息发送以后 cm.exe调用之前设置的回调函数应该是关键部分

0x2 再看调试器 找出注册码
回到cm.exe 直接给0x404511下断点 然后之前运行cm.exe时弹出的注册窗口的第一个输入框中输入 之前用pchunter探测到的cm.exe的主窗口句柄(十进制:我这里是1183644) 第二个输入框随便输入点东西 点击[按钮]。
直接断了下来
这里只有一个call 那么直接跟进去。
一看call里面 一堆代码。。。
那么就用快捷点的方法 直接定位。
因为被调试进程和调试器要交换数据 而cm.exe又有调用ReadProcessMemory 那么给ReadProcessMemory下断点 然后F9运行试试。。。
断了下来。。
结果两次都在一个地方返回 而且都在这个call里面。。
看样子这个API断点并不适用
那换一个API 试试...这个CallWindowProcA(在刚刚在0x404511断下时下断点 然后按F9 就会在这里断下来)
777.jpg
注意这个函数发送的消息是NULL。。
蛮可疑的
在这个回调函数地址下断点然后F9试试。
这个函数也只有一个call 直接跟进去(我分析的时候 这个call就是验证注册码的call)
跟进去以后还有一个。。。来到00404EF3处
直接找到这段代码
[Asm] 纯文本查看 复制代码
00404F9B  |.  6A 00         push 0x0                                 ; /Arg3 = 00000000
00404F9D  |.  8D45 EC       lea eax,[local.5]                        ; |
00404FA0  |.  50            push eax                                 ; |Arg2 = 0019FAAC
00404FA1  |.  8D45 F0       lea eax,[local.4]                        ; |输入的假的注册码(在第二个框中)
00404FA4  |.  50            push eax                                 ; |Arg1 = 0019FAAC
00404FA5  |.  E8 C9010000   call cm.00405173                         ; \验证

来到这里:
[Asm] 纯文本查看 复制代码
004051B8  |> \FF75 0C       push [arg.2]                             ; /Arg2 = 0019FAA8
004051BB  |.  FF75 08       push [arg.1]                             ; |假的注册码
004051BE  |.  E8 11000000   call cm.004051D4                         ; \cm.004051D4

跟进去 来到验证CALL
这段代码调用的call是易语言的 分割文本 函数
[Asm] 纯文本查看 复制代码
004053B5  |.  6A 00         push 0x0
004053B7  |.  6A 00         push 0x0
004053B9  |.  6A 00         push 0x0
004053BB  |.  68 04000080   push 0x80000004
004053C0  |.  6A 00         push 0x0
004053C2  |.  68 8E7D5300   push cm.00537D8E                         ;  %
004053C7  |.  68 04000080   push 0x80000004
004053CC  |.  6A 00         push 0x0
004053CE  |.  8B5D 08       mov ebx,[arg.1]
004053D1  |.  8B03          mov eax,dword ptr ds:[ebx]               ;  假的注册码
004053D3  |.  85C0          test eax,eax
004053D5  |.  75 05         jnz short cm.004053DC
004053D7  |.  B8 884C4800   mov eax,cm.00484C88
004053DC  |>  50            push eax
004053DD  |.  68 03000000   push 0x3
004053E2  |.  BB 50754000   mov ebx,cm.00407550
004053E7  |.  E8 C0130000   call cm.004067AC                         ;  文本分割
004053EC  |.  83C4 28       add esp,0x28

这里面被分割的文本就是我们输入的假注册码 用作分割的文本就是"%"
保险起见 我们换一个注册码 比如说:abcdefgh%123456
输入好后 来到004053EC处 观察一下eax寄存器中指向的地址
4.jpg
观察一下0076EFD8的内容和0077F6B8的内容
可以发现一个是abcdefgh另一个是123456
继续往下。
来到一个大循环中
这个循环是有关联的 所以我就直接发吧。。。必要的注释我已经标记了 其中 注册码2是指第二个输入框中的文本(第一部分是指0076EFD8中的文本 第二部分则是0077F6B8中的文本)
[Asm] 纯文本查看 复制代码
0040543C  |.  8945 F4       mov [local.3],eax
0040543F  |.  8B5D F4       mov ebx,[local.3]
00405442  |.  E8 49CAFFFF   call cm.00401E90                         ;  取出分割后的文本的成员个数(注册码2被"%"分割)
00405447  |.  33C9          xor ecx,ecx
00405449  |.  50            push eax
0040544A  |.  8D45 F0       lea eax,[local.4]
0040544D  |.  8BD8          mov ebx,eax
0040544F  |.  58            pop eax
00405450  |>  41            /inc ecx
00405451  |.  51            |push ecx
00405452  |.  53            |push ebx
00405453  |.  890B          |mov dword ptr ds:[ebx],ecx
00405455  |.  50            |push eax
00405456  |.  3BC8          |cmp ecx,eax
00405458  |.  0F8F 99030000 |jg cm.004057F7
0040545E  |.  8B5D F4       |mov ebx,[local.3]
00405461  |.  E8 DFC2FFFF   |call cm.00401745
00405466  |.  53            |push ebx
00405467  |.  51            |push ecx
00405468  |.  8B45 F0       |mov eax,[local.4]
0040546B  |.  48            |dec eax
0040546C  |.  79 0D         |jns short cm.0040547B
0040546E  |.  68 04000000   |push 0x4
00405473  |.  E8 22130000   |call cm.0040679A
00405478  |.  83C4 04       |add esp,0x4
0040547B  |>  59            |pop ecx
0040547C  |.  5B            |pop ebx
0040547D  |.  3BC1          |cmp eax,ecx
0040547F  |.  7C 0D         |jl short cm.0040548E
00405481  |.  68 01000000   |push 0x1
00405486  |.  E8 0F130000   |call cm.0040679A
0040548B  |.  83C4 04       |add esp,0x4
0040548E  |>  C1E0 02       |shl eax,0x2
00405491  |.  03D8          |add ebx,eax
00405493  |.  895D D8       |mov [local.10],ebx                      ;  注册码2被 "%" 分割
00405496  |.  8B5D D8       |mov ebx,[local.10]
00405499  |.  8B03          |mov eax,dword ptr ds:[ebx]
0040549B  |.  85C0          |test eax,eax
0040549D  |.  74 15         |je short cm.004054B4
0040549F  |.  50            |push eax
004054A0  |.  8BD8          |mov ebx,eax
004054A2  |.  E8 02CAFFFF   |call cm.00401EA9                        ;  取出第一部分的长度
004054A7  |.  40            |inc eax                                 ;  长度 + 1
004054A8  |.  50            |push eax
004054A9  |.  E8 E6120000   |call cm.00406794                        ;  注册码2
004054AE  |.  59            |pop ecx
004054AF  |.  5E            |pop esi                                 ;  cm.00484CB3
004054B0  |.  8BF8          |mov edi,eax
004054B2  |.  F3:A4         |rep movs byte ptr es:[edi],byte ptr ds:[esi];  拷贝第n部分(n是循环的次数)
004054B4  |>  50            |push eax
004054B5  |.  8B5D EC       |mov ebx,[local.5]
004054B8  |.  85DB          |test ebx,ebx
004054BA  |.  74 09         |je short cm.004054C5
004054BC  |.  53            |push ebx
004054BD  |.  E8 CC120000   |call cm.0040678E
004054C2  |.  83C4 04       |add esp,0x4
004054C5  |>  58            |pop eax
004054C6  |.  8945 EC       |mov [local.5],eax
004054C9  |.  B8 884C4800   |mov eax,cm.00484C88
004054CE  |.  50            |push eax
004054CF  |.  8B5D E8       |mov ebx,[local.6]
004054D2  |.  85DB          |test ebx,ebx
004054D4  |.  74 09         |je short cm.004054DF
004054D6  |.  53            |push ebx
004054D7  |.  E8 B2120000   |call cm.0040678E
004054DC  |.  83C4 04       |add esp,0x4
004054DF  |>  58            |pop eax
004054E0  |.  8945 E8       |mov [local.6],eax
004054E3  |.  68 04000080   |push 0x80000004
004054E8  |.  6A 00         |push 0x0
004054EA  |.  8B45 EC       |mov eax,[local.5]
004054ED  |.  85C0          |test eax,eax
004054EF  |.  75 05         |jnz short cm.004054F6
004054F1  |.  B8 884C4800   |mov eax,cm.00484C88
004054F6  |>  50            |push eax
004054F7  |.  68 01000000   |push 0x1
004054FC  |.  BB A0694000   |mov ebx,cm.004069A0
00405501  |.  E8 A6120000   |call cm.004067AC                        ;  取第n部分文本长度
00405506  |.  83C4 10       |add esp,0x10
00405509  |.  33C9          |xor ecx,ecx
0040550B  |.  50            |push eax
0040550C  |.  8D45 E4       |lea eax,[local.7]
0040550F  |.  8BD8          |mov ebx,eax
00405511  |.  58            |pop eax
00405512  |>  41            |/inc ecx
00405513  |.  51            ||push ecx
00405514  |.  53            ||push ebx
00405515  |.  890B          ||mov dword ptr ds:[ebx],ecx
00405517  |.  50            ||push eax
00405518  |.  3BC8          ||cmp ecx,eax
0040551A  |.  0F8F 12020000 ||jg cm.00405732
00405520  |.  68 01030080   ||push 0x80000301
00405525  |.  6A 00         ||push 0x0
00405527  |.  68 01000000   ||push 0x1
0040552C  |.  68 01030080   ||push 0x80000301
00405531  |.  6A 00         ||push 0x0
00405533  |.  FF75 E4       ||push [local.7]
00405536  |.  68 04000080   ||push 0x80000004
0040553B  |.  6A 00         ||push 0x0
0040553D  |.  8B45 EC       ||mov eax,[local.5]
00405540  |.  85C0          ||test eax,eax
00405542  |.  75 05         ||jnz short cm.00405549
00405544  |.  B8 884C4800   ||mov eax,cm.00484C88
00405549  |>  50            ||push eax
0040554A  |.  68 03000000   ||push 0x3
0040554F  |.  BB 706A4000   ||mov ebx,cm.00406A70
00405554  |.  E8 53120000   ||call cm.004067AC                       ;  取出第n部分的一个字节
00405559  |.  83C4 28       ||add esp,0x28
0040555C  |.  8945 D8       ||mov [local.10],eax
0040555F  |.  8B5D FC       ||mov ebx,[local.1]
00405562  |.  E8 DEC1FFFF   ||call cm.00401745                       ;  重定义数组
00405567  |.  B8 09000000   ||mov eax,0x9
0040556C  |.  3BC1          ||cmp eax,ecx
0040556E  |.  7C 0D         ||jl short cm.0040557D
00405570  |.  68 01000000   ||push 0x1
00405575  |.  E8 20120000   ||call cm.0040679A
0040557A  |.  83C4 04       ||add esp,0x4
0040557D  |>  C1E0 02       ||shl eax,0x2
00405580  |.  03D8          ||add ebx,eax
00405582  |.  895D D4       ||mov [local.11],ebx
00405585  |.  8B5D D4       ||mov ebx,[local.11]
00405588  |.  8B03          ||mov eax,dword ptr ds:[ebx]
0040558A  |.  50            ||push eax
0040558B  |.  FF75 D8       ||push [local.10]
0040558E  |.  E8 12BBFFFF   ||call cm.004010A5                       ;  再和p比较
00405593  |.  83C4 08       ||add esp,0x8
00405596  |.  83F8 00       ||cmp eax,0x0
00405599  |.  B8 00000000   ||mov eax,0x0
0040559E  |.  0f94c0        ||sete al
004055A1  |.  8945 D0       ||mov [local.12],eax
004055A4  |.  8B5D D8       ||mov ebx,[local.10]
004055A7  |.  85DB          ||test ebx,ebx
004055A9  |.  74 09         ||je short cm.004055B4
004055AB  |.  53            ||push ebx
004055AC  |.  E8 DD110000   ||call cm.0040678E
004055B1  |.  83C4 04       ||add esp,0x4
004055B4  |>  837D D0 00    ||cmp [local.12],0x0
004055B8  |.  0F84 35000000 ||je cm.004055F3
004055BE  |.  68 B24C4800   ||push cm.00484CB2                       ; /0
004055C3  |.  FF75 E8       ||push [local.6]                         ; |Arg1 = 0077F7F8
004055C6  |.  B9 02000000   ||mov ecx,0x2                            ; |
004055CB  |.  E8 44C9FFFF   ||call cm.00401F14                       ; \cm.00401F14
004055D0  |.  83C4 08       ||add esp,0x8                            ;  相等则用'0'替换
004055D3  |.  8945 D8       ||mov [local.10],eax
004055D6  |.  8B45 D8       ||mov eax,[local.10]
004055D9  |.  50            ||push eax
004055DA  |.  8B5D E8       ||mov ebx,[local.6]
004055DD  |.  85DB          ||test ebx,ebx
004055DF  |.  74 09         ||je short cm.004055EA
004055E1  |.  53            ||push ebx
004055E2  |.  E8 A7110000   ||call cm.0040678E
004055E7  |.  83C4 04       ||add esp,0x4
004055EA  |>  58            ||pop eax
004055EB  |.  8945 E8       ||mov [local.6],eax
004055EE  |.  E9 37010000   ||jmp cm.0040572A
004055F3  |>  8B5D FC       ||mov ebx,[local.1]
004055F6  |.  E8 95C8FFFF   ||call cm.00401E90                       ;  取出asdfghjklp的长度(已经被分割 即s[1] = 'a' s[2] = 's'...一共十个字节)
004055FB  |.  33C9          ||xor ecx,ecx
004055FD  |.  50            ||push eax
004055FE  |.  8D45 E0       ||lea eax,[local.8]
00405601  |.  8BD8          ||mov ebx,eax
00405603  |.  58            ||pop eax
00405604  |>  41            ||/inc ecx
00405605  |.  51            |||push ecx
00405606  |.  53            |||push ebx
00405607  |.  890B          |||mov dword ptr ds:[ebx],ecx
00405609  |.  50            |||push eax
0040560A  |.  3BC8          |||cmp ecx,eax
0040560C  |.  0F8F 15010000 |||jg cm.00405727                        ;  小循环十次
00405612  |.  68 01030080   |||push 0x80000301
00405617  |.  6A 00         |||push 0x0
00405619  |.  68 01000000   |||push 0x1
0040561E  |.  68 01030080   |||push 0x80000301
00405623  |.  6A 00         |||push 0x0
00405625  |.  FF75 E4       |||push [local.7]                        ;  第二个循环的循环次数
00405628  |.  68 04000080   |||push 0x80000004
0040562D  |.  6A 00         |||push 0x0
0040562F  |.  8B45 EC       |||mov eax,[local.5]                     ;  注册码(分割后 即注册码[n])
00405632  |.  85C0          |||test eax,eax
00405634  |.  75 05         |||jnz short cm.0040563B
00405636  |.  B8 884C4800   |||mov eax,cm.00484C88
0040563B  |>  50            |||push eax
0040563C  |.  68 03000000   |||push 0x3
00405641  |.  BB 706A4000   |||mov ebx,cm.00406A70
00405646  |.  E8 61110000   |||call cm.004067AC                      ;  取出一个字节
0040564B  |.  83C4 28       |||add esp,0x28
0040564E  |.  8945 D8       |||mov [local.10],eax
00405651  |.  8B5D FC       |||mov ebx,[local.1]
00405654  |.  E8 ECC0FFFF   |||call cm.00401745
00405659  |.  53            |||push ebx
0040565A  |.  51            |||push ecx
0040565B  |.  8B45 E0       |||mov eax,[local.8]
0040565E  |.  48            |||dec eax
0040565F  |.  79 0D         |||jns short cm.0040566E
00405661  |.  68 04000000   |||push 0x4
00405666  |.  E8 2F110000   |||call cm.0040679A
0040566B  |.  83C4 04       |||add esp,0x4
0040566E  |>  59            |||pop ecx
0040566F  |.  5B            |||pop ebx
00405670  |.  3BC1          |||cmp eax,ecx
00405672  |.  7C 0D         |||jl short cm.00405681
00405674  |.  68 01000000   |||push 0x1
00405679  |.  E8 1C110000   |||call cm.0040679A
0040567E  |.  83C4 04       |||add esp,0x4
00405681  |>  C1E0 02       |||shl eax,0x2
00405684  |.  03D8          |||add ebx,eax
00405686  |.  895D D4       |||mov [local.11],ebx
00405689  |.  8B5D D4       |||mov ebx,[local.11]
0040568C  |.  8B03          |||mov eax,dword ptr ds:[ebx]
0040568E  |.  50            |||push eax                              ;  "asdfghjklp"的每个字符(执行完一个小循环就换下一个)
0040568F  |.  FF75 D8       |||push [local.10]
00405692  |.  E8 0EBAFFFF   |||call cm.004010A5                      ;  eax和注册码(分割后 即 注册码[n])一个字节比较
00405697  |.  83C4 08       |||add esp,0x8
0040569A  |.  83F8 00       |||cmp eax,0x0
0040569D  |.  B8 00000000   |||mov eax,0x0
004056A2  |.  0f94c0        |||sete al
004056A5  |.  8945 D0       |||mov [local.12],eax
004056A8  |.  8B5D D8       |||mov ebx,[local.10]
004056AB  |.  85DB          |||test ebx,ebx
004056AD  |.  74 09         |||je short cm.004056B8
004056AF  |.  53            |||push ebx
004056B0  |.  E8 D9100000   |||call cm.0040678E
004056B5  |.  83C4 04       |||add esp,0x4
004056B8  |>  837D D0 00    |||cmp [local.12],0x0
004056BC  |.  0F84 5D000000 |||je cm.0040571F                        ;  如果相等则不转移
004056C2  |.  68 01030080   |||push 0x80000301
004056C7  |.  6A 00         |||push 0x0
004056C9  |.  FF75 E0       |||push [local.8]
004056CC  |.  68 01000000   |||push 0x1
004056D1  |.  BB F0784000   |||mov ebx,cm.004078F0
004056D6  |.  E8 D1100000   |||call cm.004067AC                      ;  循环次数到文本
004056DB  |.  83C4 10       |||add esp,0x10
004056DE  |.  8945 D8       |||mov [local.10],eax                    ;  循环次数
004056E1  |.  FF75 D8       |||push [local.10]                       ; /Arg2 = 0077F768
004056E4  |.  FF75 E8       |||push [local.6]                        ; |Arg1 = 0077F7F8
004056E7  |.  B9 02000000   |||mov ecx,0x2                           ; |
004056EC  |.  E8 23C8FFFF   |||call cm.00401F14                      ; \cm.00401F14
004056F1  |.  83C4 08       |||add esp,0x8
004056F4  |.  8945 D4       |||mov [local.11],eax                    ;  文本合成 LOCAL6 = LOCAL6 + 到文本(循环次数)(LOCAL6的初始值是0x00)
004056F7  |.  8B5D D8       |||mov ebx,[local.10]
004056FA  |.  85DB          |||test ebx,ebx
004056FC  |.  74 09         |||je short cm.00405707
004056FE  |.  53            |||push ebx
004056FF  |.  E8 8A100000   |||call cm.0040678E
00405704  |.  83C4 04       |||add esp,0x4
00405707  |>  8B45 D4       |||mov eax,[local.11]
0040570A  |.  50            |||push eax
0040570B  |.  8B5D E8       |||mov ebx,[local.6]
0040570E  |.  85DB          |||test ebx,ebx
00405710  |.  74 09         |||je short cm.0040571B
00405712  |.  53            |||push ebx
00405713  |.  E8 76100000   |||call cm.0040678E
00405718  |.  83C4 04       |||add esp,0x4
0040571B  |>  58            |||pop eax
0040571C  |.  8945 E8       |||mov [local.6],eax
0040571F  |>  58            |||pop eax
00405720  |.  5B            |||pop ebx
00405721  |.  59            |||pop ecx
00405722  |.^ E9 DDFEFFFF   ||\jmp cm.00405604
00405727  |>  83C4 0C       ||add esp,0xC
0040572A  |>  58            ||pop eax
0040572B  |.  5B            ||pop ebx
0040572C  |.  59            ||pop ecx
0040572D  |.^ E9 E0FDFFFF   |\jmp cm.00405512
00405732  |>  83C4 0C       |add esp,0xC
00405735  |.  68 04000080   |push 0x80000004
0040573A  |.  6A 00         |push 0x0
0040573C  |.  8B45 E8       |mov eax,[local.6]
0040573F  |.  85C0          |test eax,eax
00405741  |.  75 05         |jnz short cm.00405748
00405743  |.  B8 884C4800   |mov eax,cm.00484C88
00405748  |>  50            |push eax
00405749  |.  68 01000000   |push 0x1
0040574E  |.  BB 40704000   |mov ebx,cm.00407040
00405753  |.  E8 54100000   |call cm.004067AC                        ;  将LOCAL6转换到整数
00405758  |.  83C4 10       |add esp,0x10
0040575B  |.  68 01030080   |push 0x80000301
00405760  |.  6A 00         |push 0x0
00405762  |.  50            |push eax
00405763  |.  68 01000000   |push 0x1
00405768  |.  BB E0764000   |mov ebx,cm.004076E0
0040576D  |.  E8 3A100000   |call cm.004067AC                        ;  再转换成字节集
00405772  |.  83C4 10       |add esp,0x10
00405775  |.  8945 D4       |mov [local.11],eax                      ;  LOCAL.11 = 到字节集(LOCAL.6(整数型))
00405778  |.  68 05000080   |push 0x80000005
0040577D  |.  6A 00         |push 0x0
0040577F  |.  8B45 D4       |mov eax,[local.11]
00405782  |.  85C0          |test eax,eax
00405784  |.  75 05         |jnz short cm.0040578B
00405786  |.  B8 4E4C4800   |mov eax,cm.00484C4E
0040578B  |>  50            |push eax
0040578C  |.  68 01000000   |push 0x1
00405791  |.  BB F0784000   |mov ebx,cm.004078F0
00405796  |.  E8 11100000   |call cm.004067AC                        ;  再转换成文本
0040579B  |.  83C4 10       |add esp,0x10
0040579E  |.  8945 D0       |mov [local.12],eax
004057A1  |.  8B5D D4       |mov ebx,[local.11]
004057A4  |.  85DB          |test ebx,ebx
004057A6  |.  74 09         |je short cm.004057B1
004057A8  |.  53            |push ebx
004057A9  |.  E8 E00F0000   |call cm.0040678E
004057AE  |.  83C4 04       |add esp,0x4
004057B1  |>  FF75 D0       |push [local.12]                         ; /Arg2 = 00000000
004057B4  |.  FF75 DC       |push [local.9]                          ; |Arg1 = 00000000
004057B7  |.  B9 02000000   |mov ecx,0x2                             ; |
004057BC  |.  E8 53C7FFFF   |call cm.00401F14                        ; \cm.00401F14
004057C1  |.  83C4 08       |add esp,0x8
004057C4  |.  8945 CC       |mov [local.13],eax                      ;  local.9 + local.12(文本链接)
004057C7  |.  8B5D D0       |mov ebx,[local.12]
004057CA  |.  85DB          |test ebx,ebx
004057CC  |.  74 09         |je short cm.004057D7
004057CE  |.  53            |push ebx
004057CF  |.  E8 BA0F0000   |call cm.0040678E
004057D4  |.  83C4 04       |add esp,0x4
004057D7  |>  8B45 CC       |mov eax,[local.13]
004057DA  |.  50            |push eax
004057DB  |.  8B5D DC       |mov ebx,[local.9]
004057DE  |.  85DB          |test ebx,ebx
004057E0  |.  74 09         |je short cm.004057EB
004057E2  |.  53            |push ebx
004057E3  |.  E8 A60F0000   |call cm.0040678E
004057E8  |.  83C4 04       |add esp,0x4
004057EB  |>  58            |pop eax
004057EC  |.  8945 DC       |mov [local.9],eax                       ;  将LOCAL13的值保存到LOCAL9中
004057EF  |.  58            |pop eax
004057F0  |.  5B            |pop ebx
004057F1  |.  59            |pop ecx
004057F2  |.^ E9 59FCFFFF   \jmp cm.00405450
004057F7  |>  83C4 0C       add esp,0xC
004057FA  |.  8B45 DC       mov eax,[local.9]                        ;  这时 eax 就是即将弹出的MessageBox的内容。

这样 流程就清楚了。
其实成功的提示信息就是用注册码2凑出来的。。。
如果将"恭喜成功"分成两部分
则有
//恭喜
第一部分:B2CFA7B9(十进制:2999953337) //对应的注册码:sllllgdddj
//成功
第二部分:A6B9C9B3(十进制:2797193651) //对应的注册码:sjljaldhga

这个对应的注册码是怎么来的我就不说了 循环里已经给出来了。
将这两部分用 '%' 连接 就是sllllgdddj%sjljaldhga
因此注册码2就是sllllgdddj%sjljaldhga(第一部分只能存在一个 第二部分只能存在一个)
补充一下:
在注册码2(基础上)的任意部分开头加入多少p都无所谓。因为循环中写出来了 如果和p相等就直接返回继续循环(不会和asdfghjklp比较)。
在注册码2(基础上)的任意部分加入任意字符(不能和asdfghjklp有相同字符 如果加入'%' 那么必须以'%'分割后的文本和"asdfghjklp"没有相同字符(不包括正确的两部分))都可成功。
比如:
sllllgdddj%sjljaldhga //成功
sllllgdddj%sjljaldhga% //成功
%sllllgdddj%sjljaldhga //成功
滑稽sllllgdddj%sjljaldhga滑稽 //成功
滑稽sllllgdddj%sjljaldhga //成功
sllllgdddj%sjljaldhga滑稽 //成功
测试%sllllgdddj%sjljaldhga //成功
测试%测试sllllgdddj%sjljaldhga //成功
%测试sllllgdddj%sjljaldhga //成功
a%测试sllllgdddj%sjljaldhga //失败
测试%asllllgdddj%sjljaldhga //失败
aa%aasllllgdddj%sjljaldhga //失败
s%llllgdddj%sjljaldhga //失败
sllllgdddj%sjljaldhga%sllllgdddj%sjljaldhga //失败

附一张成功图:
QQ截图20170801221047.jpg

这个CM让我学到许多东西 感谢一下@xh5510 大大。{:1_931:}

说起来还是惭愧。。。玩着玩着竟然放弃了 虽然后来又玩了一遍。。。

点评

可以的!  发表于 2017-8-2 08:36

免费评分

参与人数 40吾爱币 +47 热心值 +38 收起 理由
liphily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
webmarksman + 1 + 1 谢谢@Thanks!
小_Ta + 1 谢谢@Thanks!
FoodieOnTheWay + 2 + 1 图好评!
pp、孩子 + 1 我很赞同!
52破解☆ + 1 + 1 我很赞同!
zamliage + 1 + 1 厉害的楼主!
我是小白123 + 1 + 1 热心回复!
siuhoapdou + 1 + 1 谢谢@Thanks!
剑客文 + 1 + 1 我很赞同!
helloword121 + 1 + 1 谢谢@Thanks!
求助大神 + 1 热心回复!
夜话飘渺 + 1 + 1 用心讨论,共获提升!
南南北北 + 1 + 1 我很赞同!
soyiC + 1 + 1 用心讨论,共获提升!
海天一色001 + 1 + 1 谢谢@Thanks!
SomnusXZY + 1 + 1 谢谢@Thanks!
hackeydg + 1 + 1 我很赞同!
e321456 + 1 + 1 我很赞同!
xyuetao + 1 + 1 用心讨论,共获提升!
Three_fish + 1 + 1 谢谢@Thanks!
sisco + 1 + 1 我很赞同!
DPdp + 1 + 1 我很赞同!
fgh68 + 1 用心讨论,共获提升!
2864095098 + 1 + 1 热心回复!
Sound + 5 + 1 用心讨论,共获提升!
黑龍 + 3 + 1 谢谢@Thanks!
海底总动员 + 1 我很赞同!
流年回忆 + 1 + 1 谢谢@Thanks!
byh3025 + 1 + 1 用心讨论,共获提升!
WYWZ + 1 + 1 谢谢@Thanks!
dlweixiu + 2 + 1 佩服你!没破了,跑几次放弃了。。。
在路上的人 + 1 + 1 谢谢@Thanks!
天游客 + 1 + 1 我很赞同!
KaQqi + 3 + 1 亚麻跌,星斗来了 快跑
a952779523 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wind706 + 1 + 1 谢谢@Thanks!
lengyan5i + 1 + 1 吾爱破解论坛因你更精彩!
Ps出来的小赵 + 2 + 1 厉害了,我的亲……
luckyangman + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

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

Hmily 发表于 2017-8-2 16:45
父子进程这部分挺有意思,加精鼓励一下,完善一下所有过程吧,期待更多分享。

点评

老大帮我把那一个违规去掉吧。。。  发表于 2017-8-2 21:11
头像被屏蔽
a7107925 发表于 2017-8-22 01:47
能帮我破解一个机器码的软件么,软件包下载地址:https://t.cn/RCJeTQf破解后我给你报酬
还有一款软件E盾网络验证的下载地址https://t.cn/RCzG7Yf
破解后加我QQ205352916给你报酬
jackli7758 发表于 2017-8-1 22:32
西交范略 发表于 2017-8-1 22:35
我更喜欢写成psllllgdddj%psjljaldhga的形式

免费评分

参与人数 1热心值 +1 收起 理由
xh5510 + 1 用心讨论,共获提升!

查看全部评分

 楼主| zbnysjwsnd8 发表于 2017-8-1 22:36
本帖最后由 zbnysjwsnd8 于 2017-8-1 22:52 编辑
西交范略 发表于 2017-8-1 22:35
我更喜欢写成psllllgdddj%psjljaldhga的形式

其实有没有p都是可以的
如果有p就被换成0
然后直接返回
不过p只能在每个成员的开头吧。。
是这样么?

免费评分

参与人数 1吾爱币 +1 收起 理由
西交范略 + 1 已答复!

查看全部评分

qiaoqiaota 发表于 2017-8-2 05:15
这个分析让我学到许多东西 感谢一下
qqqmyj 发表于 2017-8-2 09:50
感谢这么详细的分析过程!
 楼主| zbnysjwsnd8 发表于 2017-8-2 11:59
qqqmyj 发表于 2017-8-2 09:50
感谢这么详细的分析过程!

这也算详细吗?
onacp 发表于 2017-8-2 13:03
学习了。很详细
 楼主| zbnysjwsnd8 发表于 2017-8-2 16:57
Hmily 发表于 2017-8-2 16:45
父子进程这部分挺有意思,加精鼓励一下,完善一下所有过程吧,期待更多分享。

谢谢Hmily大大的鼓励。我会继续努力的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-29 16:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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