如何编写一个Linux-64位软件注册机-破解入门 (如何编写一个简单的代码)

教程大全 2025-07-07 15:36:07 浏览

本文仅供安全学习与教学用途,禁止任何非法利用

相信大家对注册机这词一定不陌生,由于一些软件涉及版权问题,要完全使用的话需要注册,或者有试用期限限制,或者只有注册之后才可以享受全功能。目前大部分有关于破解的资料都是基于X86架构的,而对于X64架构的破解资料却是比较少。

在本文中,我将向大家展示如何在Liunx机器上编写一个Linux 64位应用的注册机。

准备工作

如何编写一个Linux

我们将会使用到以下工具

1:Linux机器(64bitmintbox) 2:EDBdebugger 3:IDA反汇编工具 4:编译器 5:本文相关的文件(链接:密码:djnt)

运行file命令检测该文件类型

下面为返回数据


从返回数据中我们得知了构建版本,以及得知它是一个动态链接文件


64位程序集基础

相对于X86架构,X64架构增加了扩展寄存器设置和一些额外的指令。

以下为X64增加的寄存器列表

r8, r9 , r10, r11, r12, r13, r14, r15

可以通过r8d访问r8寄存器中的低32位,通过r8w访问r8寄存器中的低16位,通过rb8访问r8寄存器中的低8位。

这样更多的RIP(指令指针)就可以直接进行访问了。

X64架构中所有的寄存器都是64位的,RIP同样也是64位,但是目前的实现方法仅是支持48位线性地址(线性地址:逻辑地址到物理地址变换之间的中间层)

除了普通的寄存器它还增加了SSE寄存器,命名为xmm8~xmm15。

如果在EAX寄存器上进行数据移动操作,他将从0一直连续到RAX寄存器的高32位。

为了达到调试程序的目的,我们将使用EDB debugger,这个调试程序类似于Windows平台下的ollydbg,上手十分容易,下面就是默认的EDB窗口。

在X64架构下参数传递与X86架构完全不同。

RDI, RSI, RDX, RCX, r8以及r9等都是通过堆栈进行参数传递。

菜单栏和ollydbg一样简洁

破解开始

运行我们的r5文件,返回输出如下

~/Desktop $ ./r5Usage: ./r5 passWORD

明文信息毕竟不太好,但是他给了我们一个需要密码的提示。我们必须弄清楚在反汇编程序中打开它会发生什么?显然它在寻找并传送一个参数到函数中。

你可以清楚看到argv[1]作为参数传递给check_password()函数。

首先是有关于输入字符串的长度,字符串长度要与“this_is_not_even_interesting_its_garbage”这个字符串的长度相等。


检测这里


在这之后,字符串中的数据就会被我们输入的字符串数据替换


经过这个操作之后,程序会进入一个循环。如果指标指数delta值为0那么就会跳过这个循环体。


如果不是,将利用delta的值和其他参数在输入字符串中执行一些数学运算。

C语言来表示

random() 并没有调用srand()进行初始化,所以我们可以轻松的进行猜测。

***,经过40轮的循环,变化的字符串如果与“this_aint_that_simple_but_good_luck_haha”相等,那么将显示“password OK”

我们可以使用以下C语言代码进行计算字符串

编译并运行这个程序,我们获得以下输出

密码成功破解。


Linux下如何编译并运行C程序

1.编译单个源文件[例如]在屏幕上打印Hello,Linux.[源代码]#include#include int main(int argc,char **argv){printf(Hello,Linux.\n);exit(0);}将源文件保存为hello.c,开始进行编译 $gcc -o hello hello.c 编译成功完成后,在当前路径下,生成一个名为hello的文件,然后执行 $./hello在屏幕上,你将会看到打印结果:Hello,Linux. 说明:在默认情况下,编译成功完成后,会在当前路径下,生成一个名为的文件,然后执行$./便可打印结果,但通常可以通过选项-o来指定自己的可执行程序名称; 2.编译多个源文件 3.使用外部函数库 4.使用共享函数库和静态函数库选项详细描述

怎样把文本写的脚本在Linux下运行

首先,用ssh或者telNet远程登陆linux,然后touch 一个脚本名(脚本以“”为后缀),然后vi编辑这个脚本,把在文本写好的脚本内容复制黏贴到这个脚本中(vi的编辑,进到里面后,按“i”是输入,等黏贴完后按一下esc键然后按:输入“wq”,这样就保存退出了。 运行方法是sh 刚才新建的脚本名。 关于这个linux系统的学习,我一直看刘遄老师的书籍《linux就该这么学》。

在Linux系统中,gcc的命令怎么用?

Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称。 -c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。 如果不给出这个选项,gcc就给出预设的可执行文件。 -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。 -O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。 -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。 -Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。 找到一个学习linux的好方法,可多看看《linux就该这么学》一书。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