前言
这篇文章是自己在专升本录取~本科开学前学习记录,破解软件的学习在2022年4月 - 2022年5月,汇编学习时间大约为2022年7月 - 2022年9月,我将往期上传的博文整理为一篇文章,作为归纳总结。
以后若继续学习相关领域,此文会更新。
文章目录
- 前言
 - 一、破解
 - 1.OD软件界面基本介绍
 - 2. 破解软件实战
 
- 二、汇编
 - 1.计算123*236(十进制)结果存放在AX中
 - 2.用编程求FFFF:0到FFFF:F字节型数据的和,结果存放在dx中
 - (1) 代码
 - (2)debug关键步骤
 
- 3.将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 0:200 ~ 0:20F 中
 - (1)代码
 - (2)改进
 - (3)改进
 
- 4.向内存0:200 ~ 0:23F 依次传送数据 0~63(3FH),只能使用9条指令 20:00 3f
 - 5.编程计算下面8个数据的和,结果放在ax寄存器中
 - 6.(章节7.10) 不同寻址方式的灵活应用
 - (1)将datasg段中每个单词改为大写字母
 - (2)将datasg段中每个单词的前4个字母改为大写字母
 - (3)(章节8.6)寻址方式的综合应用
 
- 7.(章节8.7).div
 - 8.用div计算data段中的第一个数据除以第二个数据,商存放在第三个数据的存储单元中
 - 9.(章节8.9)dup指令
 
- 总结
 
一、破解
时间:2022年4月15日
1.OD软件界面基本介绍

 本章链接:OD零基础入门教程_哔哩哔哩_bilibili
 OD:即ollydbg
前言:本节是软件的基本介绍,以图片+注释的方式作为笔记。
放到这里,可供跟我一样的小白一块参考。
祝愿一起进步。
 
 
 
 

2. 破解软件实战
 教程点击此处
补充知识:
 1.搜索关键字方法
 插件 -> 中文搜索引擎 -> ASCLL -> ctrl+F
右击 -> 二进制 -> nop填充
右击 -> 复制到可执行文件 ->全部复制
右击弹出来的窗口 -> 保存。
有壳的只能做补丁,
没壳的可以保存。
二、汇编
时间:2022年7月~2022年9月
1.计算123*236(十进制)结果存放在AX中
assume cs:code
code segment
;用编程进行加法计算123*236(十进制)结果存放在AX中
;eg: 10*3 = 10 + 10 + 10
	mov ax,123	;设置为123合适 cs即循环次数
				;循环次数少时间复杂度低
	mov cx,ax
	mov ax,0
addNumber:	
	add ax,236
	loop addNumber
	
	mov ax,4c00h
	int 21h
	
code ends
end
 
2.用编程求FFFF:0到FFFF:F字节型数据的和,结果存放在dx中
(1) 代码
assume cs:code
code segment
;	用编程求FFFF:0到FFFF:F字节型数据的和,
;结果存放在dx中
;1.做好初始化。即使默认为0
;2.注意数据从哪里来,到哪里去
	mov ax,0ffffh	
	mov ds,ax	;数据来源
	mov bx,0	;偏移地址
	
	mov dx,0	
	mov cx,16 	;循环16次
	
	mov ax,0	;ah=0,al读取字节型数据,ax与dx相加
	
	addNumber:
	mov al,ds:[bx]	;取数据
	add dx,ax
	inc bx
	loop addNumber
	mov ax,4c00h
	int 21h
	
code ends
end
 
0588h
(2)debug关键步骤

 
 
 
3.将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 0:200 ~ 0:20F 中
(1)代码
assume cs:code
code segment
;	将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 
;	0:200 ~ 0:20F 中
;	分析:目标地址可看做段地址20h,偏移地址0~f
	mov bx,0	;偏移地址
	
	mov dx,0	
	mov cx,16 	;循环16次
	
	
	
	addNumber:
	mov ax,0ffffh	
	mov ds,ax	;数据来源
	mov dx,ds:[bx]	;取数据
	
	mov ax,20h
	mov ds,ax
	mov ds:[bx],dx
	inc bx
	
	loop addNumber
	mov ax,4c00h
	int 21h
	
