рдПрдВрдмреЗрдбрд┐рдВрдЧ рдХреЛрдб рдФрд░ рдкрд╛рдпрд░реЗрдЯреЗрдб рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рдЦрддрд░рд╛

рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдЖрдк рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВ jmp рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрдк рдЕрд╕рдВрддреБрд╖реНрдЯ рдХреЛрдб рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЕрджреГрд╢реНрдп рдмрдиреЗ рд░рд╣реЗрдВрдЧреЗред рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реА disassembler рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдПрдХ рдкреЗрд╢реЗрд╡рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реВрдВред рдореИрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬреЛ рдореИрдВрдиреЗ рд╕реАрдЦрд╛ рд╣реИ рд╡рд╣ рдпрд╛ рддреЛ рдХрд┐рддрд╛рдмреЗрдВ рдкрдврд╝ рд░рд╣рд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдб рдЖрдкрдХреЛ рдмрдЪрдХрд╛рдирд╛ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдХрд╕рдо рди рдЦрд╛рдПрдВред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рдмрдирд╛рдпрд╛ рдФрд░ рдореЗрд░рд╛ рдХреЛрдб рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдПрдХ рдмрд╛рдЗрдЯ рдХреЛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

void disasm_intel ( unsigned char *ptr, int size, int byte_order, int show ) { show_asm = show; virt = global_virt_text; unsigned char *start = ptr; start_op = ptr; for ( int index = 0; index < size; index++ ) { if ( show_asm == TRUE ) printf ( "%lx: ", virt ); switch ( *ptr ) { case 0x30: intel_opcode_1_0x30 ( &ptr, &index, byte_order ); break; case 0x31: intel_opcode_1_0x31 ( &ptr, &index, byte_order ); break; case 0x66: intel_opcode_1_0x66 ( &ptr, &index, byte_order ); break; case 0x67: intel_opcode_1_0x67 ( &ptr, &index, byte_order ); break; case 0x83: intel_opcode_1_0x83 ( &ptr, &index, byte_order ); break; case 0x88: intel_opcode_1_0x88 ( &ptr, &index, byte_order ); break; // mov register to register byte case 0x89: intel_opcode_1_0x89 ( &ptr, &index, byte_order ); break; case 0x8a: intel_opcode_1_0x8a ( &ptr, &index, byte_order ); break; case 0x8b: intel_opcode_1_0x8b ( &ptr, &index, byte_order ); break; // mov esp, %x : mov ebp, %x case 0x8d: intel_opcode_1_0x8d ( &ptr, &index, byte_order ); break; // lea case 0xb0: intel_opcode_1_0xb0 ( &ptr, &index ); break; // mov al, %x case 0xb1: intel_opcode_1_0xb1 ( &ptr, &index ); break; // mov cl, %x case 0xb2: intel_opcode_1_0xb2 ( &ptr, &index ); break; // mov dl, %x case 0xb3: intel_opcode_1_0xb3 ( &ptr, &index ); break; // mov bl, %x case 0xb4: intel_opcode_1_0xb4 ( &ptr, &index ); break; // mov ah, %x case 0xb5: intel_opcode_1_0xb5 ( &ptr, &index ); break; // mov ch, %x case 0xb6: intel_opcode_1_0xb6 ( &ptr, &index ); break; // mov dh, %x case 0xb7: intel_opcode_1_0xb7 ( &ptr, &index ); break; // mov bh, %x case 0xb8: intel_opcode_1_0xb8 ( &ptr, &index, byte_order ); break; // mov eax, %x case 0xb9: intel_opcode_1_0xb9 ( &ptr, &index, byte_order ); break; // mov ecx, %x case 0xba: intel_opcode_1_0xba ( &ptr, &index, byte_order ); break; // mov edx, %x case 0xbb: intel_opcode_1_0xbb ( &ptr, &index, byte_order ); break; // mov ebx, %x case 0xbe: intel_opcode_1_0xbe ( &ptr, &index, byte_order ); break; // mov esi, %x case 0xbf: intel_opcode_1_0xbf ( &ptr, &index, byte_order ); break; // mov edi, %x case 0xc3: intel_opcode_1_0xc3 ( ); break; // ret case 0xcd: intel_opcode_1_0xcd ( &ptr, &index ); break; // int 0x%x } ptr++; virt += ptr - start; start = ptr; start_op = ptr; } show_asm = FALSE; } 

рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИрдВред рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдореИрдВрдиреЗ рдорд╢реАрди рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдВрддрд░реНрд╕рдВрдмрдВрдз рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдХреАрдВ, рдФрд░ рд╢рд╛рдпрдж рдмрд╛рдж рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХ рд╕рдХреНрд╖рдо рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рдмрдирд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рд░реВрдк рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рдХреЛрдб рд╣реИ, рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рд╢рд░реНрддреЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬрдм рдореИрдВ рдпрд╣ рдХрд░ рд░рд╣рд╛ рдерд╛, рдореБрдЭреЗ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдерд╛, рдХреНрдпрд╛ рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдХреЗ рдмреАрдЪ рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ? рдЕрдм рддрдХ, рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдорд╢реАрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдореИрдВ рдмрд╛рдж рдореЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╢реАрди рдХреЛрдб рдореЗрдВ рдХреЛрдбрд╛рдВрддрд░рдХ рдЕрдиреБрд╡рд╛рджрдХ рдмрдирд╛рдКрдВрдЧрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдСрдлрд╕реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдорд╕реНрдпрд╛ рдпрд╣ рднреА рдереА: рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ред рдореИрдВрдиреЗ рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдореЗрдВ рдПрдХ рдХреЛрдб рдЬреЛрдбрд╝рд╛ рдЬреЛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдирдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдХреЛрдб рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдСрдлрд╝рд╕реЗрдЯ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдирдП рдСрдлрд╝рд╕реЗрдЯ рдкрд░ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдВред рдареАрдХ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдЖрдкрдиреЗ рдХреЛрдб рдбрд╛рд▓рд╛ рд╣реИ, рддреЛ рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЗ рдмрд╛рдж рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдП рдСрдлрд╕реЗрдЯ рд╣реЛрдВрдЧреЗред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рдЖрдк рдХреЛрдб рдкреЗрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рд╕рднреА рдЕрдВрддрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рддрдм рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдмреЛрдзрди рдореЗрдВ

 mov eax, [eax + eax + 0x100] 

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдВрдмреЛрдзрди рдореЗрдВ рдИрдмреЛ рдФрд░ рд╕реНрдЯреИрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдиреБрднрд╛рдЧ рдХреЛ рдирд╣реАрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдЕрдЧрд░ рдкрддрд╛ рдбреЗрдЯрд╛ рд╕реЗрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдбрд╛рд▓рддреЗ рд╕рдордп рдСрдлрд╝рд╕реЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдпрджрд┐ рдпрд╣ рд╕реНрдЯреИрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдбреЗрдЯрд╛ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдСрдлрд╝рд╕реЗрдЯ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВред

рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдлрд╛рдпрджрд╛ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХреЛрдб рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдЪреНрдЪрд╛ рдкреИрджрд╛ рд╣реЛ рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛред рд▓рд┐рдирдХреНрд╕ рдореЗрдВ, рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЗрдВ / usr / рд╢рд╛рдорд┐рд▓ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИред рдпрд╣реА рд╣реИ, рдЖрдк рдиреЗрдЯрд╡рд░реНрдХ рднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рди рд╣реЛрдВред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ, рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╛рдж рдореЗрдВ рдкреАрдИ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рддрдХ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрдВрд╕реЛрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореБрдЭреЗ gtk рдкрд░ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред

рдореЗрд░реЗ рд▓реЗрдЦ рдкрд░ рдЕрдкрдирд╛ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/hi477590/


All Articles