怎么将硬件设为第一软件是如何驱动硬件的?

解压完成下一步,直接把解压後的程序拷贝进windows下在windows下打开IDA进行静态分析,当然也可以从windows的IDA连接到Linux进行动态分析

程序的主流程就是这个样子,下面使用VMware搭建虚拟机安裝这个程序以便远程调试这个程序

VMware搭建虚拟机  略。。拷贝程序啥的可以用UltraISO把文件做成光盘镜像载入虚拟机的光驱内

具体IDA配置远程调试過程

1:在IDA目录下找到linux_server程序把它拷贝传到LINUX的某个文件目录下。

 2:修改文件访问权限chmod a+x 命令将文件改成所有用户可执行。

首先观察main函数很幸運有这一句看起来很像验证是否激活。

调试过程中由于没有 “.ema_sn”文件,该函数进行了返回

跟进 encrypt(),有两个随机数函数。每次打开軟件机器码会变化是因为机器码产生过程中有随机数的参与,

 调试程序回到main函数经调试可知,if ( (unsigned int)verify_acode_from_file() )是判断程序是否激活的关键只需要修改if嘚流程,就可以达到免激活的目的结束调试,查看这一句的汇编指令

鼠标点击这一行然后点击下图菜单

再按下图修改,后点击OK:

接着点击下图菜单,输出文件

完成后,将破解后的二进制文件导入虚拟机中调整权限为可执行,试运行如图,暴力破解成功

至此破解完成,在call_check_code((__int64)ptr)函数里有包含激活码的比对代码如下图,对照着代码应该是可以写出注册机的 但是由于水平太低,代码看得晕头转向。麻烦指教一下注册机如何编写。。

附当时购买的虚拟机软件及解压和破解后的程序,解压密码:123456

上传不了附件是什么情况?

这里我们不会为真实的硬件设備编写内核软件是如何驱动硬件的程序。为了方便描述为Android 系统编写内核软件是如何驱动硬件的程序的过程我们使用一

个虚拟的硬件设备,这个设备只有一个4 字节的寄存器它可读可写。想起我们第一次学习程序语言时都喜欢用“Hello, World”

作为例子,这里我们就把这个虚拟的設备命名为“hello”,而这个内核软件是如何驱动硬件的程序也命名为hello 软件是如何驱动硬件的程序其实,Android 内

核软件是如何驱动硬件的程序和┅般Linux 内核软件是如何驱动硬件的程序的编写方法是一样的都是以Linux 模块的形式实现的,具体可参考前面Android 学习

启动篇一文中提到的Linux Device Drivers 一书不過,这里我们还是从Android 系统的角度来描述Android 内核软件是如何驱动硬件的程序的编

客官会问为啥你要这样折腾啊?因为CM会把kernel的code一起编进来不偠再单独编译kernel。

进入到dev 目录可以看到hello 设备文件:

进入到proc 目录,可以看到hello 文件:

访问hello 文件的值:

进入到hello 目录可以看到hello 目录:

进入到下一層hello 目录,可以看到val 文件:

访问属性文件val 的值:

至此我们的hello 内核软件是如何驱动硬件的程序就完成了,并且验证一切正常这里我们采用嘚是系统提供的方法和软件是如何驱动硬件的程序进行

交互,也就是通过proc 文件系统和devfs 文件系统的方法下一篇文章中,我们将通过自己编譯的C 语言程序来访问/dev/hello

Linux开机启动程序详解

我们假设大家巳经熟悉其它操作系统的引导过程了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始介绍Linux开机引導的步骤。

LILO启动之后如果你选择了Linux作为准备引导的操作系统,第一个被加载的东西就是内核请记住此时的计算机内存中还不存在任何操作系统,PC(因为它们天然的设计缺陷)也还没有办法存取机器上全部的内存因此,内核就必须完整地加载到可用RAM的第一个兆字节之内为叻实现这个目的,内核是被压缩了的这个文件的头部包含着必要的代码,先设置CPU进入安全模式(以此解除内存限制)再对内核的剩余部分進行解压缩。

内核在内存中解压缩之后就可以开始运行了。此时的内核只知道它本身内建的各种功能也就是说被编译为模块的内核部汾还不能使用。最基本的是内核必须有足够的代码设置自己的虚拟内存子系统和根文件系统(通常就是ext2文件系统)。一旦内核启动运行对硬件的检测就会决定需要对哪些设备软件是如何驱动硬件的程序进行初始化。从这里开始内核就能够挂装根文件系统(这个过程类似于Windows识別并存取C盘的过程)。内核挂装了根文件系统之后将启动并运行一个叫做init的程序。

注意:在这里我们故意略去了Linux内核启动的许多细节这些细节只有内核开发人员才感兴趣。如果你好奇的话可以访问http://:8080地址处的"Kernel Hackers Guide"。

init进程是非内核进程中第一个被启动运行的因此它的进程編号PID的值总是1。init读它的配置文件/etc/inittab决定需要启动的运行级别(Runlevel)。从根本上说运行级别规定了整个系统的行为,每个级别(分别由0到6的整数表礻)满足特定的目的如果定义了initdefault级别,这个值就直接被选中否则需要由用户输入一个代表运行级别的数值。

输入代表运行级别的数字之後init根据/etc/inittab文件中的定义执行一个命令脚本程序。缺省的运行级别取决于安装阶段对登录程序的选择:是使用基于文本的还是使用基于X-Window的登录程序。

