Reversing/ASM to C
ASM to C with IDA - 027
MarcoKhan
2018. 6. 1. 18:09
C300_027
C300_소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> main() { int i = 1; int j = 2; int k = 7; if (i == 1) { if (j == 2) { if (k == 3) printf("i=1, j=2, k=3입니다."); else if (k == 4) printf("i=1, j=2, k=4입니다."); else if (k == 5) printf("i=1, j=2, k=5입니다."); else printf("i=1, j=2, k=%d입니다.", k); } } } | cs |
IDA - Layout Graph
IDA - Text View
jnz(jump not zero) : 두 값이 같지 않으면 점프한다. (ZF=0)
disassemble 하면 모든 조건이 반대로 나온다. 따라서 의사 코드를 작성할 때 뒤집어 생각하면 보다 쉽다.
pseudo code - 의사코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <stdio.h> main() { int k; int i; int j; i = 1; j = 2; k = 7; if(i != 1) eax = 0; else if(j != 2) eax = 0; else{ if(k != 3){ if(k != 4){ if (k != 5){ eax = k; printf(aI1J2KD, eax); eax = 0; } else{ printf(aI1J2K5); eax = 0; } } else{ printf(aI1J2K4); eax = 0; } } else{ printf(_Format); eax = 0 } } } | cs |
pseudo code - 최종 의사 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <stdio.h> main() { int k; int i; int j; i = 1; j = 2; k = 7; if(i==1){ if(j==2){ if(k==3) printf(_Format); // i=1, j=2, k=3 else if(k==4) printf(aI1J2K4); // i=1, j=2, k=4 else if(k==5) printf(aI1J2K5); // i=1, j=2, k=5 else printf(aI1J2KD, k); // i=1, j=2, k=k } } } | cs |