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 까지의 흐름제어가 가능하다.