做好镜像之后,f2进入bios,修改启动项,然后重启,之后进入安装页面,先修改时区,然后最重要的就是分区,如果之前的硬盘上面有系统的话,要将其分区删除,然后重新划分分区,这样的话才能生效,而且在划分分区的时候一定要注意文件格式(很重要),然后安装就行(记得配图)
1.配置物理网卡(修改物理网卡为ethX名字)
vi /etc/default/grub
将“net.ifnames=0 biosdevname=0 ”写入到GRUBCMDLINELINUX:GRUB_CMDLINE_LINUX=”crashkernel=auto net.ifnames=0 biosdevname=0 rhgb quiet”
2.分情况执行相应命令,引导为Legacy或UEFI,在boot界面可查看引导方式:
Legacy:grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI:grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
3.然后将/etc/sysconfig/network-scripts/目录下的ifcfg-XXX xxx为原来的网卡名。像网卡名为ifcfg-en1s1pf0这样的,重命名为ifcfg-eth0。
mv ifcfg-en1s1pf0 ifcfg-eth0
ifcfg-en1s1pfX 重命名为ifcfg-ethX, X为数字。
修改这这些配置文件名,将里面旧网卡名改为ethX。然后重启服务器。
centos默认的是没有自动开启网络,所以要配置IP地址,网关和DNS
cd /etc/sysconfig/network-scripts/
网线插在eth0上就修改ifcfg-eth0,vi ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
IPADDR=172.20.16.17
NETMASK=255.255.0.0
NETWORK=172.20.0.0
GATEWAY=172.20.1.1
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=f91ff0db-7c64-4dae-b9d8-d54686af7cef
DEVICE=eth0
ONBOOT=yes
DNS1=180.76.76.76
DNS2=114.114.114.114
重启网络:systemctl restart network或者service network restart或者/etc/init.d/network restart
参考链接:https://www.osyunwei.com/archives/7829.html
连接Xshell:其实用XShell更好一点,可以开着虚拟机然后XShell连,更改sshd_config文件使得远程能连接上,PermitRootLogin yes那个选项把前面的/#号去掉
关闭防火墙:systemctl disable firewalld.service
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
然后yum update
要想使用ifconfig和route可以通过两条指令
yum install net-tools#安装 infconfig
yum install traceroute#安装 traceroute
安装:pip
pip不在centos的yum源里面,先安装epel源:
1.安装rpm包:yum -y install epel-release
2.查看并更新源:文件在/etc/yum.repos.d文件夹下面,两个repo文件
更新源:yum clean all && yum makecache
然后安装pip:yum install python-pip
另:查看防火墙的状态并关闭,centos7以上:firewall-cmd –state
或者用:systemctl status firewalld.service
关闭:systemctl stop firewalld.service
禁止开机启动:systemctl disable firewalld.service
GDB, the GNU Project debugger, allows you to see what is going on `inside’ another program while it executes – or what another program was doing at the moment it crashed.
g++相关:https://www.cnblogs.com/lidan/archive/2011/05/25/2239517.html
基本指令:
list/l | 列出源代码(十行) |
---|---|
next/n | 跳过直接执行不进入函数内部(像OD里面的F8) |
step/s | 进入函数体(像OD里面的F7) |
si | 一条一条指令单步的调试 |
backtrace/bt | 查看函数调用的栈帧,可以看到栈帧号 |
info/i | 查看函数局部变量值,一般可写i locals 也可以先bt然后再输入i locals 还可以f [栈帧号]然后i locals看这个函数里面的局部变量值 |
info registers | 可以显示所有寄存器的当前值 |
frame/f [栈帧号] | 可产看其他函数体的局部变量值,配合i locals使用 |
finish | 结束 |
set $var | 修改变量值 |
display $var | 每次停下的时候显示var值,使用undisplay取消 |
break [行号] | 在某行设置断点 i breakpoints 显示断点信息 delete breakpoints [号] 删除断点,不加断点号就是删除所有 disable breakpoints [号] 禁用某个断点,不加断点号就是禁用所有 |
continue | 继续运行 |
run | 执行 |
x | 查看输入 x/7b input表示每个字节一组(b),7表示打印7组 |
watch | 设置观察点 例如watch input[i] 每次运行查看input数组里面i的值 i watch查看设置了哪些断点 |
p | print,p $esp 可以打印寄存器中的值 |
gcc -c 目标文件 | 将.c文件编译成.o文件,也就是目标文件 |
ar rs | 打包静态库,用法ar rs 静态库名 1.o 2.o …ar 命令类似于tar 命令,起一个打包的作用,但是把目标文件打包成静态库只能用ar 命令而不能用tar 命令。选项r 表示将后面的文件列表添加到文件包,如果文件包不存在就创建它,如果文件包中已有同名文件就替换成新的。s 是专用于生成静态库的,表示为静态库创建索引,这个索引被链接器使用。 |
ranlib | ar r 之后,再ranlib 静态库名等同于上面的指令 |
gcc -print-search-dirs | 查看默认目录 |
gcc -c -fPIC *.c | 编译共享库的时候要加上fPIC选项 |
gcc -S main.c | 生成汇编文件 |
gcc -c main.s | 生成目标文件 |
一些注意事项:1.如果某个函数的变量发生越界错误,可能不会立刻发生错误,而是在函数返回时产生段错误
]]>官网地址:https://moosefs.com/
官网的介绍:
MooseFS is a Fault-tolerant, Highly available, Highly performing, Scaling-out, Network distributed file system. It spreads data over several physical commodity servers, which are visible to the user as one virtual disk. It is POSIX compliant and acts like any other Unix-like file system supporting:
- Hierarchical structure: Files and Folders,
- File attributes,
- Special files: Pipes, Sockets, Block and Character devices,
- Symbolic and Hard links,
- Security attributes and ACLs.
It works with all applications that require a standard file system.
CSDN有博客介绍:
MooseFS是一个分布式存储的框架,它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源。MFS也像其他类unix文件系统一样,包含了层级结构(目录树),存储着文件属性(权限,最后访问和修改时间),可以创建特殊的文件(块设备,字符设备,管道,套接字),符号链接,硬链接。其具有如下特性:
MooseFS工作原理和设计架构:
管理服务器 Manager server(master) | 负责各个数据存储服务器的管理,文件读写调度,文件空间回收及恢复,多节点拷贝 |
---|---|
元数据日志服务器 Metalogger server(metalogger) | 负责备份master服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在master server出问题的时候接替其进行工作 |
数据存储服务器 Data servers(chunkservers) | 负责联系管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输 |
客户机挂载使用 Client computers | 通过fuse内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地unix文件系统使用一样的效果 |
安装过程中,将master、chunkserver与client装在一台,metalogger装在另一台
接下来图片展示过程:
官网有安装过程:https://moosefs.com/download/#current
跟着官网文档走,先下载文件系统:
然后将这句写到/etc/apt/source.list.d/moosefs.list里面,然后更新
安装好之后etc会出现mfs文件夹,进去可以看到很多文件
修改mfsexport.cfg如下:
然后修改host如下:
然后启动,下图中可以看到各个板块的端口号
使用指令netstat -ntpl | grep mfs
查看与master的连接
启动之后在浏览器里面就可以使用IP:192.168.213.140:9245
看master
修改mfsmetalooger.cfg:
注意:如果安装在不同的机器,一定要配置/etc/hosts同上
先安装: apt install moosefs-chunkserver
继续修改mfschunkserver.cfg
修改mfshdd.cfg文件,mfshdd.cfg定义了chunkserver的数据存放目录,将目录设置为/data/mfs/ (前提是这个目录已经存在,因此需要手动创建此目录)
注意:如果安装在不同的机器,一定要配置/etc/hosts同上
先安装:
修改mfsmount.cfg
然后启动:
然后进行客户端挂载:
然后可以在网站看:
首页
server:
disk:
]]>参考链接:搭建:https://www.cnblogs.com/manger/p/7212110.html
https://www.linuxidc.com/Linux/2015-09/122621.htm
官网:https://moosefs.com/download/#current
常见问题:https://www.linuxidc.com/Linux/2013-06/85752.htm
cp:cp -rf /var/cos/* /root
把var/cos下所有东西拷贝到root下
scp:scp [-r或者其他参数][文件名或文件夹名] [root@IP:/文件路径]
跨机器传输
新建文件夹:单级:mkdir [文件名]
多级:mkdir -p [文件名]
创建文件:touch [文件名+扩展名]
,rm [文件名]
移动文件:mv
删除文件:单个文件:rm [文件名]
(删文件夹要rmdir [文件名]
) 删除目录及目录所有文件和子目录:rm -rf [文件名]
查看文件类型:file [文件名]
查找指令:
find -name/-type filename
find -type f -mmin -10
所有过去10分钟更新过的普通文件,不加-type f
则搜索普通文件+特殊文件+目录locate
是find -name
的另外一种写法locate
快很多,因为只搜索/var/lib/locatedb
,这个数据库中包含了本地所有文件信息locate /etc/sh
,搜索etc下所有sh开头的文件locate ~/m
,搜索所有m开头的文件locate -i ~/m
,用户主目录下所有m开头的文件,并且忽略大小写查找带某个字符的所有文件:
grep -rn "hello,world!" *
* : 表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写
find -type f -name '*.php' | xargs grep 'GroupRecord'
xargs配合grep查找
修改权限:chmod [-cfvR][--help] [--version][文件名]
参数详解:mode : 权限设定字串,格式如下 : [ugoa…][[+-=][rwxX]…][,…],其中 u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
–help : 显示辅助说明
–version : 显示版本
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
其中ll(ls -l)可以看到,r-读(4),w-写(2),x-执行(1),rw—r—r代表权限644,rwxrw—r代表权限是764,其中7表示所有者对应的权限,6是表示所属组的用户权限,4表示其他用户,所以修改权限最直接的指令就是chmod 777 [dir]
nl [dir]
(读取file参数)计算输入中的行号
about network:
重启:service network restart(centos),/etc/init.d/networking restart(debian)
查看:systemctl status firewalld.service
或者firewall-cmd--state
关闭:systemctl stop firewalld.service
禁止开机启动:systemctl disable firewalld.service
(这里换成其他也可以,比如network.service
)
sz&rz:(假若没有则安装)yum install -y lrzsz
具体操作:sz filename
发送到本地
rz
上传文件
cron:cron服务是Linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务:
/sbin/service crond start
(开机自启在/etc/rc.d/rc.local
脚本中加入/sbin/service crond start
)
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload
编辑:crontab -e
,删除:crontab -r
E:echo "1 1 * * * command" >> /var/spool/cron/root
中间五个分别是分时日月周,*/10分钟的话,10分钟执行一次。10-23/2小时的话,上午十点到晚上23点每两个小时执行一次
ln:ln [选项][参数]
链接指令。其中选项s常用,其他的见http://man.linuxde.net/ln ,-s或–symbolic:对源文件建立符号连接,而非硬连接,如果不打参数默认硬链接。
E:将目录/usr/mengqc/mub1
下的文件m2.c链接到目录/usr/liu
下的文件a2.c:
cd /usr/mengpc
ln /mub1/m2.c /usr/liu/a2.c
tar:tar (选项)(参数)
选项(部分):
-d:记录文件的差别;
-x或–extract或–get:从备份文件中还原文件;
-t或–list:列出备份文件的内容;
-z或–gzip或–ungzip:通过gzip指令处理备份文件;
-Z或–compress或–uncompress:通过compress指令处理备份文件;
-f<备份文件>或–file=<备份文件>:指定备份文件;
-v或–verbose:显示指令执行过程;
-r:添加文件到已经压缩的文件;
-u:添加改变了和现有的文件到已经存在的压缩文件;
-j:支持bzip2解压文件;
-v:显示操作过程;
-l:文件系统边界设置;
-k:保留原有文件不覆盖;
-m:保留文件不被覆盖;
-w:确认压缩文件的正确性;
E:
压缩:
tar –cvf jpg.tar .jpg //将目录里所有jpg文件打包成tar.jpg
tar –czf jpg.tar.gz .jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar –cjf jpg.tar.bz2 .jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z .jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
rar a jpg.rar .jpg //rar格式的压缩,需要先下载rar for Linux
zip jpg.zip .jpg //zip格式的压缩,需要先下载zip for Linux解压:
tar –xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar –xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
netstat:netstat -an
“-a”选项意在显示所有连接,当不附加”-n”选项时,它显示的是本地计算机的netbios名字+端口号。而加了”-n”选项后,它显示的是本地IP地址+端口号。
重新动态获取IP:dhclient -r /释放IP
然后dhclient
查看进程:ps -ef | grep httpd
(检查httpd进程是否存在)
参数详解:ps:将某个进程显示出来
-e:显示所有进程
-f:全格式
| :管道命令,ps与grep同时执行
grep(Global Regular Expression Print):查找,强大的文本搜索工具,使用正则表达式搜索文本并把匹配的行打印出来
cat /proc/进程号/maps
查看虚拟地址空间
E:假如现在正在mv文件但是没有进度条,可以ps -ef | grep mv来看是否移动完了
杀死进程:killall 进程名
查看端口:lsof -i:端口号
查看CPU信息:cat /proc/cpuinfo
# 查看CPU信息,可以看到核心数
查看系统负载:cat /proc/loadavg
# 查看系统负载
查看CUP数:cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
查看内核数:cat /proc/cpuinfo |grep "processor"|wc -l
具体看每个cpu对应的核心:cat /proc/cpuinfo | grep physical | uniq -c
查看CPU型号和数量:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看磁盘使用情况:df -h
查看物理机
du -h
查看当前目录下的空间使用情况,这条指令会遍历
查看内存:
free
默认kb,后面加上参数-m就可看mbtop
类似任务管理器,查看运行程序vmstat
主要参数free空闲,buff已用缓冲数目,cache已用缓存数目vgdiplay
查看卷组名称及卷组使用情况lvdisplay
当前逻辑卷空间状态
LVM
扩容参考网址:https://blog.csdn.net/u012439646/article/details/73380197
ip addr flush eth0
lsmod
查看版本:cat /etc/redhat-release
(目测是隐藏文件)或者uname -a(centos)
或者lsb_release -a
查看应用:rpm -qa | grep [软件名]
或rpm -q [软件名]
/dev/sda3
表示的意思:/dev是表示设备,访问外部设备的端口(其实就是文件)
/dev/hd[a-t]:IDE
设备,hda,hdb表示harddisk,a表示第一个盘等等
/dev/sd[a-z]
:SCSI设备和SATA设备,a表示第一个,以此类推,1-4分给主分区。其他的是扩展分区
/dev/fd[0-7]
:标准软驱/dev/md[0-31]
:软raid设备/dev/loop[0-7]
:本地回环设备/dev/ram[0-15]
:内存
linux下各个文件目录的意思:https://www.jb51.net/LINUXjishu/32180.html
查看系统时间并且修改:
查看:当前:data
,硬件时间:hwclock
修改:date -s “2018-08-24 10:45:10”
同步:hwclock --systohc
修改时区:timedatectl list-timezones |grep Shanghai
- -结果Asia/Shanghai
timedatectl set-timezone Asia/Shanghai
sudo:进入root:su,输入密码,然后apt-get install sudo,这样可以使用sudo
vim:安装过程中如果遇到下面遇到的问题
中第二个问题则先解决,然后apt-get update&apt-get upgrade
出现需要先安装common
,则就是apt-get remove vim-common
,然后再apt-get install vim
参考链接:https://www.cnblogs.com/drfxiaoliuzi/p/4143933.html
配置源的参考链接:https://blog.csdn.net/w6280190/article/details/80840728
gg:跳到第一行
shift+g:跳到最后一行
ddp:光标所在行与下一行进行交换
xp:光标所在的字符与后面一个字符交换
gcc:apt-get install build-essential
这个命令会将所有c语言的开发包安装好,包含了gcc make gdb和lib函数库很多工具,build-essential是c语言的开发包
apt命令:apt-get install --reinstall 软件名
重新安装
apt-get remove 软件名
卸载软件
apt-get clean
清除deb包
安装Mysql
首先查看是否有旧版本
rpm –qa | grep -i mysql 或者 yum list installed | grep mysql
删除系统自带或者已安装版本
yum -y remove mysql-libs.x86_64
然后给CentOS添加rpm源
wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum localinstall mysql-community-release-el6-5.noarch.rpm
yum repolist all | grep mysql
yum-config-manager –disable mysql55-community
yum-config-manager –disable mysql56-community
yum-config-manager –enable mysql57-community-dmr
yum repolist enabled | grep mysql
安装mysql
yum install mysql-community-server
启动mysql
service mysqld start
查看mysql是否自启动,并且设置开启自启动
chkconfig –list | grep mysqld
chkconfig mysqld on
mysql安全设置
mysql_secure_installation
注意centos6没有systemd,所以没有systemctl命令,只有service命令,查看状态可以service mysqld status
chmod u+x [文件名]
,执行:bash [文件名.sh]或者./[文件名]
route add defualt gw X.X.X.X
这样再去看路由表里面应该就有网关,可以上网了 ping通自己的ip,ping不通网关,要不就是自己的网关设置错了,要不就是IP冲突,改网关子网掩码和IP试试,自己虚拟机的debian非常奇怪,网关居然是192.168.213.2,IP没有冲突但是网关设置成192.168.1.1就不行,子网掩码要设成24(这个问题有待商榷,这个可能是错误的,那台Debian有些问题)
ifconfig看不到eth0,ifconfig -a可以看到,很可能是没有设置MAC地址造成,执行下面几条命令,如果是新建虚拟机的话,造成原因可能是路由器
ifconfig eth0 down
ifconfig eth0 hw ether 00:00:AA:BB:CC:DD#随便写一个就行
ifconfig eth0 up
/etc/init.d/network restart
这样就解决了
Debian安装缺少光盘源并且一直检测cdrom,打开/etc/apt/sources.list(最好先备份)文件,注释掉cdrom那一行,然后添加上163源或者其他源,然后再执行apt-get update和apt-get upgrade更新下deb仓库,这样以后再使用apt-get安装时就不会再搜寻cdrom了
163源:deb http://mirrors.163.com/debian/ squeeze main non-free contrib
deb http://mirrors.163.com/debian/ squeeze-proposed-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ squeeze main non-free contrib
deb-src http://mirrors.163.com/debian/ squeeze-proposed-updates main non-free contrib
sohu:deb http://mirrors.sohu.com/debian/ lenny main non-free contrib
deb http://mirrors.sohu.com/debian/ lenny-proposed-updates main non-free contrib
deb-src http://mirrors.sohu.com/debian/ lenny main non-free contrib
deb-src http://mirrors.sohu.com/debian/ lenny-proposed-updates main non-free contrib
试了上面的源感觉不行,所以重新找的源:https://blog.csdn.net/yjk13703623757/article/details/78943345/
其他源:
jessie:deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
Ubuntu更新源,可用源:
163源:#163 guangdong
deb http://mirrors.163.com/ubuntu/trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/trusty-backports main restricted universe multiverse
阿里源:
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/xenial main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/xenial-updates main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/xenial universe
deb http://mirrors.aliyun.com/ubuntu/xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/xenial-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/xenial-security main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/xenial-security multiverse
初始安装的时候设置root密码是通过
sudo passwd root
然后输入密码既可以,另外修改hostname和静态IP必须要重启一下才能生效
配置ssh使其在远程能直接root登录
apt-get install ssh
/etc/init.d/ssh start #启动
vim /etc/ssh/sshd_config #找到PermitRootLogin without-password修改为PermitRootLogin yes
/etc/init.d/ssh restart
centos统计ping输出日志的脚本:
1 |
|
centos7中根据文件大小排序以及jenkins配置每周删除一次jobs日志信息:https://blog.csdn.net/u013066244/article/details/70232050
shell统计某个目录文件数量:
1 |
|
MouseLight是比较强大的软件,如果觉得这个软件有用,请购买正版,发布这个纯属娱乐。
##大致分析
##过程
安装好MouseLight(下载地址:https://pan.baidu.com/s/1zB8MJiqBxNc46MbKUtFluQ),然后运行起来,切到Misc目录下,发现有一栏需要输入注册码,有一栏写着只能使用30天。在输入注册码一栏中随便输入一些字符,然后点击Activate,会出现下图所示的错误
改写系统时间为30天之后,程序不能运行,如下图
使用OD打开mouselight,等待运行之后右键选择中文搜索引擎,选择搜索ASC码
参照上面错误信息,搜索unexplainable,结果如下图:
双击以上字符,进入主程序区,上下查看,发现有很多种情况,会返回不同的情况,如下图所示,会有很多种返回的情况,不一一列举,下图中可以看到success字样,照常理,只要跳转的地方跳转到这里就会直接破解成功。向上翻查函数的起始地址,00404510为起始地址。
使用IDA打开程序,上面查看程序其实地址为00404510
按下F5反汇编其代码发现不能成功,这段是主程序,只能一步步单步调试,继续使用OD调试,从上往下调试,单步到00404696时,没有发生跳转直接进入到错误显示的界面,所以往上一条指令查看
Cmpdword ptr[0x413030], -0x7
发现每一条显示在界面的信息都有和dword ptr[0x413030]
这个数据比较的语句,那么直接在堆栈区查找这个地址,然后F8单步调试下来看在哪一个函数里面,堆栈的值发生变化,如下图:
当单步调试到如下图所示的地址时,堆栈信息发生变话,此时使用IDA查看函数功能发现函数有很多判断,根据不同返回值跳转到不同结果,下图所示:
调试至此函数时堆栈信息发生变化
使用IDA查看函数代码:
可以看到,只要返回值为1,最后结果就会显示成功,结合IDA的代码,单步调试OD,一边调试一边看IDA的代码,这样可以清楚的看到汇编的指令运行到哪一步,改完之后运行的结果如下图所示
提示上说需要重新启动程序,但是此时动态调试重新运行程序之前修改的内容会被覆盖为原来指令,所以这里将程序保存下来然后命名为MouseLight1重新运行,发现会跳出这个提示成功的界面但是并没有激活成功,仔细查看之前代码,发现时利用注册表信息来计算的返回值,那么程序中一定存在很关键的判断没有找到,这时候只能通过OD从程序开始调试,并且之前注意力一直在激活的字眼上,上面剩余30天的界面没有去管。此时单步调试
到如下函数时进入到了比较重要的步骤
当单步到这里时,这个函数里面进行了很多计算,并且在这个函数里面有试用剩余天数的提醒,并且还有激活成功的字样,如下图:
单步调下来发现在上图的4043E0处,直接跳过register version
字样,这样修改jnz可能会直接激活成功,修改jnz如下图,界面显示激活成功,但是将系统时间改到30天之后,程序依旧不能运行。
查看刚刚跳转指令上面几条指令,发现比较了eax和ecx的值,而eax的值为0x96
,ecx的值由0x412CB8
决定,运行到这里时0x412CB8
的值是0x32
,并不是0x96
,继续在OD的堆栈区观察值的变化,发现当程序运行到如下图地址时,0x412CB8
的值发生了变化
上图指令一条条分析,只要eax值为0x96
则会使je触发,但eax的值又由0x40F240
决定,从而跳过mouselig.004018D0
这个函数,并且412CB8
的值也为0x96
,使用IDA分析mouselig.004018D0
这个函数,如下图,截取这个函数的一部分:
可以看到这个函数是用于计算剩余天数的,所以这个函数跳过去意味着可能会跳过时间限制,查看上面提到的0x40F240
地址的值
使用IDA查看之后发现这里值为0x32,将这里的二进制值改为0x96。
运行程序,发现破解成功。将程序保存为MouseLight1.exe,运行程序,将系统时间改为30天之后,发现程序依旧可以运行。但是这之前要将之前的return -7
改为return 1
。最终结果如下图所示:
总结:IDA反汇编代码配合上OD的汇编指令一步步调试,这种更能理解汇编指令的意思
]]> SourceInsight是比较强大的软件,如果觉得这个软件有用,请购买正版,发布这个纯属娱乐。
Source Insight不仅是一个强大的程序编辑器,而且是面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++, C#和Java等程序的分析。能分析源代码并在工作的同时动态维护它自己的符号数据库,并自动显示有用的上下文信息。运行截图如下图所示:
##过程
先使用查壳工具PEID查壳,然后通过试运行sourceinsight查看会提示什么,然后决定使用什么方法来破解,一般来讲,输入注册码不正确跳出提示框,这样可以通过查找字符串进而找到关键算法,通过下面尝试,这样方法确实可行,但是并不能完全破解,只能绕过一个判断。商业软件毕竟是别的软件不一样的,sourceinsight有在线检查黑名单制度,而且相较于之前版本,黑名单检测地方在不断增多,找到黑名单检测处并且一一注释才能够最终完成破解。
###1.查壳
先用PEID查壳,发现没有加壳,但是入口地址和偏移与之后在IDA里面看到的不一样,这是win7下的ASLR技术,ASLR技术是对缓冲区溢出的安全保护技术,对堆栈、共享库等映射随机化,这样提高安全,但是不利于我们分析,IDA动态调试的时候不能返回,相对OD显得不那么方便,但是IDA反汇编出来的地址就是没有随机化的地址,是最原始程序的地址,而OD是随机化的,所以通过参考IDA,并且尝试关闭win7下的ASLR服务,这样就可以使用OD进行动态调试,使用IDA反汇编查看源码,这样可以快随方便的找到关键判断,加速破解进度。下图为查壳结果:无壳
###2.关闭ASLR
如果想使用OD动态调试,那么必须要关闭ASLR服务,因为每次调试的断点,注释会随着动态地址变化而消逝,所以必须要关闭ASLR服务。下图为没关闭ASLR服务之前的OD加载地址与IDA加载地址效果图:可以明显看到OD的地址漂移。
网上下载ASLR关闭工具进行关闭是不行的,后来Google上找到一篇帖子,介绍了方法,通过win+R,regedit,HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Control->Session
Manager->Memory Management,右键,新建一个dword变量,命名为MoveImages,将其值置为0,重启电脑即可。如下图为修改注册表中的数值:
关闭ASLR后效果如下图,这样可以通过IDA找到关键处,OD动态调试辅助进行破解。
###3.运行程序寻找突破口
下图为未破解之前截图:
第一个选项是导入注册码,第二选项是试用30天,第三个选项是导入license,如果不选的话,会直接退出程序。尝试输入错误的注册码看会提示是什么,
跳出一串字符如上图,然后通过IDA查找字符串,Shift+F12打开字符串界面,按下ctrl+f,然后输入上面提及的字符中not correct,搜索结果如下图:
第二条记录是刚刚输入不正确注册码跳出的界面的提示,双击进入,下图所示,可以看到,字符串和上面输入错的字符跳出来的提示语是一样的。可以看到第一句The serial number you entered is not correct. A serial number for下面有DATA XREF,后面跟了一个函数,鼠标放在上面会出现函数入口指令,双击进入
下图所示,双击进入的地方,这个地址就是这串字符压入栈的地方:
IDA最强大的一面就是反汇编,接下来就是体现其强大的一面,按F5会将这段汇编指令尽量按照源码反汇编出来,按下F5以后效果如下图所示:
可以看到上面的一个关键if判断,满足条件,就会进入到下一个if判断,两个if都满足的话,说明这个序列号是3.x版本的,第二个if如果不满足,则会进入else,见下图:
可以明显看到,第67行,第二个if判断没有成立进入到这里就会显示上面提到的注册不成功的提示,而sub_40A8E0这个函数就是实现显示提示的功能,IDA查看sub_40A8E0这个函数非常方便,双击这个函数就会自动跳到这个函数,如下图,想要再回到之前的函数,点击左上角返回键即可。
上面代码可以看到是输出一串字符的,结合上面截图中的代码分析,传入的参数a1是序列号错误的提示字符串,代码中有调用其他的函数,就不一一展开说明。
回到上上图中的代码中,只要代码不进入if判断,把显示提示序列号错误的字符跳过,那么很可能找到判断序列号是否正确的关键判断。(注:上上图中代码还有一部分没有截图展示出来,都是和这个if平行的判断,跳过了这个if,可以进入到下面的判断,下面判断中用到了替换查表的方法判断,表是代码中原有存在的,查看代码可以看文章末尾附录)
通过上面的分析,关键call就是sub_50C8E0(&MultiByteStr,dword_66BAE8 + 1544, dword_66BAE8 + 1548, dword_66BAE8 + 1540, 1)这个函数,双击这个函数进入函数主体,下图可以看到函数中所有的代码:
接下来分析这段代码
1 | int __cdecl sub_50C8E0(char *a1, int a2, int a3, int a4, int a5)//a1为输入的序列号,如果任一判断不成立return 0,那么之前的判断会直接跳到序列号失败的那个call |
总结以上代码,首先是判断序列号的合法性,必须满足如下格式(其中X表示未知字符):
S(0-9)(T|B|S|U)X-X(R|G|D|F)XX-XXXX-XXXX
其中第二位,根据版本要求必须是4,第三位中T 表示 试用版,B表示Beta版,S表示Standard版,U未知。因此按照本软件的要求,序列号格式应该如下:
S4SX-X(R|G|D|F)XX-XXXX-XXXX
可以看到是do-while循环四次来做的,而当中最关键的是byte_5F6E68[]这个预先存于内存中的表取值,双击byte_5F6E68[],可以看到表中的值,下图展示了一部分当中的值,
最后四个字节可以算出来,可以尝试穷举(直接遍历 byte_5F6E68[]中的字符即可),通过这样的方法来计算出最后四个字节,但是由于时间有限,没有尝试这种方法,直接利用OD单步调试算出,然后重新运行程序,输入序列号,如下图所示:call的50C0B0这个函数,计算最后四位
进入到50C0B0这个函数,如下图:
过程中没有做过多的指令分析,程序运行起来,第一次输入S4SV-UFWT-ZPR6-XXXX,鼠标选中循环之外的第一条语句,如上图橙色框。选中之后直接按F4运行到这一句,然后看下面堆栈区,就计算出来最后四位,这样重新运行程序,然后就可以输入正确的序列号,跳过这一条验证, 计算结果如下图所示:
图中已标出计算结果,寄存器EAX也有计算结果,寄存器EBP中存的是前15位,可以看到前十五S4SV-UFWT-ZPR6计算出来的最后四位是F336。下次输入S4SV-UFWT-ZPR6-F336即可跳过这个判断。输入序列号,
过程中跳过了以上的判断,但是,没有激活成功,效果如下图所示:
这时遇到瓶颈了,在很长一段时间里,无法取得进展。IDA动态调试不是很方便,所以一直使用OD进行动态调试,进行寻找突破口。在经过一段时间寻找之后,在OD动态调试到以下函数时候,下图所示:
可以明显在堆栈区看到我键入的信息,并且能看到一个文件夹,但是当我打开文件夹时,里面不存在这个文件。无法找到这个文件,在经过很多次调试之后还是无果。只是键入序列号的话,无法激活,这时候,程序一直运行在一段地址之内,无法跳出,而屏幕上也一直显示正在激活请稍后,
但是就像文章开头分析一样,还有可以选使用试用30天和导入license的选项,导入license是需要选择文件夹的,这是伏笔。选择试用试一下,选择试用之后,C:\ProgramData\Source Insight\4.0这个文件夹下多了一个文件,si4.lic文件,这时候打开文件分析,格式大致如下:
清晰看到,之前填的用户名,组织,邮箱,时间在里面,下面signature字眼很关键,说明这里使用了数据签名,然后可能在某处存在进行核对,如果正确的话就激活成功。将系统状态还原至还未试用的版本,通过多次调试,查阅资料之后,发现程序使用的Windows Cryptography APIs进行签名:在调试的时候发现调用了这个系统API,系统API怎么计算的具体怎么计算没有跟踪。OD动态跟踪之后,系统调用API如下图所示:
通过网上查阅,“签名”和“签名验证”是通过公钥体系来实现的,所以程序中一定存在公钥,在不断寻找之后,在地址0063F648处,发现了公钥,如下图所示:
找到公钥之后,只要找到什么地方对公钥试用,以及签名最后在哪里比对,可能最终完成破解,继续选择键入序列号, 这时候程序依然处于上面那一段地址内循环,此时放弃了键入序列号破解程序的想法。文中一开始提到的三个方法,只剩最后一个导入license没用了,在使用试用版本发现si4.lic文件中格式之后,自己造了一个license文件,放入C:\ProgramData\Source
Insight\4.0文件夹中,然后选择导入license,如下图:
选择license文件导入,导入之后,先会进入判断序列号是否正确的断点,序列号是通过之前计算出来的,所以不会有问题。如下图:
在检查完序列号之后,会一一对license文件中所有值进行一一计算验证,一路继续F7F8调试,在调试很久之后,发现很关键的字眼,如下图:
上图中两个Asc码很显眼,可能接下来的重要数据就在这里,继续调试。再往下发现一处正在读入license中签名的值,如下图:
再往下是继续将si4中数据进行读入并进行存储,这里只截取其中两处展示,如下图:
将除签名之外所有的数据读入:
将signature存在堆栈:
再往下调试,出现了非常非常非常重要的函数,经过对license文件的计算,这个函数的返回值决定了是否能成功激活,如下图:
进入函数主体进行分析,如下图:
可以明显看到导入公钥了,这里计算非常关键,此时借助IDA反汇编查看代码,分析思路然后再次回到OD去调试尝试,这样两个工具相结合加快了破解的进展。
图中展示借用公钥计算,然后返回结果,总共可以返回的结果有472、473、474、475、472、200.代码贴出如下:
1 | int __cdecl sub_50C3D0(BYTE *pbData, DWORD dwDataLen, BYTE *pbSignature, DWORD dwSigLen) |
经过多次尝试,发现只有当返回值为200(十六进制为0xC8)的时候,软件这时候被激活,但是过程想要让它直接运行到使其直接返回C8是有困难的,所以这里直接将值改为0xC8。如下图:
运行结果可以看到已经激活,结果如下图:
点击确定之后,在help->about Source Insight中,可以看到已经激活的信息,并且激活的信息也与license中一致。
###4.后续
程序破解完了会有黑名单检测,如下图
上图中会在C:\Users\liyuf\AppData\Local\Source
Insight\4.0中出现一个.dat文件,这个文件记录了你是黑名单,然后再打开Source Insight会发现下图所示:
细心点可以发现,这与之前键入注册码提示的错误不一样的地方是,没有下两行的选项了,为了应对黑名单检测,总共需要修改四处地方:
1)
0050E393 85C0 TEST EAX, EAX
==>
0050E393 31C0 XOR EAX, EAX
2)
0050E645 85C0 TEST EAX, EAX
==>
0050E645 31C0 XOR EAX, EAX
3)
0050DF68 76 69 JBE SHORT 0050DFD3
==>
0050DF68 EB 69 JMP SHORT 0050DFD3
4)
0050F1BB 85C0 TEST EAX, EAX
==>
0050F1BB 31C0 XOR EAX, EAX
修改完之后保存:
再次打开程序,界面如下:
###附录
附上sub_50F5A0()函数代码:
1 | int __cdecl sub_50F5A0(int a1, int a2, int a3) |
参考链接:
]]>https://www.52pojie.cn/thread-713308-1-4.html
1.环境:win7 X64、vs2013、OpenCV
2.配置环境变量:安装OpenCV的过程就是解压代码到指定目录的过程,解压完毕后有vc10~12,与Visual Studio对应关系如下:
vc9 Visual Studio 2010 : vc10
Visual Studio 2012 : vc11
Visual Studio 2013 : vc12
Visual Studio 2015 : vc14
Visual Studio 2017 : vc15
右键我的电脑->属性->高级系统设置->环境变量->系统变量->双击Path
添加OpenCV变量(解压的到电脑里面的路径),我的是C:\Program Files\opencv\build\x64\vc12\bin,添加,x86的也添加上
3.开始编译Detection。
3.1打开VS2013新建项目,C++的win32控制台应用程序,注意选上空项目,然后再在解决方案处右键新建项目,这次新建dll文件,同样是空项目
3.2将活动解决方案平台转化为X64平台:点击配置管理器(配图),在活动解决方案下面点击,然后新建,改为x64,点击确定,然后将debug换成release
3.3将下载的FaceDetection源码中的data,include,model,scr拷贝到目录下,其中data在SeetaFace目录下,其他三个在FaceDetection目录下
3.4添加cpp文件,右键FaceDetection下的源文件,添加scr文件下除去test文件的所有cpp文件,一共11个
3.5配置项目属性:右键FaceDetection,属性,3.5.1:VC++目录->包含目录,编辑其目录输入include(相对路径),3.5.2:选择C/C++预处理器->预处理器定义->添加”SEETA_EXPORTS和USE_OPENMP”两项,3.5.3:C/C++->语言->OpenMP支持->是
3.6右键项目生成,在SeetaFace\x64\release下面会看到dll,lib文件
4.创建测试项目
4.1创建测试项目,同样选择空项目,现将其设置为启动项
4.2把活动解决方案转化为x64平台,如果提示创建不成功就把原来的移除重新创建,重新创建可能会导致前面配置清空,如清空则重新配置。之前这些其实都不必要,只要在新建项目平台的时候把创建新的解决方案平台的√点掉就行。
4.3写入测试代码,右键FaceDetection下的源文件->添加->新建项->C++文件,复制src\test下的代码进来,此时会有很多报错,需要配置
4.4创建lib文件,在SeetaFace下创建一个lib文件夹,把上一步x64\release里面生成的lib文件复制到lib文件夹下
4.5配置属性:右键FaceDetection->属性,4.5.1:调试->命令参数->输入:“..\data\0_1_1.jpg ..\FaceDetection\model\seeta_fd_frontal_v1.0.bin”
4.5.2:VC++ 目录 -> 包含目录(添加opencv\build\include路径以及FaceDetection的inculde的路径) ->库目录(添加opencv\build\x64\vc12\lib路径以及SeetaFace下的lib文件夹的路径)
4.5.3:C\C++->预处理器->预处理器定义 -> 添加%(PreprocessorDefinitions)、USE_OPENMP和SEETA_EXPORTS
4.5.4:链接器—>输入—>附加依赖项—>添加opencv_highgui2411.lib、opencv_imgproc2411.lib、opencv_core2411.lib和在3.6中生成的FaceDetection.lib
4.6本地生成并运行:解决错误error LNK1112: 模块计算机类型“x64”与目标计算机类型“X86”冲突:右键FaceDetectionTest,点击属性,弹出项目属性页,链接器—-高级,配置改成所有配置,平台改为x64,目标计算机为MachineX64(/MACHINE:x64),然后右键解决方案->属性,把FaceDetectionTest平台改为x64,运行即可。
如果显示没有包含opencv_highgui2411.dll文件,则重新检查一遍配置,然后重启试试
Alignment和Identification同样也是这样,先创建dll,然后创建测试文件
…
待续
本地在桌面SeetaFace文件夹里面
]]>
ping www.baidu.com
内网最好改为静态ip,修改静态IP方法:
第一步:
vi /etc/network/interfaces
auto eth0
# iface eth0 inet dhcp # 这为原来存在的注释掉,保存为下面
iface eth0 inet static
address xx.xx.xx.xx
netmask xx.xx.xx.xx
gateway xx.xx.xx.xx
第二步(可不配):
vi /etc/resolv.conf #修改为自己的网关
/etc/init.d/networking restart
网关可以在宿主机上面看到
先查看tun
cat /dev/net/tun
返回的是File descriptor in bad state说明可用,No such device则需要开通tun/tap服务,可以更新系统(apt-get update && apt-get dist-upgrade)之后再查看是否开启服务
再查看iptables_net
apt-get install iptables
date -R #查看时间
date -s 01/01/2000
date -s 14:00
hwclock -w #时间写入本地
只改时间能安装成功这一步可不做:时区也可能导致安装失败,修改时区
timedatectl list-timezones |grep Shanghai #实验室Debian8默认美国芝加哥时间,时区可以修改为上海,这条指令是显示上海在哪个时区,结果会是Asia/Shanghai
timedatectlset-timezone Asia/Shanghai #修改时区
apt-get install openvpn lzop
apt-get install zip
apt-get install expect
如果安装没有成功则先更新一下系统
apt-get update && apt-get dist-upgrade
使用easy-rsa生成证书
默认openvpn的easy-rsa文档会放在/usr/share/easy-rsa/
下,不在则检查是否安装成功,或者用locate、find命令查找一下,然后将文档复制到/etc/openvpn/
下
cp -r /usr/share/easy-rsa/ /etc/openvpn/
生成ca证书:
cd /etc/openvpn/easy-rsa/
source vars #可自行编译vars文件,也可保持默认
./clean-all
./build-ca
提示回车默认即可,y/n选择y
生成服务器端证书和密钥:
./build-key-server server #server是服务端的名字可自行设置
提示回车默认即可,y/n选择y
生成客户端证书和密钥:
这里设置的客户端名字不能和上一步服务端名字一样
./build-key client
提示回车默认即可,y/n选择y,想要生成多个客户端的证书和米哟啊将client改成另外的名字重复操作即可,所有证书都在/etc/openvpn/easy-rsa/keys/
下面保存
生成Diffie Hellman参数:
以上完成之后执行:
./build-dh
keys目录下文件如下:
配置OpenVPN服务端文件
编辑/etc/openvpn/server.conf文件,没有的新建一个,加入以下内容:(最好将注释去掉)
local xx.xx.xx.xx #xx.xx.xx.xx为服务器的IP
port 8080 #端口,需要与客户端配置保持一致,并保证与其他软件无共用
proto udp #使用协议,需要与客户端配置保持一致
dev tun #也可以选择tap模式
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem #以上为认证文件的绝对路径,根据实际情况修改
ifconfig-pool-persist ipp.txt
server 10.168.1.0 255.255.255.0 #给客户的分配的局域网IP段,注意不要与客户端网段冲突!
push “route xx.xx.xx.xx 255.255.0.0”#xx.xx.xx.xx表示内网网段,是网段,只在连接内网是流量走vpn,客户使用外网是任然使用其自身网络流量,规则为“route内网网段 内网掩码”;若客户端希望所有的流量都通过 VPN 传输,则可以使用该语句:push “redirect-gateway”,并在客户端配置文件加上redirect-gateway;
push “dhcp-option DNS 8.8.8.8” #客户端的DNS,可不设置
push “dhcp-option DNS 8.8.4.4” #客户端的DNS,可不设置
client-to-client
;duplicate-cn #若要在多台电脑使用一个证书,请去掉前面的;
keepalive 20 60
comp-lzo
max-clients 50
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
mute 20
设置IP转发:
iptables -t nat -A POSTROUTING -s 10.168.1.0/24 -j SNAT –to-source xx.xx.xx.xx #xx.xx.xx.xx为服务器IP
iptables -t nat -L
第一条命令是设置,如果知道你的路由的外网IP,那么就把前面换为外网IP添加进去
看到如下字样则转发成功:
SANT all – 10.168.1.0/24 anywhere to:xx.xx.xx.xx#xx.xx.xx.xx为服务器IP
修改/etc/sysctl.conf的内容为:
这个文件进去之后全是注释,在最下面加上这几句
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects= 0
然后执行
sysctl -p
使其生效,到这里服务器端的配置都完成了
/etc/init.d/openvpn restart
上面的命令让OpenVPN重启
如果无效的话,那么重启debian
想使其开机自动运行的话还需要:
创建/root/vpn.sh 文件,加入下面的内容:(复制到VPS上时,最好把注释去掉)
#!/bin/bash
/etc/init.d/openvpn start #Debian下OpenVPN不用设置就可以开机自动运行,如可以自动运行就去掉这句
/sbin/iptables -t nat -A POSTROUTING -s 10.168.1.0/24 -j SNAT –to-source xx.xx.xx.xx #xx.xx.xx.xx为服务器IP,实际根据自己的服务器来做调整,这只做示例
将这一脚本写入cron执行计划,执行
crontab -e
@reboot /bin/bash /root/vpn.sh >/dev/null 2>&1
这是服务端,还有客户端,当然如果更改了上面的配置文件一定要重新导出证书放在openvpn安装目录下的config文件夹下
上面中有提服务端端口设置,设置外部端口,让其映射到内部端口(服务器端口),在xx.xx.1.1里面设置
主要配置windows客户端
证书在/etc/openvpn/easy-rsa/keys里,两个证书一个key ca.crt、client.crt、client.key放在openvpn安装目录下的config文件夹里面
在上面提到的config文件夹下面创建一个sunny.ovpn文件,添加以下内容:
client #这个client不是自定义名称不能更改
dev tun #要与前面server.conf中的配置一致。
proto udp #要与前面server.conf中的配置一致。
remote xx.xx.xx.xx 88 #xx.xx.xx.xx为路由外网的IP,88为外部端口,端口与之前端口映射的外部端口一致,若同处内网,则ip和端口与前面的server.conf中配置一致。
resolv-retry 20
nobind
persist-key
persist-tun
ca ca.crt #具体名称以刚下载的为准
cert client.crt #具体名称以刚下载的为准
key client.key #具体名称以刚下载的为准
ns-cert-type server
/# redirect-gateway#如服务端配置为push”redirect-gateway”,则保留这行,否则请注释掉
keepalive 10 30
comp-lzo
verb 3
mute 20
route-method exe
route-delay2
##文章参考:
http://shit.name/openvpn-on-debian/
以及实验室OpenVPN安装文档
]]>然后执行
git init
git add .//全部添加
git add xx.cpp//一个个添加
git commit -m “保存代码的文件夹”
关联仓库:git remote add origin https://git@github.com:Summary22/Myproject.git
git push origin master
注意:第一次上传的是其他颜色字体
]]>程序启动后弹出注册页面,随意输入E-mail和注册码后弹出提示错误的窗口
使用IDA破解,软件破解思路是查找字符,看Graph View,最后看核心判断,也可以看到核心算法,写出注册机。
双击图中黄色的16F后的箭头跳转到字符串的引用位置
向上滑动一点可以看到注册成功的相关代码,当然直接搜索字符串也能找到注册成功的相关代码,如果使用的是OllyDbg,通常的做法是在注册失败的代码中打断点,回溯到判断注册是否成功的代码中去,这里使用IDA的Graph View可以加快破解速度,在代码段按空格就会切换到Graph View,
可以非常明显的看到判断注册是否成功的流程,有红色断点的框中是判断注册是否成功的函数,先调用call ds:GetDigItemTextA获取输入的注册码,再把注册码通过栈作为参数传到sub_405F60函数中去,这个函数的返回值eax就是最后的注册结果,eax= 0时注册失败,暴力破解可以直接修改eax的值为1,略。下图中,可以看到跳转的连线有红色和绿色,红色是判断失败则执行,绿色是成功执行。
可以看出sub_405F60是关键的call。
用Graphmode整体地看下sub_405F60函数,左分支返回的都是eax= 0,造成注册失败,输入的注册码只要使程序到达最右下的分支即注册成功
逐条分析指令,发现有如下几条条件限制:
判断输入的注册码长度是否为0x14,即20(d)位
atoi(code[0]) + atoi(code[1]) = 0xB (注意这里没有使用ASCII码做运算)
(int)注册码的第一位+ (int)注册码的第二位= 0xB
atoi(code[18]) + atoi(code[19]) = 0xD
(int)注册码第19位 + (int) 注册码第20位 = 0xD
atoi(code[5])+atoi(code[13]) = 0x9
code[12] = 0x56(ASCII ‘V’)
综上
注册码code的要求为
注册机以及满足以上要求的一个注册码是如下图:
破解以后的画面是下图:
IDA的Graph View功能十分强大,F5更是可以近似生成源码,而且动态调试的时候在程序段同样可以查看到Graph View,而且当从一个模块到另一个模块的时候,如果停在上一个模块的最后一条指令,那么接下来要执行哪一个模块,指向那一个模块的线会跳动。但是感觉IDA动态调试没有OD方便,可能是IDA用得比较少吧。。。
]]>)
抓包分析软件在验证的时候没有发包,所以可以确定注册码一定是在本地生成,找到判断成功与否的指令,改掉jnz或者在上层调用中改返回值。此次没有编写注册机。
WinRAR是一款强大的压缩文件管理工具,目前最新版本为5.50版本,但是中文免费版本在每次启动时,会弹出广告页面,本次破解目标是去除广告页面。如下图:
官网下载软件,先使用PEID检查是否有壳,有壳的话去壳,然后通过OD进行跟踪分析,找到页面弹出的指令将其nop或者直接jmp,达到去取广告的目的。
F9运行后F12暂停,Alt+K查看堆栈,找最近在程序领空的调用,右键show call,查找ASC和Unicode没有发现关键字,这样只能F8单步下去,查看运行哪个call程序会运行并弹出广告,然后打断,F7单步进这个call,这样反复查看,最后找到弹出页面的call,nop或jmp这个call。如下图所示:
程序入口点:
F8跳过这个call时会运行程序并且弹出广告,在这下断,Ctrl+F2重新运行,F9到这一步,F7进入
进入上面的call,F8下去,如下图注释,第一个call,弹出form,第二个call,加载form里面的内容,这里不会弹出广告
运行第一个和第二个call以后的结果:
继续F8调试,当运行完下图这个call之后,弹出了广告
查看上图指令,经过一番研究,上面一条指令je short WinRAR.0132CF78,跳过紧挨着je的call指向弹出广告的call,这里修改je指令,将其修改为直接跳过弹出广告的call,如下图所示:
然后F9运行,发现不会弹出广告,将其保存替换exe即可
]]>官网下载软件,先使用PEID检查是否有壳,有壳的话去壳,然后通过OD、DeDe等进行跟踪分析,找到算法,最后编写出注册机。
上图主模块区,最下面的指令test al,al,当F8到这里,发现执行完这一句,下一条指令跳过了很多call,很有可能是关键判断,试一下,nop掉下一句JNZ,F9运行,发现破解成功,但是并没有真正的注册,如下图,所以可以判断,这之前的call很可能是关键call,点击确定,将nop的修改回来,进入上面提及的call
进入之后F8运行,当运行到下图所示时,会发现一串字符串,这串字符可以用于升级换注册码,这并不是正确的注册码,继续往下寻找
再继续往下寻找,又发现类似上图一样的一串字符,如下图:
经过验证,这里的字符串就是正确注册码,但是一旦输入这个注册码,然后点击确定,就会写进注册表,点击立即购买就会一直出现您已购买,这给之后的分析造成麻烦,所以这里不输入,进入这个关键call寻找算法写出注册机,如下图,这个call里面有两个call,其他指令是赋值和对栈的操作,进入第一个call,一步一步运行会发现是生成机器码的过程,然后单步进入第二个call,
如下图,算法就是在下面图上所示,通过分析,可以判断,正确的注册码是通过取出每个字符经过一定操作进行计算的,而真正的算法是:假设计算到第n个字符,用(2*n+1)+第n个字符的asc码+1,结果就是正确注册码的asc码,通过上面算法算出的asc码如果不是字母或者数字则跳过,详细注释见下图
这个for循环之后在local3里面存的就是正确注册码,所以可以肯定,这两个call肯定会成功生成正确的码,单步进入第一个call,发现里面很简单,但是进入这个call的第一句,push edx,很关键的一句话。这时候会压入上面算法计算的值,将这个数据保护起来。
单步进入,这时候,有三个call在这里,经过分析,第一个call并没有生成正确字符,第二个call里面,有着重要的信息,而此时,0012F818这个地址的值没有改变,一直关注这里的值,单步进入第二个call,指令的分析见下图。
编写注册机
借助DelphiDecompiler找到各个事件入口地址,用OllyDBG动态调试程序,在事件入口打断点,然后单步分析指令,分析逻辑关系,找出主要算法,写出注册机。
由于之前在register事件入口下断,所以程序会停在register事件入口,这时单步F8向下调试,
到这里可以看到,这个je跳过了提示框以及下面三个call,说明输入符合要求。继续F8运行,
到上面一步,这个跳转跳过了隐藏register按钮和显示again的关键call,按下esc往上一步看,test里面al的值决定这个跳转,再往上看,test上一条指令,call aLoNg3x_.00442FF2,很有可能这个call里面就有关键的算法,单步F7进去查看算法,
F8单步到这一步的时候,可以看到一个关键的跳转,JNZ跳过了一句赋值语句,让bl为1的赋值语句,然后继续F8,当跳出函数,回到上图test语句的时候,这时al为0
将上一步的JNZ指令nop掉,让bl直接为1,可以看到,al的值也为1,并且register按钮隐藏,again按钮显示出来,再点击一下again按钮就破解成功了,如下图:
通过上面分析可以判断,上面图中,JNZ上一步的cmp为关键判断,这条指令比较的是寄存器EBX和ECX里面的值,再往上分析,去寻找EBX和ECX的算法。重新运行一下程序,然后单步进入关键call,从建立栈帧开始单步往下分析,下图所示,通过call取出用户名长度存在EAX中,然后通过cmp判断输入用户名是否合法,这里的限制条件是用户名必须大于4位。
继续往下调试,可以看到有两个循环
这里执行的算法是:
内层循环中,开始取输入的用户名的第一个字符和最后一个字符相乘,然后再与edi相乘,结果存在edx,最后将ebx与edx相加后结果存在ebx,比如上面例子中,输入用户名为qwer12,那么第一次就是字符q的asc码与字符2的asc码相乘,然后与edi里面的值相乘,最后加上ebx里面的值结果存在ebx。
因为esi第一次赋值为1,在内存循环中不变,所以在一次外层循环中,edx始终保持不变,对于外层循环来说,外层循环一次,等于输入用户名的一个字符依次乘用户名的所有字符,并乘edi,求和之后保存在ebx。
这里执行的时候上面有指令将ebx置0,那么变量只剩下edi了,程序调试中,edi始终为0,这就导致最后结果一直为零,关键判断不相等,跳过将bl置1的指令。所以需要寻找到edi的赋值指令,往上会看到
这条指令将eax的值给了edi,而前面的语句没有提及eax,所以要回到call外面去找,重新点击register,程序断下之后寻找eax赋值指令
在关键call上一条,将地址0x445830的值赋给eax了,但是这时这地址里的值为零,这时要寻找给这个地址赋值的指令,往上可以看到一条,mov dword ptr [0x445830],
eax,但是这条指令被上面判断序列号是否合法的跳转语句跳过了,再往上找不到操作这个地址的指令了,可以判断,在mov dword ptr [0x445830], eax指令上一条call指令,很有可能包含eax的算法,分析这个call,可以找出eax的值。输入一个不合要求的序列号,带字母即可,单步进入这个call,进行分析。
上图输入不是数字的序列号,顺利进入到赋值语句之前的关键call里面,图中有一条指令cmp eax,0x5,这条指令要求输入序列号必须大于五位,所以这里的cmp置Z标志位为1,跳转指令跳过了关键算法,重新输入序列号,重新进入,分析主要算法。
这里算法只有一个for循环,刚开始将序列号长度取出存在eax,并将其赋给ebx,作为控制条件,然后取出序列号的第二个字符除以0x11的余数存在edx,然后再加一,取出序列号第一个字符与edx相乘,这算一次循环,下次操作第三个字符和第二个字符,循环五次,最后的结果加上0x37B。接着分析下面算法:
计算的结果存在eax中,然后结果除以0x7148,结果存在eax,余数存在edx,然后将结果转存在ebx,最后又将ebx的值返还给eax,计算的结果暂称为因子,因子的计算解决了对图十二分析时所遇到的问题,但这里要输入不合法字符串才能计算。接下来继续分析图十分析之后的算法:
首先将计算的结果存在eax,,然后对0xA2C2A进行取余,结果存在ebx,然后用输入的序列号除0x59,商保存在ecx,输入的序列号再对0x50取余,结果加上之前的ecx,最终结果再加一,然后和ebx值相比较,如果相等,则jnz不会跳转,bl的值会等于1,这时候,再回到这个call之外,将不会再将隐藏register按钮和显示again按钮的指令跳过,会执行,也就破解成功一半,again按钮的计算方法和register按钮就算方法一样,所以只要执行一遍对register按钮的操作,again按钮也将隐藏。
上面细致分析了算法,接下来就是根据算法编写注册机,下图为注册机界面:
在计算注册码的时候会生成多个,所以可以随机选择。
特别说明:(1).在计算的时候,如果用户名字符串输入过长,或者长度小于6,都是属于不合法的用户名。输入过长的话,计算的时候,因为寄存器为32位,所以结果很可能溢出造成错误。经过测试,如果输入用户名为6个纯字母,结果溢出,所以用户名最好以数字和字母配合,而长度大于6位,很大几率造成溢出,如果选取asc码值比较小的符号当中用户名的话,情况会好一些。(这些可能是程序本身造成的限制)
(2).验证注册码是否正确的步骤应该是,随机填写用户名和注册码(这个注册码一定为不合法的注册码,也就是不要全为数字,这样edi的值才不为0),点击register键,出现提示框点掉,然后用注册机生成注册码,将生成的注册码重新填入程序,点击register,这时候register会消失,然后重新做一遍上述操作,again也会被隐藏,破解成功。
下图为随机验证:
破解之后会出现Cracked by casa63.
另外补上注册不成功的截图:
用OD加载进去之后,先F8单步运行一下,然后看见右边ESP字体是红色的,右键ESP在数据窗口跟随,这时候右键左下方的地址后面的十六进制码,选择long,然后address,然后选择esp那里作为断点(硬件访问->word),(然后这种方法不可行)
另一种方法:使用UPXEasyGUI去壳,scan文件夹,option一下是加壳还是脱壳,然后点击开始,再用pied查壳发现没壳了
]]>如果此题采用OllyDBG动态分析,很难找到合适断点去修改指令破解。既然程序采用VB就可以使用VB.Decompiler进行静态分析并修改,达到破解的目的。
用VB.Decompiler加载exe文件,如下图
点击下方Combol1_Click事件进行分析,如下图
分别点击Command2和Command4进行进一步分析
另外的方法:用OllyDBG来分析的话,可以找到正确密码,但是很难将其破解。简单介绍这种思路:
用OllyDBG将exe运行,选择断点:BreakPoint->VB APIs->Comaparision->_vbaStrcomp,然后F9运行程序,输入序列号:123456,点击try,F9运行程序会中断,看主模块的堆栈区,会显示出来正确的答案:7718158。
Branch-无条件跳转-1E
BranchT-栈顶数据为真则跳转-1D
BranchF-栈顶数据为假则跳转-1C
EqVarBool-比较变量相等:FB 33
NeVarBool-比较变量不相等:FB 40
EqStr-比较字符串相等:FB 30
NeStr-比较字符串不相等:FB 3D
Lt-判断是否小于
Gt-判断是否大于
F12会出现函数执行的流程图
,按空格可以相互之间转化这里给出一个比较好的学习网址:https://blog.csdn.net/fishmai/article/details/52398376
#import<Foundation/Foundation.h>
, 那么将会获得全部集合。1 | //头文件Fraction.h |
1 | //.h里面的声明 |
1 | //ClassA.h |
类方法用类名访问,实例方法用示例名访问。静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快,而且静态内存是有限制的,太多了程序会启动不了。
类方法可以计算一个实体被instance几次,还可以共享数据,它不需要访问或者修改某个实例的成员变量。类方法一般用于实现一些工具方法,比如对某个对象进行扩展,或者实现单例。如果需要访问或者修改某个实例的成员变量时,将该方法定义成实例方法。如果需要访问或者修改某个实例的成员变量时,将该方法定义成实例方法。
插入一点:windows要通过各种各样的句柄来标识诸如应用程序实例,窗口,图标菜单等对象。句柄的实际值对程序来讲无光紧要,这个值是用来引用相应对象的。句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。
1 | id number; |
关于_self=[super init] ,下面一段代码
1 | _self=[super init]; |
注:所有self前面均无_,只是hexo的时候会报错,所以选择加上
]]>需安装文件地址:链接 ,密码是:lm8y
这里一定要将selected compiler选择到GUNstep MinGW Compiler,然后点击set as default。勾选如图的两个选项。
D:\GNUstep\GNUstep\System\Library\Libraries\libgnustep-base.dll.a
和D:\GNUstep\GNUstep\System\Library\Libraries\libobjc.dll.a
如下图:D:\GNUstep\GNUstep\System\Library\Headers
第二处是linker,将其设置为D:\GNUstep\GNUstep\System\Library\Libraries
这两个不能写为同一个路径。如下图:进入Settings->Environment…,选择Files extension handling 添加*.m。如图:
然后新建一个项目,在project->project tree->categories…下面将*.m添加到source下,一定要注意前面使用;
分号分开的,如下图:
@interface @implementation @end @class @selector @protocol @public @protected @private id BOOL YES NO SEL nil NULL self
这就大体完成了。
1 | #import <Foundation/Foundation.h> |
#一点补充
,
号,如下图:先写一点自己可能用得上的语法
有几个#号就是几级标题
这是>加空格
两个>加空格
像这样-–,***变成一个分隔符
链接有两种形式:
我博客链接
参考式:两个[]连起来
例子:我的博客
三个`这个符号是代码区,紧跟在三个符号后面的是语言类型,可以写Python或者C啊这些
1 |
|
两个``中间写的内容会变成其他颜色,但是第一个符号要加上空格
这就是其他颜色
插入图片是![]()其中[]中填的是图片名称,后面写的是路径加上图片的名称,名称一定要加上类型,比如.jpg什么的,下面插一张图片
这里是内容
一对<>里面写blockquote class=”blockquote-center”这是搞一个像留言板下面那样的一个区域然后后面再加上一对<>里面写/blockquote这样就行了
另外\反斜杠可以帮助插其他符号,下面的就是前面已经加上反斜杠了
+
`
*
_
{}
[]
()
#
+
-
.
!
多级列表:
外链播放,添加一个视频页面什么的,音乐也可以后面两个数字是高宽
]]>