code ends
end
 

(2)改进
上面需要不断地修改段地址寄存器,是一种很浪费CPU的操作
assume cs:code
code segment
;	将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 
;	0:200 ~ 0:20F 中
;	分析:目标地址可看做段地址20h,偏移地址0~f
;	es寄存器和数据相关
;	习惯:
;	ds代表数据来源,es代表数据去向
	
	mov ax,0ffffh	
	mov ds,ax	;数据来源
	
	mov ax,20h
	mov es,ax
	
	mov bx,0	;偏移地址
	
	mov cx,16 	;循环16次
	
	
	
	addNumber:
	mov dl,ds:[bx]	
	mov es:[bx],dl
	inc bx
	
	loop addNumber
	mov ax,4c00h
	int 21h
	
code ends
end
 

(3)改进
前面是用字节形数据,现在是用字形数据,循环8次,比原先减少了一半。
assume cs:code
code segment
;	将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 
;	0:200 ~ 0:20F 中
;	分析:目标地址可看做段地址20h,偏移地址0~f
;	es寄存器和数据相关
;	习惯:
;	ds代表数据来源,es代表数据去向
	
	mov ax,0ffffh	
	mov ds,ax	;数据来源
	
	mov ax,20h
	mov es,ax
	
	mov bx,0	;偏移地址
	
	mov cx,8 	;循环8次
	
	
	
	addNumber:
	mov dx,ds:[bx]	
	mov es:[bx],dx
	;push ds:[bx]
	;pop es:[bx]
	add bx,2
	
	loop addNumber
	mov ax,4c00h
	int 21h
	
code ends
end
 

4.向内存0:200 ~ 0:23F 依次传送数据 0~63(3FH),只能使用9条指令 20:00 3f
assume cs:code
code segment
;向内存0:200 ~ 0:23F 依次传送数据 0~63(3FH)
;只能使用9条指令 20:00 3f 
	
	mov ax,20h
	mov ds,ax
	mov bl,0h
	mov cx,64
	
	
	Number:	mov ds:[bx],bl
	inc bl
	loop Number
	
	
	mov ax,4c00h
	int 21h
	
code ends
end
 

5.编程计算下面8个数据的和,结果放在ax寄存器中
assume cs:code
code segment
;编程计算下面8个数据的和,结果放在ax寄存器中
1,2,3,4,5,6,7,8
	dw 1,2,3,4,5,6,7,8
	
	
start:	mov bx,0
	mov ax,0
	
	mov cx,8
	
	addNumber:
	add ax,cs:[bx]
	add bx,2
	loop addNumber
	mov ax,4c00h
	int 21h
	
code ends
end start
 

6.(章节7.10) 不同寻址方式的灵活应用
(1)将datasg段中每个单词改为大写字母
assume cs:codesg,ds:datasg
datasg segment
	db 'file            '
	db 'edit            '
	db 'sear            '
	db 'view            '
	db 'view            '
	
	dw 0	;50h
datasg ends
codesg segment
start:
	mov ax,datasg
	mov ds,ax
	
	mov cx,5
	mov bx,0
	
upRow:	
	mov ds:[50h],cx
	mov si,0
	mov cx,4
	
upletter:
		mov al,[bx+si]
		and al,11011111b
		mov [bx+si],al
		inc si
		loop upletter
		
	mov cx,ds:[50h]
	add bx,16
	loop upRow
	
	
	
	mov ax,4c00h
	int 21h
	
codesg ends
end start
	
 
以栈的方式
assume cs:codesg,ds:datasg
datasg segment
	db 'file            '
	db 'edit            '
	db 'sear            '
	db 'view            '
	db 'view            '
	
datasg ends
stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
stack ends
codesg segment
start:
	mov ax,stack
	mov ss,ax
	mov sp,32
	
	
	mov ax,datasg
	mov ds,ax
	
	mov cx,5
	mov bx,0
	
