发信人: heibow.bbs@bbs.cis.nctu.edu.tw (空中云雀), 信区: hacker 标 题: 破Screens95V2。0 之二 发信站: 交大资科_BBS (Thu Jun 26 16:45:14 1997) 转信站: csmcbbs!news.cis.nctu!cis_nctu Origin: 140.129.42.94 有一件事想请教高手 请问这用C/C++如何写呢? 这是用组语比较好写啦 那请问用C/C++呢? 如shl , shr ,rol, ror,EAX,EDI, 那些指令要如何用C/C++写呢 我以前基础不好 C/C++ 组语 都只懂得皮毛而已 或有没有这类的书可参考呢 访间一般的书好像都没有耶 请指导一下小弟吧 谢谢! 再来我要讲的是screens 95 v2.0 的注册机制作 这是承袭上一篇的文章 已知道注册码有三段,只有第一段是依照name产生的 以下就是如何产生第一段的那三个英文字 例如说我 name 输入 TRACY name一定要输入中文,中间不能有空白,或数字 MOV EAX,[ebp-24H] ; 把T给eax, eax=00000054 cs:10001f4b MOV ECX,[ebp-20H] ; 把R给ecx, ecx=00000052 SHL ECX,4 ; ecx=00000520 SHL EAX,10 ; eax=00540000 OR ECX,[ebp-1C] ; ecx OR " A " ; 520 OR 41 = ecx=00000561 SHL ECX,4 ; ecx=00005610 OR ECX,[ebp-18] ; ecx OR " C " ; 5610 OR 43 =ECX=00005653 SHL ECX,4 ; ECX = 00056530 OR ECX,EAX ; ECX = 00556530 OR ECX,[ebp-14] ; ECX OR " Y " ; ECX =00556579 MOV EAX,ECX ; EAX=ECX=00556579 SHR EAX ,10 ; EAX=00000055 ; 第一个字出来了 是 U MOV [ebp-24],EAX ; 使 T 变 U XOR EAX,EAX ; eax=0 MOV AL,CH ; EAX=00000065 AND ECX,0000000FF ; ECX=00000079 MOV [ebp-20],EAX MOV [ebp-1C],ECX cs:10011f80 LEA ECX,[ebp-24] cs:10011f83 LEA EAX,[ebp-18] CMP ECX,EAX JAE 10001fa0 CMP DWORD PTR [ECX],5AH JLE 10001f9b cs:10001f8f MOV EAX,[ECX] SUB EAX,1A MOV [ECX],EAX CMP EAX,5A ; 5AH 是" Z " ,比Z大就减1AH JG 10001F8F cs:10001f9b ADD ECX,4 cs:10001f9e JMP 10001F83 cs:10001fa0 push 4 此时[ebp-24],[ebp-20],[ebp-1C] 就是放注册码的前三个字了 以下就是我写的注册码仅供参考 是因为算法还不会很复杂,我才有办法写 有些软体很复杂 我就写不出来了 所以可如下组译 以下只是范例,不一定要如此写 ========================================================== ..386 STACK SEGMENT STACK DW 1024 DUP(?) STACK ENDS DATA SEGMENT NEWLINE DB 0DH,0AH,'$' MSG1 DB '这是Screens 95 v2.0注册机,',0dh,0ah MSG4 DB 'This program can show Chinese. Do you see Chinese ?',0dh,0ah msg2 db '请输入您的英文名字,至少要五个字,不能有空白',0dh,0ah,'$' NAME1 DB 'TabcRdefA C Y FECDBA9876543210$' MSG3 DB '注册码是 ' CODE1 DB '111-1234-56786CCE$' DATA ENDS CODE SEGMENT USE16 PROG PROC FAR ASSUME CS:CODE , DS:DATA , SS:STACK PUSH DS MOV AX,0 PUSH AX MOV AX , DATA MOV DS , AX MOV ES , AX LEA DX,MSG1 MOV AH,9 int 21h CLD LEA ESI,NAME1 MOV CX,25H INITIAL: MOV BYTE PTR [ESI],0 INC ESI LOOP INITIAL MOV AH,1 LEA EDI,NAME1 MOV BL,0 READ: INT 21H CMP AL,0DH JE READ_OVER CMP AL,60H JB NOUPCASE SUB AL,20H NOUPCASE: CMP BL,5 JA READ STOSB INC BL ADD EDI,3 JMP READ READ_OVER: CLD LEA EDI,CODE1 LEA DX,NEWLINE MOV AH,9 INT 21H LEA ESI,NAME1+24H MOV EAX,[ESI-24H] MOV ECX,[ESI-20H] SHL ECX,4 SHL EAX,10H OR ECX,[ESI-1CH] SHL ECX,4 OR ECX,[ESI-18H] SHL ECX,4 OR ECX,EAX OR ECX,[ESI-14H] MOV EAX,ECX SHR EAX ,10H ; FIRST---------------------- MOV [ESI-24H],EAX XOR EAX,EAX MOV AL,CH AND ECX,0000000FFH MOV [ESI-20H],EAX MOV [ESI-1CH],ECX LEA ECX,[ESI-24H] ANOTHER1: LEA EAX,[ESI-18H] CMP ECX,EAX JAE FINISH CMP DWORD PTR [ECX],5AH JLE ANOTHER CHANGE: MOV EAX,[ECX] SUB EAX,1AH MOV [ECX],EAX CMP EAX,5AH JG CHANGE ANOTHER: ADD ECX,4 JMP ANOTHER1 FINISH: LEA EAX,[ESI-10H] CLD LEA SI,NAME1 LEA DI,CODE1 MOV CL,3 LOAD1: LODSB STOSB ADD SI,3 LOOP LOAD1 MOV AH,9 LEA EDX,MSG3 INT 21H OVER: RET PROG ENDP CODE ENDS END PROG ==========================================================