成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

破解入門:如何編寫一個Linux 64位軟件注冊機

安全 數據安全
相信大家對注冊機這詞一定不陌生,由于一些軟件涉及版權問題,要完全使用的話需要注冊,或者有試用期限限制,或者只有注冊之后才可以享受全功能。目前大部分有關于破解的資料都是基于X86架構的,而對于X64架構的破解資料卻是比較少。

本文僅供安全學習與教學用途,禁止任何非法利用

相信大家對注冊機這詞一定不陌生,由于一些軟件涉及版權問題,要完全使用的話需要注冊,或者有試用期限限制,或者只有注冊之后才可以享受全功能。目前大部分有關于破解的資料都是基于X86架構的,而對于X64架構的破解資料卻是比較少。

在本文中,我將向大家展示如何在Liunx機器上編寫一個Linux 64位應用的注冊機。

準備工作

我們將會使用到以下工具

1: Linux 機器 ( 64bit mint box)
2: EDB debugger
3: IDA 反匯編工具
4: 編譯器
5: 本文相關的文件(鏈接:http://pan.baidu.com/s/1hqti6LA 密碼:djnt)

運行file命令檢測該文件類型

file r5

下面為返回數據

r5: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, 
BuildID[sha1]=86bf854ce620288567d153883d4609163485d34d, not stripped

從返回數據中我們得知了構建版本,以及得知它是一個動態鏈接文件

~/Desktop $ nm r5
0000000000601109 B __bss_start
00000000006010e0 D buf
000000000040069d T check_password
0000000000601109 b completed.6972
0000000000601060 D __data_start
0000000000601060 W data_start
00000000006010a0 D delta
00000000004005e0 t deregister_tm_clones
0000000000400650 t __do_global_dtors_aux
0000000000600e18 t __do_global_dtors_aux_fini_array_entry
0000000000601068 D __dso_handle
0000000000600e28 d _DYNAMIC
0000000000601109 D _edata
0000000000601110 B _end
0000000000400894 T _fini
0000000000400670 t frame_dummy
0000000000600e10 t __frame_dummy_init_array_entry
0000000000400a80 r __FRAME_END__
0000000000601000 d _GLOBAL_OFFSET_TABLE_
w __gmon_start__
0000000000400500 T _init
0000000000600e18 t __init_array_end
0000000000600e10 t __init_array_start
00000000004008a0 R _IO_stdin_used
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
0000000000600e20 d __JCR_END__
0000000000600e20 d __JCR_LIST__
w _Jv_RegisterClasses
0000000000400890 T __libc_csu_fini
0000000000400820 T __libc_csu_init
U __libc_start_main@@GLIBC_2.2.5
00000000004007b6 T main
0000000000601080 D master
U printf@@GLIBC_2.2.5
U puts@@GLIBC_2.2.5
U random@@GLIBC_2.2.5
0000000000400610 t register_tm_clones
00000000004005b0 T _start
U strcmp@@GLIBC_2.2.5
U strcpy@@GLIBC_2.2.5
U strlen@@GLIBC_2.2.5
0000000000601110 D __TMC_END__

#p#

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等都是通過堆棧進行參數傳遞。

破解入門:如何編寫一個Linux 64位軟件注冊機

菜單欄和ollydbg一樣簡潔

破解入門:如何編寫一個Linux 64位軟件注冊機

#p#

破解開始

運行我們的r5文件,返回輸出如下

~/Desktop $ ./r5
Usage: ./r5 password

明文信息畢竟不太好,但是他給了我們一個需要密碼的提示。我們必須弄清楚在反匯編程序中打開它會發生什么?顯然它在尋找并傳送一個參數到函數中。

破解入門:如何編寫一個Linux 64位軟件注冊機

 

你可以清楚看到argv[1]作為參數傳遞給check_password()函數。

首先是有關于輸入字符串的長度,字符串長度要與“this_is_not_even_interesting_its_garbage”這個字符串的長度相等。

.data:00000000006010E0 ; char buf[]
.data:00000000006010E0 buf             db 'this_is_not_even_interesting_its_garbage',0
.data:00000000006010E0                                         ; DATA XREF: check_password+1C#o
.data:00000000006010E0                                         ; check_password+3C#o ...
.data:00000000006010E0 _data           ends
.data:00000000006010E0
.bss:0000000000601109 ; ===========================================================================

檢測這里

call _strlen ; Call Procedure
mov rbx, rax
mov edi, offset buf ; “this_is_not_even_interesting_its_garbag”…
call _strlen ; Call Procedure
cmp rbx, rax ; Compare Two Operands
jz short Go ; Jump if Zero (ZF=1)

在這之后,字符串中的數據就會被我們輸入的字符串數據替換

mov     rax, [rbp+passcode]
mov     rsi, rax        ; src
mov     edi, offset buf ; "this_is_not_even_interesting_its_garbag"...
call    _strcpy         ; Call Procedure
mov     [rbp+VarCheck], 1
jmp     loc_400791      ; Jump

經過這個操作之后,程序會進入一個循環。如果指標指數delta值為0那么就會跳過這個循環體。

movzx eax, delta[rax] ;

 

 

如果不是,將利用delta的值和其他參數在輸入字符串中執行一些數學運算。

用C語言來表示

  1. x = (random() % delta[index] ) + 1;  
  2. delta[index] = delta[index] - x;  
  3. var_check = var_check ^ (unsigned int )delta[index] ; 

random() 并沒有調用srand()進行初始化,所以我們可以輕松的進行猜測。

***,經過40輪的循環,變化的字符串如果與“this_aint_that_simple_but_good_luck_haha”相等,那么將顯示“password OK”

我們可以使用以下C語言代碼進行計算字符串

  1. #include <stdio.h>  
  2.    
  3.  unsigned char delta[] =  
  4. {  
  5.     3, 253,   3, 249,   0,   3,   6,   0, 241,   0,  
  6.   250,   7,  22, 235,   8, 252, 246,   2, 254, 243,  
  7.     4,  19,   1, 234, 237,  15, 253, 240, 242,  15,  
  8.    12, 243, 241,  12,   7,   0,   5,  14,  10,   4,  
  9. };  
  10.    
  11. unsigned char buff [48] ;  
  12. int main(int argc, char **argv)  
  13. {  
  14.     int index = 0;  
  15.     int var_check = 1;  
  16.     unsigned char x = '\x00';  
  17.    
  18.     strcpy(buff, "this_aint_that_simple_but_good_luck_haha");  
  19.    
  20.     while ( var_check )  
  21.     {  
  22.    
  23.         index = 0;  
  24.         var_check = 0;  
  25.         while ( index < 40)  
  26.         {  
  27.    
  28.             if (delta[index])  
  29.             {  
  30.                 x = (random() % delta[index] ) + 1;  
  31.                 delta[index] = delta[index] - x;  
  32.                 var_check = var_check ^ (unsigned int )delta[index] ;  
  33.    
  34.                 buff[index] = buff[index] + x;  
  35.    
  36.             }  
  37.    
  38.             // if zero  
  39.             index++;  
  40.         }  
  41.     }  
  42.    
  43.     printf("%s\n", buff);  

編譯并運行這個程序,我們獲得以下輸出

  1. “well_done_now_go_on_irc_and_ask_for_more”  
  2. ~/Desktop $ ./r5 “well_done_now_go_on_irc_and_ask_for_more” 

密碼成功破解。

責任編輯:藍雨淚 來源: FreeBuf
相關推薦

2023-11-24 11:01:58

Python注冊機

2023-06-02 18:44:16

2018-10-11 21:00:18

2021-07-06 14:36:05

RustLinux內核模塊

2022-07-25 20:45:23

惡意軟件Amadey Bot漏洞

2014-03-31 10:20:12

2023-05-20 17:45:25

LinuxShell

2024-04-16 08:09:36

JavapulsarAPI

2009-04-03 15:21:37

2021-05-14 12:10:19

網絡安全KeyMake注冊機

2010-12-16 11:38:02

2023-12-12 08:08:17

插件PRPulsar

2015-08-19 09:29:35

Git協議編寫

2016-01-06 09:57:23

編寫PHP擴展

2018-06-19 10:06:16

Linux軟件測試Nix包管理器

2023-04-04 09:15:10

NAPI 框架鴻蒙

2018-07-26 09:55:44

Linux命令升級軟件

2022-07-26 08:14:16

注冊中心ProviderConsumer

2009-12-02 09:17:00

Chrome OS64位下載

2018-03-23 10:00:34

PythonTensorFlow神經網絡
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费视屏 | 福利视频一区二区 | 国产成人精品a视频一区www | a级黄色片在线观看 | 天天插天天操 | 久久久久国| 中文字幕在线观看一区二区 | 久久国产精品视频免费看 | 日韩欧美精品一区 | 国产91av视频 | 99在线免费观看 | 激情在线视频 | 欧美日韩高清在线观看 | 欧美国产日韩在线观看成人 | 欧美三级在线 | 成人国产精品久久久 | 偷拍自拍网址 | 不卡的av电影 | 罗宾被扒开腿做同人网站 | 亚洲国产精品久久久久久 | 亚洲精品乱码久久久久久黑人 | 午夜免费 | 亚洲国产二区 | 中文字幕在线精品 | 久久久国产精品视频 | 在线欧美| 操久久 | 亚洲三区在线观看 | 伊人影院在线观看 | 天天操夜夜爽 | 亚洲视频一区二区三区 | 中国91av| www国产亚洲精品 | 91久久久久久久久久久久久 | www.五月天婷婷| 国产午夜久久久 | 一本色道久久综合亚洲精品高清 | 免费黄色大片 | 色婷婷九月 | 成人久久18免费网站 | 一二区视频 |