when can byte patch ( ___stack_chk_fail method )
만약 바이너리의 특정 부분에 byte patch가 가능하다면, code 영역에서 첫번째로 생각할 부분은 _stack_chk_fail 함수로 가기전에
C
.text:000000000000140E mov rax, [rbp+var_8]
.text:0000000000001412 sub rax, fs:28h
.text:000000000000141B jz short locret_1422
.text:000000000000141D call ___stack_chk_fail
.text:0000000000001422 ; ---------------------------------------------------------------------------
.text:0000000000001422
.text:0000000000001422 locret_1422: ; CODE XREF: shellcode+94↑j
.text:0000000000001422 leave
.text:0000000000001423 retn.text:000000000000141B jz short locret_1422
이 부분이다.
이 부분의 opcode가 74 05 인데 알다시피 74가 jz 이고 05는 다음 rip인 141D + 0x5 를 의미하는 것이다.
따라서 zero일때 141D + 0x5 의 결과인 1422 로 가는 것인데
05 바이트를 수정하면 signed 범위 -128 ~ 127 까지의 흐름제어가 가능하다.