upRow:	
	push cx	;保存到栈中
	mov ds:[50h],cx
	mov si,0
	mov cx,4
	
upletter:
		mov al,[bx+si]
		and al,11011111b
		mov [bx+si],al
		inc si
		loop upletter
		
	pop cx
	add bx,16
	loop upRow
	
	
	
	mov ax,4c00h
	int 21h
	
codesg ends
end start
	
 

 
 
(2)将datasg段中每个单词的前4个字母改为大写字母
assume cs:code,ss:stack,ds:data
stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
stack ends
data segment
	db '1. display      '
	db '2. brows        '
	db '3. replace      '
	db '4. modify       '
data ends
code segment
	start:
	mov ax,stack
	mov ss,ax
	mov sp,32
	
	mov ax,data
	mov ds,ax
	
	mov bx,0
	mov cx,4
	
upRow:
	push cx
	mov cx,4
	mov si,0
	
upLetter:	mov al,ds:[bx+3+si]
			and al,11011111b
			mov ds:[bx+3+si],al
			inc si
			loop upLetter
	pop cx
	add bx,16
	loop upRow
code ends
end start
 

 
 
(3)(章节8.6)寻址方式的综合应用
assume cs:code,ss:stack,ds:data
data segment
	
	db 'DEC'
	db 'Ken Olsen'
	dw 137		;排名 ->38		;12
	dw 40		;收入 -> 110	;14	
	db 'POP'	;著名产品->VAX	;16
data ends
stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
stack ends
code segment
	start:	mov ax,stack
			mov ss,ax
			mov sp,32
			
			mov ax,data
			mov ds,ax
			
			mov bx,0
			mov word ptr ds:[bx+12],38
			add word ptr ds:[bx+14],70
			mov si,0
			mov byte ptr ds:[bx+16+si],'V'
			inc si
			mov byte ptr ds:[bx+16+si],'A'
			inc si
			mov byte ptr ds:[bx+16+si],'X'
			
code ends
end start
 
7.(章节8.7).div
assume cs:code,ss:stack,ds:data
data segment
	db 6Ah,18h,0,01h
	db 3,0,0,0
	db 0,0,0,0
	db 0,0,0,0
data ends
stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
stack ends
code segment
	start:
		mov ax,stack
		mov ss,ax
		mov sp,32
		
		mov ax,data
		mov ds,ax
		
		;除数是8位
		;1.
		;mov ax,16
		;mov bl,3
		;div bl			;AX=0105H
		
		;2.
		;mov ax,16
		;div byte ptr ds:[0] ;AX=0105H
			
		;除数是16位
		;1.
		;mov ax,ds:[0]
		;mov dx,ds:[2]
			
		;mov bx,3
		;div bx		;AX=0005H  DX=0001H(余数)
		
		;2.
		;div word ptr ds:[4]	;AX=0005H  DX=0001H(余数)
		
		;习题:计算100001(186A1H) / 100(64H)
		;mov dx,1
		;mov ax,86A1h
		
		;mov bx,100
		
		;div bx
			
		;习题:计算1001 / 100
		;mov ax,1001
		;mov bl,100
		;div bl
		
		mov ax,1001
		mov bx,256
		div bx
			
code ends
end start
 

8.用div计算data段中的第一个数据除以第二个数据,商存放在第三个数据的存储单元中
assume cs:code,ds:data,ss:stack
;用div计算data段中的第一个数据除以第二个数据,商存放在第三个数据的存储单元中
data segment
	dd 100001
	dw 100
	dw 0
data ends
stack segment
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
	dw 0,0,0,0
stack ends
code segment
start:
	mov ax,stack
	mov ss,ax
	mov sp,32
	
	mov ax,data
	mov ds,ax
	
	mov ax,ds:[0]
	mov dx,ds:[2]
	div word ptr ds:[4]
	mov ds:[6],ax
	
	mov ax,4c00h
	int 21h
	
code ends
end start
 

9.(章节8.9)dup指令

 
 
 
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。



















