- UID
- 660
注册时间2005-4-7
阅读权限50
最后登录1970-1-1
感悟天道
TA的每日心情 | 慵懒 2024-10-16 20:38 |
---|
签到天数: 1491 天 [LV.10]以坛为家III
|
发表于 2008-5-1 00:07:09
|
显示全部楼层
楼主给我发消息,让我帮他看看在那下断做内存注册机,跟了一下,有错误的地方请大家指正。
软件解压就能使用,有没有注册表操作没去监控,Aspack2.12加壳,工具脱之。
注册保存在QQ3Sword.ini里
模式
[SOFTREG]
code=注册码
总的来说此软件还是属于明码比较,不过如何通过机器码算出注册码的我也没弄清楚。顺便说一句,楼主以后跟程序要多注意堆栈,有些软件的注册会在堆栈里出现的,比如这个软件就是这样。
在我的机子上就有这个
00111344 00AD1098 ASCII "3203265C5253434B7B402534"
下面的代码粗略地注释了一下,我的汇编也正在学习中,有错误大家请指出。
00411543 . E8 A8000000 CALL unpacked.004115F0
00411548 . 85C0 TEST EAX,EAX ; esp-14为真码
0041154A . 74 6B JE SHORT unpacked.004115B7 ; 跳走提示注册失败
00411543 . E8 A8000000 CALL unpacked.004115F0 跟入
0041160E |. 6A 01 PUSH 1
00411610 |. E8 B59F0200 CALL <JMP.&MFC42.#6334_CWnd::UpdateData>
00411615 |. 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
00411619 |. E8 F2DE0000 CALL unpacked.0041F510
0041161E |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00411622 |. C74424 2C 000>MOV DWORD PTR SS:[ESP+2C],0
0041162A |. E8 719F0200 CALL <JMP.&MFC42.#540_CString::CString>
0041162F |. A1 50334500 MOV EAX,DWORD PTR DS:[453350]
00411634 |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00411638 |. 50 PUSH EAX ; 机器码入栈
00411639 |. 68 540A4500 PUSH unpacked.00450A54 ; ASCII "@%s"入栈
0041163E |. 51 PUSH ECX ; 001113D0 73E086D4 MFC42.73E086D4
0041163F |. C64424 38 01 MOV BYTE PTR SS:[ESP+38],1 ; esp+38置1
00411644 |. E8 FBA00200 CALL <JMP.&MFC42.#2818_CString::Format>
00411649 |. 83C4 0C ADD ESP,0C ; EAX为合并后字符串位数,ECX为“@+机器码”
0041164C |. 8D5424 1C LEA EDX,DWORD PTR SS:[ESP+1C] ; EDX为指向机器码地址指针
00411650 |. 8D4424 10 LEA EAX,DWORD PTR SS:[ESP+10]
00411654 |. 6A 06 PUSH 6
00411656 |. 6A 00 PUSH 0
00411658 |. 52 PUSH EDX
00411659 |. 51 PUSH ECX
0041165A |. 8BCC MOV ECX,ESP
0041165C |. 896424 30 MOV DWORD PTR SS:[ESP+30],ESP
00411660 |. 50 PUSH EAX ; EAX为@+机器码
00411661 |. E8 D09F0200 CALL <JMP.&MFC42.#535_CString::CString>
00411666 |. 8D4C24 30 LEA ECX,DWORD PTR SS:[ESP+30]
0041166A |. 51 PUSH ECX
0041166B |. E8 E0DE0000 CALL unpacked.0041F550 ; F8带此Call真注册会出现在堆栈中,ESP+34
00411670 |. 83C4 08 ADD ESP,8 ; 此处EAX为指向真码的指针的指针
00411673 |. 8BC8 MOV ECX,EAX
00411675 |. C64424 38 02 MOV BYTE PTR SS:[ESP+38],2
0041167A |. E8 ABA20200 CALL <JMP.&MFC42.#4278_CString::Mid>
0041167F |. 8BF8 MOV EDI,EAX ; eax=320326
00411681 |. 8DAE 00050000 LEA EBP,DWORD PTR DS:[ESI+500]
00411687 |. 6A 06 PUSH 6
00411689 |. 8D5424 1C LEA EDX,DWORD PTR SS:[ESP+1C]
0041168D |. 6A 00 PUSH 0
0041168F |. 52 PUSH EDX
00411690 |. 8BCD MOV ECX,EBP
00411692 |. C64424 38 03 MOV BYTE PTR SS:[ESP+38],3
00411697 |. E8 8EA20200 CALL <JMP.&MFC42.#4278_CString::Mid> ; 比较真、假注册的前6位
0041169C |. 8B37 MOV ESI,DWORD PTR DS:[EDI]
0041169E |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004116A0 |> 8A10 /MOV DL,BYTE PTR DS:[EAX] ; eax为注册码前6位
004116A2 |. 8A1E |MOV BL,BYTE PTR DS:[ESI] ; ESI为320326
004116A4 |. 8ACA |MOV CL,DL
004116A6 |. 83CF FF |OR EDI,FFFFFFFF
004116A9 |. 3AD3 |CMP DL,BL
004116AB |. 75 1E |JNZ SHORT unpacked.004116CB
004116AD |. 84C9 |TEST CL,CL
004116AF |. 74 16 |JE SHORT unpacked.004116C7
004116B1 |. 8A50 01 |MOV DL,BYTE PTR DS:[EAX+1]
004116B4 |. 8A5E 01 |MOV BL,BYTE PTR DS:[ESI+1]
004116B7 |. 8ACA |MOV CL,DL
004116B9 |. 3AD3 |CMP DL,BL
004116BB |. 75 0E |JNZ SHORT unpacked.004116CB
004116BD |. 83C0 02 |ADD EAX,2
004116C0 |. 83C6 02 |ADD ESI,2
004116C3 |. 84C9 |TEST CL,CL
004116C5 |.^ 75 D9 \JNZ SHORT unpacked.004116A0
004116C7 |> 33C0 XOR EAX,EAX
004116C9 |. EB 04 JMP SHORT unpacked.004116CF
0041166B |. E8 E0DE0000 CALL unpacked.0041F550 跟入
0041F56C |. C74424 18 000>MOV DWORD PTR SS:[ESP+18],0
0041F574 |. BF 84134500 MOV EDI,unpacked.00451384 ; 可能是字符表 00451384=unpacked.00451384 (ASCII "ProcessJudgerhaha1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ")
0041F579 |. 83C9 FF OR ECX,FFFFFFFF ; 异或
0041F57C |. 33C0 XOR EAX,EAX ; EAX清零
0041F57E |. C74424 24 010>MOV DWORD PTR SS:[ESP+24],1
0041F586 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0041F588 |. F7D1 NOT ECX
0041F58A |. 51 PUSH ECX
0041F58B |. E8 9CC10100 CALL <JMP.&MFC42.#823_operator new>
0041F590 |. 8BE8 MOV EBP,EAX
0041F592 |. BF 74134500 MOV EDI,unpacked.00451374 ; ASCII "ProcessJudger"
0041F597 |. 83C9 FF OR ECX,FFFFFFFF
0041F59A |. 33C0 XOR EAX,EAX
0041F59C |. 83C4 04 ADD ESP,4
0041F59F |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0041F5A1 |. F7D1 NOT ECX
0041F5A3 |. 2BF9 SUB EDI,ECX
0041F5A5 |. 8BC1 MOV EAX,ECX
0041F5A7 |. 8BF7 MOV ESI,EDI
0041F5A9 |. 8BFD MOV EDI,EBP
0041F5AB |. C1E9 02 SHR ECX,2
0041F5AE |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI>
0041F5B0 |. 8BC8 MOV ECX,EAX
0041F5B2 |. 33C0 XOR EAX,EAX
0041F5B4 |. 83E1 03 AND ECX,3
0041F5B7 |. F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
0041F5B9 |. 8B4C24 30 MOV ECX,DWORD PTR SS:[ESP+30] ; esp+30为@+机器码
0041F5BD |. 8BFD MOV EDI,EBP ; edi为ProcessJudger
0041F5BF |. 8B51 F8 MOV EDX,DWORD PTR DS:[ECX-8]
0041F5C2 |. 83C9 FF OR ECX,FFFFFFFF
0041F5C5 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0041F5C7 |. F7D1 NOT ECX
0041F5C9 |. 8BC2 MOV EAX,EDX
0041F5CB |. 49 DEC ECX
0041F5CC |. 33D2 XOR EDX,EDX
0041F5CE |. F7F1 DIV ECX
0041F5D0 |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
0041F5D4 |. 8BDA MOV EBX,EDX
0041F5D6 |. E8 C5BF0100 CALL <JMP.&MFC42.#540_CString::CString>
0041F5DB |. 8B4424 30 MOV EAX,DWORD PTR SS:[ESP+30]
0041F5DF |. 33F6 XOR ESI,ESI
0041F5E1 |. C64424 24 02 MOV BYTE PTR SS:[ESP+24],2
0041F5E6 |. 8B48 F8 MOV ECX,DWORD PTR DS:[EAX-8]
0041F5E9 |. 85C9 TEST ECX,ECX
0041F5EB |. 7E 4D JLE SHORT unpacked.0041F63A
0041F5ED |> 8A1406 /MOV DL,BYTE PTR DS:[ESI+EAX]
0041F5F0 |. 8BFD |MOV EDI,EBP
0041F5F2 |. 83C9 FF |OR ECX,FFFFFFFF
0041F5F5 |. 33C0 |XOR EAX,EAX
0041F5F7 |. F2:AE |REPNE SCAS BYTE PTR ES:[EDI]
0041F5F9 |. F7D1 |NOT ECX ; ProcessJudger位数
0041F5FB |. 885424 14 |MOV BYTE PTR SS:[ESP+14],DL ; 循环将字串 ProcessJudger入esp+14
0041F5FF |. 49 |DEC ECX ; 指针指向ProcessJudger下一位
0041F600 |. 8D041E |LEA EAX,DWORD PTR DS:[ESI+EBX]
0041F603 |. 33D2 |XOR EDX,EDX
0041F605 |. F7F1 |DIV ECX ; 除ECX
0041F607 |. 8B4C24 14 |MOV ECX,DWORD PTR SS:[ESP+14]
0041F60B |. 33C0 |XOR EAX,EAX
0041F60D |. 81E1 FF000000 |AND ECX,0FF
0041F613 |. 8A042A |MOV AL,BYTE PTR DS:[EDX+EBP] ; AL为ASCII码
0041F616 |. 8B5424 10 |MOV EDX,DWORD PTR SS:[ESP+10]
0041F61A |. 33C1 |XOR EAX,ECX
0041F61C |. 50 |PUSH EAX
0041F61D |. 52 |PUSH EDX
0041F61E |. 8D4424 18 |LEA EAX,DWORD PTR SS:[ESP+18]
0041F622 |. 68 6C134500 |PUSH unpacked.0045136C ; ASCII "%s%02X"
0041F627 |. 50 |PUSH EAX
0041F628 |. E8 17C10100 |CALL <JMP.&MFC42.#2818_CString::Format>
0041F62D |. 8B4424 40 |MOV EAX,DWORD PTR SS:[ESP+40]
0041F631 |. 83C4 10 |ADD ESP,10
0041F634 |. 46 |INC ESI
0041F635 |. 3B70 F8 |CMP ESI,DWORD PTR DS:[EAX-8] ; 是否计算完毕
0041F638 |.^ 7C B3 \JL SHORT unpacked.0041F5ED ; 跳回循环
0041F63A |> 55 PUSH EBP ; /ECX为真码,做内存注册机处
0041F63B |. E8 72BF0100 CALL <JMP.&MFC42.#825_operator delete> ; \free
用PYG-keymake1.73内存注册机:
中断地址:0041F63A
中断次数:1
第一字节:55
指令长度:1
注册码栏先内存方式
寄存器:ECX
应楼主的要求下面我们来说说为什么这样设置内存的注册机的各项内容:
1、中断地址:0041F63A
这个地址没什么多说的,主要是要判断程序的算法调用,要找到程序在那句指令执行完后能在寄存器中或堆栈中找到真注册码,当然是要明码比较的,不过有的分段计算的注册码也能通过多次中断得到。这个中断地址我用了半个小时左右跟到的,所以借用Fly前辈说的话:“基础很重要!”
2、中断次数:1
这个次数就象上面我说的,如果注册码是分断计算的,则就要用到多次中断才能得到完整的注册,比如2次、3次、5次
3、第一字节:55
第一字节就是你要中断的指令的第一个字节,用来给Keymake定位用。本程序只有一个Push指令“ 55 PUSH EBP”,所以就是55。
4、指令长度:1
这里的指令长度指的是你所要中断的这行指令的长度2个16进制数为1个指令长度。
5、注册码栏选内存方式
这里的内存方式是指注册码不是直接存放在寄存器中的,而是在内存的某个地址中,而指向这个地址的指针存放在寄存器中,想要使用Keymake取到这样的注册就得用内存方式。如果注册码是以十进制或十六进制方式直接存放在寄存器时,就用寄存器方式即可。
如图,我中断的地方注册码没有直接存放在寄存器ECX中,而是存放的指向注册码的一个内存地址。
6、寄存器:ECX
中断地址后,注册码或指向注册码的内存地址在那个寄存器中就选那个。
注册成功,如图
注册信息保存在:
注册机我就不发了,楼主自己试试看,弄好了发上来!:loveliness:
[ 本帖最后由 xbb[DFCG] 于 2008-5-1 00:23 编辑 ] |
|