发信人: 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
==========================================================
==========================================================
--
* Origin: ★ 交通大学资讯科学系 BBS ★