本帖最后由 zbnysjwsnd8 于 2017-8-12 22:35 编辑
有个密文 长度是0x12个字节
依次和0x88异或 得到注册码
[Asm] 纯文本查看 复制代码 00487AB2 B9 12000000 mov ecx,0x12
00487AB7 BA AC7B4800 mov edx,CM01.00487BAC
00487ABC 83F9 00 cmp ecx,0x0
00487ABF 74 07 je short CM01.00487AC8
00487AC1 8032 88 xor byte ptr ds:[edx],0x88
00487AC4 42 inc edx ; CM01.<ModuleEntryPoint>
00487AC5 49 dec ecx ; CM01.<ModuleEntryPoint>
00487AC6 ^ EB F4 jmp short CM01.00487ABC
异或后:
出现的52pojie.cnBy:Xjun就是注册码
然后计算出的注册码和用户输入的注册码比较
如果不相等则直接返回
相等的话就把第二个提示的MessageBox("注册失败")中的"失败"改成"成功" 再更改一下MessageBox的图标(修改后是一个感叹号 原来是一个叉) 然后返回
[Asm] 纯文本查看 复制代码 00487AC8 68 AC7B4800 push CM01.00487BAC ; 计算出的注册码
00487ACD 50 push eax ; 用户输入的注册码
00487ACE E8 2E000000 call CM01.00487B01 ; 文本比较 相等返回0
00487AD3 83F8 00 cmp eax,0x0
00487AD6 0F84 E5000000 je CM01.00487BC1
00487BC1 C705 5D9B4600 B>mov dword ptr ds:[0x469B5D],0xA6B9C9B3 ; 失败 改成 成功
00487BCB C605 4E114000 4>mov byte ptr ds:[0x40114E],0x40
00487BD2 83C4 08 add esp,0x8
00487BD5 90 nop
00487BD6 90 nop
00487BD7 90 nop
00487BD8 61 popad
00487BD9 8901 mov dword ptr ds:[ecx],eax
00487BDB 8B4C24 58 mov ecx,dword ptr ss:[esp+0x58]
00487BDF - E9 98BAF8FF jmp CM01.0041367C
然后退出支持库以后 在按钮事件中取出注册码的前7个字节 和"52pojie"比较
[Asm] 纯文本查看 复制代码 004010AA |. C745 FC 00000>mov [local.1],0x0
004010B1 |. 6A FF push -0x1
004010B3 |. 6A 08 push 0x8
004010B5 |. 68 03000116 push 0x16010003 ; 编辑框1
004010BA |. 68 01000152 push 0x52010001
004010BF |. E8 4E010000 call CM01.00401212 ; jmp to <CM01.控件属性获取>(这里就被修改了 获取注册码)
004010C4 |. 83C4 10 add esp,0x10
004010C7 |. 8945 F8 mov [local.2],eax
004010CA |. 68 01030080 push 0x80000301
004010CF |. 6A 00 push 0x0
004010D1 |. 68 07000000 push 0x7
004010D6 |. 68 04000080 push 0x80000004
004010DB |. 6A 00 push 0x0
004010DD |. 8B45 F8 mov eax,[local.2] ; kernel32.BaseThreadInitThunk
004010E0 |. 85C0 test eax,eax
004010E2 |. 75 05 jnz short CM01.004010E9
004010E4 |. B8 509B4600 mov eax,CM01.00469B50
004010E9 |> 50 push eax
004010EA |. 68 02000000 push 0x2
004010EF |. BB 70124000 mov ebx,<CM01.取文本左边>
004010F4 |. E8 13010000 call CM01.0040120C ; jmp to <CM01.调用核心支持库>
004010F9 |. 83C4 1C add esp,0x1C
004010FC |. 8945 F4 mov [local.3],eax
004010FF |. 8B5D F8 mov ebx,[local.2] ; kernel32.BaseThreadInitThunk
00401102 |. 85DB test ebx,ebx
00401104 |. 74 09 je short CM01.0040110F
00401106 |. 53 push ebx
00401107 |. E8 FA000000 call CM01.00401206 ; jmp to <CM01.释放变量空间>
0040110C |. 83C4 04 add esp,0x4
0040110F |> 8B45 F4 mov eax,[local.3]
00401112 |. 50 push eax
00401113 |. 8B5D FC mov ebx,[local.1]
00401116 |. 85DB test ebx,ebx
00401118 |. 74 09 je short CM01.00401123
0040111A |. 53 push ebx
0040111B |. E8 E6000000 call CM01.00401206 ; jmp to <CM01.释放变量空间>
00401120 |. 83C4 04 add esp,0x4
00401123 |> 58 pop eax ; kernel32.75DA38F4
00401124 |. 8945 FC mov [local.1],eax
00401127 |. 68 519B4600 push CM01.00469B51 ; 52pojie
0040112C |. FF75 FC push [local.1]
0040112F |. E8 D0FEFFFF call <CM01.比较文本>
00401134 |. 83C4 08 add esp,0x8
00401137 |. 83F8 00 cmp eax,0x0
0040113A |. 0F85 35000000 jnz CM01.00401175
不相等提示失败(前面的比较注册码也不会通过)
[Asm] 纯文本查看 复制代码 00401175 |> \6A 00 push 0x0
00401177 |. 6A 00 push 0x0
00401179 |. 6A 00 push 0x0
0040117B |. 68 01030080 push 0x80000301
00401180 |. 6A 00 push 0x0
00401182 |. 68 10000000 push 0x10
00401187 |. 68 04000080 push 0x80000004
0040118C |. 6A 00 push 0x0
0040118E |. 68 599B4600 push CM01.00469B59 ; 注册失败!
00401193 |. 68 03000000 push 0x3
00401198 |. BB 90134000 mov ebx,<CM01.系统核心支持库.未知命令>
0040119D |. E8 6A000000 call CM01.0040120C ; jmp to <CM01.调用核心支持库>
004011A2 |. 83C4 28 add esp,0x28
否则的话提示失败(用户输入的注册码的前七个字节是"52pojie" 但是剩下的部分不是".cnBy:Xjun")
[Asm] 纯文本查看 复制代码 00401140 |. 6A 00 push 0x0
00401142 |. 6A 00 push 0x0
00401144 |. 6A 00 push 0x0
00401146 |. 68 01030080 push 0x80000301
0040114B |. 6A 00 push 0x0
0040114D |. 68 10000000 push 0x10
00401152 |. 68 04000080 push 0x80000004
00401157 |. 6A 00 push 0x0
00401159 |. 68 599B4600 push CM01.00469B59 ; 注册失败!
0040115E |. 68 03000000 push 0x3
00401163 |. BB 90134000 mov ebx,<CM01.系统核心支持库.未知命令>
00401168 |. E8 9F000000 call CM01.0040120C ; jmp to <CM01.调用核心支持库>
0040116D |. 83C4 28 add esp,0x28
如果用户输入的注册码的前七个字节是"52pojie" 并且剩下的部分是".cnBy:Xjun" 那么在前面就会将"失败"改成"成功" MessageBox的图标也会被更改(修改后是一个感叹号 原来是一个叉)
[Asm] 纯文本查看 复制代码 00401140 |. 6A 00 push 0x0
00401142 |. 6A 00 push 0x0
00401144 |. 6A 00 push 0x0
00401146 |. 68 01030080 push 0x80000301
0040114B |. 6A 00 push 0x0
0040114D |. 68 40000000 push 0x40
00401152 |. 68 04000080 push 0x80000004
00401157 |. 6A 00 push 0x0
00401159 |. 68 599B4600 push CM01.00469B59 ; 注册成功!
0040115E |. 68 03000000 push 0x3
00401163 |. BB 90134000 mov ebx,<CM01.系统核心支持库.未知命令>
00401168 |. E8 9F000000 call CM01.0040120C ; jmp to <CM01.调用核心支持库>
0040116D |. 83C4 28 add esp,0x28 |