1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      怎么編寫一個Linux64位軟件注冊機

      本篇內(nèi)容介紹了“怎么編寫一個Linux64位軟件注冊機”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

      成都創(chuàng)新互聯(lián)主要從事做網(wǎng)站、成都做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)雷州,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

      準備工作

      我們將會使用到以下工具

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

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

      file r5

      下面為返回數(shù)據(jù)

      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

      從返回數(shù)據(jù)中我們得知了構(gòu)建版本,以及得知它是一個動態(tài)鏈接文件

      ~/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__

      64位程序集基礎(chǔ)

      相對于X86架構(gòu),X64架構(gòu)增加了擴展寄存器設(shè)置和一些額外的指令。

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

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

      可以通過r8d訪問r8寄存器中的低32位,通過r8w訪問r8寄存器中的低16位,通過rb8訪問r8寄存器中的低8位。

      這樣更多的RIP(指令指針)就可以直接進行訪問了。

      X64架構(gòu)中所有的寄存器都是64位的,RIP同樣也是64位,但是目前的實現(xiàn)方法僅是支持48位線性地址(線性地址:邏輯地址到物理地址變換之間的中間層)

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

      如果在EAX寄存器上進行數(shù)據(jù)移動操作,他將從0一直連續(xù)到RAX寄存器的高32位。

      為了達到調(diào)試程序的目的,我們將使用EDB debugger,這個調(diào)試程序類似于Windows平臺下的ollydbg,上手十分容易,下面就是默認的EDB窗口。

      在X64架構(gòu)下參數(shù)傳遞與X86架構(gòu)完全不同。

      RDI, RSI, RDX, RCX, r8以及r9等都是通過堆棧進行參數(shù)傳遞。

      怎么編寫一個Linux64位軟件注冊機

      菜單欄和ollydbg一樣簡潔

      怎么編寫一個Linux64位軟件注冊機

      破解開始

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

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

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

      怎么編寫一個Linux64位軟件注冊機

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

      首先是有關(guān)于輸入字符串的長度,字符串長度要與“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)

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

      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

      經(jīng)過這個操作之后,程序會進入一個循環(huán)。如果指標指數(shù)delta值為0那么就會跳過這個循環(huán)體。

      movzx eax, delta[rax] ;
      怎么編寫一個Linux64位軟件注冊機

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

      怎么編寫一個Linux64位軟件注冊機

      用C語言來表示

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

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

      ***,經(jīng)過40輪的循環(huán),變化的字符串如果與“this_aint_that_simple_but_good_luck_haha”相等,那么將顯示“password OK”

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

      #include       unsigned char delta[] =  {      3, 253,   3, 249,   0,   3,   6,   0, 241,   0,    250,   7,  22, 235,   8, 252, 246,   2, 254, 243,      4,  19,   1, 234, 237,  15, 253, 240, 242,  15,     12, 243, 241,  12,   7,   0,   5,  14,  10,   4,  };     unsigned char buff [48] ;  int main(int argc, char **argv)  {      int index = 0;      int var_check = 1;      unsigned char x = '\x00';         strcpy(buff, "this_aint_that_simple_but_good_luck_haha");         while ( var_check )      {             index = 0;          var_check = 0;          while ( index < 40)          {                 if (delta[index])              {                  x = (random() % delta[index] ) + 1;                  delta[index] = delta[index] - x;                  var_check = var_check ^ (unsigned int )delta[index] ;                     buff[index] = buff[index] + x;                 }                 // if zero              index++;          }      }         printf("%s\n", buff);  }

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

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

      密碼成功破解。

      “怎么編寫一個Linux64位軟件注冊機”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


      當前題目:怎么編寫一個Linux64位軟件注冊機
      分享URL:http://www.ef60e0e.cn/article/pjohjs.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        星座| 柏乡县| 宾阳县| 军事| 广西| 连南| 玛沁县| 太和县| 夏邑县| 迁西县| 托克托县| 温州市| 若羌县| 郁南县| 格尔木市| 榕江县| 隆安县| 方山县| 定结县| 武川县| 嫩江县| 常山县| 班戈县| 望江县| 平乡县| 和静县| 揭阳市| 西和县| 永昌县| 无棣县| 华亭县| 弋阳县| 鸡东县| 城固县| 桓台县| 鲁甸县| 威海市| 城口县| 缙云县| 济宁市| 渝中区|