新手超简单找回自信CM01
来个简单的CM。新手找回自信专用.
PS:我编写程序的时候,几次忍不住笑:lol
本帖最后由 zbnysjwsnd8 于 2017-8-12 22:35 编辑
SeriousSnow 发表于 2017-8-11 18:03
看到这样的按钮事件,,我以为是HOOK API结果发现,,好像不是,,,那应该就是有地方修改内存,,然而没发 ...
有个密文 长度是0x12个字节
依次和0x88异或 得到注册码
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:,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的图标(修改后是一个感叹号 原来是一个叉) 然后返回
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:,0xA6B9C9B3 ; 失败 改成 成功
00487BCB C605 4E114000 4>mov byte ptr ds:,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:,eax
00487BDB 8B4C24 58 mov ecx,dword ptr ss:
00487BDF- E9 98BAF8FF jmp CM01.0041367C
然后退出支持库以后 在按钮事件中取出注册码的前7个字节 和"52pojie"比较
004010AA|.C745 FC 00000>mov ,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 ,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, ;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 ,eax
004010FF|.8B5D F8 mov ebx, ;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,
00401112|.50 push eax
00401113|.8B5D FC mov ebx,
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 ,eax
00401127|.68 519B4600 push CM01.00469B51 ;52pojie
0040112C|.FF75 FC push
0040112F|.E8 D0FEFFFF call <CM01.比较文本>
00401134|.83C4 08 add esp,0x8
00401137|.83F8 00 cmp eax,0x0
0040113A|.0F85 35000000 jnz CM01.00401175
不相等提示失败(前面的比较注册码也不会通过)
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")
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的图标也会被更改(修改后是一个感叹号 原来是一个叉)
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 十分尴尬, 我断点断错位置了 报错后OD直接定位到了真码位置.......... 小俊的CM怕是从打开到删除
本帖最后由 zbnysjwsnd8 于 2017-8-11 16:51 编辑
52pojie.cnBy:Xjun 本帖最后由 zbnysjwsnd8 于 2017-8-11 16:52 编辑
唔 可以 是修改支持库
注册码:52pojie.cnBy:Xjun
怎么知道成功与否呢? 你也开始发cm了 看到这样的按钮事件,,我以为是HOOK API结果发现,,好像不是,,,那应该就是有地方修改内存,,然而没发现线程或者时钟,,,,无奈二进制搜索成功,还真搜到了,,,然后还是没啥头绪,就周围内存下访问断点,,看看有没有啥有用的,,然后就发现
上面那块内存会断下来,,看堆栈 编辑框1 还有我的假码都在,,,,,,,然后F9F9F9这就是注册码就一个一个出来了了,,,,我是真的服了,,完全不知道这个是怎么弄的,,稀里糊涂的的找到了注册码,,,,,求楼主告知
zbnysjwsnd8 发表于 2017-8-11 18:10
有个密文 长度是0x12个字节
依次和0x88异或 得到注册码
我去,,,改了支持库,,,,厉害厉害,,, 你这个就是标题党啊,没几个找回自信的到现在。
页:
[1]
2