亀裂vscode 16進エディタ


あなたはどのようにハッカー独自のアプリケーションをバイパスする方法を模索する必要がありますか?閉じるこの動画はお気に入りから削除されています.
このポストでは、LinuxやMacOSで簡単な実行可能ファイルをクラックする方法を見ます.

インストール


vscodeと拡張モジュールが必要になります.Hex Editor .
次にgccやclangのようなCコンパイラが必要です.

コンパイル


亀裂のプロセスを学ぶために、我々は非常に単純なCプログラムをクラックする方法を参照してください.以下をメインにします.C
#include <stdio.h>

int main()
{
  int i = 0;

  if (i)
    printf("OK\n");
  else
    printf("KO\n");
  if (!i)
    printf("i = 0\n");
  return (0);
}
次に、gcc main.c -o a.out . A Out実行可能ファイルはコンパイラによって生成されます.ソースコードを持っていないかのように、私たちは直接A . outを修正してやりたいことをします.

チャレンジ1


最初の課題は実行可能な印刷を行うことです.
$ ./a.out
OK
i = 0
しかし、今では、
$ ./a.out
KO
i = 0
プログラムを変更するには、CPUによって実行される命令がどれであるかを知る必要があります.実行時に実行可能ファイルを分解します.
$ objdump -M intel -j .text --disassemble=main ./a.out # on Linux
$ objdump -d -x86-asm-syntax=intel ./a.out # on macOS
Linuxではx 86 six 64 CPUを使っています.
a.out:     file format elf64-x86-64


Disassembly of section .text:

0000000000001135 <main>:
    1135:       55                      push   rbp
    1136:       48 89 e5                mov    rbp,rsp
    1139:       48 83 ec 10             sub    rsp,0x10
    113d:       c7 45 fc 00 00 00 00    mov    DWORD PTR [rbp-0x4],0x0
    1144:       83 7d fc 00             cmp    DWORD PTR [rbp-0x4],0x0
    1148:       74 0e                   je     1158 <main+0x23>
    114a:       48 8d 3d b3 0e 00 00    lea    rdi,[rip+0xeb3]        # 2004 <_IO_stdin_used+0x4>
    1151:       e8 da fe ff ff          call   1030 <puts@plt>
    1156:       eb 0c                   jmp    1164 <main+0x2f>
    1158:       48 8d 3d a8 0e 00 00    lea    rdi,[rip+0xea8]        # 2007 <_IO_stdin_used+0x7>
    115f:       e8 cc fe ff ff          call   1030 <puts@plt>
    1164:       83 7d fc 00             cmp    DWORD PTR [rbp-0x4],0x0
    1168:       75 0c                   jne    1176 <main+0x41>
    116a:       48 8d 3d 99 0e 00 00    lea    rdi,[rip+0xe99]        # 200a <_IO_stdin_used+0xa>
    1171:       e8 ba fe ff ff          call   1030 <puts@plt>
    1176:       b8 00 00 00 00          mov    eax,0x0
    117b:       c9                      leave  
    117c:       c3                      ret    
それは不可解だ.はいこれはアセンブラです.JavaScriptがハードであると思ったならば、あなたの脳は多分今溶けているでしょうが、それはOKです、我々はちょうど3つのものを知っている必要があります:
  • 最初の列はファイル内の命令の開始アドレスです.
  • 番目の列はASM命令名で、4番目の列は引数です.
  • 番目の列は命令の対応するバイトコードとその引数(s)があればです.
  • これらは以下の2つの手順を知っています.
  • JMP命令はEBとしてエンコードされ、基本的にメモリ内のアドレスにジャンプする.
  • JE命令(74)は、等しいならばジャンプであり、if (...) インC .
  • JNE命令(75)は、等しくなければジャンプであり、if (!...) インC .
  • Always remember that numbers can vary from one CPU to another. I'm on an x86_64 and you're probably on an x86 CPU as well but there are other architectures like ARMv6. Each architecture can have a more or less different instruction set.


    あなたのCPUモデルに依存するので、対応する命令はあなたのコンピュータの同じ数字によってエンコードされないかもしれないことに注意してください.
    推測何.この課題を解決するためには、アドレス1148で最初のJE命令を変更する必要があります.
  • JMP命令
  • JNE命令
  • アドレス1148で16進エディタ拡張と74 Aの検索を開きます.覚えておいて、私があなたに提示するすべての数字はあなたのために異なるかもしれないので、あなたの出力からそれらを得る.

    JIPに命令jeを変更します

    保存と実行:
    $ ./a.out
    OK
    i = 0
    

    結論


    よく行わ、あなたの最初の亀裂チャレンジを解決!
    あなたがそれを好めば、あなたのようなプラットフォーム上で困難な課題を試みることができますroot-me.org .
    または、あなたは自分で次の課題を解決しようとすることができます:
    $ ./a.out
    OK
    
    https://www.felixcloutier.com/x86/
    別のポストでは、以下のような亀裂のプロセスを緩和するために、より高いレベルのツールをカバーします.
  • Cutter
  • Radare

  • Ghidra (カッター一体)
  • ハッピークラック🛠