rc命令脚本程序我们已经知道当运行级别发生改变时,将由/etc/inittab文件定义需要运行哪一个命令脚本程序这些命令脚本程序负责启動或者停止该运行级别特定的各种服务。由于需要管理的服务数量很多因此需要使用rc命令脚本程序。其中最主要的一个是/etc/rc.d/rc,它负责为烸一个运行级别按照正确的顺序调用相应的命令脚本程序我们可以想象,这样一个命令脚本程序很容易变得难以控制!为了防止这类事件的发生需要使用精心设计的方案。

对每一个运行级别来说在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法是rcX.d其中的X就是代表运行级别的数字。比如说运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中。在各个运行级别的子目录中都建竝有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接,但是这些符号链接并不使用命令脚本程序在/etc/rc.d/init.d子目录中原来的名字。如果命令脚本程序是用来啟动一个服务的其符号链接的名字就以字母S打头;如果命令脚本程序是用来关闭一个服务的,其符号链接的名字就以字母K打头

许多情況下,这些命令脚本程序的执行顺序都很重要如果没有先配置网络接口,就没有办法使用DNS服务解析主机名!为了安排它们的执行顺序茬字母S或者K的后面紧跟着一个两位数字,数值小的在数值大的前面执行比如:/etc/rc.d/rc3.d/S50inet就会在/etc/rc.d/rc3.d/S55named之前执行(S50inet配置网络设置,55named启动DNS服务器)存放在/etc/rc.d/init.d子目錄中的、被符号链接上的命令脚本程序是真正的实干家,是它们完成了启动或者停止各种服务的操作过程当/etc/rc.d/rc运行通过每个特定的运行级別子目录的时候,它会根据数字的顺序依次调用各个命令脚本程序执行它先运行以字母K打头的命令脚本程序,然后再运行以字母S打头的命令脚本程序对以字母K打头的命令脚本程序来说,会传递Stop参数;类似地对以字母S打头的命令脚本程序来说会传递Start参数。编写自己的rc命囹脚本在维护Linux系统运转的日子里肯定会遇到需要系统管理员对开机或者关机命令脚

有两种方法可以用来实现修改的目的:

●如果所做的修改只在引导开机的时候起作用,并且改动不大的话可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导过程的最后一步被执行嘚

●如果所做的修改比较细致,或者还要求关闭进程使之明确地停止运行则需要在/etc/rc.d/init.d子目录中添加一个命令脚本程序。这个命令脚本程序必须可以接受Start和Stop参数并完成相应的操作

第一种方法,编辑/etc/rc.d/rc.local脚本当然是两种方法中比较简单的。如果想在这个命令脚本程序中添加内嫆只需要使用喜欢的编辑器程序打开它,再把打算执行的命令附加到文件的末尾就可以了这对一两行的修改来说的确很便利。

如果确實需要使用一个命令脚本程序这时必须选择第二个方法。编写一个rc命令脚本程序的过程并不像想象中那么困难我们下面就给出一个例孓,看看它是怎样实现的(顺便说一句你可以把我们的例子当作范本,按照自己的需要进行修改和添加)

假设你打算每隔60分钟调用一个特殊的程序来弹出一条消息,提醒自己需要从键盘前面离开休息一会儿命令脚本程序将包括下面几个部分:

●关于这个命令脚本程序功能嘚说明(这样就不会在一年之后忘记它);

●在试图运行它之前验证这个命令脚本程序确实存在;

●接受start和stop参数并执行要求的动作。

参数给定後我们就可以编写命令的脚本程序。这个程序很简单大家可以自己编写一下,我在这里就不给出了

编写好新的命令脚本程序之后,洅从相关的运行级别子目录中加上必要的符号链接来控制这个命令脚本程序的启动或者停止。在我的印象中只想让它在运行级别3或者運行级别5中启动,原因是我认为只有这两个运行级别才是日常工作的地方最后,希望这个命令脚本程序在进入运行级别6(重启动)的时候被關闭

激活或者禁止服务项目有的时候会发现,在引导的时候并不需要某个特定的服务被启动如果你正在考虑使用Linux替换Windows NT的文件和打印服務器,就更是如此我们已经知道,在特定的运行级别子目录中给符号链接改个名称就可以让该服务不被启动,如把其名称的第一个字毋由S改为K一旦熟练掌握了命令行和符号链接,就会发现这是激活或者禁止服务的最快办法

在学习这个改名方法的时候,可能会觉得图形化的操作界面ksysv比较容易掌握虽然它原来是设计使用在KDE环境里的,但在Red HatLinux 7.2下缺省安装的GNOME环境里也运行得很好如果想启动它,只需简单地咑开一个xterm窗口并输入ksysv命令就可以了。屏幕上会出现一个窗口其中列出了能够修改的全部参数,需要时还包括在线帮助警告:如果是茬一个现实中的系统上学习本文的知识,要多多运用常识当试着对启动脚本程序进行修改的时候,要记住所做的修改可能会造成你的系統不能正常工作而且无法采用重启动的方法恢复。不要在正常运转的系统上实验新的设置对你准备修改的文件要全部进行备份。最重偠的是在手边要准备一张引导盘以防不测。

我要回帖

更多关于 软件是如何驱动硬件的 的文章

 

随机推荐